summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <mbrasser@ford.com>2017-04-20 15:59:31 +0200
committerMichael Brasser <michael.brasser@live.com>2017-07-13 21:00:55 +0000
commit22a2cc43387ec3b9f74a6c01f8665378a4541147 (patch)
tree33acf5a5367302eb3f488b688aba7c85959035ae
parent286f14f1e29e7f4e2db4517d087dd5c92606f971 (diff)
Add support for enum declarations in QML
Enums can be declared with the following syntax: enum MyEnum { Value1, Value2 } Grammar changes done by Simon Hausmann. [ChangeLog][QtQml] Enums can now be declared directly in QML. Task-number: QTBUG-14861 Change-Id: Ic6b6e032651d01ee2ecf9d5ce5734976cb3ad7ab Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp94
-rw-r--r--src/qml/compiler/qqmlirbuilder_p.h26
-rw-r--r--src/qml/compiler/qqmlpropertycachecreator_p.h19
-rw-r--r--src/qml/compiler/qv4compileddata_p.h47
-rw-r--r--src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc38
-rw-r--r--src/qml/jsruntime/qv4qmlcontext.cpp2
-rw-r--r--src/qml/parser/qqmljs.g34
-rw-r--r--src/qml/parser/qqmljsast.cpp17
-rw-r--r--src/qml/parser/qqmljsast_p.h67
-rw-r--r--src/qml/parser/qqmljsastfwd_p.h2
-rw-r--r--src/qml/parser/qqmljsastvisitor_p.h4
-rw-r--r--src/qml/parser/qqmljsgrammar.cpp2111
-rw-r--r--src/qml/parser/qqmljsgrammar_p.h295
-rw-r--r--src/qml/parser/qqmljskeywords_p.h2
-rw-r--r--src/qml/parser/qqmljslexer_p.h1
-rw-r--r--src/qml/parser/qqmljsparser.cpp384
-rw-r--r--src/qml/parser/qqmljsparser_p.h5
-rw-r--r--src/qml/qml/qqmlimport.cpp36
-rw-r--r--src/qml/qml/qqmlimport_p.h13
-rw-r--r--src/qml/qml/qqmlmetatype.cpp151
-rw-r--r--src/qml/qml/qqmlmetatype_p.h9
-rw-r--r--src/qml/qml/qqmlpropertycache.cpp21
-rw-r--r--src/qml/qml/qqmlpropertycache_p.h33
-rw-r--r--src/qml/qml/qqmltypeloader.cpp4
-rw-r--r--src/qml/qml/qqmltypenamecache.cpp4
-rw-r--r--src/qml/qml/qqmltypenamecache_p.h2
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp3
-rw-r--r--tests/auto/qml/qqmllanguage/data/TypeWithEnum.qml14
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/NonSingletonType.qml5
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/SingletonType.qml5
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/qmldir4
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/test.js1
-rw-r--r--tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.errors.txt1
-rw-r--r--tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.qml9
-rw-r--r--tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.errors.txt1
-rw-r--r--tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.qml9
-rw-r--r--tests/auto/qml/qqmllanguage/data/mixedModuleWithSelfImport.qml3
-rw-r--r--tests/auto/qml/qqmllanguage/data/usingTypeWithEnum.qml8
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp35
39 files changed, 2014 insertions, 1505 deletions
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<PoolList<Property> >();
aliases = pool->New<PoolList<Alias> >();
+ qmlEnums = pool->New<PoolList<Enum>>();
qmlSignals = pool->New<PoolList<Signal> >();
bindings = pool->New<PoolList<Binding> >();
functions = pool->New<PoolList<Function> >();
@@ -118,6 +119,21 @@ QString Object::sanityCheckFunctionNames(const QSet<QString> &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<Enum>();
+ 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<PoolList<EnumValue>>();
+
+ QQmlJS::AST::UiEnumMemberList *e = node->members;
+ int i = -1;
+ while (e) {
+ EnumValue *enumValue = New<EnumValue>();
+ 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<quint32_le*>(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<QV4::CompiledData::Enum*>(enumPtr);
+
+ enumToWrite->nameIndex = e->nameIndex;
+ enumToWrite->location = e->location;
+ enumToWrite->nEnumValues = e->enumValues->count;
+
+ QV4::CompiledData::EnumValue *enumValueToWrite = reinterpret_cast<QV4::CompiledData::EnumValue*>(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<quint32_le *>(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<EnumValue> *enumValues;
+
+ int enumValueCount() const { return enumValues->count; }
+ PoolList<EnumValue>::Iterator enumValuesBegin() const { return enumValues->begin(); }
+ PoolList<EnumValue>::Iterator enumValuesEnd() const { return enumValues->end(); }
+
+ Enum *next;
+};
+
+
struct SignalParameter : public QV4::CompiledData::Parameter
{
SignalParameter *next;
@@ -359,6 +378,8 @@ public:
int propertyCount() const { return properties->count; }
Alias *firstAlias() const { return aliases->first; }
int aliasCount() const { return aliases->count; }
+ const Enum *firstEnum() const { return qmlEnums->first; }
+ int enumCount() const { return qmlEnums->count; }
const Signal *firstSignal() const { return qmlSignals->first; }
int signalCount() const { return qmlSignals->count; }
Binding *firstBinding() const { return bindings->first; }
@@ -372,6 +393,8 @@ public:
PoolList<Property>::Iterator propertiesEnd() const { return properties->end(); }
PoolList<Alias>::Iterator aliasesBegin() const { return aliases->begin(); }
PoolList<Alias>::Iterator aliasesEnd() const { return aliases->end(); }
+ PoolList<Enum>::Iterator enumsBegin() const { return qmlEnums->begin(); }
+ PoolList<Enum>::Iterator enumsEnd() const { return qmlEnums->end(); }
PoolList<Signal>::Iterator signalsBegin() const { return qmlSignals->begin(); }
PoolList<Signal>::Iterator signalsEnd() const { return qmlSignals->end(); }
PoolList<Function>::Iterator functionsBegin() const { return functions->begin(); }
@@ -385,6 +408,7 @@ public:
QString sanityCheckFunctionNames(const QSet<QString> &illegalNames, QQmlJS::AST::SourceLocation *errorLocation);
+ QString appendEnum(Enum *enumeration);
QString appendSignal(Signal *signal);
QString appendProperty(Property *prop, const QString &propertyName, bool isDefaultProperty, const QQmlJS::AST::SourceLocation &defaultToken, QQmlJS::AST::SourceLocation *errorLocation);
QString appendAlias(Alias *prop, const QString &aliasName, bool isDefaultProperty, const QQmlJS::AST::SourceLocation &defaultToken, QQmlJS::AST::SourceLocation *errorLocation);
@@ -408,6 +432,7 @@ private:
PoolList<Property> *properties;
PoolList<Alias> *aliases;
+ PoolList<Enum> *qmlEnums;
PoolList<Signal> *qmlSignals;
PoolList<Binding> *bindings;
PoolList<Function> *functions;
@@ -482,6 +507,7 @@ public:
bool visit(QQmlJS::AST::UiArrayBinding *ast) override;
bool visit(QQmlJS::AST::UiObjectBinding *ast) override;
bool visit(QQmlJS::AST::UiObjectDefinition *ast) override;
+ bool visit(QQmlJS::AST::UiEnumDeclaration *ast) override;
bool visit(QQmlJS::AST::UiPublicMember *ast) override;
bool visit(QQmlJS::AST::UiScriptBinding *ast) override;
bool visit(QQmlJS::AST::UiSourceElement *ast) override;
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<ObjectContainer>::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<ObjectContainer>::createMetaObj
QQmlRefPointer<QQmlPropertyCache> 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<ObjectContainer>::createMetaObj
cache->appendSignal(changedSigName, flags, effectiveMethodIndex++);
}
+ auto e = obj->enumsBegin();
+ auto eend = obj->enumsEnd();
+ for ( ; e != eend; ++e) {
+ const int enumValueCount = e->enumValueCount();
+ QVector<QQmlEnumValue> 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<const EnumValue*>(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<const Binding*>(reinterpret_cast<const char *>(this) + offsetToBindings);
}
+ const Enum *enumAt(int idx) const
+ {
+ const quint32_le *offsetTable = reinterpret_cast<const quint32_le*>((reinterpret_cast<const char *>(this)) + offsetToEnums);
+ const quint32_le offset = offsetTable[idx];
+ return reinterpret_cast<const Enum*>(reinterpret_cast<const char*>(this) + offset);
+ }
+
const Signal *signalAt(int idx) const
{
const quint32_le *offsetTable = reinterpret_cast<const quint32_le*>((reinterpret_cast<const char *>(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<Enum, Object, &Object::enumAt> EnumIterator;
+ EnumIterator enumsBegin() const { return EnumIterator(this, 0); }
+ EnumIterator enumsEnd() const { return EnumIterator(this, nEnums); }
+
typedef TableIterator<Signal, Object, &Object::signalAt> 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 {<Type>.<EnumerationType>.<Value>} or \c {<Type>.<Value>}.
+
+\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<AST::ArrayMemberExpression *>(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<QQmlError> *errors);
bool resolveType(const QHashedStringRef &type, int *vmajor, int *vminor,
- QQmlType** type_return, QList<QQmlError> *errors);
+ QQmlType** type_return, QList<QQmlError> *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<QQmlError> *errors) const
+ QQmlImportNamespace** ns_return, QList<QQmlError> *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<QQmlError> *errors)
+ QQmlType** type_return, QList<QQmlError> *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<QQmlError> *errors)
+ QString *base, QList<QQmlError> *errors,
+ QQmlImport::RecursionRestriction recursionRestriction)
{
bool typeRecursionDetected = false;
for (int i=0; i<imports.count(); ++i) {
const QQmlImportInstance *import = imports.at(i);
if (import->resolveType(typeLoader, type, vmajor, vminor, type_return,
- base, &typeRecursionDetected)) {
+ base, &typeRecursionDetected, recursionRestriction)) {
if (qmlCheckTypes()) {
// check for type clashes
for (int j = i+1; j<imports.count(); ++j) {
@@ -1489,6 +1494,17 @@ bool QQmlImportsPrivate::addFileImport(const QString& uri, const QString &prefix
if (!url.endsWith(Slash) && !url.endsWith(Backslash))
url += Slash;
+ // ### For enum support, we are now adding the implicit import always (and earlier). Bail early
+ // if the implicit import has already been explicitly added, otherwise we can run into issues
+ // with duplicate imports
+ if (isImplicitImport) {
+ for (QList<QQmlImportInstance *>::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<QQmlError> *errors = 0);
+ QString *base = 0, QList<QQmlError> *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<QQmlError> *errors = 0) const;
+ QList<QQmlError> *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<QQmlTypeData> td(engine->typeLoader.getType(sourceUrl()), QQmlRefPointer<QQmlTypeData>::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<int> *scoped = new QStringHash<int>();
+
+ 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<QQmlEnumValue> &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<QQmlEnumValue> 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<QByteArray> &names = QList<QByteArray>());
void appendMethod(const QString &, QQmlPropertyData::Flags flags, int coreIndex,
const QList<QByteArray> &names = QList<QByteArray>());
+ void appendEnum(const QString &, const QVector<QQmlEnumValue> &);
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<QQmlEnumData> 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<QQmlEnumData *>(&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<QQmlError> 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:
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index dac6ddaebd..7aca830297 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -741,6 +741,9 @@ public:
if (url.path().endsWith("Test.2/qmldir"))//Special case
return QUrl::fromLocalFile(m_base.path() + "interception/module/intercepted/qmldir");
+ // Special case: with 5.10 we always add the implicit import, so we need to explicitly handle this case now
+ if (url.path().endsWith("intercepted/qmldir"))
+ return url;
QString alteredPath = url.path();
int a = alteredPath.lastIndexOf('/');
diff --git a/tests/auto/qml/qqmllanguage/data/TypeWithEnum.qml b/tests/auto/qml/qqmllanguage/data/TypeWithEnum.qml
new file mode 100644
index 0000000000..c89a228bef
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/TypeWithEnum.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+QtObject {
+ enum MyEnum {
+ EnumValue1,
+ EnumValue2,
+ EnumValue3
+ }
+
+ property int enumValue: TypeWithEnum.EnumValue2
+ property int enumValue2
+ property int scopedEnumValue: TypeWithEnum.MyEnum.EnumValue2
+ Component.onCompleted: enumValue2 = TypeWithEnum.EnumValue3
+}
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/NonSingletonType.qml b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/NonSingletonType.qml
new file mode 100644
index 0000000000..ec7c76c055
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/NonSingletonType.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+import org.qtproject.MixedModule 1.0
+
+Item {
+}
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/SingletonType.qml b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/SingletonType.qml
new file mode 100644
index 0000000000..7763c783f1
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/SingletonType.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+pragma Singleton
+
+Item {
+}
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/qmldir b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/qmldir
new file mode 100644
index 0000000000..cd03a5f941
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/qmldir
@@ -0,0 +1,4 @@
+module org.qtproject.MixedModule
+singleton SingletonType 1.0 SingletonType.qml
+NonSingletonType 1.0 NonSingletonType.qml
+Test 1.0 test.js
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/test.js b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/test.js
new file mode 100644
index 0000000000..6a53b53b02
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/MixedModule/test.js
@@ -0,0 +1 @@
+var foo = 1
diff --git a/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.errors.txt b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.errors.txt
new file mode 100644
index 0000000000..d1bd2bcff4
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.errors.txt
@@ -0,0 +1 @@
+6:9:Enum names must begin with an upper case letter
diff --git a/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.qml b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.qml
new file mode 100644
index 0000000000..0b50820128
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.1.qml
@@ -0,0 +1,9 @@
+import QtQuick 2.0
+
+QtObject {
+ enum MyEnum {
+ EnumValue1,
+ enumValue2,
+ EnumValue3
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.errors.txt b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.errors.txt
new file mode 100644
index 0000000000..3e051c416e
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.errors.txt
@@ -0,0 +1 @@
+4:5:Scoped enum names must begin with an upper case letter
diff --git a/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.qml b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.qml
new file mode 100644
index 0000000000..bb7aea6aa4
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lowercaseQmlEnum.2.qml
@@ -0,0 +1,9 @@
+import QtQuick 2.0
+
+QtObject {
+ enum myEnum {
+ EnumValue1,
+ EnumValue2,
+ EnumValue3
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/mixedModuleWithSelfImport.qml b/tests/auto/qml/qqmllanguage/data/mixedModuleWithSelfImport.qml
new file mode 100644
index 0000000000..7768a6aedf
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/mixedModuleWithSelfImport.qml
@@ -0,0 +1,3 @@
+import org.qtproject.MixedModule 1.0
+
+NonSingletonType {}
diff --git a/tests/auto/qml/qqmllanguage/data/usingTypeWithEnum.qml b/tests/auto/qml/qqmllanguage/data/usingTypeWithEnum.qml
new file mode 100644
index 0000000000..2509fc0df1
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/usingTypeWithEnum.qml
@@ -0,0 +1,8 @@
+import QtQuick 2.0
+
+QtObject {
+ property int enumValue: TypeWithEnum.EnumValue2
+ property int enumValue2: -1
+ property int scopedEnumValue: TypeWithEnum.MyEnum.EnumValue3
+ Component.onCompleted: enumValue2 = TypeWithEnum.EnumValue1
+}
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 15f19d550b..c145c6d737 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -178,6 +178,7 @@ private slots:
void importIncorrectCase();
void importJs_data();
void importJs();
+ void explicitSelfImport();
void qmlAttachedPropertiesObjectMethod();
void customOnProperty();
@@ -209,6 +210,7 @@ private slots:
void lowercaseEnumCompileTime_data();
void lowercaseEnumCompileTime();
void scopedEnum();
+ void qmlEnums();
void literals_data();
void literals();
@@ -545,6 +547,8 @@ void tst_qqmllanguage::errors_data()
QTest::newRow("singularProperty.2") << "singularProperty.2.qml" << "singularProperty.2.errors.txt" << false;
QTest::newRow("scopedEnumList") << "scopedEnumList.qml" << "scopedEnumList.errors.txt" << false;
+ QTest::newRow("lowercase enum value") << "lowercaseQmlEnum.1.qml" << "lowercaseQmlEnum.1.errors.txt" << false;
+ QTest::newRow("lowercase enum type") << "lowercaseQmlEnum.2.qml" << "lowercaseQmlEnum.2.errors.txt" << false;
const QString expectedError = isCaseSensitiveFileSystem(dataDirectory()) ?
QStringLiteral("incorrectCase.errors.sensitive.txt") :
@@ -3067,6 +3071,16 @@ void tst_qqmllanguage::importJs()
engine.setImportPathList(defaultImportPathList);
}
+void tst_qqmllanguage::explicitSelfImport()
+{
+ engine.setImportPathList(QStringList(defaultImportPathList) << testFile("lib"));
+
+ QQmlComponent component(&engine, testFileUrl("mixedModuleWithSelfImport.qml"));
+ QVERIFY(component.errors().count() == 0);
+
+ engine.setImportPathList(defaultImportPathList);
+}
+
void tst_qqmllanguage::qmlAttachedPropertiesObjectMethod()
{
QObject object;
@@ -3707,6 +3721,27 @@ void tst_qqmllanguage::scopedEnum()
QCOMPARE(o->property("noScope").toInt(), (int)MyTypeObject::MyScopedEnum::ScopedVal2);
}
+void tst_qqmllanguage::qmlEnums()
+{
+ {
+ QQmlComponent component(&engine, testFileUrl("TypeWithEnum.qml"));
+ QObject *o = component.create();
+ QVERIFY(o);
+ QCOMPARE(o->property("enumValue").toInt(), 1);
+ QCOMPARE(o->property("enumValue2").toInt(), 2);
+ QCOMPARE(o->property("scopedEnumValue").toInt(), 1);
+ }
+
+ {
+ QQmlComponent component(&engine, testFileUrl("usingTypeWithEnum.qml"));
+ QObject *o = component.create();
+ QVERIFY(o);
+ QCOMPARE(o->property("enumValue").toInt(), 1);
+ QCOMPARE(o->property("enumValue2").toInt(), 0);
+ QCOMPARE(o->property("scopedEnumValue").toInt(), 2);
+ }
+}
+
void tst_qqmllanguage::literals_data()
{
QTest::addColumn<QString>("property");