diff options
author | Michael Brasser <mbrasser@ford.com> | 2017-08-17 18:24:39 -0500 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-08-18 18:03:34 +0000 |
commit | cf1dcc857a5b9fdc55f21508c812bb4110cf93b7 (patch) | |
tree | 81ad9ad112de838786e2450fe72fc97bf23b9674 /src/qml/parser/qqmljsast_p.h | |
parent | ad63e8491bdf6e85af1a72a44ef643321e6ceec0 (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.h | 18 |
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 |