aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlcompiler')
-rw-r--r--src/qmlcompiler/qqmljsimportvisitor.cpp17
-rw-r--r--src/qmlcompiler/qqmljsimportvisitor_p.h1
2 files changed, 17 insertions, 1 deletions
diff --git a/src/qmlcompiler/qqmljsimportvisitor.cpp b/src/qmlcompiler/qqmljsimportvisitor.cpp
index bb789a1c66..4be205054d 100644
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
@@ -240,8 +240,8 @@ void QQmlJSImportVisitor::endVisit(QQmlJS::AST::ClassExpression *)
bool QQmlJSImportVisitor::visit(UiScriptBinding *scriptBinding)
{
const auto id = scriptBinding->qualifiedId;
+ const auto *statement = cast<ExpressionStatement *>(scriptBinding->statement);
if (!id->next && id->name == QLatin1String("id")) {
- const auto *statement = cast<ExpressionStatement *>(scriptBinding->statement);
const auto *idExprension = cast<IdentifierExpression *>(statement->expression);
m_scopesById.insert(idExprension->name.toString(), m_currentScope);
} else {
@@ -258,11 +258,26 @@ bool QQmlJSImportVisitor::visit(UiScriptBinding *scriptBinding)
while (m_currentScope->scopeType() == QQmlJSScope::GroupedPropertyScope)
leaveEnvironment();
+
+ if (!statement || !statement->expression->asFunctionDefinition()) {
+ enterEnvironment(QQmlJSScope::JSFunctionScope, QStringLiteral("binding"),
+ scriptBinding->statement->firstSourceLocation());
+ }
}
return true;
}
+void QQmlJSImportVisitor::endVisit(UiScriptBinding *scriptBinding)
+{
+ const auto id = scriptBinding->qualifiedId;
+ if (id->next || id->name != QLatin1String("id")) {
+ const auto *statement = cast<ExpressionStatement *>(scriptBinding->statement);
+ if (!statement || !statement->expression->asFunctionDefinition())
+ leaveEnvironment();
+ }
+}
+
bool QQmlJSImportVisitor::visit(QQmlJS::AST::UiEnumDeclaration *uied)
{
QQmlJSMetaEnum qmlEnum(uied->name.toString());
diff --git a/src/qmlcompiler/qqmljsimportvisitor_p.h b/src/qmlcompiler/qqmljsimportvisitor_p.h
index b81b8e8575..dfb4b13c41 100644
--- a/src/qmlcompiler/qqmljsimportvisitor_p.h
+++ b/src/qmlcompiler/qqmljsimportvisitor_p.h
@@ -65,6 +65,7 @@ protected:
void endVisit(QQmlJS::AST::UiObjectDefinition *) override;
bool visit(QQmlJS::AST::UiPublicMember *) override;
bool visit(QQmlJS::AST::UiScriptBinding *) override;
+ void endVisit(QQmlJS::AST::UiScriptBinding *) override;
bool visit(QQmlJS::AST::UiEnumDeclaration *uied) override;
bool visit(QQmlJS::AST::FunctionExpression *fexpr) override;
void endVisit(QQmlJS::AST::FunctionExpression *) override;