diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2024-10-09 13:43:27 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-10-17 07:34:33 +0200 |
| commit | 848d3e6c751bdeaa11005b5d89c1312caae071d1 (patch) | |
| tree | 1a04c1ca8674b56e1754a11ac48991e8045f57a3 /src/qmlcompiler/qqmljsfunctioninitializer.cpp | |
| parent | 097712ae79924837dd7ac02965475e152978133d (diff) | |
QmlCompiler: Mark types in function signatures as "named"
We have the TypeByName content variant already for the related concept
of naming a type in script code, for example to perform a type
assertion. We can re-use it for signatures.
Task-number: QTBUG-124670
Change-Id: If13518df2b2217769d02c4618f57203907b3f5f9
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Diffstat (limited to 'src/qmlcompiler/qqmljsfunctioninitializer.cpp')
| -rw-r--r-- | src/qmlcompiler/qqmljsfunctioninitializer.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/qmlcompiler/qqmljsfunctioninitializer.cpp b/src/qmlcompiler/qqmljsfunctioninitializer.cpp index 309bea8dff..c276d2ff4f 100644 --- a/src/qmlcompiler/qqmljsfunctioninitializer.cpp +++ b/src/qmlcompiler/qqmljsfunctioninitializer.cpp @@ -88,11 +88,11 @@ void QQmlJSFunctionInitializer::populateSignature( if (const auto type = m_typeResolver->typeFromAST(argument.typeAnnotation->type)) { function->argumentTypes.append( m_typeResolver->tracked( - m_typeResolver->globalType(type))); + m_typeResolver->namedType(type))); } else { function->argumentTypes.append( m_typeResolver->tracked( - m_typeResolver->globalType(m_typeResolver->varType()))); + m_typeResolver->namedType(m_typeResolver->varType()))); signatureError(u"Cannot resolve the argument type %1."_s .arg(argument.typeAnnotation->type->toString())); } @@ -101,7 +101,7 @@ void QQmlJSFunctionInitializer::populateSignature( alreadyWarnedAboutMissingAnnotations = true; function->argumentTypes.append( m_typeResolver->tracked( - m_typeResolver->globalType(m_typeResolver->varType()))); + m_typeResolver->namedType(m_typeResolver->varType()))); signatureError(u"Functions without type annotations won't be compiled"_s); } } @@ -124,7 +124,7 @@ void QQmlJSFunctionInitializer::populateSignature( if (!function->returnType.isValid()) { if (ast->typeAnnotation) { - function->returnType = m_typeResolver->globalType( + function->returnType = m_typeResolver->namedType( m_typeResolver->typeFromAST(ast->typeAnnotation->type)); if (!function->returnType.isValid()) signatureError(u"Cannot resolve return type %1"_s.arg( @@ -135,7 +135,7 @@ void QQmlJSFunctionInitializer::populateSignature( for (int i = QQmlJSCompilePass::FirstArgument + function->argumentTypes.size(); i < context->registerCountInFunction; ++i) { function->registerTypes.append(m_typeResolver->tracked( - m_typeResolver->globalType(m_typeResolver->voidType()))); + m_typeResolver->namedType(m_typeResolver->voidType()))); } function->addressableScopes = m_typeResolver->objectsById(); @@ -196,10 +196,11 @@ QQmlJSCompilePass::Function QQmlJSFunctionInitializer::run( QtDebugMsg, bindingLocation, errors); function.argumentTypes.append( m_typeResolver->tracked( - m_typeResolver->globalType(m_typeResolver->varType()))); + m_typeResolver->namedType( + m_typeResolver->varType()))); } else { function.argumentTypes.append(m_typeResolver->tracked( - m_typeResolver->globalType(type))); + m_typeResolver->namedType(type))); } } break; @@ -223,7 +224,7 @@ QQmlJSCompilePass::Function QQmlJSFunctionInitializer::run( const auto property = m_objectType->property(propertyName); if (const QQmlJSScope::ConstPtr propertyType = property.type()) { - function.returnType = m_typeResolver->globalType(propertyType->isListProperty() + function.returnType = m_typeResolver->namedType(propertyType->isListProperty() ? m_typeResolver->qObjectListType() : QQmlJSScope::ConstPtr(property.type())); } else { |
