aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/parser/qqmljsast_p.h
diff options
context:
space:
mode:
authorMichael Brasser <mbrasser@ford.com>2017-08-17 18:24:39 -0500
committerSimon Hausmann <simon.hausmann@qt.io>2017-08-18 18:03:34 +0000
commitcf1dcc857a5b9fdc55f21508c812bb4110cf93b7 (patch)
tree81ad9ad112de838786e2450fe72fc97bf23b9674 /src/qml/parser/qqmljsast_p.h
parentad63e8491bdf6e85af1a72a44ef643321e6ceec0 (diff)
Support explicit enum value declaration in QML
Allow declarations such as: enum MyEnum { Value1 = 1, Value2 } Not all features of C++ enums are supported. Specifically, we don't yet allow: * Negative numbers (Value1 = -1) * Assignment of other values (Value2 = Value1) Change-Id: I4776f8d86bd0c8688c7dd8b7d4ccb2f72fdfe721 Task-number: QTBUG-14861 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.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index d458b2cd35..aa48accfe0 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -2791,8 +2791,8 @@ class QML_PARSER_EXPORT UiEnumMemberList: public Node
{
QQMLJS_DECLARE_AST_NODE(UiEnumMemberList)
public:
- UiEnumMemberList(const QStringRef &member)
- : next(this), member(member)
+ UiEnumMemberList(const QStringRef &member, double v = 0.0)
+ : next(this), member(member), value(v)
{ kind = K; }
UiEnumMemberList(UiEnumMemberList *previous, const QStringRef &member)
@@ -2801,13 +2801,23 @@ public:
kind = K;
next = previous->next;
previous->next = this;
+ value = previous->value + 1;
+ }
+
+ UiEnumMemberList(UiEnumMemberList *previous, const QStringRef &member, double v)
+ : member(member), value(v)
+ {
+ kind = K;
+ next = previous->next;
+ previous->next = this;
}
SourceLocation firstSourceLocation() const override
{ return memberToken; }
SourceLocation lastSourceLocation() const override
- { return next ? next->lastSourceLocation() : memberToken; }
+ { return next ? next->lastSourceLocation() :
+ valueToken.isValid() ? valueToken : memberToken; }
void accept0(Visitor *visitor) override;
@@ -2821,7 +2831,9 @@ public:
// attributes
UiEnumMemberList *next;
QStringRef member;
+ double value;
SourceLocation memberToken;
+ SourceLocation valueToken;
};
class QML_PARSER_EXPORT UiEnumDeclaration: public UiObjectMember