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/compiler/qqmlirbuilder_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/compiler/qqmlirbuilder_p.h')
-rw-r--r-- | src/qml/compiler/qqmlirbuilder_p.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h index 64bf111d9a..4c29e0b9f5 100644 --- a/src/qml/compiler/qqmlirbuilder_p.h +++ b/src/qml/compiler/qqmlirbuilder_p.h @@ -265,6 +265,25 @@ public: struct Object; +struct EnumValue : public QV4::CompiledData::EnumValue +{ + EnumValue *next; +}; + +struct Enum +{ + int nameIndex; + QV4::CompiledData::Location location; + PoolList<EnumValue> *enumValues; + + int enumValueCount() const { return enumValues->count; } + PoolList<EnumValue>::Iterator enumValuesBegin() const { return enumValues->begin(); } + PoolList<EnumValue>::Iterator enumValuesEnd() const { return enumValues->end(); } + + Enum *next; +}; + + struct SignalParameter : public QV4::CompiledData::Parameter { SignalParameter *next; @@ -359,6 +378,8 @@ public: int propertyCount() const { return properties->count; } Alias *firstAlias() const { return aliases->first; } int aliasCount() const { return aliases->count; } + const Enum *firstEnum() const { return qmlEnums->first; } + int enumCount() const { return qmlEnums->count; } const Signal *firstSignal() const { return qmlSignals->first; } int signalCount() const { return qmlSignals->count; } Binding *firstBinding() const { return bindings->first; } @@ -372,6 +393,8 @@ public: PoolList<Property>::Iterator propertiesEnd() const { return properties->end(); } PoolList<Alias>::Iterator aliasesBegin() const { return aliases->begin(); } PoolList<Alias>::Iterator aliasesEnd() const { return aliases->end(); } + PoolList<Enum>::Iterator enumsBegin() const { return qmlEnums->begin(); } + PoolList<Enum>::Iterator enumsEnd() const { return qmlEnums->end(); } PoolList<Signal>::Iterator signalsBegin() const { return qmlSignals->begin(); } PoolList<Signal>::Iterator signalsEnd() const { return qmlSignals->end(); } PoolList<Function>::Iterator functionsBegin() const { return functions->begin(); } @@ -385,6 +408,7 @@ public: QString sanityCheckFunctionNames(const QSet<QString> &illegalNames, QQmlJS::AST::SourceLocation *errorLocation); + QString appendEnum(Enum *enumeration); QString appendSignal(Signal *signal); QString appendProperty(Property *prop, const QString &propertyName, bool isDefaultProperty, const QQmlJS::AST::SourceLocation &defaultToken, QQmlJS::AST::SourceLocation *errorLocation); QString appendAlias(Alias *prop, const QString &aliasName, bool isDefaultProperty, const QQmlJS::AST::SourceLocation &defaultToken, QQmlJS::AST::SourceLocation *errorLocation); @@ -408,6 +432,7 @@ private: PoolList<Property> *properties; PoolList<Alias> *aliases; + PoolList<Enum> *qmlEnums; PoolList<Signal> *qmlSignals; PoolList<Binding> *bindings; PoolList<Function> *functions; @@ -482,6 +507,7 @@ public: bool visit(QQmlJS::AST::UiArrayBinding *ast) override; bool visit(QQmlJS::AST::UiObjectBinding *ast) override; bool visit(QQmlJS::AST::UiObjectDefinition *ast) override; + bool visit(QQmlJS::AST::UiEnumDeclaration *ast) override; bool visit(QQmlJS::AST::UiPublicMember *ast) override; bool visit(QQmlJS::AST::UiScriptBinding *ast) override; bool visit(QQmlJS::AST::UiSourceElement *ast) override; |