From c0e0c755a1c927299607f0af83fadb4a0af6ce20 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Mon, 22 Jul 2019 09:02:58 +0200 Subject: Support top level generator functions Extends grammar to support generator functions in QML components and adjusts codegen accordingly The corresponding test case must be blacklisted in tst_qmlmin, as qmlmin cannot handle yield statements Fixes: QTBUG-77096 Change-Id: I47d45dd56289cdf073b41932a585259d3052de04 Reviewed-by: Qt CI Bot Reviewed-by: Simon Hausmann --- src/qml/compiler/qqmlirbuilder.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/qml/compiler/qqmlirbuilder.cpp') diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index aab3f8e9d6..171dc641d3 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -908,7 +908,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiPublicMember *node) bool IRBuilder::visit(QQmlJS::AST::UiSourceElement *node) { - if (QQmlJS::AST::FunctionDeclaration *funDecl = QQmlJS::AST::cast(node->sourceElement)) { + if (QQmlJS::AST::FunctionExpression *funDecl = node->sourceElement->asFunctionDefinition()) { CompiledFunctionOrExpression *foe = New(); foe->node = funDecl; foe->parentNode = funDecl; @@ -1770,7 +1770,7 @@ QVector JSCodeGen::generateJSCodeForFunctionsAndBindings(const QListprogram); Q_ASSERT(f.parentNode && f.parentNode != document->program); - QQmlJS::AST::FunctionDeclaration *function = QQmlJS::AST::cast(f.node); + auto function = f.node->asFunctionDefinition(); if (function) { scan.enterQmlFunction(function); @@ -1794,7 +1794,7 @@ QVector JSCodeGen::generateJSCodeForFunctionsAndBindings(const QListprogram); - QQmlJS::AST::FunctionDeclaration *function = QQmlJS::AST::cast(node); + QQmlJS::AST::FunctionExpression *function = node->asFunctionDefinition(); QString name; if (function) -- cgit v1.2.3