aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/parser/qqmljsast_p.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-06-05 13:07:50 +0200
committerLars Knoll <lars.knoll@qt.io>2018-06-21 13:30:44 +0000
commitce18e987d4ea623c0db6d10f2a97a16b639a234e (patch)
tree793ce0624f971de8015d5580e6c06d2b1a1b9aab /src/qml/parser/qqmljsast_p.h
parenta12da297946b5a6e767b972bc635a3308683b2e5 (diff)
Fix more issues with destructuring
Fix destructuring targets that are complex lhs expressions. There are still some failures remaining, but this fixes another larger chunk of test cases. Change-Id: Icf08f42d7c70d4e81be5d5d2e27ebe6249d25467 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/parser/qqmljsast_p.h')
-rw-r--r--src/qml/parser/qqmljsast_p.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index 2d4d5662bd..66a4e357e9 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -678,7 +678,7 @@ public:
}
PatternElement(Pattern *pattern, ExpressionNode *i = nullptr, Type t = Binding)
- : bindingPattern(pattern), initializer(i), type(t)
+ : bindingTarget(pattern), initializer(i), type(t)
{
Q_ASSERT(t >= RestElement);
kind = K;
@@ -688,13 +688,15 @@ public:
virtual bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage);
SourceLocation firstSourceLocation() const override
- { return identifierToken.isValid() ? identifierToken : (bindingPattern ? bindingPattern->firstSourceLocation() : initializer->firstSourceLocation()); }
+ { return identifierToken.isValid() ? identifierToken : (bindingTarget ? bindingTarget->firstSourceLocation() : initializer->firstSourceLocation()); }
SourceLocation lastSourceLocation() const override
- { return initializer ? initializer->lastSourceLocation() : (bindingPattern ? bindingPattern->lastSourceLocation() : identifierToken); }
+ { return initializer ? initializer->lastSourceLocation() : (bindingTarget ? bindingTarget->lastSourceLocation() : identifierToken); }
- PatternElementList *elementList() const { ArrayPattern *a = cast<ArrayPattern *>(bindingPattern); return a ? a->elements : nullptr; }
- PatternPropertyList *propertyList() const { ObjectPattern *o = cast<ObjectPattern *>(bindingPattern); return o ? o->properties : nullptr; }
+ ExpressionNode *destructuringTarget() const { return bindingTarget; }
+ Pattern *destructuringPattern() const { return bindingTarget ? bindingTarget->patternCast() : nullptr; }
+ PatternElementList *elementList() const { ArrayPattern *a = cast<ArrayPattern *>(bindingTarget); return a ? a->elements : nullptr; }
+ PatternPropertyList *propertyList() const { ObjectPattern *o = cast<ObjectPattern *>(bindingTarget); return o ? o->properties : nullptr; }
bool isVariableDeclaration() const { return scope != VariableScope::NoScope; }
bool isLexicallyScoped() const { return scope == VariableScope::Let || scope == VariableScope::Const; }
@@ -704,7 +706,7 @@ public:
// attributes
SourceLocation identifierToken;
QString bindingIdentifier;
- Pattern *bindingPattern = nullptr;
+ ExpressionNode *bindingTarget = nullptr;
ExpressionNode *initializer = nullptr;
Type type = Literal;
// when used in a VariableDeclarationList
@@ -2164,7 +2166,7 @@ public:
PatternElement *e = formals->element;
if (e && e->type == PatternElement::RestElement)
return false;
- if (e && (e->initializer || e->bindingPattern))
+ if (e && (e->initializer || e->bindingTarget))
return false;
formals = formals->next;
}