From 848d3e6c751bdeaa11005b5d89c1312caae071d1 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 9 Oct 2024 13:43:27 +0200 Subject: QmlCompiler: Mark types in function signatures as "named" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/qmlcompiler/qqmljsfunctioninitializer.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/qmlcompiler/qqmljsfunctioninitializer.cpp') 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 { -- cgit v1.2.3