From 22a2cc43387ec3b9f74a6c01f8665378a4541147 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Thu, 20 Apr 2017 15:59:31 +0200 Subject: 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 --- src/qml/compiler/qqmlirbuilder.cpp | 94 +- src/qml/compiler/qqmlirbuilder_p.h | 26 + src/qml/compiler/qqmlpropertycachecreator_p.h | 19 +- src/qml/compiler/qv4compileddata_p.h | 47 +- .../qmllanguageref/syntax/objectattributes.qdoc | 38 + src/qml/jsruntime/qv4qmlcontext.cpp | 2 +- src/qml/parser/qqmljs.g | 34 + src/qml/parser/qqmljsast.cpp | 17 + src/qml/parser/qqmljsast_p.h | 67 +- src/qml/parser/qqmljsastfwd_p.h | 2 + src/qml/parser/qqmljsastvisitor_p.h | 4 + src/qml/parser/qqmljsgrammar.cpp | 2111 ++++++++++---------- src/qml/parser/qqmljsgrammar_p.h | 295 +-- src/qml/parser/qqmljskeywords_p.h | 2 +- src/qml/parser/qqmljslexer_p.h | 1 - src/qml/parser/qqmljsparser.cpp | 384 ++-- src/qml/parser/qqmljsparser_p.h | 5 +- src/qml/qml/qqmlimport.cpp | 36 +- src/qml/qml/qqmlimport_p.h | 13 +- src/qml/qml/qqmlmetatype.cpp | 151 +- src/qml/qml/qqmlmetatype_p.h | 9 +- src/qml/qml/qqmlpropertycache.cpp | 21 +- src/qml/qml/qqmlpropertycache_p.h | 33 +- src/qml/qml/qqmltypeloader.cpp | 4 + src/qml/qml/qqmltypenamecache.cpp | 4 +- src/qml/qml/qqmltypenamecache_p.h | 2 +- 26 files changed, 1916 insertions(+), 1505 deletions(-) (limited to 'src') diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index df615e6804..e05c38e14a 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -86,6 +86,7 @@ void Object::init(QQmlJS::MemoryPool *pool, int typeNameIndex, int idIndex, cons flags = QV4::CompiledData::Object::NoFlag; properties = pool->New >(); aliases = pool->New >(); + qmlEnums = pool->New>(); qmlSignals = pool->New >(); bindings = pool->New >(); functions = pool->New >(); @@ -118,6 +119,21 @@ QString Object::sanityCheckFunctionNames(const QSet &illegalNames, QQml return QString(); // no error } +QString Object::appendEnum(Enum *enumeration) +{ + Object *target = declarationsOverride; + if (!target) + target = this; + + for (Enum *e = qmlEnums->first; e; e = e->next) { + if (e->nameIndex == enumeration->nameIndex) + return tr("Duplicate scoped enum name"); + } + + target->qmlEnums->append(enumeration); + return QString(); // no error +} + QString Object::appendSignal(Signal *signal) { Object *target = declarationsOverride; @@ -709,6 +725,48 @@ static QStringList astNodeToStringList(QQmlJS::AST::Node *node) return QStringList(); } +bool IRBuilder::visit(QQmlJS::AST::UiEnumDeclaration *node) +{ + Enum *enumeration = New(); + QString enumName = node->name.toString(); + enumeration->nameIndex = registerString(enumName); + + if (enumName.at(0).isLower()) + COMPILE_EXCEPTION(node->enumToken, tr("Scoped enum names must begin with an upper case letter")); + + enumeration->location.line = node->enumToken.startLine; + enumeration->location.column = node->enumToken.startColumn; + + enumeration->enumValues = New>(); + + QQmlJS::AST::UiEnumMemberList *e = node->members; + int i = -1; + while (e) { + EnumValue *enumValue = New(); + QString member = e->member.toString(); + enumValue->nameIndex = registerString(member); + enumValue->value = ++i; + + if (member.at(0).isLower()) + COMPILE_EXCEPTION(e->memberToken, tr("Enum names must begin with an upper case letter")); + + enumValue->location.line = e->memberToken.startLine; + enumValue->location.column = e->memberToken.startColumn; + enumeration->enumValues->append(enumValue); + + e = e->next; + } + + QString error = _object->appendEnum(enumeration); + if (!error.isEmpty()) { + recordError(node->enumToken, error); + return false; + } + + return false; +} + + bool IRBuilder::visit(QQmlJS::AST::UiPublicMember *node) { static const struct TypeNameToType { @@ -1375,13 +1433,19 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: int objectsSize = 0; for (Object *o : qAsConst(output.objects)) { objectOffsets.insert(o, unitSize + importSize + objectOffsetTableSize + objectsSize); - objectsSize += QV4::CompiledData::Object::calculateSizeExcludingSignals(o->functionCount(), o->propertyCount(), o->aliasCount(), o->signalCount(), o->bindingCount(), o->namedObjectsInComponent.count); + objectsSize += QV4::CompiledData::Object::calculateSizeExcludingSignalsAndEnums(o->functionCount(), o->propertyCount(), o->aliasCount(), o->enumCount(), o->signalCount(), o->bindingCount(), o->namedObjectsInComponent.count); int signalTableSize = 0; for (const Signal *s = o->firstSignal(); s; s = s->next) signalTableSize += QV4::CompiledData::Signal::calculateSize(s->parameters->count); objectsSize += signalTableSize; + + int enumTableSize = 0; + for (const Enum *e = o->firstEnum(); e; e = e->next) + enumTableSize += QV4::CompiledData::Enum::calculateSize(e->enumValues->count); + + objectsSize += enumTableSize; } const int totalSize = unitSize + importSize + objectOffsetTableSize + objectsSize + output.jsGenerator.stringTable.sizeOfTableAndData(); @@ -1455,6 +1519,10 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: objectToWrite->offsetToAliases = nextOffset; nextOffset += objectToWrite->nAliases * sizeof(QV4::CompiledData::Alias); + objectToWrite->nEnums = o->enumCount(); + objectToWrite->offsetToEnums = nextOffset; + nextOffset += objectToWrite->nEnums * sizeof(quint32); + objectToWrite->nSignals = o->signalCount(); objectToWrite->offsetToSignals = nextOffset; nextOffset += objectToWrite->nSignals * sizeof(quint32); @@ -1512,14 +1580,36 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: signalTableSize += size; signalPtr += size; } + nextOffset += signalTableSize; + + quint32_le *enumOffsetTable = reinterpret_cast(objectPtr + objectToWrite->offsetToEnums); + quint32 enumTableSize = 0; + char *enumPtr = objectPtr + nextOffset; + for (const Enum *e = o->firstEnum(); e; e = e->next) { + *enumOffsetTable++ = enumPtr - objectPtr; + QV4::CompiledData::Enum *enumToWrite = reinterpret_cast(enumPtr); + + enumToWrite->nameIndex = e->nameIndex; + enumToWrite->location = e->location; + enumToWrite->nEnumValues = e->enumValues->count; + + QV4::CompiledData::EnumValue *enumValueToWrite = reinterpret_cast(enumPtr + sizeof(*enumToWrite)); + for (EnumValue *enumValue = e->enumValues->first; enumValue; enumValue = enumValue->next, ++enumValueToWrite) + *enumValueToWrite = *enumValue; + + int size = QV4::CompiledData::Enum::calculateSize(e->enumValues->count); + enumTableSize += size; + enumPtr += size; + } quint32_le *namedObjectInComponentPtr = reinterpret_cast(objectPtr + objectToWrite->offsetToNamedObjectsInComponent); for (int i = 0; i < o->namedObjectsInComponent.count; ++i) { *namedObjectInComponentPtr++ = o->namedObjectsInComponent.at(i); } - objectPtr += QV4::CompiledData::Object::calculateSizeExcludingSignals(o->functionCount(), o->propertyCount(), o->aliasCount(), o->signalCount(), o->bindingCount(), o->namedObjectsInComponent.count); + objectPtr += QV4::CompiledData::Object::calculateSizeExcludingSignalsAndEnums(o->functionCount(), o->propertyCount(), o->aliasCount(), o->enumCount(), o->signalCount(), o->bindingCount(), o->namedObjectsInComponent.count); objectPtr += signalTableSize; + objectPtr += enumTableSize; } // enable flag if we encountered pragma Singleton 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 *enumValues; + + int enumValueCount() const { return enumValues->count; } + PoolList::Iterator enumValuesBegin() const { return enumValues->begin(); } + PoolList::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::Iterator propertiesEnd() const { return properties->end(); } PoolList::Iterator aliasesBegin() const { return aliases->begin(); } PoolList::Iterator aliasesEnd() const { return aliases->end(); } + PoolList::Iterator enumsBegin() const { return qmlEnums->begin(); } + PoolList::Iterator enumsEnd() const { return qmlEnums->end(); } PoolList::Iterator signalsBegin() const { return qmlSignals->begin(); } PoolList::Iterator signalsEnd() const { return qmlSignals->end(); } PoolList::Iterator functionsBegin() const { return functions->begin(); } @@ -385,6 +408,7 @@ public: QString sanityCheckFunctionNames(const QSet &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 *properties; PoolList *aliases; + PoolList *qmlEnums; PoolList *qmlSignals; PoolList *bindings; PoolList *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; diff --git a/src/qml/compiler/qqmlpropertycachecreator_p.h b/src/qml/compiler/qqmlpropertycachecreator_p.h index 3c14abc019..5901e4e13e 100644 --- a/src/qml/compiler/qqmlpropertycachecreator_p.h +++ b/src/qml/compiler/qqmlpropertycachecreator_p.h @@ -116,7 +116,7 @@ inline QQmlCompileError QQmlPropertyCacheCreator::buildMetaObje { const CompiledObject *obj = objectContainer->objectAt(objectIndex); - bool needVMEMetaObject = obj->propertyCount() != 0 || obj->aliasCount() != 0 || obj->signalCount() != 0 || obj->functionCount() != 0; + bool needVMEMetaObject = obj->propertyCount() != 0 || obj->aliasCount() != 0 || obj->signalCount() != 0 || obj->functionCount() != 0 || obj->enumCount() != 0; if (!needVMEMetaObject) { auto binding = obj->bindingsBegin(); auto end = obj->bindingsEnd(); @@ -244,7 +244,7 @@ inline QQmlCompileError QQmlPropertyCacheCreator::createMetaObj QQmlRefPointer cache; cache.adopt(baseTypeCache->copyAndReserve(obj->propertyCount() + obj->aliasCount(), obj->functionCount() + obj->propertyCount() + obj->aliasCount() + obj->signalCount(), - obj->signalCount() + obj->propertyCount() + obj->aliasCount())); + obj->signalCount() + obj->propertyCount() + obj->aliasCount(), obj->enumCount())); propertyCaches->set(objectIndex, cache); propertyCaches->setNeedsVMEMetaObject(objectIndex); @@ -370,6 +370,21 @@ inline QQmlCompileError QQmlPropertyCacheCreator::createMetaObj cache->appendSignal(changedSigName, flags, effectiveMethodIndex++); } + auto e = obj->enumsBegin(); + auto eend = obj->enumsEnd(); + for ( ; e != eend; ++e) { + const int enumValueCount = e->enumValueCount(); + QVector values; + values.reserve(enumValueCount); + + auto enumValue = e->enumValuesBegin(); + auto end = e->enumValuesEnd(); + for ( ; enumValue != end; ++enumValue) + values.append(QQmlEnumValue(stringAt(enumValue->nameIndex), enumValue->value)); + + cache->appendEnum(stringAt(e->nameIndex), values); + } + // Dynamic signals auto s = obj->signalsBegin(); auto send = obj->signalsEnd(); diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index 876244437e..386f3ae922 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -390,6 +390,36 @@ struct Q_QML_PRIVATE_EXPORT Binding }; +struct EnumValue +{ + quint32_le nameIndex; + qint32_le value; + Location location; +}; + +struct Enum +{ + quint32_le nameIndex; + quint32_le nEnumValues; + Location location; + + const EnumValue *enumValueAt(int idx) const { + return reinterpret_cast(this + 1) + idx; + } + + static int calculateSize(int nEnumValues) { + return (sizeof(Enum) + + nEnumValues * sizeof(EnumValue) + + 7) & ~0x7; + } + + // --- QQmlPropertyCacheCreatorInterface + const EnumValue *enumValuesBegin() const { return enumValueAt(0); } + const EnumValue *enumValuesEnd() const { return enumValueAt(nEnumValues); } + int enumValueCount() const { return nEnumValues; } + // --- +}; + struct Parameter { quint32_le nameIndex; @@ -497,6 +527,8 @@ struct Object quint32_le offsetToProperties; quint32_le nAliases; quint32_le offsetToAliases; + quint32_le nEnums; + quint32_le offsetToEnums; // which in turn will be a table with offsets to variable-sized Enum objects quint32_le nSignals; quint32_le offsetToSignals; // which in turn will be a table with offsets to variable-sized Signal objects quint32_le nBindings; @@ -510,12 +542,13 @@ struct Object // Signal[] // Binding[] - static int calculateSizeExcludingSignals(int nFunctions, int nProperties, int nAliases, int nSignals, int nBindings, int nNamedObjectsInComponent) + static int calculateSizeExcludingSignalsAndEnums(int nFunctions, int nProperties, int nAliases, int nEnums, int nSignals, int nBindings, int nNamedObjectsInComponent) { return ( sizeof(Object) + nFunctions * sizeof(quint32) + nProperties * sizeof(Property) + nAliases * sizeof(Alias) + + nEnums * sizeof(quint32) + nSignals * sizeof(quint32) + nBindings * sizeof(Binding) + nNamedObjectsInComponent * sizeof(int) @@ -543,6 +576,13 @@ struct Object return reinterpret_cast(reinterpret_cast(this) + offsetToBindings); } + const Enum *enumAt(int idx) const + { + const quint32_le *offsetTable = reinterpret_cast((reinterpret_cast(this)) + offsetToEnums); + const quint32_le offset = offsetTable[idx]; + return reinterpret_cast(reinterpret_cast(this) + offset); + } + const Signal *signalAt(int idx) const { const quint32_le *offsetTable = reinterpret_cast((reinterpret_cast(this)) + offsetToSignals); @@ -558,6 +598,7 @@ struct Object // --- QQmlPropertyCacheCreator interface int propertyCount() const { return nProperties; } int aliasCount() const { return nAliases; } + int enumCount() const { return nEnums; } int signalCount() const { return nSignals; } int functionCount() const { return nFunctions; } @@ -570,6 +611,10 @@ struct Object const Alias *aliasesBegin() const { return aliasTable(); } const Alias *aliasesEnd() const { return aliasTable() + nAliases; } + typedef TableIterator EnumIterator; + EnumIterator enumsBegin() const { return EnumIterator(this, 0); } + EnumIterator enumsEnd() const { return EnumIterator(this, nEnums); } + typedef TableIterator SignalIterator; SignalIterator signalsBegin() const { return SignalIterator(this, 0); } SignalIterator signalsEnd() const { return SignalIterator(this, nSignals); } diff --git a/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc b/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc index 33f58dc1b9..befe575fe1 100644 --- a/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc +++ b/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc @@ -50,6 +50,7 @@ The set of QML object-type attribute types is as follows: \li signal handler attributes \li method attributes \li attached properties and attached signal handler attributes +\li enumeration attributes \endlist These attributes are discussed in detail below. @@ -975,4 +976,41 @@ ListView { Now \c delegateItem.ListView.isCurrentItem correctly refers to the \c isCurrentItem attached property of the delegate. +\section2 Enumeration Attributes + +Enumerations provide a fixed set of named choices. They can be declared in QML using the \c enum keyword: + +\qml +// MyText.qml +Text { + enum TextType { + Normal, + Heading + } +} +\endqml + +As shown above, enumeration types (e.g. \c TextType) and values (e.g. \c Normal) must begin with an uppercase letter. + +Values are referred to via \c {..} or \c {.}. + +\qml +// MyText.qml +Text { + enum TextType { + Normal, + Heading + } + + property int textType: MyText.TextType.Normal + + font.bold: textType == MyText.TextType.Heading + font.pixelSize: textType == MyText.TextType.Heading ? 24 : 12 +} +\endqml + +More information on enumeration usage in QML can be found in the \l {QML Basic Types} \l enumeration documentation. + +The ability to declare enumerations in QML was introduced in Qt 5.10. + */ diff --git a/src/qml/jsruntime/qv4qmlcontext.cpp b/src/qml/jsruntime/qv4qmlcontext.cpp index 61d785066f..89770d269a 100644 --- a/src/qml/jsruntime/qv4qmlcontext.cpp +++ b/src/qml/jsruntime/qv4qmlcontext.cpp @@ -134,7 +134,7 @@ ReturnedValue QQmlContextWrapper::get(const Managed *m, String *name, bool *hasP if (context->imports && name->startsWithUpper()) { // Search for attached properties, enums and imported scripts - QQmlTypeNameCache::Result r = context->imports->query(name); + QQmlTypeNameCache::Result r = context->imports->query(name, QQmlImport::AllowRecursion); if (r.isValid()) { if (hasProperty) diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g index ca84e0c157..395e62e657 100644 --- a/src/qml/parser/qqmljs.g +++ b/src/qml/parser/qqmljs.g @@ -77,6 +77,7 @@ %token T_MULTILINE_STRING_LITERAL "multiline string literal" %token T_COMMENT "comment" %token T_COMPATIBILITY_SEMICOLON +%token T_ENUM "enum" --- context keywords. %token T_PUBLIC "public" @@ -281,6 +282,7 @@ public: AST::UiArrayMemberList *UiArrayMemberList; AST::UiQualifiedId *UiQualifiedId; AST::UiQualifiedPragmaId *UiQualifiedPragmaId; + AST::UiEnumMemberList *UiEnumMemberList; }; public: @@ -1207,6 +1209,37 @@ case $rule_number: { } break; ./ +UiObjectMember: T_ENUM T_IDENTIFIER T_LBRACE EnumMemberList T_RBRACE; +/. +case $rule_number: { + AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish()); + enumDeclaration->enumToken = loc(1); + enumDeclaration->rbraceToken = loc(5); + sym(1).Node = enumDeclaration; + break; +} +./ + +EnumMemberList: T_IDENTIFIER; +/. +case $rule_number: { + AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1)); + node->memberToken = loc(1); + sym(1).Node = node; + break; +} +./ + +EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER; +/. +case $rule_number: { + AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3)); + node->memberToken = loc(3); + sym(1).Node = node; + break; +} +./ + JsIdentifier: T_IDENTIFIER; JsIdentifier: T_PROPERTY ; @@ -1602,6 +1635,7 @@ ReservedIdentifier: T_DEFAULT ; ReservedIdentifier: T_DELETE ; ReservedIdentifier: T_DO ; ReservedIdentifier: T_ELSE ; +ReservedIdentifier: T_ENUM ; ReservedIdentifier: T_FALSE ; ReservedIdentifier: T_FINALLY ; ReservedIdentifier: T_FOR ; diff --git a/src/qml/parser/qqmljsast.cpp b/src/qml/parser/qqmljsast.cpp index 7f8cecca8f..2433522f42 100644 --- a/src/qml/parser/qqmljsast.cpp +++ b/src/qml/parser/qqmljsast.cpp @@ -967,6 +967,23 @@ void UiSourceElement::accept0(Visitor *visitor) visitor->endVisit(this); } +void UiEnumDeclaration::accept0(Visitor *visitor) +{ + if (visitor->visit(this)) { + accept(members, visitor); + } + + visitor->endVisit(this); +} + +void UiEnumMemberList::accept0(Visitor *visitor) +{ + if (visitor->visit(this)) { + } + + visitor->endVisit(this); +} + } } // namespace QQmlJS::AST QT_QML_END_NAMESPACE 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 diff --git a/src/qml/parser/qqmljsastfwd_p.h b/src/qml/parser/qqmljsastfwd_p.h index 189eb72a57..140a757e51 100644 --- a/src/qml/parser/qqmljsastfwd_p.h +++ b/src/qml/parser/qqmljsastfwd_p.h @@ -181,6 +181,8 @@ class UiArrayMemberList; class UiQualifiedId; class UiQualifiedPragmaId; class UiHeaderItemList; +class UiEnumDeclaration; +class UiEnumMemberList; } } // namespace AST diff --git a/src/qml/parser/qqmljsastvisitor_p.h b/src/qml/parser/qqmljsastvisitor_p.h index e582a8f6a7..13218f0e98 100644 --- a/src/qml/parser/qqmljsastvisitor_p.h +++ b/src/qml/parser/qqmljsastvisitor_p.h @@ -84,6 +84,8 @@ public: virtual bool visit(UiArrayMemberList *) { return true; } virtual bool visit(UiQualifiedId *) { return true; } virtual bool visit(UiQualifiedPragmaId *) { return true; } + virtual bool visit(UiEnumDeclaration *) { return true; } + virtual bool visit(UiEnumMemberList *) { return true; } virtual void endVisit(UiProgram *) {} virtual void endVisit(UiImport *) {} @@ -101,6 +103,8 @@ public: virtual void endVisit(UiArrayMemberList *) {} virtual void endVisit(UiQualifiedId *) {} virtual void endVisit(UiQualifiedPragmaId *) {} + virtual void endVisit(UiEnumDeclaration *) {} + virtual void endVisit(UiEnumMemberList *) { } // QQmlJS virtual bool visit(ThisExpression *) { return true; } diff --git a/src/qml/parser/qqmljsgrammar.cpp b/src/qml/parser/qqmljsgrammar.cpp index ca5a4bbd85..8e47898e2f 100644 --- a/src/qml/parser/qqmljsgrammar.cpp +++ b/src/qml/parser/qqmljsgrammar.cpp @@ -43,1069 +43,1086 @@ QT_BEGIN_NAMESPACE const char *const QQmlJSGrammar::spell [] = { - "end of file", "&", "&&", "&=", "break", "case", "catch", ":", ",", "continue", - "default", "delete", "/", "/=", "do", ".", "else", "=", "==", "===", - "finally", "for", "function", ">=", ">", ">>", ">>=", ">>>", ">>>=", "identifier", - "if", "in", "instanceof", "{", "[", "<=", "(", "<", "<<", "<<=", - "-", "-=", "--", "new", "!", "!=", "!==", "numeric literal", "|", "|=", - "||", "+", "+=", "++", "?", "}", "]", "%", "%=", "return", - ")", ";", 0, "*", "*=", "string literal", "property", "signal", "readonly", "switch", - "this", "throw", "~", "try", "typeof", "var", "void", "while", "with", "^", - "^=", "null", "true", "false", "const", "let", "debugger", "reserved word", "multiline string literal", "comment", - 0, "public", "import", "pragma", "as", "on", "get", "set", 0, 0, - 0, 0, 0, 0, 0, 0, 0}; + "end of file", "&", "&&", "&=", "break", "case", "catch", ":", ",", "continue", + "default", "delete", "/", "/=", "do", ".", "else", "=", "==", "===", + "finally", "for", "function", ">=", ">", ">>", ">>=", ">>>", ">>>=", "identifier", + "if", "in", "instanceof", "{", "[", "<=", "(", "<", "<<", "<<=", + "-", "-=", "--", "new", "!", "!=", "!==", "numeric literal", "|", "|=", + "||", "+", "+=", "++", "?", "}", "]", "%", "%=", "return", + ")", ";", 0, "*", "*=", "string literal", "property", "signal", "readonly", "switch", + "this", "throw", "~", "try", "typeof", "var", "void", "while", "with", "^", + "^=", "null", "true", "false", "const", "let", "debugger", "reserved word", "multiline string literal", "comment", + 0, "enum", "public", "import", "pragma", "as", "on", "get", "set", 0, + 0, 0, 0, 0, 0, 0, 0, 0 +}; const short QQmlJSGrammar::lhs [] = { - 107, 107, 107, 107, 107, 107, 108, 114, 114, 117, - 117, 117, 117, 120, 122, 118, 118, 119, 119, 119, - 119, 119, 119, 119, 119, 123, 124, 116, 115, 127, - 127, 128, 128, 129, 129, 126, 112, 112, 112, 112, - 131, 131, 131, 131, 131, 131, 131, 112, 139, 139, - 139, 139, 140, 140, 141, 141, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 125, 125, 125, 125, - 125, 125, 125, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 130, 146, 146, 146, 146, 145, 145, 150, 150, - 150, 148, 148, 151, 151, 151, 151, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, - 155, 121, 121, 121, 121, 121, 158, 158, 159, 159, - 159, 159, 157, 157, 160, 160, 161, 161, 162, 162, - 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 164, 164, 164, 164, 165, 165, 165, 166, 166, - 166, 166, 167, 167, 167, 167, 167, 167, 167, 168, - 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, - 170, 170, 170, 170, 170, 171, 171, 172, 172, 173, - 173, 174, 174, 175, 175, 176, 176, 177, 177, 178, - 178, 179, 179, 180, 180, 181, 181, 182, 182, 149, - 149, 183, 183, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 110, 110, 185, 185, 186, - 186, 187, 187, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 132, 196, - 196, 195, 195, 143, 143, 197, 197, 197, 198, 198, - 200, 200, 199, 201, 204, 202, 202, 205, 203, 203, - 133, 134, 134, 135, 135, 188, 188, 188, 188, 188, - 188, 188, 188, 189, 189, 189, 189, 190, 190, 190, - 190, 191, 191, 136, 137, 206, 206, 209, 209, 207, - 207, 210, 208, 192, 193, 193, 138, 138, 138, 211, - 212, 194, 194, 213, 142, 156, 156, 214, 214, 153, - 153, 152, 152, 215, 113, 113, 216, 216, 111, 111, - 147, 147, 217}; + 108, 108, 108, 108, 108, 108, 109, 115, 115, 118, + 118, 118, 118, 121, 123, 119, 119, 120, 120, 120, + 120, 120, 120, 120, 120, 124, 125, 117, 116, 128, + 128, 129, 129, 130, 130, 127, 113, 113, 113, 113, + 132, 132, 132, 132, 132, 132, 132, 113, 140, 140, + 140, 140, 141, 141, 142, 142, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 145, 145, 126, + 126, 126, 126, 126, 126, 126, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 131, 148, 148, 148, 148, 147, + 147, 152, 152, 152, 150, 150, 153, 153, 153, 153, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 157, 157, 122, 122, 122, 122, 122, + 160, 160, 161, 161, 161, 161, 159, 159, 162, 162, + 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 166, 166, 166, 166, 167, + 167, 167, 168, 168, 168, 168, 169, 169, 169, 169, + 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, + 171, 171, 171, 171, 172, 172, 172, 172, 172, 173, + 173, 174, 174, 175, 175, 176, 176, 177, 177, 178, + 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, + 183, 184, 184, 151, 151, 185, 185, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 186, 186, 111, + 111, 187, 187, 188, 188, 189, 189, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 133, 198, 198, 197, 197, 144, 144, 199, + 199, 199, 200, 200, 202, 202, 201, 203, 206, 204, + 204, 207, 205, 205, 134, 135, 135, 136, 136, 190, + 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, + 191, 192, 192, 192, 192, 193, 193, 137, 138, 208, + 208, 211, 211, 209, 209, 212, 210, 194, 195, 195, + 139, 139, 139, 213, 214, 196, 196, 215, 143, 158, + 158, 216, 216, 155, 155, 154, 154, 217, 114, 114, + 218, 218, 112, 112, 149, 149, 219 +}; const short QQmlJSGrammar::rhs [] = { - 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 1, 1, 2, 2, 2, 2, 3, - 3, 5, 5, 4, 4, 2, 2, 0, 1, 1, - 2, 1, 3, 2, 3, 2, 1, 5, 4, 4, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, - 1, 3, 0, 1, 2, 4, 6, 6, 3, 3, - 7, 7, 4, 4, 5, 5, 8, 8, 5, 6, - 6, 10, 6, 7, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 3, 4, 5, 3, 4, - 3, 1, 1, 2, 3, 4, 1, 2, 3, 7, - 8, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 4, 3, 5, 1, 2, 4, 4, - 4, 3, 0, 1, 1, 3, 1, 1, 1, 2, - 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 3, 3, 3, 1, 3, 3, 1, 3, - 3, 3, 1, 3, 3, 3, 3, 3, 3, 1, - 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, - 1, 3, 3, 3, 3, 1, 3, 1, 3, 1, - 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, - 3, 1, 3, 1, 3, 1, 5, 1, 5, 1, - 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 0, 1, 1, - 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 0, 1, 3, 3, 1, 1, 1, 1, 3, - 1, 3, 2, 2, 2, 0, 1, 2, 0, 1, - 1, 2, 2, 7, 5, 7, 7, 7, 5, 9, - 10, 7, 8, 2, 2, 3, 3, 2, 2, 3, - 3, 3, 3, 5, 5, 3, 5, 1, 2, 0, - 1, 4, 3, 3, 3, 3, 3, 3, 4, 5, - 2, 2, 2, 1, 8, 8, 7, 1, 3, 0, - 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, - 0, 1, 2}; + 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 2, 2, 1, 1, 2, 2, 2, 2, 3, + 3, 5, 5, 4, 4, 2, 2, 0, 1, 1, + 2, 1, 3, 2, 3, 2, 1, 5, 4, 4, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, + 1, 3, 0, 1, 2, 4, 6, 6, 3, 3, + 7, 7, 4, 4, 5, 5, 8, 8, 5, 6, + 6, 10, 6, 7, 1, 1, 5, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, + 5, 3, 4, 3, 1, 1, 2, 3, 4, 1, + 2, 3, 7, 8, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, 3, 5, + 1, 2, 4, 4, 4, 3, 0, 1, 1, 3, + 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 3, 3, 1, + 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, + 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, + 3, 3, 3, 3, 1, 3, 3, 3, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 5, 1, 5, 1, 3, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 0, 1, 1, 3, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 0, 1, 3, 3, 1, + 1, 1, 1, 3, 1, 3, 2, 2, 2, 0, + 1, 2, 0, 1, 1, 2, 2, 7, 5, 7, + 7, 7, 5, 9, 10, 7, 8, 2, 2, 3, + 3, 2, 2, 3, 3, 3, 3, 5, 5, 3, + 5, 1, 2, 0, 1, 4, 3, 3, 3, 3, + 3, 3, 4, 5, 2, 2, 2, 1, 8, 8, + 7, 1, 3, 0, 1, 0, 1, 1, 1, 1, + 1, 2, 1, 1, 0, 1, 2 +}; const short QQmlJSGrammar::action_default [] = { - 0, 0, 28, 0, 0, 0, 28, 0, 189, 256, - 220, 228, 224, 168, 240, 216, 3, 153, 85, 169, - 232, 236, 157, 186, 167, 172, 152, 206, 193, 0, - 92, 93, 88, 0, 82, 77, 361, 0, 0, 0, - 0, 90, 0, 0, 86, 89, 81, 0, 0, 78, - 80, 83, 79, 91, 84, 0, 87, 0, 0, 182, - 0, 0, 169, 188, 171, 170, 0, 0, 0, 184, - 185, 183, 187, 0, 217, 0, 0, 0, 0, 207, - 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 191, 192, 190, 195, 199, 198, 196, 194, 209, 208, - 210, 0, 225, 0, 221, 0, 0, 163, 150, 162, - 151, 118, 119, 120, 145, 121, 147, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 146, 133, - 134, 148, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 149, 0, 0, 161, 257, 164, 0, 165, - 0, 166, 160, 0, 253, 246, 244, 251, 252, 250, - 249, 255, 248, 247, 245, 254, 241, 0, 229, 0, - 0, 233, 0, 0, 237, 0, 0, 163, 155, 0, - 154, 0, 159, 173, 0, 350, 350, 351, 0, 348, - 0, 349, 0, 352, 264, 271, 270, 278, 266, 0, - 267, 0, 353, 0, 360, 268, 269, 85, 274, 272, - 357, 354, 359, 275, 0, 287, 0, 0, 0, 0, - 344, 0, 361, 286, 258, 301, 0, 0, 0, 288, - 0, 0, 276, 277, 0, 265, 273, 302, 303, 0, - 350, 0, 0, 352, 0, 345, 346, 0, 334, 358, - 0, 318, 319, 320, 321, 0, 314, 315, 316, 317, - 342, 343, 0, 0, 0, 0, 0, 306, 307, 308, - 262, 260, 222, 230, 226, 242, 218, 263, 0, 169, - 234, 238, 211, 200, 0, 0, 219, 0, 0, 0, - 0, 212, 0, 0, 0, 0, 0, 204, 202, 205, - 203, 201, 214, 213, 215, 0, 227, 0, 223, 0, - 261, 169, 0, 243, 258, 259, 0, 258, 0, 0, - 310, 0, 0, 0, 312, 0, 231, 0, 0, 235, - 0, 0, 239, 299, 0, 291, 300, 294, 0, 298, - 0, 258, 292, 0, 258, 0, 0, 311, 0, 0, - 0, 313, 0, 0, 0, 305, 0, 304, 85, 112, - 362, 0, 0, 117, 280, 283, 0, 118, 287, 121, - 147, 123, 124, 88, 128, 129, 82, 130, 286, 133, - 86, 89, 258, 83, 91, 136, 84, 138, 87, 140, - 141, 288, 143, 144, 149, 0, 114, 113, 116, 100, - 115, 99, 0, 109, 281, 279, 0, 0, 0, 352, - 0, 110, 157, 158, 163, 0, 156, 0, 322, 323, - 0, 350, 0, 0, 352, 0, 111, 0, 0, 0, - 325, 330, 328, 331, 0, 0, 329, 330, 0, 326, - 0, 327, 282, 333, 0, 282, 332, 0, 335, 336, - 0, 282, 337, 338, 0, 0, 339, 0, 0, 0, - 340, 341, 175, 174, 0, 0, 0, 309, 0, 0, - 0, 324, 296, 289, 0, 297, 293, 0, 295, 284, - 0, 285, 290, 0, 0, 352, 0, 347, 103, 0, - 0, 107, 94, 0, 96, 105, 0, 97, 106, 108, - 98, 104, 95, 0, 101, 179, 177, 181, 178, 176, - 180, 355, 6, 356, 4, 2, 75, 102, 0, 0, - 78, 80, 79, 37, 5, 0, 76, 0, 51, 50, - 49, 0, 0, 51, 0, 0, 0, 52, 0, 67, - 68, 0, 65, 0, 66, 41, 42, 43, 44, 46, - 47, 71, 45, 0, 51, 0, 0, 0, 0, 0, - 61, 0, 62, 0, 0, 32, 0, 0, 72, 33, - 0, 36, 34, 30, 0, 35, 31, 0, 63, 0, - 64, 157, 0, 69, 73, 0, 0, 0, 0, 157, - 282, 0, 70, 85, 118, 287, 121, 147, 123, 124, - 88, 128, 129, 130, 286, 133, 86, 89, 258, 91, - 136, 84, 138, 87, 140, 141, 288, 143, 144, 149, - 74, 0, 59, 53, 60, 54, 0, 0, 0, 0, - 56, 0, 57, 58, 55, 0, 0, 0, 0, 48, - 0, 38, 39, 0, 40, 8, 0, 0, 9, 0, - 11, 0, 10, 0, 1, 27, 15, 14, 26, 13, - 12, 29, 7, 0, 18, 0, 19, 0, 24, 25, - 0, 20, 21, 0, 22, 23, 16, 17, 363}; + 0, 0, 28, 0, 0, 0, 28, 0, 193, 260, + 224, 232, 228, 172, 244, 220, 3, 157, 88, 173, + 236, 240, 161, 190, 171, 176, 156, 210, 197, 0, + 95, 96, 91, 0, 85, 80, 365, 0, 0, 0, + 0, 93, 0, 0, 89, 92, 84, 0, 0, 81, + 83, 86, 82, 94, 87, 0, 90, 0, 0, 186, + 0, 0, 173, 192, 175, 174, 0, 0, 0, 188, + 189, 187, 191, 0, 221, 0, 0, 0, 0, 211, + 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, + 195, 196, 194, 199, 203, 202, 200, 198, 213, 212, + 214, 0, 229, 0, 225, 0, 0, 167, 154, 166, + 155, 121, 122, 123, 149, 124, 151, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 150, + 137, 138, 152, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 153, 0, 0, 165, 261, 168, 0, + 169, 0, 170, 164, 0, 257, 250, 248, 255, 256, + 254, 253, 259, 252, 251, 249, 258, 245, 0, 233, + 0, 0, 237, 0, 0, 241, 0, 0, 167, 159, + 0, 158, 0, 163, 177, 0, 354, 354, 355, 0, + 352, 0, 353, 0, 356, 268, 275, 274, 282, 270, + 0, 271, 0, 357, 0, 364, 272, 273, 88, 278, + 276, 361, 358, 363, 279, 0, 291, 0, 0, 0, + 0, 348, 0, 365, 290, 262, 305, 0, 0, 0, + 292, 0, 0, 280, 281, 0, 269, 277, 306, 307, + 0, 354, 0, 0, 356, 0, 349, 350, 0, 338, + 362, 0, 322, 323, 324, 325, 0, 318, 319, 320, + 321, 346, 347, 0, 0, 0, 0, 0, 310, 311, + 312, 266, 264, 226, 234, 230, 246, 222, 267, 0, + 173, 238, 242, 215, 204, 0, 0, 223, 0, 0, + 0, 0, 216, 0, 0, 0, 0, 0, 208, 206, + 209, 207, 205, 218, 217, 219, 0, 231, 0, 227, + 0, 265, 173, 0, 247, 262, 263, 0, 262, 0, + 0, 314, 0, 0, 0, 316, 0, 235, 0, 0, + 239, 0, 0, 243, 303, 0, 295, 304, 298, 0, + 302, 0, 262, 296, 0, 262, 0, 0, 315, 0, + 0, 0, 317, 0, 0, 0, 309, 0, 308, 88, + 115, 366, 0, 0, 120, 284, 287, 0, 121, 291, + 124, 151, 126, 127, 91, 132, 133, 85, 134, 290, + 137, 89, 92, 262, 86, 94, 140, 87, 142, 90, + 144, 145, 292, 147, 148, 153, 0, 117, 116, 119, + 103, 118, 102, 0, 112, 285, 283, 0, 0, 0, + 356, 0, 113, 161, 162, 167, 0, 160, 0, 326, + 327, 0, 354, 0, 0, 356, 0, 114, 0, 0, + 0, 329, 334, 332, 335, 0, 0, 333, 334, 0, + 330, 0, 331, 286, 337, 0, 286, 336, 0, 339, + 340, 0, 286, 341, 342, 0, 0, 343, 0, 0, + 0, 344, 345, 179, 178, 0, 0, 0, 313, 0, + 0, 0, 328, 300, 293, 0, 301, 297, 0, 299, + 288, 0, 289, 294, 0, 0, 356, 0, 351, 106, + 0, 0, 110, 97, 0, 99, 108, 0, 100, 109, + 111, 101, 107, 98, 0, 104, 183, 181, 185, 182, + 180, 184, 359, 6, 360, 4, 2, 75, 105, 0, + 0, 0, 81, 83, 82, 37, 5, 0, 76, 0, + 51, 50, 49, 0, 0, 51, 0, 0, 0, 52, + 0, 67, 68, 0, 65, 0, 66, 41, 42, 43, + 44, 46, 47, 71, 45, 0, 0, 0, 78, 0, + 77, 79, 0, 51, 0, 0, 0, 0, 0, 61, + 0, 62, 0, 0, 32, 0, 0, 72, 33, 0, + 36, 34, 30, 0, 35, 31, 0, 63, 0, 64, + 161, 0, 69, 73, 0, 0, 0, 0, 161, 286, + 0, 70, 88, 121, 291, 124, 151, 126, 127, 91, + 132, 133, 134, 290, 137, 89, 92, 262, 94, 140, + 87, 142, 90, 144, 145, 292, 147, 148, 153, 74, + 0, 59, 53, 60, 54, 0, 0, 0, 0, 56, + 0, 57, 58, 55, 0, 0, 0, 0, 48, 0, + 38, 39, 0, 40, 8, 0, 0, 9, 0, 11, + 0, 10, 0, 1, 27, 15, 14, 26, 13, 12, + 29, 7, 0, 18, 0, 19, 0, 24, 25, 0, + 20, 21, 0, 22, 23, 16, 17, 367 +}; const short QQmlJSGrammar::goto_default [] = { - 7, 654, 212, 199, 210, 524, 512, 649, 662, 511, - 648, 652, 650, 658, 22, 655, 653, 651, 18, 523, - 574, 564, 571, 566, 551, 194, 198, 200, 205, 236, - 213, 233, 555, 626, 625, 204, 235, 26, 490, 489, - 361, 360, 9, 359, 362, 203, 483, 363, 109, 17, - 148, 24, 13, 147, 19, 25, 59, 23, 8, 28, - 27, 282, 15, 276, 10, 272, 12, 274, 11, 273, - 20, 280, 21, 281, 14, 275, 271, 312, 417, 277, - 278, 206, 196, 195, 209, 208, 232, 197, 366, 365, - 234, 474, 473, 334, 335, 476, 337, 475, 336, 430, - 434, 437, 433, 432, 452, 453, 201, 187, 202, 211, - 0}; + 7, 663, 213, 200, 211, 526, 513, 658, 671, 512, + 657, 661, 659, 667, 22, 664, 662, 660, 18, 525, + 583, 573, 580, 575, 553, 195, 199, 201, 206, 237, + 214, 234, 564, 635, 634, 205, 236, 557, 26, 491, + 490, 362, 361, 9, 360, 363, 204, 484, 364, 109, + 17, 149, 24, 13, 148, 19, 25, 59, 23, 8, + 28, 27, 283, 15, 277, 10, 273, 12, 275, 11, + 274, 20, 281, 21, 282, 14, 276, 272, 313, 418, + 278, 279, 207, 197, 196, 210, 209, 233, 198, 367, + 366, 235, 475, 474, 335, 336, 477, 338, 476, 337, + 431, 435, 438, 434, 433, 453, 454, 202, 188, 203, + 212, 0 +}; const short QQmlJSGrammar::action_index [] = { - 308, 1392, 2787, 2787, 2890, 1102, 71, 6, 103, -107, - 10, -35, -64, 287, -107, 310, 11, -107, -107, 815, - 30, 112, 183, 214, -107, -107, -107, 463, 203, 1392, - -107, -107, -107, 536, -107, -107, 2478, 1786, 1392, 1392, - 1392, -107, 1005, 1392, -107, -107, -107, 1392, 1392, -107, - -107, -107, -107, -107, -107, 1392, -107, 1392, 1392, -107, - 1392, 1392, 75, 204, -107, -107, 1392, 1392, 1392, -107, - -107, -107, 221, 1392, 306, 1392, 1392, 1392, 1392, 463, - 1392, 1392, 1392, 1392, 1392, 1392, 200, 1392, 1392, 1392, - 149, 145, 108, 231, 241, 295, 379, 379, 463, 463, - 463, 1392, -70, 1392, 4, 2375, 1392, 1392, -107, -107, - -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, - -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, - -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, - -107, -107, -107, 105, 1392, -107, -107, -5, -58, -107, - 1392, -107, -107, 1392, -107, -107, -107, -107, -107, -107, - -107, -107, -107, -107, -107, -107, -107, 1392, -44, 1392, - 1392, 5, 7, 1392, -107, 2375, 1392, 1392, -107, 134, - -107, -43, -107, -107, -16, 541, 541, 15, -36, -107, - 462, -107, -4, 2787, -107, -107, -107, -107, -107, 213, - -107, 449, -107, -20, -107, -107, -107, 31, -107, -107, - -107, 2787, -107, -107, 616, -107, 711, 144, 2890, 21, - 42, 43, 3096, -107, 1392, -107, 62, 1392, 101, -107, - 102, 99, -107, -107, 417, -107, -107, -107, -107, 93, - 441, 56, 92, 2787, 34, -107, -107, 2890, -107, -107, - 118, -107, -107, -107, -107, 125, -107, -107, -107, -107, - -107, -107, -14, 33, 1392, 137, 193, -107, -107, -107, - 1488, -107, 44, -1, -42, -107, 316, -8, -60, 718, - 97, 87, 368, 222, 359, 1392, 313, 1392, 1392, 1392, - 1392, 342, 1392, 1392, 1392, 1392, 1392, 271, 270, 263, - 262, 225, 346, 352, 362, 1392, -51, 1392, 29, 1392, - -107, 815, 1392, -107, 1392, 28, -22, 1392, -19, 2890, - -107, 1392, 160, 2890, -107, 1392, 0, 1392, 1392, 97, - 45, 1392, -107, 37, 142, 25, -107, -107, 1392, -107, - 541, 1392, -107, 9, 1392, 12, 2890, -107, 1392, 128, - 2890, -107, 1392, 124, 2890, 61, 2890, -107, 60, -107, - 67, 26, 73, -107, -107, 2890, 49, 544, 80, 556, - 114, 1392, 2890, 85, 58, 482, 2581, 64, 88, 1005, - 90, 94, 1588, 2581, 96, 70, 197, 1392, 100, 76, - 1392, 104, 1392, 82, 84, 2684, -107, -107, -107, -107, - -107, -107, 1392, -107, -107, -107, 95, 63, 91, 2787, - 53, -107, 217, -107, 1392, 50, -107, 120, -107, -107, - 40, 372, 8, 27, 2787, 3, -107, 1392, 141, 20, - -107, 46, -107, 41, 147, 1392, -107, 39, 36, -107, - -15, -107, 2890, -107, 297, 2890, -107, 175, -107, -107, - 187, 2890, 14, -107, -3, -2, -107, 459, -34, -6, - -107, -107, -107, -107, 1392, 139, 2890, -107, 1392, 132, - 2890, -107, 1, -107, 251, -107, -107, 1392, -107, -107, - 541, -107, -107, -48, -23, 2787, -47, -107, -107, 113, - 1984, -107, -107, 1885, -107, -107, 1687, -107, -107, -107, - -107, -107, -107, 107, -107, -107, -107, -107, -107, -107, - -107, -107, -107, 2787, -107, -107, -107, 131, -50, 910, - 243, -45, -7, -107, -107, 232, -107, 206, -12, -107, - -107, 633, 189, -107, 198, 13, 385, -107, 153, -107, - -107, 184, -107, 2080, -107, -107, -107, -107, -107, -107, - -107, -107, -107, 208, 18, 633, 219, 129, 353, 292, - -107, 48, -107, 910, 122, -107, 81, 910, -107, -107, - 1296, -107, -107, -107, 1199, -107, -107, 224, -107, 2080, - -107, 311, 81, -107, -107, 205, 633, 98, 2176, 304, - 2993, 69, -107, 89, 613, 86, 597, 109, 1392, 2890, - 83, 55, 467, 52, 79, 804, 78, 77, 1588, 66, - 47, 59, 1392, 57, 32, 1392, 54, 1392, 38, 35, - -107, 255, -107, 228, -107, 51, 2, 524, 195, 532, - -107, 133, -107, -107, -107, 2272, 910, 1786, 17, -107, - 152, -107, -107, 16, -107, -107, 910, 910, 119, 910, - -107, 302, -107, 148, -107, -107, 143, 140, -107, -107, - -107, -107, -107, 369, -107, 249, -107, 111, -107, -107, - 364, -107, -107, 65, -107, -107, -107, -107, -107, + 301, 1388, 2901, 2901, 2797, 1095, 106, 97, 99, -108, + 92, 88, 85, 364, -108, 338, 96, -108, -108, 805, + 100, 161, 281, 247, -108, -108, -108, 394, 274, 1388, + -108, -108, -108, 516, -108, -108, 2589, 1786, 1388, 1388, + 1388, -108, 997, 1388, -108, -108, -108, 1388, 1388, -108, + -108, -108, -108, -108, -108, 1388, -108, 1388, 1388, -108, + 1388, 1388, 116, 235, -108, -108, 1388, 1388, 1388, -108, + -108, -108, 220, 1388, 326, 1388, 1388, 1388, 1388, 384, + 1388, 1388, 1388, 1388, 1388, 1388, 193, 1388, 1388, 1388, + 115, 103, 102, 211, 227, 231, 257, 230, 424, 414, + 404, 1388, 85, 1388, 78, 2381, 1388, 1388, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, 157, 1388, -108, -108, 68, 61, + -108, 1388, -108, -108, 1388, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, 1388, 59, + 1388, 1388, 71, 60, 1388, -108, 2381, 1388, 1388, -108, + 271, -108, 54, -108, -108, 53, 428, 434, 58, 51, + -108, 437, -108, 50, 2901, -108, -108, -108, -108, -108, + 232, -108, 528, -108, 48, -108, -108, -108, 55, -108, + -108, -108, 2901, -108, -108, 634, -108, 637, 101, 2797, + 56, 90, 89, 3109, -108, 1388, -108, 86, 1388, 77, + -108, 84, 82, -108, -108, 425, -108, -108, -108, -108, + 81, 346, 75, 66, 2901, 74, -108, -108, 2797, -108, + -108, 121, -108, -108, -108, -108, 117, -108, -108, -108, + -108, -108, -108, 63, 69, 1388, 108, 160, -108, -108, + -108, 1586, -108, 80, 67, 72, -108, 324, 76, 73, + 711, 83, 122, 449, 308, 411, 1388, 331, 1388, 1388, + 1388, 1388, 449, 1388, 1388, 1388, 1388, 1388, 303, 299, + 298, 284, 280, 449, 357, 449, 1388, -20, 1388, 57, + 1388, -108, 805, 1388, -108, 1388, 70, 62, 1388, 64, + 2797, -108, 1388, 204, 2797, -108, 1388, 65, 1388, 1388, + 104, 105, 1388, -108, 91, 136, 171, -108, -108, 1388, + -108, 528, 1388, -108, -6, 1388, 87, 2797, -108, 1388, + 129, 2797, -108, 1388, 125, 2797, 93, 2797, -108, 79, + -108, 22, -36, 20, -108, -108, 2797, -34, 581, 15, + 594, 113, 1388, 2797, 16, -12, 508, 2485, -11, 11, + 997, 21, 24, 1489, 2485, 25, -2, 3, 1388, 94, + -32, 1388, -4, 1388, -30, -29, 2693, -108, -108, -108, + -108, -108, -108, 1388, -108, -108, -108, -19, -9, 37, + 2901, -1, -108, 285, -108, 1388, 5, -108, 134, -108, + -108, 39, 421, 40, 44, 2901, 41, -108, 1388, 141, + 47, -108, 52, -108, 36, 206, 1388, -108, 30, 29, + -108, -16, -108, 2797, -108, 123, 2797, -108, 270, -108, + -108, 132, 2797, 18, -108, 27, 28, -108, 528, -10, + 31, -108, -108, -108, -108, 1388, 133, 2797, -108, 1388, + 124, 2797, -108, 9, -108, 209, -108, -108, 1388, -108, + -108, 445, -108, -108, 0, -17, 2901, -51, -108, -108, + 111, 1986, -108, -108, 1686, -108, -108, 1886, -108, -108, + -108, -108, -108, -108, 120, -108, -108, -108, -108, -108, + -108, -108, -108, -108, 2901, -108, -108, -108, 112, -22, + 23, 901, 216, -26, 13, -108, -108, 218, -108, 210, + 45, -108, -108, 621, 201, -108, 162, 43, 401, -108, + 144, -108, -108, 219, -108, 2277, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -31, 17, 186, -108, 19, + -108, -108, 208, 34, 621, 200, 166, 528, 228, -108, + -5, -108, 901, 190, -108, -13, 794, -108, -108, 1291, + -108, -108, -108, 1193, -108, -108, 212, -108, 2277, -108, + 352, -13, -108, -108, 185, 521, 26, 2083, 319, 3005, + 4, -108, 1, 571, 2, 700, 146, 1388, 2797, -7, + -25, 511, -24, 6, 997, 7, 8, 1489, 46, 38, + 49, 1388, 94, 12, 1388, 42, 1388, 32, 33, -108, + 277, -108, 273, -108, -3, 35, 524, 233, 621, -108, + 98, -108, -108, -108, 2180, 901, 1786, 14, -108, 153, + -108, -108, 10, -108, -108, 901, 901, 110, 901, -108, + 300, -108, 95, -108, -108, 176, 158, -108, -108, -108, + -108, -108, 528, -108, 172, -108, 109, -108, -108, 528, + -108, -108, 126, -108, -108, -108, -108, -108, - -111, 55, 62, 77, 71, 279, -7, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -74, - -111, -111, -111, -111, -111, -111, -111, -111, -111, 70, - -111, -111, -111, -8, -111, -111, -6, -28, 12, 84, - 85, -111, 93, 100, -111, -111, -111, 101, 104, -111, - -111, -111, -111, -111, -111, 107, -111, 112, 118, -111, - 182, 184, -111, -111, -111, -111, 218, 215, 209, -111, - -111, -111, -111, 202, -111, 195, 193, 192, 191, -111, - 189, 183, 181, 175, 168, 155, -111, 170, 153, 150, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, 151, -111, 142, -111, 172, 30, -4, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -2, -111, -111, -111, -111, -111, - 0, -111, -111, 9, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, 125, -111, 122, - 10, -111, -111, 22, -111, 236, 46, 127, -111, -111, - -111, -111, -111, -111, -111, 37, 124, -111, -111, -111, - 39, -111, -111, 42, -111, -111, -111, -111, -111, -111, - -111, 44, -111, -111, -111, -111, -111, -111, -111, -111, - -111, 94, -111, -111, 47, -111, 48, -111, 128, -111, - 50, -111, 91, -111, -3, -111, -111, 66, 53, -111, - -111, -111, -111, -111, 57, -111, -111, -111, -111, -111, - 79, -111, -111, 78, -111, -111, -111, 82, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, 67, -111, -111, -111, -111, -111, - 61, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, 59, 258, -111, 259, 268, 269, - 272, -111, 60, 63, 73, 74, 75, -111, -111, -111, - -111, -111, -111, -111, -111, 252, -111, 242, -111, 233, - -111, -111, 232, -111, 87, -111, -111, 89, -111, 133, - -111, 51, -111, 135, -111, 231, -111, 223, 222, -111, - -111, 221, -111, -111, -111, -111, -111, -111, 219, -111, - 92, 102, -111, -111, 110, -111, 171, -111, 40, -111, - 173, -111, 38, -111, 176, -111, 179, -111, -111, -111, - -111, -111, -111, -111, -111, 180, -111, 19, -111, 18, - -111, 145, 185, -111, -111, 17, 166, -111, -111, 65, - -111, -111, 29, 177, -111, -111, -111, 25, -111, 5, - 159, -111, 164, -111, -111, 207, -111, -111, -111, -111, - -111, -111, -18, -111, -111, -111, -111, -111, -111, 212, - -111, -111, -111, -111, 216, -111, -111, -111, -111, -111, - -111, 213, -111, -111, 86, -111, -111, 16, -111, -111, - -111, -111, -111, -85, -111, 14, -111, -84, -111, -111, - -111, -111, 286, -111, -111, 287, -111, -111, -111, -111, - -111, 214, -94, -111, -111, -16, -111, -10, -111, -19, - -111, -111, -111, -111, 2, -111, 83, -111, 105, -111, - 81, -111, -111, -111, -111, -111, -111, -41, -111, -111, - 131, -111, -111, -111, -111, 76, -111, -111, -111, -111, - -35, -111, -111, 64, -111, -111, -29, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, 208, -111, -111, -111, -111, -111, 20, - -111, -111, -111, -111, -111, -111, -111, 13, -111, -111, - -111, 26, 15, -111, -111, -111, 32, -111, -111, -111, - -111, -111, -111, 329, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, 54, 56, -111, 58, -111, - -111, -111, -111, 68, -111, -111, -111, 72, -111, -111, - 330, -111, -111, -111, 327, -111, -111, -111, -111, 389, - -111, -111, 52, -111, -111, 31, 49, -111, 371, -111, - 134, 34, -111, -111, 43, -111, 41, -111, 108, 141, - -111, -111, 35, -111, -111, 97, -111, -111, 45, -111, - -111, -111, 36, -111, 21, 129, -111, 146, -111, -111, - -111, -111, -111, -1, -111, -111, -111, 11, -5, 7, - -111, -111, -111, -111, -111, 353, 311, 408, 4, -111, - -111, -111, -111, 1, -111, -111, 8, 6, 249, 248, - -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, 3, -111, -111, -111, -111, -111, -111, - -14, -111, -111, -111, -111, -111, -111, -111, -111}; + -112, -3, 65, 88, 78, 292, -4, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -70, + -112, -112, -112, -112, -112, -112, -112, -112, -112, 70, + -112, -112, -112, 10, -112, -112, 2, -24, 15, 96, + 99, -112, 130, 103, -112, -112, -112, 48, 62, -112, + -112, -112, -112, -112, -112, 57, -112, 82, 203, -112, + 187, 181, -112, -112, -112, -112, 169, 177, 178, -112, + -112, -112, -112, 189, -112, 196, 198, 206, 161, -112, + 107, 113, 135, 116, 117, 119, -112, 125, 128, 133, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, 139, -112, 145, -112, 180, 8, -42, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, 5, -112, -112, -112, -112, + -112, 31, -112, -112, 32, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, 86, -112, + 77, 17, -112, -112, 28, -112, 273, 37, 79, -112, + -112, -112, -112, -112, -112, -112, 61, 95, -112, -112, + -112, 46, -112, -112, 58, -112, -112, -112, -112, -112, + -112, -112, 45, -112, -112, -112, -112, -112, -112, -112, + -112, -112, 131, -112, -112, 29, -112, 33, -112, 84, + -112, 39, -112, 223, -112, 42, -112, -112, 35, 16, + -112, -112, -112, -112, -112, 49, -112, -112, -112, -112, + -112, 184, -112, -112, 194, -112, -112, -112, 199, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, 19, -112, -112, -112, -112, + -112, 76, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -11, 214, -112, 215, 221, + 224, 225, -112, 92, 90, 83, 74, 73, -112, -112, + -112, -112, -112, -112, -112, -112, 237, -112, 234, -112, + 243, -112, -112, 254, -112, 67, -112, -112, 85, -112, + 167, -112, 26, -112, 219, -112, 247, -112, 244, 241, + -112, -112, 233, -112, -112, -112, -112, -112, -112, 213, + -112, 108, 183, -112, -112, 193, -112, 202, -112, 106, + -112, 209, -112, 55, -112, 317, -112, 205, -112, -112, + -112, -112, -112, -112, -112, -112, 191, -112, 59, -112, + 60, -112, 134, 179, -112, -112, 44, 160, -112, -112, + 156, -112, -112, 41, 211, -112, -112, -112, 50, -112, + 36, 192, -112, 63, -112, -112, 72, -112, -112, -112, + -112, -112, -112, 23, -112, -112, -112, -112, -112, -112, + 75, -112, -112, -112, -112, 114, -112, -112, -112, -112, + -112, -112, 64, -112, -112, 69, -112, -112, 52, -112, + -112, -112, -112, -112, -50, -112, 56, -112, -45, -112, + -112, -112, -112, 293, -112, -112, 264, -112, -112, -112, + -112, -112, 89, -64, -112, -112, 24, -112, 25, -112, + 27, -112, -112, -112, -112, 34, -112, 122, -112, 47, + -112, 66, -112, -112, -112, -112, -112, -112, 38, -112, + -112, 220, -112, -112, -112, -112, 197, -112, -112, -112, + -112, 30, -112, -112, 120, -112, -112, 3, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, 195, -112, -112, -112, -112, -112, + -112, 51, -112, -112, -112, -112, -112, -112, -112, 40, + -112, -112, -112, -15, -28, -112, -112, -112, -12, -112, + -112, -112, -112, -112, -112, 314, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, 7, 0, -112, 21, -112, -112, + -112, -112, 147, -112, -112, -112, 236, -112, -112, 324, + -112, -112, -112, 424, -112, -112, -112, -112, 360, -112, + -112, 13, -112, -112, -1, 12, -112, 338, -112, 212, + 4, -112, -112, 9, -112, -6, -112, 208, 246, -112, + -112, 6, -112, -112, 71, -112, -112, 18, -112, -112, + -112, 14, -112, -10, 53, -112, 43, -112, -112, -112, + -112, -112, -30, -112, -112, -112, -5, -18, -2, -112, + -112, -112, -112, -112, 378, 81, 311, 1, -112, -112, + -112, -112, 11, -112, -112, 20, 22, 207, 80, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -8, -112, -112, -112, -112, -112, -112, -9, + -112, -112, -112, -112, -112, -112, -112, -112 +}; const short QQmlJSGrammar::action_info [] = { - 309, 314, 152, 150, 101, 73, 678, 167, 487, 103, - 485, 73, 484, 101, 173, 103, 527, 182, 477, 144, - 186, 585, 621, 190, 192, 532, 459, 451, 307, 193, - 285, 451, 167, 457, 455, 246, 144, 307, 247, 317, - 441, 319, 537, 442, 435, 285, 435, 305, 305, 570, - 570, 435, 331, 431, 338, 556, 348, 270, 426, 628, - 424, -142, 631, 263, -139, 451, -137, 247, 423, 264, - 344, 468, 346, -115, 464, 395, 421, 356, 185, 352, - 402, 401, 563, 427, -116, -134, -146, -145, 352, 245, - -126, 270, -126, -145, 270, -146, 247, -134, 427, 325, - 352, -116, 570, -115, 405, 588, 427, -139, 411, 451, - 416, -142, 0, 144, 570, 144, 242, 64, 464, 0, - 468, 493, 0, 408, 409, 243, 675, 674, 65, 240, - 567, 407, 144, 0, 451, 468, 144, 327, 464, 0, - 144, 328, 144, 60, 535, 144, 175, 144, 60, 144, - 340, 0, 0, 558, 61, 175, 0, 438, 175, 61, - 567, 145, 169, 646, 647, 176, 170, 504, 144, 494, - 261, 260, 669, 668, 176, 261, 260, 176, 568, 254, - 253, 419, 418, 144, 354, 60, 259, 258, 350, 60, - 180, 543, 470, 454, 633, 632, 61, 266, 175, 466, - 61, 429, 439, 341, -137, 261, 260, 455, 641, 677, - 676, 646, 647, 535, 540, 539, 66, 176, 533, 177, - 323, 144, 536, 175, 533, 87, 66, 88, 87, 0, - 88, 579, 175, 66, 533, 528, 449, 448, 89, 635, - 0, 89, 176, 0, 414, 544, 542, 87, 533, 88, - 87, 176, 88, 414, 269, 267, 87, 533, 88, 480, - 89, 67, 0, 89, 530, 570, 87, 68, 88, 89, - 530, 67, 554, 0, 238, 237, 529, 68, 67, 89, - 530, 530, 529, 268, 68, 580, 578, 87, 87, 88, - 88, 623, 529, 529, 530, 87, 87, 88, 88, 561, - 89, 89, 105, 530, 445, 144, 529, 0, 89, 89, - 672, 671, 481, 479, 0, 529, 624, 622, 530, 175, - 87, 106, 88, 107, 75, 76, 175, 636, 75, 76, - 529, 287, 288, 89, 287, 288, 0, -102, 176, 0, - 177, 0, 0, 670, -102, 176, 0, 177, 0, 665, - 0, 77, 78, 562, 560, 77, 78, 0, 289, 290, - 0, 289, 290, 666, 664, 292, 293, 0, 0, 292, - 293, 0, 0, 0, 294, 292, 293, 295, 294, 296, - 0, 295, 35, 296, 294, 292, 293, 295, 35, 296, - 0, 292, 293, 35, 294, 0, 663, 295, 35, 296, - 294, 35, 0, 295, 87, 296, 88, 6, 5, 4, - 1, 3, 2, 0, 35, 0, 0, 89, 0, 49, - 52, 50, 0, 0, 0, 49, 52, 50, 0, 0, - 49, 52, 50, 0, 0, 49, 52, 50, 49, 52, - 50, 0, 0, 0, 0, 0, 35, 0, 46, 34, - 51, 49, 52, 50, 46, 34, 51, 0, 0, 46, - 34, 51, 0, 0, 46, 34, 51, 46, 34, 51, - 35, 0, 0, 0, 0, 0, 0, 0, 35, 0, - 46, 34, 51, 49, 52, 50, 80, 81, 35, 0, - 0, 35, 0, 0, 82, 83, 35, 0, 84, 0, - 85, 0, 0, 185, 0, 0, 0, 49, 52, 50, - 0, 35, 46, 34, 51, 49, 52, 50, 185, 0, - 0, 0, 0, 0, 0, 49, 52, 50, 49, 52, - 50, 0, 0, 49, 52, 50, 46, 34, 51, 535, - 0, 0, 0, 0, 46, 34, 51, 535, 49, 52, - 50, 0, 0, 35, 46, 34, 51, 46, 34, 51, - 0, 35, 46, 34, 51, 35, 0, 0, 0, 0, - 35, 0, 185, 35, 0, 0, 0, 46, 34, 51, - 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, - 49, 52, 50, 0, 0, 0, 0, 0, 49, 52, - 50, 0, 49, 52, 50, 252, 251, 49, 52, 50, - 49, 52, 50, 0, 0, 0, 0, 257, 256, 46, - 34, 51, 49, 52, 50, 0, 35, 46, 34, 51, - 0, 46, 34, 51, 0, 0, 46, 34, 51, 46, - 34, 51, 35, 0, 0, 35, 0, 0, 535, 0, - 0, 46, 34, 51, 0, 0, 0, 0, 257, 256, - 0, 0, 35, 49, 52, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 252, 251, 0, 252, 251, 49, - 52, 50, 49, 52, 50, 0, 0, 0, 0, 0, - 0, 0, 46, 34, 51, 0, 0, 0, 0, 49, - 52, 50, 0, 0, 0, 0, 0, 0, 46, 34, - 51, 46, 34, 51, 0, 0, 0, 0, 0, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 46, 34, - 51, 155, 0, 0, 0, 156, 0, 0, 0, 0, - 35, 0, 0, 0, 157, 0, 158, 0, 0, 321, - 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, - 64, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 162, 65, 257, 256, 0, 0, 163, 49, 52, 50, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, - 0, 0, 0, 0, 0, 0, 46, 34, 51, 0, - 0, 0, 0, 0, 0, 0, 30, 31, 154, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 155, 0, - 0, 0, 156, 35, 0, 0, 0, 36, 37, 0, - 38, 157, 0, 158, 0, 0, 0, 42, 0, 0, - 0, 45, 0, 0, 159, 0, 160, 64, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 162, 65, 53, - 49, 52, 50, 163, 54, 0, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 44, 56, 32, 0, 0, - 0, 0, 41, 0, 0, 165, 0, 0, 0, 46, - 34, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 35, - 0, 0, 0, 36, 37, 0, 38, 0, 0, 0, - 0, 0, 0, 519, 0, 0, 0, 45, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 53, 49, 52, 50, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 44, 56, 32, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 46, 34, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 30, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 36, 37, - 0, 38, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 49, 52, 50, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 56, 32, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, - 46, 34, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 518, 0, 30, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 0, 36, 37, 0, 38, 0, - 0, 0, 0, 0, 0, 519, 0, 0, 0, 45, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 520, 522, - 521, 0, 54, 0, 0, 0, 0, 229, 0, 0, - 0, 0, 0, 44, 56, 32, 215, 223, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 46, 34, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, - 0, 30, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 0, 0, 0, 0, 0, 0, 35, 0, - 0, 0, 36, 37, 0, 38, 0, 0, 0, 0, - 0, 0, 519, 0, 0, 0, 45, 0, 0, 0, - 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 520, 522, 521, 0, 54, - 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 44, 56, 32, 215, 223, 0, 0, 41, 0, 0, - 0, 0, 0, 0, 46, 34, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 518, 0, 30, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, - 37, 0, 38, 0, 0, 0, 0, 0, 0, 519, - 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, - 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 520, 522, 521, 0, 54, 0, 0, 0, - 0, 229, 0, 0, 0, 0, 0, 44, 56, 32, - 215, 223, 0, 0, 41, 0, 0, 0, 0, 0, - 0, 46, 34, 51, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29, 30, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 0, 36, 37, 0, 38, 0, - 0, 0, 39, 0, 40, 42, 43, 0, 0, 45, - 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 49, 52, - 50, 0, 54, 0, 55, 0, 57, 0, 58, 0, - 0, 0, 0, 44, 56, 32, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 46, 34, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, - 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 35, 0, 0, - 0, 36, 37, 0, 38, 0, 0, 0, 39, 0, - 40, 42, 43, 0, 0, 45, 0, 0, 0, 47, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 53, 49, 52, 50, 0, 54, 0, - 55, 0, 57, 284, 58, 0, 0, 0, 0, 44, - 56, 32, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 46, 34, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -135, 0, 0, 0, 29, - 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 35, 0, 0, - 0, 36, 37, 0, 38, 0, 0, 0, 39, 0, - 40, 42, 43, 0, 0, 45, 0, 0, 0, 47, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 53, 49, 52, 50, 0, 54, 0, - 55, 0, 57, 0, 58, 0, 0, 0, 0, 44, - 56, 32, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 46, 34, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 499, 0, 0, 29, 30, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, - 36, 37, 0, 38, 0, 0, 0, 39, 0, 40, - 42, 43, 0, 0, 45, 0, 0, 0, 47, 0, - 48, 0, 0, 500, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 49, 52, 50, 0, 54, 0, 55, - 0, 57, 0, 58, 0, 0, 0, 0, 44, 56, - 32, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 491, 0, 0, 29, 30, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, - 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, - 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, - 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, - 57, 0, 58, 0, 0, 0, 0, 44, 56, 32, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, - 0, 46, 34, 51, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 491, 0, 0, 29, 30, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 36, 37, - 0, 38, 0, 0, 0, 39, 0, 40, 42, 43, - 0, 0, 45, 0, 0, 0, 47, 0, 48, 0, - 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 49, 52, 50, 0, 54, 0, 55, 0, 57, - 0, 58, 0, 0, 0, 0, 44, 56, 32, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, - 46, 34, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 499, 0, 0, 29, 30, 31, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 35, 0, 0, 0, 36, 37, 0, - 38, 0, 0, 0, 39, 0, 40, 42, 43, 0, - 0, 45, 0, 0, 0, 47, 0, 48, 0, 0, - 502, 0, 0, 0, 0, 0, 0, 0, 0, 53, - 49, 52, 50, 0, 54, 0, 55, 0, 57, 0, - 58, 0, 0, 0, 0, 44, 56, 32, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 46, - 34, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 35, - 221, 0, 0, 222, 37, 0, 38, 0, 0, 0, - 39, 0, 40, 42, 43, 0, 0, 45, 0, 0, - 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 225, 0, 0, 0, 53, 49, 52, 50, 226, - 54, 0, 55, 228, 57, 0, 58, 0, 231, 0, - 0, 44, 56, 32, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 46, 34, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 35, 221, 0, 0, 590, - 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, - 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, - 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, - 0, 53, 49, 52, 50, 226, 54, 0, 55, 228, - 57, 0, 58, 0, 231, 0, 0, 44, 56, 32, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, - 0, 46, 34, 51, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29, 30, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 35, 221, 0, 0, 590, 637, 0, 38, 0, - 0, 0, 39, 0, 40, 42, 43, 0, 0, 45, - 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 225, 0, 0, 0, 53, 49, 52, - 50, 226, 54, 0, 55, 228, 57, 0, 58, 0, - 231, 0, 0, 44, 56, 32, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 46, 34, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, - 112, 113, 0, 0, 115, 117, 118, 0, 0, 119, - 0, 120, 0, 0, 0, 122, 123, 124, 0, 0, - 0, 0, 0, 0, 35, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, - 0, 49, 52, 50, 133, 134, 135, 0, 137, 138, - 139, 140, 141, 142, 0, 0, 130, 136, 121, 114, - 128, 116, 131, 0, 0, 0, 0, 0, 0, 0, - 46, 34, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 111, 112, 113, 0, 0, 115, 117, 118, - 0, 0, 119, 0, 120, 0, 0, 0, 122, 123, - 124, 0, 0, 0, 0, 0, 0, 35, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 0, 0, 0, 398, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 0, 0, 400, 49, 52, 50, 133, 134, 135, - 0, 137, 138, 139, 140, 141, 142, 0, 0, 130, - 136, 121, 114, 128, 116, 131, 0, 0, 0, 0, - 0, 0, 0, 46, 376, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 111, 112, 113, 0, 0, - 115, 117, 118, 0, 0, 119, 0, 120, 0, 0, - 0, 122, 123, 124, 0, 0, 0, 0, 0, 0, - 35, 125, 126, 127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 129, 0, 0, 0, 398, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 0, 0, 400, 49, 52, 50, - 133, 134, 135, 0, 137, 138, 139, 140, 141, 142, - 0, 0, 130, 136, 121, 114, 128, 116, 131, 0, - 0, 0, 0, 0, 0, 0, 46, 34, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 111, 112, - 113, 0, 0, 115, 117, 118, 0, 0, 119, 0, - 120, 0, 0, 0, 122, 123, 124, 0, 0, 0, - 0, 0, 0, 35, 125, 126, 127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, - 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, - 0, 0, 0, 132, 0, 0, 0, 0, 0, 400, - 49, 52, 50, 133, 134, 135, 0, 137, 138, 139, - 140, 141, 142, 0, 0, 130, 136, 121, 114, 128, - 116, 131, 0, 0, 0, 0, 0, 0, 0, 46, - 376, 383, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 214, 0, 0, 0, 0, 216, 0, 29, 30, - 31, 218, 0, 0, 0, 0, 0, 0, 219, 220, - 0, 0, 0, 0, 0, 0, 35, 221, 0, 0, - 222, 37, 0, 38, 0, 0, 0, 39, 0, 40, - 42, 43, 0, 0, 45, 0, 0, 0, 47, 0, - 48, 0, 0, 0, 0, 0, 224, 0, 225, 0, - 0, 0, 53, 49, 52, 50, 226, 54, 227, 55, - 228, 57, 229, 58, 230, 231, 0, 0, 44, 56, - 32, 215, 223, 217, 0, 41, 0, 0, 0, 0, - 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 214, 0, 0, 0, 0, 216, - 0, 29, 30, 31, 218, 0, 0, 0, 0, 0, - 0, 219, 33, 0, 0, 0, 0, 0, 0, 35, - 221, 0, 0, 222, 37, 0, 38, 0, 0, 0, - 39, 0, 40, 42, 43, 0, 0, 45, 0, 0, - 0, 47, 0, 48, 0, 0, 0, 0, 0, 224, - 0, 225, 0, 0, 0, 53, 49, 52, 50, 226, - 54, 227, 55, 228, 57, 229, 58, 230, 231, 0, - 0, 44, 56, 32, 215, 223, 217, 0, 41, 0, - 0, 0, 0, 0, 0, 46, 34, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 594, 112, 113, - 0, 0, 596, 117, 598, 30, 31, 599, 0, 120, - 0, 0, 0, 122, 601, 602, 0, 0, 0, 0, - 0, 0, 35, 603, 126, 127, 222, 37, 0, 38, - 0, 0, 0, 39, 0, 40, 605, 43, 0, 0, - 607, 0, 0, 0, 47, 0, 48, 0, 0, 0, - 0, 0, 608, 0, 225, 0, 0, 0, 609, 49, - 52, 50, 610, 611, 612, 55, 614, 615, 616, 617, - 618, 619, 0, 0, 606, 613, 600, 595, 604, 597, - 131, 41, 0, 0, 0, 0, 0, 0, 46, 376, - 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 367, 112, 113, 0, 0, 369, 117, 371, 30, 31, - 372, 0, 120, 0, 0, 0, 122, 374, 375, 0, - 0, 0, 0, 0, 0, 35, 377, 126, 127, 222, - 37, 0, 38, 0, 0, 0, 39, 0, 40, 379, - 43, 0, 0, 381, 0, 0, 0, 47, 0, 48, - 0, -282, 0, 0, 0, 382, 0, 225, 0, 0, - 0, 384, 49, 52, 50, 385, 386, 387, 55, 389, - 390, 391, 392, 393, 394, 0, 0, 380, 388, 373, - 368, 378, 370, 131, 41, 0, 0, 0, 0, 0, - 0, 46, 376, 383, 0, 0, 0, 0, 0, 0, - 0, 0, 0, + -130, 452, 556, -146, 488, 637, 465, 469, 248, -149, + -141, 271, 353, -150, -138, -119, 486, 408, -150, 402, + 579, 406, -149, -130, 271, 353, 478, 403, -138, 572, + 396, -119, -118, 597, 428, 436, 443, 579, 456, 442, + 594, 436, 630, 579, 529, 452, 558, 579, 561, -146, + 460, 409, 555, -118, 412, 345, -141, 436, 286, 308, + 485, 452, 248, 458, 452, 417, 191, 174, 465, 469, + 410, 565, 539, 168, 428, 422, 151, 425, 145, 73, + 432, 286, 534, 194, 310, 326, 248, 0, 0, 187, + 0, 0, 271, 73, 0, 640, 427, 687, 0, 244, + 424, -143, 168, 247, 145, 265, 326, 101, 339, 357, + 452, 193, 332, 306, 183, 306, 145, 241, 469, 494, + 465, 153, 428, 318, 320, 353, 186, 176, 145, 246, + 446, 145, 145, 145, 315, 243, 101, 145, 455, 60, + 264, 145, 60, 60, 341, 0, 177, 347, 0, 145, + 61, 308, 456, 61, 61, 60, 686, 685, 64, 642, + 641, 576, 262, 261, 103, 145, 61, 495, 267, 65, + 678, 677, 328, 176, 262, 261, 329, 537, 260, 259, + 505, 537, 255, 254, 471, 355, 538, 684, 683, 351, + 567, 176, 177, 467, 559, 420, 419, 342, 576, 655, + 656, 430, 349, 655, 656, 542, 541, 262, 261, 650, + 177, 170, 145, 146, 535, 171, 439, 481, 87, 588, + 88, 270, 268, 176, 0, 644, 545, 0, 0, 535, + 535, 89, 66, 681, 680, 570, 87, 0, 88, 530, + 145, 560, 177, 0, 415, 563, 577, 66, 0, 89, + 269, 579, 87, 0, 88, 87, 87, 88, 88, 66, + 532, 440, 535, 0, 324, 89, 0, 679, 89, 89, + 482, 480, 531, 589, 587, 532, 532, 67, 145, 145, + 546, 544, 87, 68, 88, 532, 0, 531, 531, 571, + 569, 532, 67, 239, 238, 89, 176, 531, 68, 87, + 176, 88, 535, 531, 67, 87, 0, 88, 532, 87, + 68, 88, 89, 632, 645, 177, 0, 178, 89, 177, + 531, 415, 89, 87, 87, 88, 88, 181, 87, 0, + 88, 450, 449, 87, 176, 88, 89, 89, 633, 631, + 0, 89, 288, 289, 75, 76, 89, 674, 532, 288, + 289, 0, -105, 177, 0, 178, 75, 76, 0, 0, + 531, 675, 673, 0, 0, 0, 0, 176, 0, 290, + 291, 77, 78, 0, 0, 35, 290, 291, 0, 105, + 293, 294, 0, 77, 78, -105, 177, 0, 178, 295, + 0, 0, 296, 0, 297, 672, 0, 0, 106, 0, + 107, 6, 5, 4, 1, 3, 2, 80, 81, 0, + 0, 0, 49, 52, 50, 82, 83, 80, 81, 84, + 0, 85, 0, 0, 0, 82, 83, 80, 81, 84, + 35, 85, 0, 0, 0, 82, 83, 80, 81, 84, + 35, 85, 46, 34, 51, 82, 83, 80, 81, 84, + 35, 85, 0, 0, 35, 82, 83, 35, 0, 84, + 0, 85, 0, 35, 0, 0, 35, 49, 52, 50, + 0, 0, 293, 294, 35, 0, 0, 49, 52, 50, + 0, 295, 0, 0, 296, 0, 297, 49, 52, 50, + 0, 49, 52, 50, 49, 52, 50, 46, 34, 51, + 49, 52, 50, 49, 52, 50, 0, 46, 34, 51, + 0, 49, 52, 50, 0, 0, 0, 46, 34, 51, + 0, 46, 34, 51, 46, 34, 51, 0, 0, 0, + 46, 34, 51, 46, 34, 51, 537, 35, 0, 537, + 35, 46, 34, 51, 186, 35, 0, 186, 0, 0, + 35, 0, 186, 35, 0, 0, 0, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 52, 50, 49, 52, 50, + 0, 0, 49, 52, 50, 0, 0, 49, 52, 50, + 49, 52, 50, 0, 49, 52, 50, 0, 0, 0, + 35, 0, 0, 0, 46, 34, 51, 46, 34, 51, + 35, 0, 46, 34, 51, 0, 0, 46, 34, 51, + 46, 34, 51, 35, 46, 34, 51, 0, 0, 0, + 0, 0, 253, 252, 0, 0, 537, 49, 52, 50, + 0, 0, 253, 252, 0, 0, 0, 49, 52, 50, + 35, 0, 0, 0, 0, 258, 257, 0, 0, 0, + 49, 52, 50, 35, 0, 0, 35, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 49, 52, 50, + 46, 34, 51, 0, 0, 253, 252, 0, 258, 257, + 49, 52, 50, 49, 52, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 155, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 156, 0, 0, 0, 157, 35, + 46, 34, 51, 46, 34, 51, 0, 158, 0, 159, + 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, + 160, 0, 161, 64, 0, 0, 0, 0, 0, 0, + 162, 258, 257, 163, 65, 0, 49, 52, 50, 164, + 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 166, 0, 0, 0, 0, 46, 34, 51, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 155, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 156, 0, + 0, 0, 157, 35, 0, 0, 0, 36, 37, 0, + 38, 158, 0, 159, 0, 0, 0, 521, 0, 0, + 0, 45, 0, 0, 160, 0, 161, 64, 0, 0, + 0, 0, 0, 0, 162, 0, 0, 163, 65, 53, + 49, 52, 50, 164, 54, 0, 0, 0, 0, 165, + 0, 0, 0, 0, 0, 44, 56, 32, 0, 0, + 0, 0, 41, 0, 0, 166, 0, 0, 0, 0, + 46, 34, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 31, 0, 0, 0, 0, 0, + 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 36, 37, 0, 38, 0, 0, + 0, 0, 0, 0, 521, 0, 0, 0, 45, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 49, 52, 50, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 56, 32, 0, 0, 0, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, + 36, 37, 0, 38, 0, 0, 0, 0, 0, 0, + 42, 0, 0, 0, 45, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 49, 52, 50, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 56, + 32, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 46, 34, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 519, 0, 30, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 0, 36, 37, + 0, 38, 0, 0, 0, 0, 0, 0, 521, 0, + 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 522, 524, 523, 0, 54, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 44, 56, 32, 216, + 224, 0, 0, 41, 0, 0, 520, 0, 0, 0, + 0, 46, 34, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 519, 0, 30, 31, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 36, 37, 0, 38, + 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 0, 0, 584, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 522, + 524, 523, 0, 54, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 44, 56, 32, 216, 224, 0, + 0, 41, 0, 0, 520, 0, 0, 0, 0, 46, + 34, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 519, 0, 30, 31, 0, 0, 0, 0, 0, + 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 36, 37, 0, 38, 0, 0, + 0, 0, 0, 0, 521, 0, 0, 0, 45, 0, + 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 522, 524, 523, + 0, 54, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 44, 56, 32, 216, 224, 0, 0, 41, + 0, 0, 520, 0, 0, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, + 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 35, 0, 0, + 0, 36, 37, 0, 38, 0, 0, 0, 39, 0, + 40, 42, 43, 0, 0, 45, 0, 0, 0, 47, + 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 53, 49, 52, 50, 0, 54, 0, + 55, 0, 57, 0, 58, 0, 0, 0, 0, 44, + 56, 32, 0, 0, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 46, 34, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -139, 0, 0, 0, + 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 0, 0, 0, 0, 0, 35, 0, + 0, 0, 36, 37, 0, 38, 0, 0, 0, 39, + 0, 40, 42, 43, 0, 0, 45, 0, 0, 0, + 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 49, 52, 50, 0, 54, + 0, 55, 0, 57, 0, 58, 0, 0, 0, 0, + 44, 56, 32, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 46, 34, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, + 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, + 57, 285, 58, 0, 0, 0, 0, 44, 56, 32, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 492, 0, 0, 29, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, + 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, + 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, + 57, 0, 58, 0, 0, 0, 0, 44, 56, 32, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 492, 0, 0, 29, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, + 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, + 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, + 57, 0, 58, 0, 0, 0, 0, 44, 56, 32, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 500, 0, 0, 29, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, + 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, + 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, + 57, 0, 58, 0, 0, 0, 0, 44, 56, 32, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 500, 0, 0, 29, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 37, 0, 38, 0, 0, 0, 39, 0, 40, 42, + 43, 0, 0, 45, 0, 0, 0, 47, 0, 48, + 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 49, 52, 50, 0, 54, 0, 55, 0, + 57, 0, 58, 0, 0, 0, 0, 44, 56, 32, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 46, 34, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 30, 31, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 35, 222, 0, 0, 599, 37, 0, 38, + 0, 0, 0, 39, 0, 40, 42, 43, 0, 0, + 45, 0, 0, 0, 47, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 226, 0, 0, 0, 53, 49, + 52, 50, 227, 54, 0, 55, 229, 57, 0, 58, + 0, 232, 0, 0, 44, 56, 32, 0, 0, 0, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 46, + 34, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29, 30, 31, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 35, + 222, 0, 0, 599, 646, 0, 38, 0, 0, 0, + 39, 0, 40, 42, 43, 0, 0, 45, 0, 0, + 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, + 0, 226, 0, 0, 0, 53, 49, 52, 50, 227, + 54, 0, 55, 229, 57, 0, 58, 0, 232, 0, + 0, 44, 56, 32, 0, 0, 0, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 46, 34, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 35, 222, 0, 0, + 223, 37, 0, 38, 0, 0, 0, 39, 0, 40, + 42, 43, 0, 0, 45, 0, 0, 0, 47, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 226, 0, + 0, 0, 53, 49, 52, 50, 227, 54, 0, 55, + 229, 57, 0, 58, 0, 232, 0, 0, 44, 56, + 32, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 46, 34, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 111, 112, 113, 0, 0, + 115, 117, 118, 0, 0, 119, 0, 120, 0, 0, + 0, 123, 124, 125, 0, 0, 0, 0, 0, 0, + 35, 126, 127, 128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 0, 0, 0, 0, 0, 0, 49, 52, 50, + 134, 135, 136, 0, 138, 139, 140, 141, 142, 143, + 0, 0, 131, 137, 122, 114, 129, 116, 132, 0, + 0, 0, 121, 0, 0, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, + 112, 113, 0, 0, 115, 117, 118, 0, 0, 119, + 0, 120, 0, 0, 0, 123, 124, 125, 0, 0, + 0, 0, 0, 0, 35, 126, 127, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, + 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, + 401, 49, 52, 50, 134, 135, 136, 0, 138, 139, + 140, 141, 142, 143, 0, 0, 131, 137, 122, 114, + 129, 116, 132, 0, 0, 0, 121, 0, 0, 0, + 0, 46, 34, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 111, 112, 113, 0, 0, 115, 117, + 118, 0, 0, 119, 0, 120, 0, 0, 0, 123, + 124, 125, 0, 0, 0, 0, 0, 0, 35, 126, + 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 399, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 0, 401, 49, 52, 50, 134, 135, + 136, 0, 138, 139, 140, 141, 142, 143, 0, 0, + 131, 137, 122, 114, 129, 116, 132, 0, 0, 0, + 121, 0, 0, 0, 0, 46, 377, 384, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 111, 112, 113, + 0, 0, 115, 117, 118, 0, 0, 119, 0, 120, + 0, 0, 0, 123, 124, 125, 0, 0, 0, 0, + 0, 0, 35, 126, 127, 128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, + 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, + 0, 0, 133, 0, 0, 0, 0, 0, 401, 49, + 52, 50, 134, 135, 136, 0, 138, 139, 140, 141, + 142, 143, 0, 0, 131, 137, 122, 114, 129, 116, + 132, 0, 0, 0, 121, 0, 0, 0, 0, 46, + 377, 384, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 215, 0, 0, 0, 0, 217, 0, 29, 30, + 31, 219, 0, 0, 0, 0, 0, 0, 220, 33, + 0, 0, 0, 0, 0, 0, 35, 222, 0, 0, + 223, 37, 0, 38, 0, 0, 0, 39, 0, 40, + 42, 43, 0, 0, 45, 0, 0, 0, 47, 0, + 48, 0, 0, 0, 0, 0, 225, 0, 226, 0, + 0, 0, 53, 49, 52, 50, 227, 54, 228, 55, + 229, 57, 230, 58, 231, 232, 0, 0, 44, 56, + 32, 216, 224, 218, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 46, 34, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, + 217, 0, 29, 30, 31, 219, 0, 0, 0, 0, + 0, 0, 220, 221, 0, 0, 0, 0, 0, 0, + 35, 222, 0, 0, 223, 37, 0, 38, 0, 0, + 0, 39, 0, 40, 42, 43, 0, 0, 45, 0, + 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, + 225, 0, 226, 0, 0, 0, 53, 49, 52, 50, + 227, 54, 228, 55, 229, 57, 230, 58, 231, 232, + 0, 0, 44, 56, 32, 216, 224, 218, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 46, 34, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, + 112, 113, 0, 0, 605, 117, 607, 30, 31, 608, + 0, 120, 0, 0, 0, 123, 610, 611, 0, 0, + 0, 0, 0, 0, 35, 612, 127, 128, 223, 37, + 0, 38, 0, 0, 0, 39, 0, 40, 614, 43, + 0, 0, 616, 0, 0, 0, 47, 0, 48, 0, + 0, 0, 0, 0, 617, 0, 226, 0, 0, 0, + 618, 49, 52, 50, 619, 620, 621, 55, 623, 624, + 625, 626, 627, 628, 0, 0, 615, 622, 609, 604, + 613, 606, 132, 41, 0, 0, 121, 0, 0, 0, + 0, 46, 377, 384, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 368, 112, 113, 0, 0, 370, 117, + 372, 30, 31, 373, 0, 120, 0, 0, 0, 123, + 375, 376, 0, 0, 0, 0, 0, 0, 35, 378, + 127, 128, 223, 37, 0, 38, 0, 0, 0, 39, + 0, 40, 380, 43, 0, 0, 382, 0, 0, 0, + 47, 0, 48, 0, -286, 0, 0, 0, 383, 0, + 226, 0, 0, 0, 385, 49, 52, 50, 386, 387, + 388, 55, 390, 391, 392, 393, 394, 395, 0, 0, + 381, 389, 374, 369, 379, 371, 132, 41, 0, 0, + 121, 0, 0, 0, 0, 46, 377, 384, 0, 0, + 0, 0, 0, 0, 0, 0, 0, - 315, 478, 645, 153, 673, 465, 460, 501, 458, 461, - 184, 456, 396, 498, 488, 503, 440, 444, 436, 428, - 657, 667, 656, 644, 403, 630, 642, 629, 447, 634, - 450, 627, 315, 143, 553, 184, 255, 250, 149, 447, - 146, 353, 151, 349, 541, 531, 450, 534, 315, 179, - 538, 166, 172, 184, 322, 189, 620, 191, 16, 255, - 207, 250, 239, 586, 174, 250, 255, 587, 184, 447, - 265, 0, 577, 515, 584, 472, 559, 333, 450, 412, - 207, 514, 517, 471, 248, 467, 517, 565, 557, 207, - 315, 569, 315, 364, 207, 207, 207, 189, 249, 207, - 207, 207, 496, 0, 207, 315, 495, 412, 469, 358, - 333, 412, 207, 315, 62, 279, 413, 62, 0, 297, - 283, 486, 298, 244, 62, 241, 183, 62, 62, 62, - 262, 425, 299, 300, 301, 320, 364, 324, 62, 62, - 505, 506, 189, 262, 413, 0, 207, 0, 413, 472, - 0, 207, 593, 207, 62, 62, 507, 508, 62, 207, - 509, 62, 62, 510, 183, 316, 62, 318, 462, 149, - 188, 513, 62, 347, 463, 351, 62, 181, 355, 62, - 343, 357, 404, 62, 396, 462, 342, 262, 345, 207, - 108, 207, 171, 168, 207, 396, 62, 207, 207, 62, - 62, 183, 463, 207, 62, 62, 104, 62, 92, 62, - 406, 91, 249, 62, 97, 462, 364, 102, 62, 110, - 463, 420, 62, 482, 62, 396, 207, 96, 90, 62, - 207, 189, 207, 0, 95, 62, 62, 62, 62, 63, - 94, 72, 93, 62, 0, 62, 62, 62, 86, 62, - 397, 100, 99, 98, 108, 79, 62, 410, 149, 422, - 660, 659, 517, 62, 74, 71, 415, 661, 0, 62, - 0, 70, 62, 311, 69, 311, 311, 62, 283, 0, - 283, 283, 283, 110, 178, 62, 311, 311, 364, 364, - 283, 283, 283, 517, 329, 339, 62, 332, 330, 0, - 326, 283, 525, 0, 207, 207, 62, 308, 313, 310, - 0, 283, 62, 62, 516, 526, 0, 283, 283, 306, - 291, 286, 62, 62, 0, 517, 62, 283, 283, 302, - 303, 283, 576, 304, 643, 573, 0, 0, 0, 0, - 0, 517, 0, 0, 517, 0, 0, 0, 0, 0, - 525, 0, 0, 525, 545, 546, 547, 548, 552, 549, - 550, 0, 516, 526, 0, 516, 526, 589, 0, 0, - 0, 0, 0, 0, 443, 446, 638, 639, 545, 546, - 547, 548, 552, 549, 550, 589, 0, 0, 0, 0, - 0, 0, 0, 0, 591, 592, 545, 546, 547, 548, - 552, 549, 550, 581, 0, 0, 0, 0, 0, 0, - 0, 0, 582, 583, 545, 546, 547, 548, 552, 549, - 550, 0, 581, 0, 0, 0, 0, 565, 0, 640, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0}; + 16, 150, 636, 543, 536, 654, 540, 334, 154, 682, + 676, 144, 256, 643, 638, 451, 639, 448, 504, 489, + 397, 316, 266, 651, 185, 586, 629, 251, 185, 323, + 596, 595, 566, 653, 665, 593, 666, 466, 448, 568, + 180, 451, 457, 459, 316, 316, 499, 251, 147, 462, + 470, 256, 461, 448, 437, 429, 441, 185, 354, 445, + 173, 451, 185, 240, 192, 562, 404, 473, 472, 0, + 316, 175, 533, 502, 152, 167, 208, 251, 256, 190, + 516, 479, 190, 208, 208, 413, 263, 208, 316, 0, + 397, 365, 515, 208, 518, 518, 208, 0, 62, 670, + 464, 0, 208, 62, 652, 509, 208, 208, 62, 350, + 463, 423, 62, 190, 511, 426, 398, 62, 62, 510, + 464, 411, 150, 414, 468, 62, 334, 184, 62, 62, + 182, 280, 62, 302, 301, 250, 284, 62, 62, 463, + 208, 62, 189, 300, 413, 62, 317, 62, 172, 208, + 299, 62, 298, 506, 62, 169, 507, 150, 62, 497, + 508, 518, 62, 496, 319, 416, 574, 86, 62, 321, + 413, 62, 62, 93, 62, 514, 95, 96, 397, 97, + 62, 263, 414, 62, 90, 208, 316, 91, 62, 62, + 62, 184, 92, 405, 62, 94, 316, 208, 108, 250, + 62, 249, 190, 343, 348, 407, 102, 358, 414, 208, + 104, 352, 208, 208, 365, 208, 62, 208, 669, 668, + 208, 325, 100, 208, 62, 365, 69, 208, 110, 397, + 602, 242, 62, 62, 70, 71, 62, 208, 473, 72, + 245, 359, 62, 487, 62, 63, 0, 62, 263, 463, + 518, 62, 74, 62, 0, 578, 421, 79, 62, 98, + 464, 62, 344, 62, 208, 184, 365, 99, 312, 62, + 62, 0, 346, 284, 284, 284, 62, 292, 287, 62, + 62, 284, 208, 303, 284, 284, 304, 305, 312, 62, + 340, 108, 62, 284, 284, 365, 312, 284, 312, 62, + 309, 284, 62, 284, 284, 307, 518, 284, 0, 312, + 333, 208, 0, 483, 284, 527, 330, 327, 331, 356, + 311, 110, 179, 0, 0, 590, 0, 517, 528, 582, + 574, 314, 649, 0, 0, 208, 0, 0, 518, 547, + 548, 549, 550, 554, 551, 552, 0, 527, 0, 0, + 0, 0, 598, 447, 489, 0, 0, 0, 0, 517, + 528, 600, 601, 547, 548, 549, 550, 554, 551, 552, + 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, + 0, 0, 444, 591, 592, 547, 548, 549, 550, 554, + 551, 552, 598, 0, 0, 0, 0, 0, 0, 0, + 0, 647, 648, 547, 548, 549, 550, 554, 551, 552, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, + 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, + 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, + 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 +}; const short QQmlJSGrammar::action_check [] = { - 8, 61, 60, 8, 48, 1, 0, 2, 55, 79, - 33, 1, 60, 48, 7, 79, 66, 60, 17, 8, - 36, 66, 29, 8, 60, 37, 60, 33, 79, 33, - 1, 33, 2, 36, 20, 55, 8, 79, 7, 61, - 55, 60, 29, 7, 5, 1, 5, 48, 48, 33, - 33, 5, 7, 33, 17, 37, 31, 36, 55, 8, - 33, 7, 60, 77, 7, 33, 7, 7, 60, 36, - 61, 36, 60, 7, 36, 8, 36, 16, 36, 36, - 7, 55, 34, 36, 7, 7, 7, 7, 36, 55, - 7, 36, 7, 7, 36, 7, 7, 7, 36, 2, - 36, 7, 33, 7, 55, 7, 36, 7, 55, 33, - 60, 7, -1, 8, 33, 8, 60, 42, 36, -1, - 36, 8, -1, 60, 33, 33, 61, 62, 53, 36, - 8, 36, 8, -1, 33, 36, 8, 50, 36, -1, - 8, 54, 8, 40, 15, 8, 15, 8, 40, 8, - 8, -1, -1, 24, 51, 15, -1, 10, 15, 51, - 8, 56, 50, 92, 93, 34, 54, 60, 8, 56, - 61, 62, 61, 62, 34, 61, 62, 34, 56, 61, - 62, 61, 62, 8, 60, 40, 61, 62, 60, 40, - 56, 7, 60, 6, 61, 62, 51, 60, 15, 60, - 51, 60, 55, 61, 7, 61, 62, 20, 56, 61, - 62, 92, 93, 15, 61, 62, 12, 34, 29, 36, - 60, 8, 24, 15, 29, 25, 12, 27, 25, -1, - 27, 7, 15, 12, 29, 29, 61, 62, 38, 7, - -1, 38, 34, -1, 36, 61, 62, 25, 29, 27, - 25, 34, 27, 36, 61, 62, 25, 29, 27, 8, - 38, 57, -1, 38, 75, 33, 25, 63, 27, 38, - 75, 57, 29, -1, 61, 62, 87, 63, 57, 38, - 75, 75, 87, 90, 63, 61, 62, 25, 25, 27, - 27, 36, 87, 87, 75, 25, 25, 27, 27, 7, - 38, 38, 15, 75, 7, 8, 87, -1, 38, 38, - 61, 62, 61, 62, -1, 87, 61, 62, 75, 15, - 25, 34, 27, 36, 18, 19, 15, 95, 18, 19, - 87, 18, 19, 38, 18, 19, -1, 33, 34, -1, - 36, -1, -1, 94, 33, 34, -1, 36, -1, 47, - -1, 45, 46, 61, 62, 45, 46, -1, 45, 46, - -1, 45, 46, 61, 62, 23, 24, -1, -1, 23, - 24, -1, -1, -1, 32, 23, 24, 35, 32, 37, - -1, 35, 29, 37, 32, 23, 24, 35, 29, 37, - -1, 23, 24, 29, 32, -1, 94, 35, 29, 37, - 32, 29, -1, 35, 25, 37, 27, 99, 100, 101, - 102, 103, 104, -1, 29, -1, -1, 38, -1, 66, - 67, 68, -1, -1, -1, 66, 67, 68, -1, -1, - 66, 67, 68, -1, -1, 66, 67, 68, 66, 67, - 68, -1, -1, -1, -1, -1, 29, -1, 95, 96, - 97, 66, 67, 68, 95, 96, 97, -1, -1, 95, - 96, 97, -1, -1, 95, 96, 97, 95, 96, 97, - 29, -1, -1, -1, -1, -1, -1, -1, 29, -1, - 95, 96, 97, 66, 67, 68, 23, 24, 29, -1, - -1, 29, -1, -1, 31, 32, 29, -1, 35, -1, - 37, -1, -1, 36, -1, -1, -1, 66, 67, 68, - -1, 29, 95, 96, 97, 66, 67, 68, 36, -1, - -1, -1, -1, -1, -1, 66, 67, 68, 66, 67, - 68, -1, -1, 66, 67, 68, 95, 96, 97, 15, - -1, -1, -1, -1, 95, 96, 97, 15, 66, 67, - 68, -1, -1, 29, 95, 96, 97, 95, 96, 97, - -1, 29, 95, 96, 97, 29, -1, -1, -1, -1, - 29, -1, 36, 29, -1, -1, -1, 95, 96, 97, - -1, -1, -1, -1, -1, 29, -1, -1, -1, -1, - 66, 67, 68, -1, -1, -1, -1, -1, 66, 67, - 68, -1, 66, 67, 68, 61, 62, 66, 67, 68, - 66, 67, 68, -1, -1, -1, -1, 61, 62, 95, - 96, 97, 66, 67, 68, -1, 29, 95, 96, 97, - -1, 95, 96, 97, -1, -1, 95, 96, 97, 95, - 96, 97, 29, -1, -1, 29, -1, -1, 15, -1, - -1, 95, 96, 97, -1, -1, -1, -1, 61, 62, - -1, -1, 29, 66, 67, 68, -1, -1, -1, -1, - -1, -1, -1, -1, 61, 62, -1, 61, 62, 66, - 67, 68, 66, 67, 68, -1, -1, -1, -1, -1, - -1, -1, 95, 96, 97, -1, -1, -1, -1, 66, - 67, 68, -1, -1, -1, -1, -1, -1, 95, 96, - 97, 95, 96, 97, -1, -1, -1, -1, -1, -1, - -1, 3, -1, -1, -1, -1, -1, -1, 95, 96, - 97, 13, -1, -1, -1, 17, -1, -1, -1, -1, - 29, -1, -1, -1, 26, -1, 28, -1, -1, 31, - -1, -1, -1, -1, -1, -1, -1, 39, -1, 41, - 42, -1, -1, -1, -1, -1, -1, 49, -1, -1, - 52, 53, 61, 62, -1, -1, 58, 66, 67, 68, - -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 80, -1, - -1, -1, -1, -1, -1, -1, 95, 96, 97, -1, - -1, -1, -1, -1, -1, -1, 12, 13, 3, -1, - -1, -1, -1, -1, -1, -1, 22, -1, 13, -1, - -1, -1, 17, 29, -1, -1, -1, 33, 34, -1, - 36, 26, -1, 28, -1, -1, -1, 43, -1, -1, - -1, 47, -1, -1, 39, -1, 41, 42, -1, -1, - -1, -1, -1, -1, 49, -1, -1, 52, 53, 65, - 66, 67, 68, 58, 70, -1, -1, -1, -1, 64, - -1, -1, -1, -1, -1, 81, 82, 83, -1, -1, - -1, -1, 88, -1, -1, 80, -1, -1, -1, 95, - 96, 97, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 12, 13, -1, -1, -1, -1, -1, -1, - -1, -1, 22, -1, -1, -1, -1, -1, -1, 29, - -1, -1, -1, 33, 34, -1, 36, -1, -1, -1, - -1, -1, -1, 43, -1, -1, -1, 47, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 65, 66, 67, 68, -1, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, 82, 83, -1, -1, -1, -1, 88, -1, - -1, -1, -1, -1, -1, 95, 96, 97, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, - -1, -1, -1, -1, 29, -1, -1, -1, 33, 34, - -1, 36, -1, -1, -1, -1, -1, -1, 43, -1, - -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 65, 66, 67, 68, -1, 70, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 81, 82, 83, -1, - -1, -1, -1, 88, -1, -1, -1, -1, -1, -1, - 95, 96, 97, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 10, -1, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, - -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, - -1, -1, -1, -1, -1, 43, -1, -1, -1, 47, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, -1, 70, -1, -1, -1, -1, 75, -1, -1, - -1, -1, -1, 81, 82, 83, 84, 85, -1, -1, - 88, -1, -1, -1, -1, -1, -1, 95, 96, 97, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, - -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, - -1, 22, -1, -1, -1, -1, -1, -1, 29, -1, - -1, -1, 33, 34, -1, 36, -1, -1, -1, -1, - -1, -1, 43, -1, -1, -1, 47, -1, -1, -1, - -1, -1, -1, -1, 55, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 65, 66, 67, 68, -1, 70, - -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, - 81, 82, 83, 84, 85, -1, -1, 88, -1, -1, - -1, -1, -1, -1, 95, 96, 97, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, -1, -1, -1, 43, - -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, - -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, 68, -1, 70, -1, -1, -1, - -1, 75, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, -1, -1, 88, -1, -1, -1, -1, -1, - -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, - -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, - -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, - -1, -1, -1, 51, -1, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, -1, 70, -1, 72, -1, 74, -1, 76, -1, - -1, -1, -1, 81, 82, 83, -1, -1, -1, -1, - 88, -1, -1, -1, -1, -1, -1, 95, 96, 97, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, - -1, 33, 34, -1, 36, -1, -1, -1, 40, -1, - 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, - -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 65, 66, 67, 68, -1, 70, -1, - 72, -1, 74, 75, 76, -1, -1, -1, -1, 81, - 82, 83, -1, -1, -1, -1, 88, -1, -1, -1, - -1, -1, -1, 95, 96, 97, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 7, -1, -1, -1, 11, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, - -1, 33, 34, -1, 36, -1, -1, -1, 40, -1, - 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, - -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 65, 66, 67, 68, -1, 70, -1, - 72, -1, 74, -1, 76, -1, -1, -1, -1, 81, - 82, 83, -1, -1, -1, -1, 88, -1, -1, -1, - -1, -1, -1, 95, 96, 97, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 8, -1, -1, 11, 12, - 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, - -1, -1, -1, -1, -1, -1, 29, -1, -1, -1, - 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, - 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, - 53, -1, -1, 56, -1, -1, -1, -1, -1, -1, - -1, -1, 65, 66, 67, 68, -1, 70, -1, 72, - -1, 74, -1, 76, -1, -1, -1, -1, 81, 82, - 83, -1, -1, -1, -1, 88, -1, -1, -1, -1, - -1, -1, 95, 96, 97, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, - 74, -1, 76, -1, -1, -1, -1, 81, 82, 83, - -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, - -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 8, -1, -1, 11, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, - -1, -1, -1, -1, 29, -1, -1, -1, 33, 34, - -1, 36, -1, -1, -1, 40, -1, 42, 43, 44, - -1, -1, 47, -1, -1, -1, 51, -1, 53, -1, - -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, - 65, 66, 67, 68, -1, 70, -1, 72, -1, 74, - -1, 76, -1, -1, -1, -1, 81, 82, 83, -1, - -1, -1, -1, 88, -1, -1, -1, -1, -1, -1, - 95, 96, 97, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 8, -1, -1, 11, 12, 13, -1, -1, - -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, - -1, -1, -1, 29, -1, -1, -1, 33, 34, -1, - 36, -1, -1, -1, 40, -1, 42, 43, 44, -1, - -1, 47, -1, -1, -1, 51, -1, 53, -1, -1, - 56, -1, -1, -1, -1, -1, -1, -1, -1, 65, - 66, 67, 68, -1, 70, -1, 72, -1, 74, -1, - 76, -1, -1, -1, -1, 81, 82, 83, -1, -1, - -1, -1, 88, -1, -1, -1, -1, -1, -1, 95, - 96, 97, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, - -1, -1, 22, -1, -1, -1, -1, -1, -1, 29, - 30, -1, -1, 33, 34, -1, 36, -1, -1, -1, - 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, - -1, 51, -1, 53, -1, -1, -1, -1, -1, -1, - -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, - 70, -1, 72, 73, 74, -1, 76, -1, 78, -1, - -1, 81, 82, 83, -1, -1, -1, -1, 88, -1, - -1, -1, -1, -1, -1, 95, 96, 97, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, 30, -1, -1, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, - -1, 65, 66, 67, 68, 69, 70, -1, 72, 73, - 74, -1, 76, -1, 78, -1, -1, 81, 82, 83, - -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, - -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, - -1, 29, 30, -1, -1, 33, 34, -1, 36, -1, - -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, - -1, -1, -1, 51, -1, 53, -1, -1, -1, -1, - -1, -1, -1, 61, -1, -1, -1, 65, 66, 67, - 68, 69, 70, -1, 72, 73, 74, -1, 76, -1, - 78, -1, -1, 81, 82, 83, -1, -1, -1, -1, - 88, -1, -1, -1, -1, -1, -1, 95, 96, 97, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, - 5, 6, -1, -1, 9, 10, 11, -1, -1, 14, - -1, 16, -1, -1, -1, 20, 21, 22, -1, -1, - -1, -1, -1, -1, 29, 30, 31, 32, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, - -1, 66, 67, 68, 69, 70, 71, -1, 73, 74, - 75, 76, 77, 78, -1, -1, 81, 82, 83, 84, - 85, 86, 87, -1, -1, -1, -1, -1, -1, -1, - 95, 96, 97, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, - -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, - 22, -1, -1, -1, -1, -1, -1, 29, 30, 31, - 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 43, -1, -1, -1, 47, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, 65, 66, 67, 68, 69, 70, 71, - -1, 73, 74, 75, 76, 77, 78, -1, -1, 81, - 82, 83, 84, 85, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, 97, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4, 5, 6, -1, -1, - 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, - -1, 20, 21, 22, -1, -1, -1, -1, -1, -1, - 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 43, -1, -1, -1, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, 65, 66, 67, 68, - 69, 70, 71, -1, 73, 74, 75, 76, 77, 78, - -1, -1, 81, 82, 83, 84, 85, 86, 87, -1, - -1, -1, -1, -1, -1, -1, 95, 96, 97, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, - 6, -1, -1, 9, 10, 11, -1, -1, 14, -1, - 16, -1, -1, -1, 20, 21, 22, -1, -1, -1, - -1, -1, -1, 29, 30, 31, 32, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, - -1, 47, -1, -1, -1, -1, -1, -1, -1, 55, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - 66, 67, 68, 69, 70, 71, -1, 73, 74, 75, - 76, 77, 78, -1, -1, 81, 82, 83, 84, 85, - 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, - 96, 97, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4, -1, -1, -1, -1, 9, -1, 11, 12, - 13, 14, -1, -1, -1, -1, -1, -1, 21, 22, - -1, -1, -1, -1, -1, -1, 29, 30, -1, -1, - 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, - 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, - 53, -1, -1, -1, -1, -1, 59, -1, 61, -1, - -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, - 83, 84, 85, 86, -1, 88, -1, -1, -1, -1, - -1, -1, 95, 96, 97, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4, -1, -1, -1, -1, 9, - -1, 11, 12, 13, 14, -1, -1, -1, -1, -1, - -1, 21, 22, -1, -1, -1, -1, -1, -1, 29, - 30, -1, -1, 33, 34, -1, 36, -1, -1, -1, - 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, - -1, 51, -1, 53, -1, -1, -1, -1, -1, 59, - -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, 83, 84, 85, 86, -1, 88, -1, - -1, -1, -1, -1, -1, 95, 96, 97, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, - -1, -1, 9, 10, 11, 12, 13, 14, -1, 16, - -1, -1, -1, 20, 21, 22, -1, -1, -1, -1, - -1, -1, 29, 30, 31, 32, 33, 34, -1, 36, - -1, -1, -1, 40, -1, 42, 43, 44, -1, -1, - 47, -1, -1, -1, 51, -1, 53, -1, -1, -1, - -1, -1, 59, -1, 61, -1, -1, -1, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, -1, -1, 81, 82, 83, 84, 85, 86, - 87, 88, -1, -1, -1, -1, -1, -1, 95, 96, - 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4, 5, 6, -1, -1, 9, 10, 11, 12, 13, - 14, -1, 16, -1, -1, -1, 20, 21, 22, -1, - -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, 55, -1, -1, -1, 59, -1, 61, -1, -1, - -1, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, -1, -1, -1, -1, -1, - -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, - -1, -1, -1, + 7, 33, 33, 7, 55, 8, 36, 36, 7, 7, + 7, 36, 36, 7, 7, 7, 33, 36, 7, 55, + 33, 55, 7, 7, 36, 36, 17, 7, 7, 34, + 8, 7, 7, 7, 36, 5, 7, 33, 20, 55, + 66, 5, 29, 33, 66, 33, 29, 33, 29, 7, + 60, 60, 29, 7, 55, 61, 7, 5, 1, 79, + 60, 33, 7, 36, 33, 60, 8, 7, 36, 36, + 33, 37, 29, 2, 36, 36, 8, 33, 8, 1, + 33, 1, 37, 33, 8, 2, 7, -1, -1, 36, + -1, -1, 36, 1, -1, 60, 55, 0, -1, 33, + 60, 7, 2, 55, 8, 36, 2, 48, 17, 16, + 33, 60, 7, 48, 60, 48, 8, 36, 36, 8, + 36, 60, 36, 61, 60, 36, 36, 15, 8, 55, + 7, 8, 8, 8, 61, 60, 48, 8, 6, 40, + 77, 8, 40, 40, 8, -1, 34, 60, -1, 8, + 51, 79, 20, 51, 51, 40, 61, 62, 42, 61, + 62, 8, 61, 62, 79, 8, 51, 56, 60, 53, + 61, 62, 50, 15, 61, 62, 54, 15, 61, 62, + 60, 15, 61, 62, 60, 60, 24, 61, 62, 60, + 24, 15, 34, 60, 8, 61, 62, 61, 8, 93, + 94, 60, 31, 93, 94, 61, 62, 61, 62, 56, + 34, 50, 8, 56, 29, 54, 10, 8, 25, 7, + 27, 61, 62, 15, -1, 7, 7, -1, -1, 29, + 29, 38, 12, 61, 62, 7, 25, -1, 27, 29, + 8, 55, 34, -1, 36, 29, 56, 12, -1, 38, + 90, 33, 25, -1, 27, 25, 25, 27, 27, 12, + 75, 55, 29, -1, 60, 38, -1, 95, 38, 38, + 61, 62, 87, 61, 62, 75, 75, 57, 8, 8, + 61, 62, 25, 63, 27, 75, -1, 87, 87, 61, + 62, 75, 57, 61, 62, 38, 15, 87, 63, 25, + 15, 27, 29, 87, 57, 25, -1, 27, 75, 25, + 63, 27, 38, 36, 96, 34, -1, 36, 38, 34, + 87, 36, 38, 25, 25, 27, 27, 56, 25, -1, + 27, 61, 62, 25, 15, 27, 38, 38, 61, 62, + -1, 38, 18, 19, 18, 19, 38, 47, 75, 18, + 19, -1, 33, 34, -1, 36, 18, 19, -1, -1, + 87, 61, 62, -1, -1, -1, -1, 15, -1, 45, + 46, 45, 46, -1, -1, 29, 45, 46, -1, 15, + 23, 24, -1, 45, 46, 33, 34, -1, 36, 32, + -1, -1, 35, -1, 37, 95, -1, -1, 34, -1, + 36, 100, 101, 102, 103, 104, 105, 23, 24, -1, + -1, -1, 66, 67, 68, 31, 32, 23, 24, 35, + -1, 37, -1, -1, -1, 31, 32, 23, 24, 35, + 29, 37, -1, -1, -1, 31, 32, 23, 24, 35, + 29, 37, 96, 97, 98, 31, 32, 23, 24, 35, + 29, 37, -1, -1, 29, 31, 32, 29, -1, 35, + -1, 37, -1, 29, -1, -1, 29, 66, 67, 68, + -1, -1, 23, 24, 29, -1, -1, 66, 67, 68, + -1, 32, -1, -1, 35, -1, 37, 66, 67, 68, + -1, 66, 67, 68, 66, 67, 68, 96, 97, 98, + 66, 67, 68, 66, 67, 68, -1, 96, 97, 98, + -1, 66, 67, 68, -1, -1, -1, 96, 97, 98, + -1, 96, 97, 98, 96, 97, 98, -1, -1, -1, + 96, 97, 98, 96, 97, 98, 15, 29, -1, 15, + 29, 96, 97, 98, 36, 29, -1, 36, -1, -1, + 29, -1, 36, 29, -1, -1, -1, 29, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 66, 67, 68, 66, 67, 68, + -1, -1, 66, 67, 68, -1, -1, 66, 67, 68, + 66, 67, 68, -1, 66, 67, 68, -1, -1, -1, + 29, -1, -1, -1, 96, 97, 98, 96, 97, 98, + 29, -1, 96, 97, 98, -1, -1, 96, 97, 98, + 96, 97, 98, 29, 96, 97, 98, -1, -1, -1, + -1, -1, 61, 62, -1, -1, 15, 66, 67, 68, + -1, -1, 61, 62, -1, -1, -1, 66, 67, 68, + 29, -1, -1, -1, -1, 61, 62, -1, -1, -1, + 66, 67, 68, 29, -1, -1, 29, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, + 96, 97, 98, -1, -1, 61, 62, -1, 61, 62, + 66, 67, 68, 66, 67, 68, -1, -1, -1, -1, + -1, -1, -1, -1, 3, -1, -1, 96, 97, 98, + -1, -1, -1, -1, 13, -1, -1, -1, 17, 29, + 96, 97, 98, 96, 97, 98, -1, 26, -1, 28, + -1, -1, 31, -1, -1, -1, -1, -1, -1, -1, + 39, -1, 41, 42, -1, -1, -1, -1, -1, -1, + 49, 61, 62, 52, 53, -1, 66, 67, 68, 58, + -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 80, -1, -1, -1, -1, 96, 97, 98, -1, + -1, -1, -1, -1, -1, -1, 12, 13, 3, -1, + -1, -1, -1, -1, -1, -1, 22, -1, 13, -1, + -1, -1, 17, 29, -1, -1, -1, 33, 34, -1, + 36, 26, -1, 28, -1, -1, -1, 43, -1, -1, + -1, 47, -1, -1, 39, -1, 41, 42, -1, -1, + -1, -1, -1, -1, 49, -1, -1, 52, 53, 65, + 66, 67, 68, 58, 70, -1, -1, -1, -1, 64, + -1, -1, -1, -1, -1, 81, 82, 83, -1, -1, + -1, -1, 88, -1, -1, 80, -1, -1, -1, -1, + 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 12, 13, -1, -1, -1, -1, -1, + -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, + 29, -1, -1, -1, 33, 34, -1, 36, -1, -1, + -1, -1, -1, -1, 43, -1, -1, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 65, 66, 67, 68, + -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 81, 82, 83, -1, -1, -1, -1, 88, + -1, -1, -1, -1, -1, -1, -1, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, + 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, + -1, -1, -1, -1, -1, -1, 29, -1, -1, -1, + 33, 34, -1, 36, -1, -1, -1, -1, -1, -1, + 43, -1, -1, -1, 47, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 65, 66, 67, 68, -1, 70, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, -1, -1, -1, -1, 88, -1, -1, -1, -1, + -1, -1, -1, 96, 97, 98, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 10, -1, 12, 13, -1, + -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, + -1, -1, -1, -1, 29, -1, -1, -1, 33, 34, + -1, 36, -1, -1, -1, -1, -1, -1, 43, -1, + -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 65, 66, 67, 68, -1, 70, -1, -1, -1, -1, + 75, -1, -1, -1, -1, -1, 81, 82, 83, 84, + 85, -1, -1, 88, -1, -1, 91, -1, -1, -1, + -1, 96, 97, 98, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 10, -1, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, + -1, -1, 29, -1, -1, -1, 33, 34, -1, 36, + -1, -1, -1, -1, -1, -1, 43, -1, -1, -1, + 47, -1, -1, -1, -1, -1, -1, -1, 55, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, + 67, 68, -1, 70, -1, -1, -1, -1, 75, -1, + -1, -1, -1, -1, 81, 82, 83, 84, 85, -1, + -1, 88, -1, -1, 91, -1, -1, -1, -1, 96, + 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, -1, 12, 13, -1, -1, -1, -1, -1, + -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, + 29, -1, -1, -1, 33, 34, -1, 36, -1, -1, + -1, -1, -1, -1, 43, -1, -1, -1, 47, -1, + -1, -1, -1, -1, -1, -1, 55, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 65, 66, 67, 68, + -1, 70, -1, -1, -1, -1, 75, -1, -1, -1, + -1, -1, 81, 82, 83, 84, 85, -1, -1, 88, + -1, -1, 91, -1, -1, -1, -1, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, + -1, 33, 34, -1, 36, -1, -1, -1, 40, -1, + 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, + -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 65, 66, 67, 68, -1, 70, -1, + 72, -1, 74, -1, 76, -1, -1, -1, -1, 81, + 82, 83, -1, -1, -1, -1, 88, -1, -1, -1, + -1, -1, -1, -1, 96, 97, 98, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, + 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, + -1, 22, -1, -1, -1, -1, -1, -1, 29, -1, + -1, -1, 33, 34, -1, 36, -1, -1, -1, 40, + -1, 42, 43, 44, -1, -1, 47, -1, -1, -1, + 51, -1, 53, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 65, 66, 67, 68, -1, 70, + -1, 72, -1, 74, -1, 76, -1, -1, -1, -1, + 81, 82, 83, -1, -1, -1, -1, 88, -1, -1, + -1, -1, -1, -1, -1, 96, 97, 98, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, + 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, + 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, + 74, 75, 76, -1, -1, -1, -1, 81, 82, 83, + -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, + -1, -1, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, + 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, + 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, + -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, + 74, -1, 76, -1, -1, -1, -1, 81, 82, 83, + -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, + -1, -1, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, + 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, + 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, + -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, + 74, -1, 76, -1, -1, -1, -1, 81, 82, 83, + -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, + -1, -1, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, + 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, + 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, + -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, + 74, -1, 76, -1, -1, -1, -1, 81, 82, 83, + -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, + -1, -1, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, + 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, + 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, + -1, 65, 66, 67, 68, -1, 70, -1, 72, -1, + 74, -1, 76, -1, -1, -1, -1, 81, 82, 83, + -1, -1, -1, -1, 88, -1, -1, -1, -1, -1, + -1, -1, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 11, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, + -1, -1, 29, 30, -1, -1, 33, 34, -1, 36, + -1, -1, -1, 40, -1, 42, 43, 44, -1, -1, + 47, -1, -1, -1, 51, -1, 53, -1, -1, -1, + -1, -1, -1, -1, 61, -1, -1, -1, 65, 66, + 67, 68, 69, 70, -1, 72, 73, 74, -1, 76, + -1, 78, -1, -1, 81, 82, 83, -1, -1, -1, + -1, 88, -1, -1, -1, -1, -1, -1, -1, 96, + 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 22, -1, -1, -1, -1, -1, -1, 29, + 30, -1, -1, 33, 34, -1, 36, -1, -1, -1, + 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, + -1, 51, -1, 53, -1, -1, -1, -1, -1, -1, + -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, + 70, -1, 72, 73, 74, -1, 76, -1, 78, -1, + -1, 81, 82, 83, -1, -1, -1, -1, 88, -1, + -1, -1, -1, -1, -1, -1, 96, 97, 98, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 11, 12, + 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, + -1, -1, -1, -1, -1, -1, 29, 30, -1, -1, + 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, + 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, + 53, -1, -1, -1, -1, -1, -1, -1, 61, -1, + -1, -1, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, -1, 76, -1, 78, -1, -1, 81, 82, + 83, -1, -1, -1, -1, 88, -1, -1, -1, -1, + -1, -1, -1, 96, 97, 98, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4, 5, 6, -1, -1, + 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, + -1, 20, 21, 22, -1, -1, -1, -1, -1, -1, + 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, 66, 67, 68, + 69, 70, 71, -1, 73, 74, 75, 76, 77, 78, + -1, -1, 81, 82, 83, 84, 85, 86, 87, -1, + -1, -1, 91, -1, -1, -1, -1, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, + 5, 6, -1, -1, 9, 10, 11, -1, -1, 14, + -1, 16, -1, -1, -1, 20, 21, 22, -1, -1, + -1, -1, -1, -1, 29, 30, 31, 32, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, + -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + 65, 66, 67, 68, 69, 70, 71, -1, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, 83, 84, + 85, 86, 87, -1, -1, -1, 91, -1, -1, -1, + -1, 96, 97, 98, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4, 5, 6, -1, -1, 9, 10, + 11, -1, -1, 14, -1, 16, -1, -1, -1, 20, + 21, 22, -1, -1, -1, -1, -1, -1, 29, 30, + 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 43, -1, -1, -1, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 65, 66, 67, 68, 69, 70, + 71, -1, 73, 74, 75, 76, 77, 78, -1, -1, + 81, 82, 83, 84, 85, 86, 87, -1, -1, -1, + 91, -1, -1, -1, -1, 96, 97, 98, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, + -1, -1, 9, 10, 11, -1, -1, 14, -1, 16, + -1, -1, -1, 20, 21, 22, -1, -1, -1, -1, + -1, -1, 29, 30, 31, 32, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, -1, -1, -1, + 47, -1, -1, -1, -1, -1, -1, -1, 55, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, 66, + 67, 68, 69, 70, 71, -1, 73, 74, 75, 76, + 77, 78, -1, -1, 81, 82, 83, 84, 85, 86, + 87, -1, -1, -1, 91, -1, -1, -1, -1, 96, + 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4, -1, -1, -1, -1, 9, -1, 11, 12, + 13, 14, -1, -1, -1, -1, -1, -1, 21, 22, + -1, -1, -1, -1, -1, -1, 29, 30, -1, -1, + 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, + 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, + 53, -1, -1, -1, -1, -1, 59, -1, 61, -1, + -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + 83, 84, 85, 86, -1, 88, -1, -1, -1, -1, + -1, -1, -1, 96, 97, 98, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, + 9, -1, 11, 12, 13, 14, -1, -1, -1, -1, + -1, -1, 21, 22, -1, -1, -1, -1, -1, -1, + 29, 30, -1, -1, 33, 34, -1, 36, -1, -1, + -1, 40, -1, 42, 43, 44, -1, -1, 47, -1, + -1, -1, 51, -1, 53, -1, -1, -1, -1, -1, + 59, -1, 61, -1, -1, -1, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + -1, -1, 81, 82, 83, 84, 85, 86, -1, 88, + -1, -1, -1, -1, -1, -1, -1, 96, 97, 98, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, + 5, 6, -1, -1, 9, 10, 11, 12, 13, 14, + -1, 16, -1, -1, -1, 20, 21, 22, -1, -1, + -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, + -1, 36, -1, -1, -1, 40, -1, 42, 43, 44, + -1, -1, 47, -1, -1, -1, 51, -1, 53, -1, + -1, -1, -1, -1, 59, -1, 61, -1, -1, -1, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, 83, 84, + 85, 86, 87, 88, -1, -1, 91, -1, -1, -1, + -1, 96, 97, 98, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4, 5, 6, -1, -1, 9, 10, + 11, 12, 13, 14, -1, 16, -1, -1, -1, 20, + 21, 22, -1, -1, -1, -1, -1, -1, 29, 30, + 31, 32, 33, 34, -1, 36, -1, -1, -1, 40, + -1, 42, 43, 44, -1, -1, 47, -1, -1, -1, + 51, -1, 53, -1, 55, -1, -1, -1, 59, -1, + 61, -1, -1, -1, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, -1, -1, + 81, 82, 83, 84, 85, 86, 87, 88, -1, -1, + 91, -1, -1, -1, -1, 96, 97, 98, -1, -1, + -1, -1, -1, -1, -1, -1, -1, - 3, 42, 9, 77, 18, 3, 25, 42, 18, 25, - 18, 105, 18, 42, 42, 3, 100, 3, 103, 3, - 14, 18, 14, 22, 42, 18, 22, 32, 3, 18, - 25, 32, 3, 3, 14, 18, 18, 18, 42, 3, - 42, 3, 42, 3, 18, 32, 25, 32, 3, 3, - 18, 42, 42, 18, 3, 18, 22, 18, 3, 18, - 18, 18, 18, 32, 42, 18, 18, 18, 18, 3, - 3, -1, 18, 2, 22, 18, 18, 18, 25, 14, - 18, 4, 14, 2, 2, 2, 14, 19, 32, 18, - 3, 19, 3, 2, 18, 18, 18, 18, 4, 18, - 18, 18, 38, -1, 18, 3, 42, 14, 3, 18, - 18, 14, 18, 3, 54, 54, 51, 54, -1, 59, - 59, 45, 59, 45, 54, 46, 56, 54, 54, 54, - 2, 45, 59, 59, 59, 2, 2, 2, 54, 54, - 56, 56, 18, 2, 51, -1, 18, -1, 51, 18, - -1, 18, 18, 18, 54, 54, 56, 56, 54, 18, - 56, 54, 54, 56, 56, 78, 54, 78, 56, 42, - 46, 109, 54, 2, 56, 2, 54, 50, 2, 54, - 78, 2, 2, 54, 18, 56, 94, 2, 78, 18, - 18, 18, 70, 68, 18, 18, 54, 18, 18, 54, - 54, 56, 56, 18, 54, 54, 64, 54, 58, 54, - 44, 58, 4, 54, 59, 56, 2, 66, 54, 47, - 56, 44, 54, 92, 54, 18, 18, 59, 58, 54, - 18, 18, 18, -1, 59, 54, 54, 54, 54, 57, - 59, 57, 59, 54, -1, 54, 54, 54, 59, 54, - 43, 60, 60, 60, 18, 60, 54, 45, 42, 46, - 11, 12, 14, 54, 62, 56, 50, 19, -1, 54, - -1, 56, 54, 54, 56, 54, 54, 54, 59, -1, - 59, 59, 59, 47, 48, 54, 54, 54, 2, 2, - 59, 59, 59, 14, 71, 76, 54, 76, 76, -1, - 69, 59, 23, -1, 18, 18, 54, 65, 76, 76, - -1, 59, 54, 54, 35, 36, -1, 59, 59, 67, - 61, 63, 54, 54, -1, 14, 54, 59, 59, 61, - 61, 59, 5, 61, 23, 5, -1, -1, -1, -1, - -1, 14, -1, -1, 14, -1, -1, -1, -1, -1, - 23, -1, -1, 23, 25, 26, 27, 28, 29, 30, - 31, -1, 35, 36, -1, 35, 36, 14, -1, -1, - -1, -1, -1, -1, 88, 88, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 14, -1, -1, -1, -1, - -1, -1, -1, -1, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 14, -1, -1, -1, -1, -1, -1, - -1, -1, 23, 24, 25, 26, 27, 28, 29, 30, - 31, -1, 14, -1, -1, -1, -1, 19, -1, 21, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1}; + 3, 43, 32, 18, 32, 9, 18, 18, 78, 18, + 18, 3, 18, 18, 32, 25, 18, 3, 3, 43, + 18, 3, 3, 22, 18, 18, 22, 18, 18, 3, + 18, 32, 32, 22, 14, 22, 14, 3, 3, 18, + 3, 25, 106, 18, 3, 3, 43, 18, 43, 25, + 3, 18, 25, 3, 104, 3, 101, 18, 3, 3, + 43, 25, 18, 18, 18, 14, 43, 18, 2, -1, + 3, 43, 32, 43, 43, 43, 18, 18, 18, 18, + 2, 43, 18, 18, 18, 14, 2, 18, 3, -1, + 18, 2, 4, 18, 14, 14, 18, -1, 55, 19, + 57, -1, 18, 55, 23, 57, 18, 18, 55, 3, + 57, 47, 55, 18, 57, 46, 44, 55, 55, 57, + 57, 46, 43, 52, 2, 55, 18, 57, 55, 55, + 51, 55, 55, 60, 60, 4, 60, 55, 55, 57, + 18, 55, 47, 60, 14, 55, 79, 55, 71, 18, + 60, 55, 60, 57, 55, 69, 57, 43, 55, 39, + 57, 14, 55, 43, 79, 51, 19, 60, 55, 2, + 14, 55, 55, 60, 55, 110, 60, 60, 18, 60, + 55, 2, 52, 55, 59, 18, 3, 59, 55, 55, + 55, 57, 59, 2, 55, 60, 3, 18, 18, 4, + 55, 2, 18, 95, 2, 45, 67, 2, 52, 18, + 65, 2, 18, 18, 2, 18, 55, 18, 11, 12, + 18, 2, 61, 18, 55, 2, 57, 18, 48, 18, + 18, 47, 55, 55, 57, 57, 55, 18, 18, 58, + 46, 18, 55, 46, 55, 58, -1, 55, 2, 57, + 14, 55, 63, 55, -1, 19, 45, 61, 55, 61, + 57, 55, 79, 55, 18, 57, 2, 61, 55, 55, + 55, -1, 79, 60, 60, 60, 55, 62, 64, 55, + 55, 60, 18, 62, 60, 60, 62, 62, 55, 55, + 77, 18, 55, 60, 60, 2, 55, 60, 55, 55, + 66, 60, 55, 60, 60, 68, 14, 60, -1, 55, + 77, 18, -1, 93, 60, 23, 72, 70, 77, 2, + 77, 48, 49, -1, -1, 14, -1, 35, 36, 5, + 19, 77, 21, -1, -1, 18, -1, -1, 14, 25, + 26, 27, 28, 29, 30, 31, -1, 23, -1, -1, + -1, -1, 14, 89, 43, -1, -1, -1, -1, 35, + 36, 23, 24, 25, 26, 27, 28, 29, 30, 31, + -1, -1, -1, -1, 14, -1, -1, -1, -1, -1, + -1, -1, 89, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 14, -1, -1, -1, -1, -1, -1, -1, + -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, + -1, -1, -1, -1, -1, -1, -1, -1, 14, -1, + -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, + 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1 +}; QT_END_NAMESPACE diff --git a/src/qml/parser/qqmljsgrammar_p.h b/src/qml/parser/qqmljsgrammar_p.h index b4f762d28b..aa8450f218 100644 --- a/src/qml/parser/qqmljsgrammar_p.h +++ b/src/qml/parser/qqmljsgrammar_p.h @@ -59,153 +59,154 @@ QT_BEGIN_NAMESPACE class QQmlJSGrammar { public: - enum VariousConstants { - EOF_SYMBOL = 0, - REDUCE_HERE = 106, - SHIFT_THERE = 105, - T_AND = 1, - T_AND_AND = 2, - T_AND_EQ = 3, - T_AS = 94, - T_AUTOMATIC_SEMICOLON = 62, - T_BREAK = 4, - T_CASE = 5, - T_CATCH = 6, - T_COLON = 7, - T_COMMA = 8, - T_COMMENT = 89, - T_COMPATIBILITY_SEMICOLON = 90, - T_CONST = 84, - T_CONTINUE = 9, - T_DEBUGGER = 86, - T_DEFAULT = 10, - T_DELETE = 11, - T_DIVIDE_ = 12, - T_DIVIDE_EQ = 13, - T_DO = 14, - T_DOT = 15, - T_ELSE = 16, - T_EQ = 17, - T_EQ_EQ = 18, - T_EQ_EQ_EQ = 19, - T_ERROR = 98, - T_FALSE = 83, - T_FEED_JS_EXPRESSION = 102, - T_FEED_JS_PROGRAM = 104, - T_FEED_JS_SOURCE_ELEMENT = 103, - T_FEED_JS_STATEMENT = 101, - T_FEED_UI_OBJECT_MEMBER = 100, - T_FEED_UI_PROGRAM = 99, - T_FINALLY = 20, - T_FOR = 21, - T_FUNCTION = 22, - T_GE = 23, - T_GET = 96, - T_GT = 24, - T_GT_GT = 25, - T_GT_GT_EQ = 26, - T_GT_GT_GT = 27, - T_GT_GT_GT_EQ = 28, - T_IDENTIFIER = 29, - T_IF = 30, - T_IMPORT = 92, - T_IN = 31, - T_INSTANCEOF = 32, - T_LBRACE = 33, - T_LBRACKET = 34, - T_LE = 35, - T_LET = 85, - T_LPAREN = 36, - T_LT = 37, - T_LT_LT = 38, - T_LT_LT_EQ = 39, - T_MINUS = 40, - T_MINUS_EQ = 41, - T_MINUS_MINUS = 42, - T_MULTILINE_STRING_LITERAL = 88, - T_NEW = 43, - T_NOT = 44, - T_NOT_EQ = 45, - T_NOT_EQ_EQ = 46, - T_NULL = 81, - T_NUMERIC_LITERAL = 47, - T_ON = 95, - T_OR = 48, - T_OR_EQ = 49, - T_OR_OR = 50, - T_PLUS = 51, - T_PLUS_EQ = 52, - T_PLUS_PLUS = 53, - T_PRAGMA = 93, - T_PROPERTY = 66, - T_PUBLIC = 91, - T_QUESTION = 54, - T_RBRACE = 55, - T_RBRACKET = 56, - T_READONLY = 68, - T_REMAINDER = 57, - T_REMAINDER_EQ = 58, - T_RESERVED_WORD = 87, - T_RETURN = 59, - T_RPAREN = 60, - T_SEMICOLON = 61, - T_SET = 97, - T_SIGNAL = 67, - T_STAR = 63, - T_STAR_EQ = 64, - T_STRING_LITERAL = 65, - T_SWITCH = 69, - T_THIS = 70, - T_THROW = 71, - T_TILDE = 72, - T_TRUE = 82, - T_TRY = 73, - T_TYPEOF = 74, - T_VAR = 75, - T_VOID = 76, - T_WHILE = 77, - T_WITH = 78, - T_XOR = 79, - T_XOR_EQ = 80, - - ACCEPT_STATE = 678, - RULE_COUNT = 363, - STATE_COUNT = 679, - TERMINAL_COUNT = 107, - NON_TERMINAL_COUNT = 111, - - GOTO_INDEX_OFFSET = 679, - GOTO_INFO_OFFSET = 3203, - GOTO_CHECK_OFFSET = 3203 - }; - - static const char *const spell []; - static const short lhs []; - static const short rhs []; - static const short goto_default []; - static const short action_default []; - static const short action_index []; - static const short action_info []; - static const short action_check []; - - static inline int nt_action (int state, int nt) - { - const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt; - if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt) - return goto_default [nt]; - - return action_info [GOTO_INFO_OFFSET + yyn]; - } - - static inline int t_action (int state, int token) - { - const int yyn = action_index [state] + token; - - if (yyn < 0 || action_check [yyn] != token) - return - action_default [state]; - - return action_info [yyn]; - } + enum VariousConstants { + EOF_SYMBOL = 0, + REDUCE_HERE = 107, + SHIFT_THERE = 106, + T_AND = 1, + T_AND_AND = 2, + T_AND_EQ = 3, + T_AS = 95, + T_AUTOMATIC_SEMICOLON = 62, + T_BREAK = 4, + T_CASE = 5, + T_CATCH = 6, + T_COLON = 7, + T_COMMA = 8, + T_COMMENT = 89, + T_COMPATIBILITY_SEMICOLON = 90, + T_CONST = 84, + T_CONTINUE = 9, + T_DEBUGGER = 86, + T_DEFAULT = 10, + T_DELETE = 11, + T_DIVIDE_ = 12, + T_DIVIDE_EQ = 13, + T_DO = 14, + T_DOT = 15, + T_ELSE = 16, + T_ENUM = 91, + T_EQ = 17, + T_EQ_EQ = 18, + T_EQ_EQ_EQ = 19, + T_ERROR = 99, + T_FALSE = 83, + T_FEED_JS_EXPRESSION = 103, + T_FEED_JS_PROGRAM = 105, + T_FEED_JS_SOURCE_ELEMENT = 104, + T_FEED_JS_STATEMENT = 102, + T_FEED_UI_OBJECT_MEMBER = 101, + T_FEED_UI_PROGRAM = 100, + T_FINALLY = 20, + T_FOR = 21, + T_FUNCTION = 22, + T_GE = 23, + T_GET = 97, + T_GT = 24, + T_GT_GT = 25, + T_GT_GT_EQ = 26, + T_GT_GT_GT = 27, + T_GT_GT_GT_EQ = 28, + T_IDENTIFIER = 29, + T_IF = 30, + T_IMPORT = 93, + T_IN = 31, + T_INSTANCEOF = 32, + T_LBRACE = 33, + T_LBRACKET = 34, + T_LE = 35, + T_LET = 85, + T_LPAREN = 36, + T_LT = 37, + T_LT_LT = 38, + T_LT_LT_EQ = 39, + T_MINUS = 40, + T_MINUS_EQ = 41, + T_MINUS_MINUS = 42, + T_MULTILINE_STRING_LITERAL = 88, + T_NEW = 43, + T_NOT = 44, + T_NOT_EQ = 45, + T_NOT_EQ_EQ = 46, + T_NULL = 81, + T_NUMERIC_LITERAL = 47, + T_ON = 96, + T_OR = 48, + T_OR_EQ = 49, + T_OR_OR = 50, + T_PLUS = 51, + T_PLUS_EQ = 52, + T_PLUS_PLUS = 53, + T_PRAGMA = 94, + T_PROPERTY = 66, + T_PUBLIC = 92, + T_QUESTION = 54, + T_RBRACE = 55, + T_RBRACKET = 56, + T_READONLY = 68, + T_REMAINDER = 57, + T_REMAINDER_EQ = 58, + T_RESERVED_WORD = 87, + T_RETURN = 59, + T_RPAREN = 60, + T_SEMICOLON = 61, + T_SET = 98, + T_SIGNAL = 67, + T_STAR = 63, + T_STAR_EQ = 64, + T_STRING_LITERAL = 65, + T_SWITCH = 69, + T_THIS = 70, + T_THROW = 71, + T_TILDE = 72, + T_TRUE = 82, + T_TRY = 73, + T_TYPEOF = 74, + T_VAR = 75, + T_VOID = 76, + T_WHILE = 77, + T_WITH = 78, + T_XOR = 79, + T_XOR_EQ = 80, + + ACCEPT_STATE = 687, + RULE_COUNT = 367, + STATE_COUNT = 688, + TERMINAL_COUNT = 108, + NON_TERMINAL_COUNT = 112, + + GOTO_INDEX_OFFSET = 688, + GOTO_INFO_OFFSET = 3217, + GOTO_CHECK_OFFSET = 3217 + }; + + static const char *const spell[]; + static const short lhs[]; + static const short rhs[]; + static const short goto_default[]; + static const short action_default[]; + static const short action_index[]; + static const short action_info[]; + static const short action_check[]; + + static inline int nt_action (int state, int nt) + { + const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt; + if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt) + return goto_default [nt]; + + return action_info [GOTO_INFO_OFFSET + yyn]; + } + + static inline int t_action (int state, int token) + { + const int yyn = action_index [state] + token; + + if (yyn < 0 || action_check [yyn] != token) + return - action_default [state]; + + return action_info [yyn]; + } }; diff --git a/src/qml/parser/qqmljskeywords_p.h b/src/qml/parser/qqmljskeywords_p.h index 8b789526a5..20daf545a9 100644 --- a/src/qml/parser/qqmljskeywords_p.h +++ b/src/qml/parser/qqmljskeywords_p.h @@ -181,7 +181,7 @@ static inline int classify4(const QChar *s, bool qmlMode) { else if (s[1].unicode() == 'n') { if (s[2].unicode() == 'u') { if (s[3].unicode() == 'm') { - return Lexer::T_ENUM; + return qmlMode ? int(Lexer::T_ENUM) : int(Lexer::T_RESERVED_WORD); } } } diff --git a/src/qml/parser/qqmljslexer_p.h b/src/qml/parser/qqmljslexer_p.h index af5597b625..11d8081713 100644 --- a/src/qml/parser/qqmljslexer_p.h +++ b/src/qml/parser/qqmljslexer_p.h @@ -99,7 +99,6 @@ public: T_CHAR = T_RESERVED_WORD, T_CLASS = T_RESERVED_WORD, T_DOUBLE = T_RESERVED_WORD, - T_ENUM = T_RESERVED_WORD, T_EXPORT = T_RESERVED_WORD, T_EXTENDS = T_RESERVED_WORD, T_FINAL = T_RESERVED_WORD, diff --git a/src/qml/parser/qqmljsparser.cpp b/src/qml/parser/qqmljsparser.cpp index 636b959097..3844fe4473 100644 --- a/src/qml/parser/qqmljsparser.cpp +++ b/src/qml/parser/qqmljsparser.cpp @@ -656,49 +656,71 @@ case 75: { sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node); } break; -case 83: { +case 76: { + AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish()); + enumDeclaration->enumToken = loc(1); + enumDeclaration->rbraceToken = loc(5); + sym(1).Node = enumDeclaration; + break; +} + +case 77: { + AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1)); + node->memberToken = loc(1); + sym(1).Node = node; + break; +} + +case 78: { + AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3)); + node->memberToken = loc(3); + sym(1).Node = node; + break; +} + +case 86: { AST::ThisExpression *node = new (pool) AST::ThisExpression(); node->thisToken = loc(1); sym(1).Node = node; } break; -case 84: { +case 87: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 85: { +case 88: { AST::NullExpression *node = new (pool) AST::NullExpression(); node->nullToken = loc(1); sym(1).Node = node; } break; -case 86: { +case 89: { AST::TrueLiteral *node = new (pool) AST::TrueLiteral(); node->trueToken = loc(1); sym(1).Node = node; } break; -case 87: { +case 90: { AST::FalseLiteral *node = new (pool) AST::FalseLiteral(); node->falseToken = loc(1); sym(1).Node = node; } break; -case 88: { +case 91: { AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval); node->literalToken = loc(1); sym(1).Node = node; } break; -case 89: -case 90: { +case 92: +case 93: { AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1)); node->literalToken = loc(1); sym(1).Node = node; } break; -case 91: { +case 94: { bool rx = lexer->scanRegExp(Lexer::NoPrefix); if (!rx) { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); @@ -714,7 +736,7 @@ case 91: { sym(1).Node = node; } break; -case 92: { +case 95: { bool rx = lexer->scanRegExp(Lexer::EqualPrefix); if (!rx) { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); @@ -730,28 +752,28 @@ case 92: { sym(1).Node = node; } break; -case 93: { +case 96: { AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral((AST::Elision *) 0); node->lbracketToken = loc(1); node->rbracketToken = loc(2); sym(1).Node = node; } break; -case 94: { +case 97: { AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).Elision->finish()); node->lbracketToken = loc(1); node->rbracketToken = loc(3); sym(1).Node = node; } break; -case 95: { +case 98: { AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish ()); node->lbracketToken = loc(1); node->rbracketToken = loc(3); sym(1).Node = node; } break; -case 96: { +case 99: { AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (), (AST::Elision *) 0); node->lbracketToken = loc(1); @@ -760,7 +782,7 @@ case 96: { sym(1).Node = node; } break; -case 97: { +case 100: { AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (), sym(4).Elision->finish()); node->lbracketToken = loc(1); @@ -769,7 +791,7 @@ case 97: { sym(1).Node = node; } break; -case 98: { +case 101: { AST::ObjectLiteral *node = 0; if (sym(2).Node) node = new (pool) AST::ObjectLiteral( @@ -781,7 +803,7 @@ case 98: { sym(1).Node = node; } break; -case 99: { +case 102: { AST::ObjectLiteral *node = new (pool) AST::ObjectLiteral( sym(2).PropertyAssignmentList->finish ()); node->lbraceToken = loc(1); @@ -789,14 +811,14 @@ case 99: { sym(1).Node = node; } break; -case 100: { +case 103: { AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression); node->lparenToken = loc(1); node->rparenToken = loc(3); sym(1).Node = node; } break; -case 101: { +case 104: { if (AST::ArrayMemberExpression *mem = AST::cast(sym(1).Expression)) { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken, QLatin1String("Ignored annotation"))); @@ -816,48 +838,48 @@ case 101: { } } break; -case 102: { +case 105: { sym(1).Node = new (pool) AST::ElementList((AST::Elision *) 0, sym(1).Expression); } break; -case 103: { +case 106: { sym(1).Node = new (pool) AST::ElementList(sym(1).Elision->finish(), sym(2).Expression); } break; -case 104: { +case 107: { AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList, (AST::Elision *) 0, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 105: { +case 108: { AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList, sym(3).Elision->finish(), sym(4).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 106: { +case 109: { AST::Elision *node = new (pool) AST::Elision(); node->commaToken = loc(1); sym(1).Node = node; } break; -case 107: { +case 110: { AST::Elision *node = new (pool) AST::Elision(sym(1).Elision); node->commaToken = loc(2); sym(1).Node = node; } break; -case 108: { +case 111: { AST::PropertyNameAndValue *node = new (pool) AST::PropertyNameAndValue( sym(1).PropertyName, sym(3).Expression); node->colonToken = loc(2); sym(1).Node = node; } break; -case 109: { +case 112: { AST::PropertyGetterSetter *node = new (pool) AST::PropertyGetterSetter( sym(2).PropertyName, sym(6).FunctionBody); node->getSetToken = loc(1); @@ -868,7 +890,7 @@ case 109: { sym(1).Node = node; } break; -case 110: { +case 113: { AST::PropertyGetterSetter *node = new (pool) AST::PropertyGetterSetter( sym(2).PropertyName, sym(4).FormalParameterList, sym(7).FunctionBody); node->getSetToken = loc(1); @@ -879,56 +901,56 @@ case 110: { sym(1).Node = node; } break; -case 111: { +case 114: { sym(1).Node = new (pool) AST::PropertyAssignmentList(sym(1).PropertyAssignment); } break; -case 112: { +case 115: { AST::PropertyAssignmentList *node = new (pool) AST::PropertyAssignmentList( sym(1).PropertyAssignmentList, sym(3).PropertyAssignment); node->commaToken = loc(2); sym(1).Node = node; } break; -case 113: { +case 116: { AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1)); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 114: { +case 117: { AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1)); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 115: { +case 118: { AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 116: { +case 119: { AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1)); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 153: { +case 157: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -case 154: { +case 158: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 155: { +case 159: { AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList); node->newToken = loc(1); node->lparenToken = loc(3); @@ -936,384 +958,384 @@ case 155: { sym(1).Node = node; } break; -case 157: { +case 161: { AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression); node->newToken = loc(1); sym(1).Node = node; } break; -case 158: { +case 162: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -case 159: { +case 163: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -case 160: { +case 164: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -case 161: { +case 165: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 162: { +case 166: { sym(1).Node = 0; } break; -case 163: { +case 167: { sym(1).Node = sym(1).ArgumentList->finish(); } break; -case 164: { +case 168: { sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression); } break; -case 165: { +case 169: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 169: { +case 173: { AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression); node->incrementToken = loc(2); sym(1).Node = node; } break; -case 170: { +case 174: { AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression); node->decrementToken = loc(2); sym(1).Node = node; } break; -case 172: { +case 176: { AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression); node->deleteToken = loc(1); sym(1).Node = node; } break; -case 173: { +case 177: { AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression); node->voidToken = loc(1); sym(1).Node = node; } break; -case 174: { +case 178: { AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression); node->typeofToken = loc(1); sym(1).Node = node; } break; -case 175: { +case 179: { AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression); node->incrementToken = loc(1); sym(1).Node = node; } break; -case 176: { +case 180: { AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression); node->decrementToken = loc(1); sym(1).Node = node; } break; -case 177: { +case 181: { AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression); node->plusToken = loc(1); sym(1).Node = node; } break; -case 178: { +case 182: { AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression); node->minusToken = loc(1); sym(1).Node = node; } break; -case 179: { +case 183: { AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression); node->tildeToken = loc(1); sym(1).Node = node; } break; -case 180: { +case 184: { AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression); node->notToken = loc(1); sym(1).Node = node; } break; -case 182: { +case 186: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Mul, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 183: { +case 187: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Div, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 184: { +case 188: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Mod, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 186: { +case 190: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Add, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 187: { +case 191: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Sub, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 189: { +case 193: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::LShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 190: { +case 194: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::RShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 191: { +case 195: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::URShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 193: { +case 197: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Lt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 194: { +case 198: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Gt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 195: { +case 199: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Le, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 196: { +case 200: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Ge, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 197: { +case 201: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 198: { +case 202: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::In, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 200: { +case 204: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Lt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 201: { +case 205: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Gt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 202: { +case 206: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Le, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 203: { +case 207: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Ge, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 204: { +case 208: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 206: { +case 210: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Equal, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 207: { +case 211: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 208: { +case 212: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 209: { +case 213: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 211: { +case 215: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Equal, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 212: { +case 216: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 213: { +case 217: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 214: { +case 218: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 216: { +case 220: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 218: { +case 222: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 220: { +case 224: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitXor, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 222: { +case 226: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitXor, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 224: { +case 228: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitOr, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 226: { +case 230: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitOr, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 228: { +case 232: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::And, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 230: { +case 234: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::And, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 232: { +case 236: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Or, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 234: { +case 238: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Or, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 236: { +case 240: { AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); @@ -1321,7 +1343,7 @@ case 236: { sym(1).Node = node; } break; -case 238: { +case 242: { AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); @@ -1329,112 +1351,112 @@ case 238: { sym(1).Node = node; } break; -case 240: { +case 244: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 242: { +case 246: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 243: { +case 247: { sym(1).ival = QSOperator::Assign; } break; -case 244: { +case 248: { sym(1).ival = QSOperator::InplaceMul; } break; -case 245: { +case 249: { sym(1).ival = QSOperator::InplaceDiv; } break; -case 246: { +case 250: { sym(1).ival = QSOperator::InplaceMod; } break; -case 247: { +case 251: { sym(1).ival = QSOperator::InplaceAdd; } break; -case 248: { +case 252: { sym(1).ival = QSOperator::InplaceSub; } break; -case 249: { +case 253: { sym(1).ival = QSOperator::InplaceLeftShift; } break; -case 250: { +case 254: { sym(1).ival = QSOperator::InplaceRightShift; } break; -case 251: { +case 255: { sym(1).ival = QSOperator::InplaceURightShift; } break; -case 252: { +case 256: { sym(1).ival = QSOperator::InplaceAnd; } break; -case 253: { +case 257: { sym(1).ival = QSOperator::InplaceXor; } break; -case 254: { +case 258: { sym(1).ival = QSOperator::InplaceOr; } break; -case 256: { +case 260: { AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 257: { +case 261: { sym(1).Node = 0; } break; -case 260: { +case 264: { AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 261: { +case 265: { sym(1).Node = 0; } break; -case 278: { +case 282: { AST::Block *node = new (pool) AST::Block(sym(2).StatementList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -case 279: { +case 283: { sym(1).Node = new (pool) AST::StatementList(sym(1).Statement); } break; -case 280: { +case 284: { sym(1).Node = new (pool) AST::StatementList(sym(1).StatementList, sym(2).Statement); } break; -case 281: { +case 285: { sym(1).Node = 0; } break; -case 282: { +case 286: { sym(1).Node = sym(1).StatementList->finish (); } break; -case 284: { +case 288: { AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope; if (sym(1).ival == T_LET) s = AST::VariableDeclaration::BlockScope; @@ -1447,82 +1469,82 @@ case 284: { sym(1).Node = node; } break; -case 285: { +case 289: { sym(1).ival = T_LET; } break; -case 286: { +case 290: { sym(1).ival = T_CONST; } break; -case 287: { +case 291: { sym(1).ival = T_VAR; } break; -case 288: { +case 292: { sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration); } break; -case 289: { +case 293: { AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList( sym(1).VariableDeclarationList, sym(3).VariableDeclaration); node->commaToken = loc(2); sym(1).Node = node; } break; -case 290: { +case 294: { sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration); } break; -case 291: { +case 295: { sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).VariableDeclaration); } break; -case 292: { +case 296: { AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope; AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression, s); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 293: { +case 297: { AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope; AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression, s); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 294: { +case 298: { // ### TODO: AST for initializer sym(1) = sym(2); } break; -case 295: { +case 299: { sym(1).Node = 0; } break; -case 297: { +case 301: { // ### TODO: AST for initializer sym(1) = sym(2); } break; -case 298: { +case 302: { sym(1).Node = 0; } break; -case 300: { +case 304: { AST::EmptyStatement *node = new (pool) AST::EmptyStatement(); node->semicolonToken = loc(1); sym(1).Node = node; } break; -case 302: { +case 306: { AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 303: { +case 307: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -1531,7 +1553,7 @@ case 303: { sym(1).Node = node; } break; -case 304: { +case 308: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -1539,7 +1561,7 @@ case 304: { sym(1).Node = node; } break; -case 307: { +case 311: { AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression); node->doToken = loc(1); node->whileToken = loc(3); @@ -1549,7 +1571,7 @@ case 307: { sym(1).Node = node; } break; -case 308: { +case 312: { AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement); node->whileToken = loc(1); node->lparenToken = loc(2); @@ -1557,7 +1579,7 @@ case 308: { sym(1).Node = node; } break; -case 309: { +case 313: { AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); node->forToken = loc(1); @@ -1568,7 +1590,7 @@ case 309: { sym(1).Node = node; } break; -case 310: { +case 314: { AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope; AST::LocalForStatement *node = new (pool) AST::LocalForStatement( sym(4).VariableDeclarationList->finish(s), sym(6).Expression, @@ -1582,7 +1604,7 @@ case 310: { sym(1).Node = node; } break; -case 311: { +case 315: { AST:: ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).Expression, sym(5).Expression, sym(7).Statement); node->forToken = loc(1); @@ -1592,7 +1614,7 @@ case 311: { sym(1).Node = node; } break; -case 312: { +case 316: { AST::LocalForEachStatement *node = new (pool) AST::LocalForEachStatement( sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement); node->forToken = loc(1); @@ -1603,14 +1625,14 @@ case 312: { sym(1).Node = node; } break; -case 314: { +case 318: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(); node->continueToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 316: { +case 320: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2)); node->continueToken = loc(1); node->identifierToken = loc(2); @@ -1618,14 +1640,14 @@ case 316: { sym(1).Node = node; } break; -case 318: { +case 322: { AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringRef()); node->breakToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 320: { +case 324: { AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2)); node->breakToken = loc(1); node->identifierToken = loc(2); @@ -1633,14 +1655,14 @@ case 320: { sym(1).Node = node; } break; -case 322: { +case 326: { AST::ReturnStatement *node = new (pool) AST::ReturnStatement(sym(2).Expression); node->returnToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -case 323: { +case 327: { AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement); node->withToken = loc(1); node->lparenToken = loc(2); @@ -1648,7 +1670,7 @@ case 323: { sym(1).Node = node; } break; -case 324: { +case 328: { AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock); node->switchToken = loc(1); node->lparenToken = loc(2); @@ -1656,83 +1678,83 @@ case 324: { sym(1).Node = node; } break; -case 325: { +case 329: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -case 326: { +case 330: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(5); sym(1).Node = node; } break; -case 327: { +case 331: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause); } break; -case 328: { +case 332: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause); } break; -case 329: { +case 333: { sym(1).Node = 0; } break; -case 330: { +case 334: { sym(1).Node = sym(1).CaseClauses->finish (); } break; -case 331: { +case 335: { AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList); node->caseToken = loc(1); node->colonToken = loc(3); sym(1).Node = node; } break; -case 332: { +case 336: { AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList); node->defaultToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -case 333: { +case 337: { AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement); node->identifierToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -case 335: { +case 339: { AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression); node->throwToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -case 336: { +case 340: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch); node->tryToken = loc(1); sym(1).Node = node; } break; -case 337: { +case 341: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -case 338: { +case 342: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -case 339: { +case 343: { AST::Catch *node = new (pool) AST::Catch(stringRef(3), sym(5).Block); node->catchToken = loc(1); node->lparenToken = loc(2); @@ -1741,20 +1763,20 @@ case 339: { sym(1).Node = node; } break; -case 340: { +case 344: { AST::Finally *node = new (pool) AST::Finally(sym(2).Block); node->finallyToken = loc(1); sym(1).Node = node; } break; -case 342: { +case 346: { AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement(); node->debuggerToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 344: { +case 348: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); node->identifierToken = loc(2); @@ -1765,7 +1787,7 @@ case 344: { sym(1).Node = node; } break; -case 345: { +case 349: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); if (! stringRef(2).isNull()) @@ -1777,7 +1799,7 @@ case 345: { sym(1).Node = node; } break; -case 346: { +case 350: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(3).FormalParameterList, sym(6).FunctionBody); node->functionToken = loc(1); node->lparenToken = loc(2); @@ -1787,56 +1809,56 @@ case 346: { sym(1).Node = node; } break; -case 347: { +case 351: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(stringRef(1)); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 348: { +case 352: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, stringRef(3)); node->commaToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 349: { +case 353: { sym(1).Node = 0; } break; -case 350: { +case 354: { sym(1).Node = sym(1).FormalParameterList->finish (); } break; -case 351: { +case 355: { sym(1).Node = 0; } break; -case 353: { +case 357: { sym(1).Node = new (pool) AST::FunctionBody(sym(1).SourceElements->finish ()); } break; -case 355: { +case 359: { sym(1).Node = new (pool) AST::Program(sym(1).SourceElements->finish ()); } break; -case 356: { +case 360: { sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElement); } break; -case 357: { +case 361: { sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElements, sym(2).SourceElement); } break; -case 358: { +case 362: { sym(1).Node = new (pool) AST::StatementSourceElement(sym(1).Statement); } break; -case 359: { +case 363: { sym(1).Node = new (pool) AST::FunctionSourceElement(sym(1).FunctionDeclaration); } break; -case 360: { +case 364: { sym(1).Node = 0; } break; diff --git a/src/qml/parser/qqmljsparser_p.h b/src/qml/parser/qqmljsparser_p.h index f382cd7563..6273ed48b3 100644 --- a/src/qml/parser/qqmljsparser_p.h +++ b/src/qml/parser/qqmljsparser_p.h @@ -125,6 +125,7 @@ public: AST::UiArrayMemberList *UiArrayMemberList; AST::UiQualifiedId *UiQualifiedId; AST::UiQualifiedPragmaId *UiQualifiedPragmaId; + AST::UiEnumMemberList *UiEnumMemberList; }; public: @@ -246,9 +247,9 @@ protected: -#define J_SCRIPT_REGEXPLITERAL_RULE1 91 +#define J_SCRIPT_REGEXPLITERAL_RULE1 94 -#define J_SCRIPT_REGEXPLITERAL_RULE2 92 +#define J_SCRIPT_REGEXPLITERAL_RULE2 95 QT_QML_END_NAMESPACE diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp index ee5b38717b..d2a7970a84 100644 --- a/src/qml/qml/qqmlimport.cpp +++ b/src/qml/qml/qqmlimport.cpp @@ -295,7 +295,8 @@ public: QList *errors); bool resolveType(const QHashedStringRef &type, int *vmajor, int *vminor, - QQmlType** type_return, QList *errors); + QQmlType** type_return, QList *errors, + QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion); QUrl baseUrl; QString base; @@ -620,7 +621,8 @@ QString QQmlImports::versionString(int vmaj, int vmin, ImportVersion version) */ bool QQmlImports::resolveType(const QHashedStringRef &type, QQmlType** type_return, int *vmaj, int *vmin, - QQmlImportNamespace** ns_return, QList *errors) const + QQmlImportNamespace** ns_return, QList *errors, + QQmlImport::RecursionRestriction recursionRestriction) const { QQmlImportNamespace* ns = d->findQualifiedNamespace(type); if (ns) { @@ -629,7 +631,7 @@ bool QQmlImports::resolveType(const QHashedStringRef &type, return true; } if (type_return) { - if (d->resolveType(type,vmaj,vmin,type_return, errors)) { + if (d->resolveType(type,vmaj,vmin,type_return, errors, recursionRestriction)) { if (qmlImportTrace()) { #define RESOLVE_TYPE_DEBUG qDebug().nospace() << "QQmlImports(" << qPrintable(baseUrl().toString()) \ << ')' << "::resolveType: " << type.toString() << " => " @@ -712,7 +714,8 @@ bool QQmlImports::resolveType(QQmlImportNamespace* ns, const QHashedStringRef &t bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef& type, int *vmajor, int *vminor, - QQmlType** type_return, QString *base, bool *typeRecursionDetected) const + QQmlType** type_return, QString *base, bool *typeRecursionDetected, + QQmlImport::RecursionRestriction recursionRestriction) const { if (majversion >= 0 && minversion >= 0) { QQmlType *t = QQmlMetaType::qmlType(type, uri, majversion, minversion); @@ -747,7 +750,7 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, if (resolveLocalUrl(*base, c.fileName) != componentUrl) continue; // failed attempt to access an internal type } - if (*base == componentUrl) { + if (recursionRestriction == QQmlImport::PreventRecursion && *base == componentUrl) { if (typeRecursionDetected) *typeRecursionDetected = true; continue; // no recursion @@ -790,7 +793,7 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, } if (exists) { - if (base && (*base == qmlUrl)) { // no recursion + if (recursionRestriction == QQmlImport::PreventRecursion && base && (*base == qmlUrl)) { // no recursion if (typeRecursionDetected) *typeRecursionDetected = true; } else { @@ -806,7 +809,8 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, } bool QQmlImportsPrivate::resolveType(const QHashedStringRef& type, int *vmajor, int *vminor, - QQmlType** type_return, QList *errors) + QQmlType** type_return, QList *errors, + QQmlImport::RecursionRestriction recursionRestriction) { QQmlImportNamespace *s = 0; int dot = type.indexOf(Dot); @@ -835,7 +839,7 @@ bool QQmlImportsPrivate::resolveType(const QHashedStringRef& type, int *vmajor, } QHashedStringRef unqualifiedtype = dot < 0 ? type : QHashedStringRef(type.constData()+dot+1, type.length()-dot-1); if (s) { - if (s->resolveType(typeLoader,unqualifiedtype,vmajor,vminor,type_return, &base, errors)) + if (s->resolveType(typeLoader,unqualifiedtype,vmajor,vminor,type_return, &base, errors, recursionRestriction)) return true; if (s->imports.count() == 1 && !s->imports.at(0)->isLibrary && type_return && s != &unqualifiedset) { // qualified, and only 1 url @@ -858,13 +862,14 @@ QQmlImportInstance *QQmlImportNamespace::findImport(const QString &uri) const bool QQmlImportNamespace::resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, int *vmajor, int *vminor, QQmlType** type_return, - QString *base, QList *errors) + QString *base, QList *errors, + QQmlImport::RecursionRestriction recursionRestriction) { bool typeRecursionDetected = false; for (int i=0; iresolveType(typeLoader, type, vmajor, vminor, type_return, - base, &typeRecursionDetected)) { + base, &typeRecursionDetected, recursionRestriction)) { if (qmlCheckTypes()) { // check for type clashes for (int j = i+1; j::const_iterator it = nameSpace->imports.constBegin(); + it != nameSpace->imports.constEnd(); ++it) { + if ((*it)->uri == importUri) + return true; + } + } + QQmlImportInstance *inserted = addImportToNamespace(nameSpace, importUri, url, vmaj, vmin, QV4::CompiledData::Import::ImportFile, errors, isImplicitImport); Q_ASSERT(inserted); diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h index 7c691a468c..1a50d5c16a 100644 --- a/src/qml/qml/qqmlimport_p.h +++ b/src/qml/qml/qqmlimport_p.h @@ -70,6 +70,10 @@ class QQmlImportDatabase; class QQmlTypeLoader; class QQmlTypeLoaderQmldirContent; +namespace QQmlImport { + enum RecursionRestriction { PreventRecursion, AllowRecursion }; +} + struct QQmlImportInstance { QString uri; // e.g. QtQuick @@ -87,7 +91,8 @@ struct QQmlImportInstance bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, int *vmajor, int *vminor, QQmlType** type_return, - QString *base = 0, bool *typeRecursionDetected = 0) const; + QString *base = 0, bool *typeRecursionDetected = 0, + QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion) const; }; class QQmlImportNamespace @@ -102,7 +107,8 @@ public: bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef& type, int *vmajor, int *vminor, QQmlType** type_return, - QString *base = 0, QList *errors = 0); + QString *base = 0, QList *errors = 0, + QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion); // Prefix when used as a qualified import. Otherwise empty. QHashedString prefix; @@ -128,7 +134,8 @@ public: QQmlType** type_return, int *version_major, int *version_minor, QQmlImportNamespace** ns_return, - QList *errors = 0) const; + QList *errors = 0, + QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion) const; bool resolveType(QQmlImportNamespace*, const QHashedStringRef& type, QQmlType** type_return, int *version_major, int *version_minor) const; diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 0672618225..b75508e1e5 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -160,8 +160,9 @@ public: ~QQmlTypePrivate(); void init() const; - void initEnums() const; + void initEnums(const QQmlPropertyCache *cache = 0) const; void insertEnums(const QMetaObject *metaObject) const; + void insertEnumsFromPropertyCache(const QQmlPropertyCache *cache) const; QQmlType::RegistrationType regType; @@ -500,75 +501,17 @@ QQmlType *QQmlType::resolveCompositeBaseType(QQmlEnginePrivate *engine) const return QQmlMetaType::qmlType(mo); } -int QQmlType::resolveCompositeEnumValue(QQmlEnginePrivate *engine, const QString &name, bool *ok) const +QQmlPropertyCache *QQmlType::compositePropertyCache(QQmlEnginePrivate *engine) const { + // similar logic to resolveCompositeBaseType Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->enumValue(engine, name, ok); -} - -int QQmlType::resolveCompositeScopedEnumIndex(QQmlEnginePrivate *engine, const QV4::String *name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumIndex(engine, name, ok); -} - -int QQmlType::resolveCompositeScopedEnumIndex(QQmlEnginePrivate *engine, const QString &name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumIndex(engine, name, ok); -} - - -int QQmlType::resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, int index, const QV4::String *name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumValue(engine, index, name, ok); -} - -int QQmlType::resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, int index, const QString &name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumValue(engine, index, name, ok); -} - -int QQmlType::resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, const QByteArray &scopedName, const QByteArray &name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumValue(engine, scopedName, name, ok); -} - -int QQmlType::resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, const QStringRef &scopedName, const QStringRef &name, bool *ok) const -{ - Q_ASSERT(isComposite()); - *ok = false; - QQmlType *type = resolveCompositeBaseType(engine); - if (!type) - return -1; - return type->scopedEnumValue(engine, scopedName, name, ok); + if (!engine) + return 0; + QQmlRefPointer td(engine->typeLoader.getType(sourceUrl()), QQmlRefPointer::Adopt); + if (td.isNull() || !td->isComplete()) + return 0; + QV4::CompiledData::CompilationUnit *compilationUnit = td->compilationUnit(); + return compilationUnit->rootPropertyCache(); } static void clone(QMetaObjectBuilder &builder, const QMetaObject *mo, @@ -737,7 +680,7 @@ void QQmlTypePrivate::init() const lock.unlock(); } -void QQmlTypePrivate::initEnums() const +void QQmlTypePrivate::initEnums(const QQmlPropertyCache *cache) const { if (isEnumSetup) return; @@ -746,6 +689,8 @@ void QQmlTypePrivate::initEnums() const QMutexLocker lock(metaTypeDataLock()); if (isEnumSetup) return; + if (cache) + insertEnumsFromPropertyCache(cache); if (baseMetaObject) // could be singleton type without metaobject insertEnums(baseMetaObject); @@ -784,6 +729,31 @@ void QQmlTypePrivate::insertEnums(const QMetaObject *metaObject) const } } +void QQmlTypePrivate::insertEnumsFromPropertyCache(const QQmlPropertyCache *cache) const +{ + const QMetaObject *cppMetaObject = cache->firstCppMetaObject(); + + while (cache && cache->metaObject() != cppMetaObject) { + QStringHash *scoped = new QStringHash(); + + int count = cache->qmlEnumCount(); + for (int ii = 0; ii < count; ++ii) { + QQmlEnumData *enumData = cache->qmlEnum(ii); + + for (int jj = 0; jj < enumData->values.count(); ++jj) { + const QQmlEnumValue &value = enumData->values.at(jj); + enums.insert(value.namedValue, value.value); + scoped->insert(value.namedValue, value.value); + } + scopedEnums << scoped; + scopedEnumIndex.insert(enumData->name, scopedEnums.count()-1); + } + cache = cache->parent(); + } + insertEnums(cppMetaObject); +} + + QByteArray QQmlType::typeName() const { if (d->regType == SingletonType || d->regType == CompositeSingletonType) @@ -1033,11 +1003,11 @@ QUrl QQmlType::sourceUrl() const int QQmlType::enumValue(QQmlEnginePrivate *engine, const QHashedStringRef &name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeEnumValue(engine, name.toString(), ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; + *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->enums.value(name); if (rv) @@ -1050,11 +1020,11 @@ int QQmlType::enumValue(QQmlEnginePrivate *engine, const QHashedStringRef &name, int QQmlType::enumValue(QQmlEnginePrivate *engine, const QHashedCStringRef &name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeEnumValue(engine, name.toUtf16(), ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; + *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->enums.value(name); if (rv) @@ -1067,11 +1037,10 @@ int QQmlType::enumValue(QQmlEnginePrivate *engine, const QHashedCStringRef &name int QQmlType::enumValue(QQmlEnginePrivate *engine, const QV4::String *name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeEnumValue(engine, name->toQString(), ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->enums.value(name); if (rv) @@ -1084,11 +1053,10 @@ int QQmlType::enumValue(QQmlEnginePrivate *engine, const QV4::String *name, bool int QQmlType::scopedEnumIndex(QQmlEnginePrivate *engine, const QV4::String *name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumIndex(engine, name, ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->scopedEnumIndex.value(name); if (rv) @@ -1101,11 +1069,10 @@ int QQmlType::scopedEnumIndex(QQmlEnginePrivate *engine, const QV4::String *name int QQmlType::scopedEnumIndex(QQmlEnginePrivate *engine, const QString &name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumIndex(engine, name, ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->scopedEnumIndex.value(name); if (rv) @@ -1117,9 +1084,8 @@ int QQmlType::scopedEnumIndex(QQmlEnginePrivate *engine, const QString &name, bo int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, int index, const QV4::String *name, bool *ok) const { + Q_UNUSED(engine) Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumValue(engine, index, name, ok); *ok = true; Q_ASSERT(index > -1 && index < d->scopedEnums.count()); @@ -1133,9 +1099,8 @@ int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, int index, const QV4::S int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, int index, const QString &name, bool *ok) const { + Q_UNUSED(engine) Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumValue(engine, index, name, ok); *ok = true; Q_ASSERT(index > -1 && index < d->scopedEnums.count()); @@ -1150,11 +1115,10 @@ int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, int index, const QStrin int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, const QByteArray &scopedEnumName, const QByteArray &name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumValue(engine, scopedEnumName, name, ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->scopedEnumIndex.value(QHashedCStringRef(scopedEnumName.constData(), scopedEnumName.length())); if (rv) { @@ -1172,11 +1136,10 @@ int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, const QByteArray &scope int QQmlType::scopedEnumValue(QQmlEnginePrivate *engine, const QStringRef &scopedEnumName, const QStringRef &name, bool *ok) const { Q_ASSERT(ok); - if (isComposite()) - return resolveCompositeScopedEnumValue(engine, scopedEnumName, name, ok); + const QQmlPropertyCache *cache = isComposite() ? compositePropertyCache(engine) : 0; *ok = true; - d->initEnums(); + d->initEnums(cache); int *rv = d->scopedEnumIndex.value(QHashedStringRef(scopedEnumName)); if (rv) { diff --git a/src/qml/qml/qqmlmetatype_p.h b/src/qml/qml/qqmlmetatype_p.h index 4dd28bbd36..ead4f130ec 100644 --- a/src/qml/qml/qqmlmetatype_p.h +++ b/src/qml/qml/qqmlmetatype_p.h @@ -135,6 +135,7 @@ public: struct QQmlMetaTypeData; class QHashedCStringRef; +class QQmlPropertyCache; class Q_QML_PRIVATE_EXPORT QQmlType { public: @@ -227,13 +228,7 @@ public: private: QQmlType *superType() const; QQmlType *resolveCompositeBaseType(QQmlEnginePrivate *engine) const; - int resolveCompositeEnumValue(QQmlEnginePrivate *engine, const QString &name, bool *ok) const; - int resolveCompositeScopedEnumIndex(QQmlEnginePrivate *engine, const QV4::String *, bool *ok) const; - int resolveCompositeScopedEnumIndex(QQmlEnginePrivate *engine, const QString &name, bool *ok) const; - int resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, int index, const QV4::String *, bool *ok) const; - int resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, int index, const QString &name, bool *ok) const; - int resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, const QByteArray &scopedName, const QByteArray &name, bool *ok) const; - int resolveCompositeScopedEnumValue(QQmlEnginePrivate *engine, const QStringRef &scopedName, const QStringRef &name, bool *ok) const; + QQmlPropertyCache *compositePropertyCache(QQmlEnginePrivate *engine) const; friend class QQmlTypePrivate; friend struct QQmlMetaTypeData; diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index d18159841c..15b9fe8312 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -321,12 +321,13 @@ QQmlPropertyCache *QQmlPropertyCache::copy() } QQmlPropertyCache *QQmlPropertyCache::copyAndReserve(int propertyCount, int methodCount, - int signalCount) + int signalCount, int enumCount) { QQmlPropertyCache *rv = copy(propertyCount + methodCount + signalCount); rv->propertyIndexCache.reserve(propertyCount); rv->methodIndexCache.reserve(methodCount); rv->signalHandlerIndexCache.reserve(signalCount); + rv->enumCache.reserve(enumCount); rv->_metaObject = 0; return rv; @@ -421,6 +422,14 @@ void QQmlPropertyCache::appendMethod(const QString &name, QQmlPropertyData::Flag setNamedProperty(name, methodIndex + methodOffset(), methodIndexCache.data() + methodIndex, (old != 0)); } +void QQmlPropertyCache::appendEnum(const QString &name, const QVector &values) +{ + QQmlEnumData data; + data.name = name; + data.values = values; + enumCache.append(data); +} + // Returns this property cache's metaObject, creating it if necessary. const QMetaObject *QQmlPropertyCache::createMetaObject() { @@ -1245,6 +1254,16 @@ void QQmlPropertyCache::toMetaObjectBuilder(QMetaObjectBuilder &builder) method.setReturnType(returnType); } + for (int ii = 0; ii < enumCache.count(); ++ii) { + const QQmlEnumData &enumData = enumCache.at(ii); + QMetaEnumBuilder enumeration = builder.addEnumerator(enumData.name.toUtf8()); + enumeration.setIsScoped(true); + for (int jj = 0; jj < enumData.values.count(); ++jj) { + const QQmlEnumValue &value = enumData.values.at(jj); + enumeration.addKey(value.namedValue.toUtf8(), value.value); + } + } + if (!_defaultPropertyName.isEmpty()) { QQmlPropertyData *dp = property(_defaultPropertyName, 0, 0); if (dp && dp->coreIndex() >= propertyIndexCacheStart) { diff --git a/src/qml/qml/qqmlpropertycache_p.h b/src/qml/qml/qqmlpropertycache_p.h index 64be1cb206..392768c1b1 100644 --- a/src/qml/qml/qqmlpropertycache_p.h +++ b/src/qml/qml/qqmlpropertycache_p.h @@ -349,6 +349,20 @@ private: bool notFullyResolved() const { return _flags.notFullyResolved; } }; +struct QQmlEnumValue +{ + QQmlEnumValue() : value(-1) {} + QQmlEnumValue(const QString &n, int v) : namedValue(n), value(v) {} + QString namedValue; + int value; +}; + +struct QQmlEnumData +{ + QString name; + QVector values; +}; + class QQmlPropertyCacheMethodArguments; class Q_QML_PRIVATE_EXPORT QQmlPropertyCache : public QQmlRefCount, public QQmlCleanup { @@ -374,13 +388,14 @@ public: QQmlPropertyRawData::Flags signalFlags = QQmlPropertyData::Flags()); QQmlPropertyCache *copyAndReserve(int propertyCount, - int methodCount, int signalCount); + int methodCount, int signalCount, int enumCount); void appendProperty(const QString &, QQmlPropertyRawData::Flags flags, int coreIndex, int propType, int notifyIndex); void appendSignal(const QString &, QQmlPropertyRawData::Flags, int coreIndex, const int *types = 0, const QList &names = QList()); void appendMethod(const QString &, QQmlPropertyData::Flags flags, int coreIndex, const QList &names = QList()); + void appendEnum(const QString &, const QVector &); const QMetaObject *metaObject() const; const QMetaObject *createMetaObject(); @@ -395,6 +410,7 @@ public: QQmlPropertyData *property(int) const; QQmlPropertyData *method(int) const; QQmlPropertyData *signal(int index) const; + QQmlEnumData *qmlEnum(int) const; int methodIndexToSignalIndex(int) const; QString defaultPropertyName() const; @@ -434,6 +450,7 @@ public: inline int methodOffset() const; inline int signalCount() const; inline int signalOffset() const; + inline int qmlEnumCount() const; static bool isDynamicMetaObject(const QMetaObject *); @@ -507,6 +524,7 @@ private: IndexCache signalHandlerIndexCache; StringCache stringCache; AllowedRevisionCache allowedRevisionCache; + QVector enumCache; bool _hasPropertyOverrides : 1; bool _ownMetaObject : 1; @@ -747,6 +765,14 @@ inline QQmlPropertyData *QQmlPropertyCache::signal(int index) const return ensureResolved(rv); } +inline QQmlEnumData *QQmlPropertyCache::qmlEnum(int index) const +{ + if (index < 0 || index >= enumCache.count()) + return 0; + + return const_cast(&enumCache.at(index)); +} + inline int QQmlPropertyCache::methodIndexToSignalIndex(int index) const { if (index < 0 || index >= (methodIndexCacheStart + methodIndexCache.count())) @@ -817,6 +843,11 @@ int QQmlPropertyCache::signalOffset() const return signalHandlerIndexCacheStart; } +int QQmlPropertyCache::qmlEnumCount() const +{ + return enumCache.count(); +} + bool QQmlPropertyCache::callJSFactoryMethod(QObject *object, void **args) const { if (_jsFactoryMethodIndex != -1) { diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index e4293596d8..151a7cd883 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2651,6 +2651,10 @@ void QQmlTypeData::resolveTypes() m_resolvedTypes.insert(unresolvedRef.key(), ref); } + + // ### this allows enums to work without explicit import or instantiation of the type + if (!m_implicitImportLoaded) + loadImplicitImport(); } QQmlCompileError QQmlTypeData::buildTypeResolutionCaches( diff --git a/src/qml/qml/qqmltypenamecache.cpp b/src/qml/qml/qqmltypenamecache.cpp index c8e2b92c29..35ef8ada57 100644 --- a/src/qml/qml/qqmltypenamecache.cpp +++ b/src/qml/qml/qqmltypenamecache.cpp @@ -140,7 +140,7 @@ QQmlTypeNameCache::Result QQmlTypeNameCache::query(const QHashedStringRef &name, return result; } -QQmlTypeNameCache::Result QQmlTypeNameCache::query(const QV4::String *name) const +QQmlTypeNameCache::Result QQmlTypeNameCache::query(const QV4::String *name, QQmlImport::RecursionRestriction recursionRestriction) const { Result result = query(m_namedImports, name); @@ -156,7 +156,7 @@ QQmlTypeNameCache::Result QQmlTypeNameCache::query(const QV4::String *name) cons QQmlImportNamespace *typeNamespace = 0; QList errors; QQmlType *t = 0; - bool typeFound = m_imports.resolveType(typeName, &t, 0, 0, &typeNamespace, &errors); + bool typeFound = m_imports.resolveType(typeName, &t, 0, 0, &typeNamespace, &errors, recursionRestriction); if (typeFound) { return Result(t); } diff --git a/src/qml/qml/qqmltypenamecache_p.h b/src/qml/qml/qqmltypenamecache_p.h index 7cdcbe91b6..f7ba2a91b7 100644 --- a/src/qml/qml/qqmltypenamecache_p.h +++ b/src/qml/qml/qqmltypenamecache_p.h @@ -90,7 +90,7 @@ public: }; Result query(const QHashedStringRef &) const; Result query(const QHashedStringRef &, const void *importNamespace) const; - Result query(const QV4::String *) const; + Result query(const QV4::String *, QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion) const; Result query(const QV4::String *, const void *importNamespace) const; private: -- cgit v1.2.3