aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/compiler/qv4codegen.cpp4
-rw-r--r--src/qml/parser/qqmljs.g21
-rw-r--r--src/qml/parser/qqmljsast_p.h1
3 files changed, 25 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 1feb61ce59..ff6396b27d 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -668,6 +668,10 @@ bool Codegen::visit(ArrayLiteral *ast)
};
for (ElementList *it = ast->elements; it; it = it->next) {
+ if (it->isSpreadElement) {
+ throwSyntaxError(it->firstSourceLocation(), QLatin1String("'...' in ArrayLiterals is unimplementd."));
+ return false;
+ }
for (Elision *elision = it->elision; elision; elision = elision->next)
push(nullptr);
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index 695998e4ee..acd0bdb0cc 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -1648,6 +1648,13 @@ ElementList: Elision AssignmentExpression_In;
./
ElementList: ElisionOpt SpreadElement;
+/.
+ case $rule_number: {
+ AST::ElementList *node = new (pool) AST::ElementList(sym(1).Elision, sym(2).Expression);
+ node->isSpreadElement = true;
+ sym(1).Node = node;
+ } break;
+./
ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression_In;
/.
@@ -1659,6 +1666,14 @@ ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression_In;
./
ElementList: ElementList T_COMMA ElisionOpt SpreadElement;
+/.
+ case $rule_number: {
+ AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList, sym(3).Elision, sym(4).Expression);
+ node->commaToken = loc(2);
+ node->isSpreadElement = true;
+ sym(1).Node = node;
+ } break;
+./
Elision: T_COMMA;
/.
@@ -1693,7 +1708,11 @@ ElisionOpt: Elision;
./
SpreadElement: T_ELLIPSIS AssignmentExpression;
-/. case $rule_number: { UNIMPLEMENTED; } ./
+/.
+ case $rule_number: {
+ sym(1).Node = sym(2).Node;
+ } break;
+./
ObjectLiteral: T_LBRACE T_RBRACE;
/.
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index 6992985097..f07d4f88bc 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -639,6 +639,7 @@ public:
ExpressionNode *expression;
ElementList *next;
SourceLocation commaToken;
+ bool isSpreadElement = false;
};
class QML_PARSER_EXPORT PropertyName: public Node