aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/parser
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-08-30 12:58:55 +0200
committerLars Knoll <lars.knoll@qt.io>2018-08-31 06:08:41 +0000
commitee565b3db656b5b9bfd57d98d53b898c1a62e1f0 (patch)
tree857b0f3c09144e68ee0d6cfdf25a227df2f76c8b /src/qml/parser
parentebf9365b5c7ec1e4828be88beeb930b4de52f35b (diff)
Correctly create methods for functions in object literals
Methods behave slightly different than normal functions as they have a home object and define how super property access is being done. To implement this correctly, we need to create these methods during object initialization time. Change-Id: Ib3f670c8790b882c6472de786938ca4f0b73f66f Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/parser')
-rw-r--r--src/qml/parser/qqmljs.g4
-rw-r--r--src/qml/parser/qqmljsast.cpp2
-rw-r--r--src/qml/parser/qqmljsast_p.h1
3 files changed, 5 insertions, 2 deletions
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index b5e63fe7fe..a844e3cb3e 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -3669,7 +3669,7 @@ MethodDefinition: PropertyName T_LPAREN StrictFormalParameters T_RPAREN Function
f->rparenToken = loc(4);
f->lbraceToken = loc(5);
f->rbraceToken = loc(7);
- AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, f);
+ AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, f, AST::PatternProperty::Method);
node->colonToken = loc(2);
sym(1).Node = node;
} break;
@@ -3685,7 +3685,7 @@ MethodDefinition: T_STAR PropertyName GeneratorLParen StrictFormalParameters T_R
f->lbraceToken = loc(6);
f->rbraceToken = loc(8);
f->isGenerator = true;
- AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(2).PropertyName, f);
+ AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(2).PropertyName, f, AST::PatternProperty::Method);
node->colonToken = loc(2);
sym(1).Node = node;
} break;
diff --git a/src/qml/parser/qqmljsast.cpp b/src/qml/parser/qqmljsast.cpp
index 9484b53a39..4ebb2d3b5c 100644
--- a/src/qml/parser/qqmljsast.cpp
+++ b/src/qml/parser/qqmljsast.cpp
@@ -465,6 +465,8 @@ bool PatternProperty::convertLiteralToAssignmentPattern(MemoryPool *pool, Source
*errorMessage = QString::fromLatin1("Invalid getter/setter in destructuring expression.");
return false;
}
+ if (type == Method)
+ type = Literal;
Q_ASSERT(type == Literal);
return PatternElement::convertLiteralToAssignmentPattern(pool, errorLocation, errorMessage);
}
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index b69fb6272b..72c47cbe32 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -670,6 +670,7 @@ public:
enum Type {
// object literal types
Literal,
+ Method,
Getter,
Setter,