diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2022-06-15 14:16:11 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-07-07 19:33:39 +0200 |
commit | 38fdf2717d9c2432a9cd7de605f2e1c1517ff744 (patch) | |
tree | a24150dae1eb8715750048e0d605c88e16e1caab /src/qmlcompiler/qqmljslintercodegen.cpp | |
parent | 3f3e961a5afe2e62f436f946c521ea4afab76dde (diff) | |
download | qtdeclarative-38fdf2717d9c2432a9cd7de605f2e1c1517ff744.tar.gz |
QmlCompiler: Handle trivial signal handler constructions
If the signal handler does nothing but return a closure, we have to
compile the closure using the same signature as the outer signal
handler.
In order for this to work, we also have to detect unresolved argument
types for signal handlers. Those are just as bad as unresolved argument
types for other functions.
Fixes: QTBUG-101531
Change-Id: Idb5b3994809d91a4b4ce936282685435eb75e670
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qmlcompiler/qqmljslintercodegen.cpp')
-rw-r--r-- | src/qmlcompiler/qqmljslintercodegen.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/qmlcompiler/qqmljslintercodegen.cpp b/src/qmlcompiler/qqmljslintercodegen.cpp index dfa474fc46..c7cd5d0d00 100644 --- a/src/qmlcompiler/qqmljslintercodegen.cpp +++ b/src/qmlcompiler/qqmljslintercodegen.cpp @@ -33,14 +33,15 @@ void QQmlJSLinterCodegen::setDocument(const QmlIR::JSCodeGen *codegen, std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> QQmlJSLinterCodegen::compileBinding(const QV4::Compiler::Context *context, - const QmlIR::Binding &irBinding) + const QmlIR::Binding &irBinding, QQmlJS::AST::Node *astNode) { - QQmlJSFunctionInitializer initializer(&m_typeResolver, m_currentObject, m_currentScope); + QQmlJSFunctionInitializer initializer( + &m_typeResolver, m_currentObject->location, m_currentScope->location); QQmlJS::DiagnosticMessage initializationError; const QString name = m_document->stringAt(irBinding.propertyNameIndex); QQmlJSCompilePass::Function function = - initializer.run(context, name, irBinding, &initializationError); + initializer.run(context, name, astNode, irBinding, &initializationError); if (initializationError.isValid()) diagnose(initializationError.message, initializationError.type, initializationError.loc); @@ -60,13 +61,13 @@ QQmlJSLinterCodegen::compileBinding(const QV4::Compiler::Context *context, std::variant<QQmlJSAotFunction, QQmlJS::DiagnosticMessage> QQmlJSLinterCodegen::compileFunction(const QV4::Compiler::Context *context, - const QmlIR::Function &irFunction) + const QString &name, QQmlJS::AST::Node *astNode) { QQmlJS::DiagnosticMessage initializationError; - QQmlJSFunctionInitializer initializer(&m_typeResolver, m_currentObject, m_currentScope); - const QString name = m_document->stringAt(irFunction.nameIndex); + QQmlJSFunctionInitializer initializer( + &m_typeResolver, m_currentObject->location, m_currentScope->location); QQmlJSCompilePass::Function function = - initializer.run(context, name, irFunction, &initializationError); + initializer.run(context, name, astNode, &initializationError); if (initializationError.isValid()) diagnose(initializationError.message, initializationError.type, initializationError.loc); |