aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Shalayel <[email protected]>2024-05-21 15:40:47 +0200
committerSami Shalayel <[email protected]>2024-05-23 13:28:15 +0200
commit6c68927c2db35f9a5a19e13b2219e76d671f7add (patch)
treea419ef21247bd416ca0b81b2fdd6897571e21c2f
parentf62adc926f34cb28831ead07d716fedd8d6d6c7b (diff)
qqmldomastcreator: move widely used check into own method
Move widely used checks into inline method to avoid code duplication and possible typos. Introduce stackHasScriptVariant() which checks whether the last item of the scriptStack is indeed a variant and not a list, and stackHasScriptList() that checks whether the last item is a list. Change-Id: I54c75040411233fd9dcfe41816fea4e2cde975d1 Reviewed-by: Ulf Hermann <[email protected]> Reviewed-by: Fabian Kosmale <[email protected]>
-rw-r--r--src/qmldom/qqmldomastcreator.cpp112
-rw-r--r--src/qmldom/qqmldomastcreator_p.h9
2 files changed, 65 insertions, 56 deletions
diff --git a/src/qmldom/qqmldomastcreator.cpp b/src/qmldom/qqmldomastcreator.cpp
index 67e3acff1c..99a3299a3c 100644
--- a/src/qmldom/qqmldomastcreator.cpp
+++ b/src/qmldom/qqmldomastcreator.cpp
@@ -795,7 +795,7 @@ void QQmlDomAstCreator::endVisit(AST::FunctionDeclaration *fDef)
AttachedInfo::PathType::Relative);
const Path pathToReturnType = Path().field(Fields::scriptElement);
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
ScriptElementVariant variant = currentScriptNodeEl().takeVariant();
finalizeScriptExpression(variant, pathToReturnType, argLoc);
m.returnType->setScriptElement(variant);
@@ -813,7 +813,7 @@ void QQmlDomAstCreator::endVisit(AST::FunctionDeclaration *fDef)
AttachedInfo::PathType::Relative);
const Path pathToArgument = Path().field(Fields::scriptElement);
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
ScriptElementVariant variant = currentScriptNodeEl().takeVariant();
setFormalParameterKind(variant);
finalizeScriptExpression(variant, pathToArgument, argLoc);
@@ -1475,7 +1475,7 @@ void QQmlDomAstCreator::endVisit(AST::StatementList *list)
auto current = makeScriptList(list);
for (auto it = list; it; it = it->next) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current.append(scriptNodeStack.takeLast().takeVariant());
}
@@ -1498,10 +1498,10 @@ void QQmlDomAstCreator::endVisit(AST::BinaryExpression *exp)
auto current = makeScriptElement<ScriptElements::BinaryExpression>(exp);
current->addLocation(OperatorTokenRegion, exp->operatorToken);
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setRight(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setLeft(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
@@ -1524,7 +1524,7 @@ void QQmlDomAstCreator::endVisit(AST::Block *block)
auto current = makeScriptElement<ScriptElements::BlockStatement>(block);
if (block->statements) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->setStatements(currentScriptNodeEl().takeList());
removeCurrentScriptNode(DomType::List);
}
@@ -1555,25 +1555,25 @@ void QQmlDomAstCreator::endVisit(AST::ForStatement *forStatement)
current->addLocation(FileLocationRegion::RightParenthesisRegion, forStatement->rparenToken);
if (forStatement->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setBody(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode(std::nullopt);
}
if (forStatement->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setExpression(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode(std::nullopt);
}
if (forStatement->condition) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setCondition(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode(std::nullopt);
}
if (forStatement->declarations) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
auto variableDeclaration = makeGenericScriptElement(forStatement->declarations,
DomType::ScriptVariableDeclaration);
@@ -1593,7 +1593,7 @@ void QQmlDomAstCreator::endVisit(AST::ForStatement *forStatement)
}
if (forStatement->initialiser) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setInitializer(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode(std::nullopt);
}
@@ -1783,17 +1783,17 @@ void QQmlDomAstCreator::endVisitHelper(
current->insertChild(Fields::identifier, ScriptElementVariant::fromElement(identifier));
}
if (pe->initializer) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::initializer, scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
if (pe->typeAnnotation) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::type, scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
if (pe->bindingTarget) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::bindingElement, scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
@@ -1833,18 +1833,18 @@ void QQmlDomAstCreator::endVisit(AST::IfStatement *ifStatement)
current->addLocation(IfKeywordRegion, ifStatement->ifToken);
if (ifStatement->ko) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setAlternative(scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
if (ifStatement->ok) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setConsequence(scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
if (ifStatement->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setCondition(scriptNodeStack.last().takeVariant());
scriptNodeStack.removeLast();
}
@@ -1869,7 +1869,7 @@ void QQmlDomAstCreator::endVisit(AST::ReturnStatement *returnStatement)
current->addLocation(ReturnKeywordRegion, returnStatement->returnToken);
if (returnStatement->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setExpression(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -1895,7 +1895,7 @@ void QQmlDomAstCreator::endVisit(AST::FieldMemberExpression *expression)
current->addLocation(FileLocationRegion::OperatorTokenRegion, expression->dotToken);
if (expression->base) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setLeft(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -1926,7 +1926,7 @@ void QQmlDomAstCreator::endVisit(AST::ArrayMemberExpression *expression)
current->addLocation(FileLocationRegion::OperatorTokenRegion, expression->lbracketToken);
if (expression->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
// if scriptNodeStack.last() is fieldmember expression, add expression to it instead of
// creating new one
current->setRight(currentScriptNodeEl().takeVariant());
@@ -1934,7 +1934,7 @@ void QQmlDomAstCreator::endVisit(AST::ArrayMemberExpression *expression)
}
if (expression->base) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setLeft(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -1960,7 +1960,7 @@ void QQmlDomAstCreator::endVisit(AST::CallExpression *exp)
current->addLocation(RightParenthesisRegion, exp->rparenToken);
if (exp->arguments) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::arguments, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
} else {
@@ -1970,7 +1970,7 @@ void QQmlDomAstCreator::endVisit(AST::CallExpression *exp)
}
if (exp->base) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::callee, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -1994,7 +1994,7 @@ void QQmlDomAstCreator::endVisit(AST::ArrayPattern *exp)
auto current = makeGenericScriptElement(exp, DomType::ScriptArray);
if (exp->elements) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
ScriptElements::ScriptList list = currentScriptNodeEl().takeList();
list.replaceKindForGenericChildren(DomType::ScriptPattern, DomType::ScriptArrayEntry);
current->insertChild(Fields::elements, std::move(list));
@@ -2025,7 +2025,7 @@ void QQmlDomAstCreator::endVisit(AST::ObjectPattern *exp)
auto current = makeGenericScriptElement(exp, DomType::ScriptObject);
if (exp->properties) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::properties, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
} else {
@@ -2060,7 +2060,7 @@ void QQmlDomAstCreator::endVisit(AST::PatternProperty *exp)
return;
if (exp->name) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::name, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2085,7 +2085,7 @@ void QQmlDomAstCreator::endVisit(AST::VariableStatement *statement)
current->addLocation(FileLocationRegion::TypeIdentifierRegion, statement->declarationKindToken);
if (statement->declarations) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
ScriptElements::ScriptList list = currentScriptNodeEl().takeList();
list.replaceKindForGenericChildren(DomType::ScriptPattern,
@@ -2145,7 +2145,7 @@ void QQmlDomAstCreator::endVisit(AST::DefaultClause *exp)
current->addLocation(ColonTokenRegion, exp->colonToken);
if (exp->statements) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::statements, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
}
@@ -2171,13 +2171,13 @@ void QQmlDomAstCreator::endVisit(AST::CaseClause *exp)
current->addLocation(FileLocationRegion::ColonTokenRegion, exp->colonToken);
if (exp->statements) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::statements, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
}
if (exp->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2201,7 +2201,7 @@ void QQmlDomAstCreator::endVisit(AST::CaseClauses *list)
auto current = makeScriptList(list);
for (auto it = list; it; it = it->next) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current.append(scriptNodeStack.takeLast().takeVariant());
}
@@ -2227,19 +2227,19 @@ void QQmlDomAstCreator::endVisit(AST::CaseBlock *exp)
current->addLocation(FileLocationRegion::RightBraceRegion, exp->rbraceToken);
if (exp->moreClauses) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::moreCaseClauses, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
}
if (exp->defaultClause) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::defaultClause, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->clauses) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptList());
current->insertChild(Fields::caseClauses, currentScriptNodeEl().takeList());
removeCurrentScriptNode({});
}
@@ -2265,12 +2265,12 @@ void QQmlDomAstCreator::endVisit(AST::SwitchStatement *exp)
current->addLocation(FileLocationRegion::RightParenthesisRegion, exp->rparenToken);
if (exp->block) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::caseBlock, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2297,13 +2297,13 @@ void QQmlDomAstCreator::endVisit(AST::WhileStatement *exp)
current->addLocation(FileLocationRegion::RightParenthesisRegion, exp->rparenToken);
if (exp->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::body, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2331,13 +2331,13 @@ void QQmlDomAstCreator::endVisit(AST::DoWhileStatement *exp)
current->addLocation(FileLocationRegion::RightParenthesisRegion, exp->rparenToken);
if (exp->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::body, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2365,18 +2365,18 @@ void QQmlDomAstCreator::endVisit(AST::ForEachStatement *exp)
current->addLocation(FileLocationRegion::RightParenthesisRegion, exp->rparenToken);
if (exp->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::body, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (exp->lhs) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::bindingElement, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
@@ -2429,7 +2429,7 @@ void QQmlDomAstCreator::endVisit(AST::TryStatement *statement)
if (auto exp = statement->finallyExpression) {
current->addLocation(FileLocationRegion::FinallyKeywordRegion, exp->finallyToken);
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::finallyBlock, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2439,16 +2439,16 @@ void QQmlDomAstCreator::endVisit(AST::TryStatement *statement)
current->addLocation(FileLocationRegion::LeftParenthesisRegion, exp->lparenToken);
current->addLocation(FileLocationRegion::RightParenthesisRegion, exp->rparenToken);
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::catchBlock, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::catchParameter, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (statement->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::block, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2492,7 +2492,7 @@ void QQmlDomAstCreator::endVisit(AST::ThrowStatement *statement)
current->addLocation(FileLocationRegion::ThrowKeywordRegion, statement->throwToken);
if (statement->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2519,7 +2519,7 @@ void QQmlDomAstCreator::endVisit(AST::LabelledStatement *statement)
if (statement->statement) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::statement, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2566,13 +2566,13 @@ void QQmlDomAstCreator::endVisit(AST::Expression *commaExpression)
current->addLocation(OperatorTokenRegion, commaExpression->commaToken);
if (commaExpression->right) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setRight(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (commaExpression->left) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->setLeft(currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2595,19 +2595,19 @@ void QQmlDomAstCreator::endVisit(AST::ConditionalExpression *expression)
current->addLocation(FileLocationRegion::ColonTokenRegion, expression->colonToken);
if (expression->ko) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::alternative, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (expression->ok) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::consequence, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
if (expression->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::condition, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
@@ -2661,7 +2661,7 @@ QQmlDomAstCreator::makeUnaryExpression(AST::Node *expression, QQmlJS::SourceLoca
current->addLocation(FileLocationRegion::OperatorTokenRegion, operatorToken);
if (hasExpression) {
- if (scriptNodeStack.isEmpty() || scriptNodeStack.last().isList()) {
+ if (!stackHasScriptVariant()) {
Q_SCRIPTELEMENT_DISABLE();
return {};
}
@@ -2882,7 +2882,7 @@ void QQmlDomAstCreator::endVisit(AST::NestedExpression *expression)
current->addLocation(FileLocationRegion::RightParenthesisRegion, expression->rparenToken);
if (expression->expression) {
- Q_SCRIPTELEMENT_EXIT_IF(scriptNodeStack.isEmpty() || scriptNodeStack.last().isList());
+ Q_SCRIPTELEMENT_EXIT_IF(!stackHasScriptVariant());
current->insertChild(Fields::expression, currentScriptNodeEl().takeVariant());
removeCurrentScriptNode({});
}
diff --git a/src/qmldom/qqmldomastcreator_p.h b/src/qmldom/qqmldomastcreator_p.h
index 8176721d7e..a97b658971 100644
--- a/src/qmldom/qqmldomastcreator_p.h
+++ b/src/qmldom/qqmldomastcreator_p.h
@@ -524,6 +524,15 @@ public:
void throwRecursionDepthError() override;
+ bool stackHasScriptVariant() const
+ {
+ return !scriptNodeStack.isEmpty() && !scriptNodeStack.last().isList();
+ }
+ bool stackHasScriptList() const
+ {
+ return !scriptNodeStack.isEmpty() && scriptNodeStack.last().isList();
+ }
+
public:
friend class QQmlDomAstCreatorWithQQmlJSScope;
};