diff options
author | Michael Brasser <mbrasser@ford.com> | 2017-04-20 15:59:31 +0200 |
---|---|---|
committer | Michael Brasser <michael.brasser@live.com> | 2017-07-13 21:00:55 +0000 |
commit | 22a2cc43387ec3b9f74a6c01f8665378a4541147 (patch) | |
tree | 33acf5a5367302eb3f488b688aba7c85959035ae /src/qml/parser/qqmljsast_p.h | |
parent | 286f14f1e29e7f4e2db4517d087dd5c92606f971 (diff) |
Add support for enum declarations in QML
Enums can be declared with the following syntax:
enum MyEnum {
Value1,
Value2
}
Grammar changes done by Simon Hausmann.
[ChangeLog][QtQml] Enums can now be declared directly in QML.
Task-number: QTBUG-14861
Change-Id: Ic6b6e032651d01ee2ecf9d5ce5734976cb3ad7ab
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 | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h index 0de419d697..d458b2cd35 100644 --- a/src/qml/parser/qqmljsast_p.h +++ b/src/qml/parser/qqmljsast_p.h @@ -218,7 +218,9 @@ public: Kind_UiQualifiedPragmaId, Kind_UiScriptBinding, Kind_UiSourceElement, - Kind_UiHeaderItemList + Kind_UiHeaderItemList, + Kind_UiEnumDeclaration, + Kind_UiEnumMemberList }; inline Node() @@ -2785,6 +2787,69 @@ public: SourceLocation rbracketToken; }; +class QML_PARSER_EXPORT UiEnumMemberList: public Node +{ + QQMLJS_DECLARE_AST_NODE(UiEnumMemberList) +public: + UiEnumMemberList(const QStringRef &member) + : next(this), member(member) + { kind = K; } + + UiEnumMemberList(UiEnumMemberList *previous, const QStringRef &member) + : member(member) + { + kind = K; + next = previous->next; + previous->next = this; + } + + SourceLocation firstSourceLocation() const override + { return memberToken; } + + SourceLocation lastSourceLocation() const override + { return next ? next->lastSourceLocation() : memberToken; } + + void accept0(Visitor *visitor) override; + + UiEnumMemberList *finish() + { + UiEnumMemberList *head = next; + next = 0; + return head; + } + +// attributes + UiEnumMemberList *next; + QStringRef member; + SourceLocation memberToken; +}; + +class QML_PARSER_EXPORT UiEnumDeclaration: public UiObjectMember +{ +public: + QQMLJS_DECLARE_AST_NODE(UiEnumDeclaration) + + UiEnumDeclaration(const QStringRef &name, + UiEnumMemberList *members) + : name(name) + , members(members) + { kind = K; } + + SourceLocation firstSourceLocation() const override + { return enumToken; } + + SourceLocation lastSourceLocation() const override + { return rbraceToken; } + + void accept0(Visitor *visitor) override; + +// attributes + SourceLocation enumToken; + SourceLocation rbraceToken; + QStringRef name; + UiEnumMemberList *members; +}; + } } // namespace AST |