diff options
author | Martin Jones <martin.jones@nokia.com> | 2009-07-27 07:08:23 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2009-07-27 07:08:23 (GMT) |
commit | 10c75fb244f57b7caaf72cd570883e8c8bb5da7d (patch) | |
tree | 886ef437f51a4f4973d876bf368e25752e815258 | |
parent | 2ea4aec304eefa10a554e40c5f9ea948d18617a7 (diff) | |
parent | 27bc8c55608f0363ef49ce79efa9e0cd9f464fae (diff) | |
download | Qt-10c75fb244f57b7caaf72cd570883e8c8bb5da7d.zip Qt-10c75fb244f57b7caaf72cd570883e8c8bb5da7d.tar.gz Qt-10c75fb244f57b7caaf72cd570883e8c8bb5da7d.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
53 files changed, 2004 insertions, 1679 deletions
diff --git a/mkspecs/linux-g++-x11egl/qmake.conf b/mkspecs/linux-g++-x11egl/qmake.conf index 50c1d68..593f120 100644 --- a/mkspecs/linux-g++-x11egl/qmake.conf +++ b/mkspecs/linux-g++-x11egl/qmake.conf @@ -1,30 +1,30 @@ -#
-# qmake configuration for linux-g++
-#
-
-MAKEFILE_GENERATOR = UNIX
-TEMPLATE = app
-CONFIG += qt warn_on release incremental link_prl
-QT += core gui
-QMAKE_INCREMENTAL_STYLE = sublib
-
-include(../common/g++.conf)
-include(../common/linux.conf)
-load(qt_config)
-
-QMAKE_INCDIR_EGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include
-QMAKE_LIBDIR_EGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib
-QMAKE_LIBS_EGL = -lGLESv2 -lEGL
-
-QMAKE_INCDIR_OPENGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include
-QMAKE_INCDIR_OPENGL_QT = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include
-
-QMAKE_LIBDIR_OPENGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib
-QMAKE_LIBDIR_OPENGL_QT = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib
-
-QMAKE_LIBS_OPENGL = -lGLESv2 -lEGL
-QMAKE_LIBS += -Wl,-rpath=$(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib
-
-QMAKE_LIBS_OPENGL_QT = -lGLESv2 -lEGL
-
-QMAKE_RPATH = -Wl,-rpath,
+# +# qmake configuration for linux-g++ +# + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release incremental link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +include(../common/g++.conf) +include(../common/linux.conf) +load(qt_config) + +QMAKE_INCDIR_EGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include +QMAKE_LIBDIR_EGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib +QMAKE_LIBS_EGL = -lGLESv2 -lEGL + +QMAKE_INCDIR_OPENGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include +QMAKE_INCDIR_OPENGL_QT = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/Include + +QMAKE_LIBDIR_OPENGL = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib +QMAKE_LIBDIR_OPENGL_QT = $(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib + +QMAKE_LIBS_OPENGL = -lGLESv2 -lEGL +QMAKE_LIBS += -Wl,-rpath=$(HOME)/opengles2/SDKPackage/Builds/OGLES2/LinuxPC/Lib + +QMAKE_LIBS_OPENGL_QT = -lGLESv2 -lEGL + +QMAKE_RPATH = -Wl,-rpath, diff --git a/src/declarative/fx/qfxanchors.h b/src/declarative/fx/qfxanchors.h index dcd5d79..c11080c 100644 --- a/src/declarative/fx/qfxanchors.h +++ b/src/declarative/fx/qfxanchors.h @@ -45,6 +45,7 @@ #include <QtCore/QObject> #include <QtDeclarative/qfxglobal.h> #include <QtDeclarative/qml.h> +#include <QtDeclarative/qfxitem.h> QT_BEGIN_HEADER @@ -52,31 +53,6 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) -class QFxItem; -class QFxAnchorLine -{ -public: - QFxAnchorLine() : item(0), anchorLine(Invalid) - { - } - - enum AnchorLine { - Invalid = 0x0, - Left = 0x01, - Right = 0x02, - Top = 0x04, - Bottom = 0x08, - HCenter = 0x10, - VCenter = 0x20, - Baseline = 0x40, - Horizontal_Mask = Left | Right | HCenter, - Vertical_Mask = Top | Bottom | VCenter | Baseline - }; - - QFxItem *item; - AnchorLine anchorLine; -}; - class QFxAnchorsPrivate; class Q_DECLARATIVE_EXPORT QFxAnchors : public QObject { @@ -184,6 +160,7 @@ private: Q_DISABLE_COPY(QFxAnchors) Q_DECLARE_PRIVATE(QFxAnchors) }; +Q_DECLARE_OPERATORS_FOR_FLAGS(QFxAnchors::UsedAnchors) QT_END_NAMESPACE diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp index 6c6fcd3..247ea53 100644 --- a/src/declarative/fx/qfxitem.cpp +++ b/src/declarative/fx/qfxitem.cpp @@ -49,7 +49,8 @@ #include <QtScript/qscriptengine.h> #include <private/qfxperf_p.h> -#include "qmlengine.h" +#include <QtDeclarative/qmlengine.h> +#include <private/qmlengine_p.h> #include "qmlstate.h" #include "qlistmodelinterface.h" #include "qfxanchors_p.h" @@ -819,7 +820,7 @@ void QFxItem::qmlLoaded() QFxItem* ret = qobject_cast<QFxItem*>(o); if (ret) { ret->setItemParent(this); - QScriptValue v = qmlEngine(this)->scriptEngine()->newQObject(ret); + QScriptValue v = QmlEnginePrivate::getScriptEngine(qmlEngine(this))->newQObject(ret); emit newChildCreated(d->_qmlnewloading.at(i).toString(),v); } diff --git a/src/declarative/fx/qfxitem.h b/src/declarative/fx/qfxitem.h index e3f371e..a75bdcd 100644 --- a/src/declarative/fx/qfxitem.h +++ b/src/declarative/fx/qfxitem.h @@ -45,7 +45,6 @@ #include <QtCore/QObject> #include <QtScript/qscriptvalue.h> #include <QtCore/QList> -#include <QtDeclarative/qfxanchors.h> #include <QtDeclarative/qfxglobal.h> #include <QtDeclarative/qml.h> #include <QtDeclarative/qmlcomponent.h> @@ -58,6 +57,7 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) +class QFxItem; class Q_DECLARATIVE_EXPORT QFxContents : public QObject { Q_OBJECT @@ -85,12 +85,36 @@ private: qreal m_height; qreal m_width; }; -Q_DECLARE_OPERATORS_FOR_FLAGS(QFxAnchors::UsedAnchors) + +class QFxAnchorLine +{ +public: + QFxAnchorLine() : item(0), anchorLine(Invalid) + { + } + + enum AnchorLine { + Invalid = 0x0, + Left = 0x01, + Right = 0x02, + Top = 0x04, + Bottom = 0x08, + HCenter = 0x10, + VCenter = 0x20, + Baseline = 0x40, + Horizontal_Mask = Left | Right | HCenter, + Vertical_Mask = Top | Bottom | VCenter | Baseline + }; + + QFxItem *item; + AnchorLine anchorLine; +}; class QmlState; class QmlTransition; class QFxTransform; class QFxKeyEvent; +class QFxAnchors; class QFxItemPrivate; class Q_DECLARATIVE_EXPORT QFxItem : public QGraphicsObject, public QmlParserStatus { diff --git a/src/declarative/fx/qfxitem_p.h b/src/declarative/fx/qfxitem_p.h index 029b8b0..bb3a97a 100644 --- a/src/declarative/fx/qfxitem_p.h +++ b/src/declarative/fx/qfxitem_p.h @@ -55,6 +55,7 @@ #include <QtDeclarative/qfxitem.h> #include <QtDeclarative/qmlstate.h> +#include <QtDeclarative/qfxanchors.h> #include <private/qmlnullablevalue_p.h> #include <QtDeclarative/qml.h> #include <QtDeclarative/qmlcontext.h> diff --git a/src/declarative/fx/qfxlineedit.cpp b/src/declarative/fx/qfxlineedit.cpp index c77942d..c88f1d0 100644 --- a/src/declarative/fx/qfxlineedit.cpp +++ b/src/declarative/fx/qfxlineedit.cpp @@ -50,6 +50,10 @@ QT_BEGIN_NAMESPACE QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,LineEdit,QFxLineEdit); QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,QIntValidator,QIntValidator); +/*! + \qmlclass LineEdit + \brief The LineEdit item allows you to add an editable line of text to a scene. +*/ QFxLineEdit::QFxLineEdit(QFxItem* parent) : QFxPaintedItem(*(new QFxLineEditPrivate), parent) { @@ -71,6 +75,12 @@ QFxLineEdit::~QFxLineEdit() { } +/*! + \qmlproperty string LineEdit::text + + The text in the LineEdit. +*/ + QString QFxLineEdit::text() const { Q_D(const QFxLineEdit); @@ -86,12 +96,22 @@ void QFxLineEdit::setText(const QString &s) //emit textChanged(); } +/*! + \qmlproperty font LineEdit::font + + Set the LineEdit's font attributes. \c font.size sets the font's point size. +*/ QmlFont *QFxLineEdit::font() { Q_D(QFxLineEdit); return d->font; } +/*! + \qmlproperty color LineEdit::color + + The text color. +*/ QColor QFxLineEdit::color() const { Q_D(const QFxLineEdit); @@ -140,6 +160,10 @@ void QFxLineEdit::setMaxLength(int ml) d->control->setMaxLength(ml); } +/*! + \qmlproperty LineEdit::cursorPosition + \brief The position of the cursor in the LineEdit. +*/ int QFxLineEdit::cursorPosition() const { Q_D(const QFxLineEdit); @@ -264,6 +288,19 @@ void QFxLineEdit::setEchoMode(uint echo) d->control->setEchoMode(echo); } +/*! + \qmlproperty LineEdit::cursorDelegate + \brief The delegate for the cursor in the LineEdit. + + If you set a cursorDelegate for a LineEdit, this delegate will be used for + drawing the cursor instead of the standard cursor. An instance of the + delegate will be created and managed by the LineEdit when a cursor is + needed, and the x property of delegate instance will be set so as + to be one pixel before the top left of the current character. + + Note that the root item of the delegate component must be a QFxItem or + QFxItem derived item. +*/ QmlComponent* QFxLineEdit::cursorDelegate() const { Q_D(const QFxLineEdit); diff --git a/src/declarative/qml/parser/parser.pri b/src/declarative/qml/parser/parser.pri index 610b2aa..1ea249a 100644 --- a/src/declarative/qml/parser/parser.pri +++ b/src/declarative/qml/parser/parser.pri @@ -1,5 +1,6 @@ INCLUDEPATH += $$PWD +DEPENDPATH += $$PWD HEADERS += $$PWD/qmljsast_p.h \ $$PWD/qmljsastfwd_p.h \ diff --git a/src/declarative/qml/parser/qmljs.g b/src/declarative/qml/parser/qmljs.g index 7d8faee..a1c4ba2 100644 --- a/src/declarative/qml/parser/qmljs.g +++ b/src/declarative/qml/parser/qmljs.g @@ -81,8 +81,6 @@ %token T_RESERVED_WORD "reserved word" %token T_MULTILINE_STRING_LITERAL "multiline string literal" -%token T_AT "@" - --- context keywords. %token T_PUBLIC "public" %token T_IMPORT "import" @@ -273,8 +271,9 @@ public: AST::UiObjectMemberList *UiObjectMemberList; AST::UiArrayMemberList *UiArrayMemberList; AST::UiQualifiedId *UiQualifiedId; - AST::UiAttributeList *UiAttributeList; - AST::UiAttribute *UiAttribute; + AST::UiSignature *UiSignature; + AST::UiFormalList *UiFormalList; + AST::UiFormal *UiFormal; }; public: @@ -671,93 +670,25 @@ case $rule_number: { } break; ./ -UiRootMember: UiAnnotation UiObjectDefinition ; -/. -case $rule_number: { - sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiObjectMember); -} break; -./ - -UiAnnotation: Empty ; -UiAnnotation: UiAttributeList ; +UiRootMember: UiObjectDefinition ; /. case $rule_number: { - sym(1).UiAttributeList = sym(1).UiAttributeList->finish(); + sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember); } break; ./ -UiAttributeList: UiAttribute ; +UiObjectMemberList: UiObjectMember ; /. case $rule_number: { - sym(1).UiAttributeList = makeAstNode<AST::UiAttributeList>(driver->nodePool(), sym(1).UiAttribute); + sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember); } break; ./ -UiAttributeList: UiAttributeList UiAttribute ; -/. -case $rule_number: { - sym(1).UiAttributeList = makeAstNode<AST::UiAttributeList>(driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiAttribute); -} break; -./ - -UiAttributeName: JsIdentifier ; -UiAttributeName: ReservedIdentifier ; - -UiAttribute: T_AT UiAttributeName ; -/. -case $rule_number: { - AST::UiAttribute *ast = makeAstNode<AST::UiAttribute>(driver->nodePool(), sym(2).sval); - ast->atToken = loc(1); - ast->nameToken = loc(2); - sym(1).UiAttribute = ast; -} break; -./ - -UiAttribute: T_AT UiAttributeName T_EQ UiAttributeValue ; -/. -case $rule_number: { - AST::UiAttribute *ast = makeAstNode<AST::UiAttribute>(driver->nodePool(), - sym(2).sval, sym(4).Expression); - ast->atToken = loc(1); - ast->nameToken = loc(2); - ast->equalToken = loc(3); - sym(1).UiAttribute = ast; -} break; -./ - -UiAttributeValue: UiAttributeName ; -/. -case $rule_number: { - AST::IdentifierExpression *node = makeAstNode<AST::IdentifierExpression> (driver->nodePool(), sym(1).sval); - node->identifierToken = loc(1); - sym(1).Node = node; -} break; -./ - -UiAttributeValue: T_NUMERIC_LITERAL ; -/. -case $rule_number: { - AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval, lexer->flags); - node->literalToken = loc(1); - sym(1).Node = node; -} break; -./ - -UiObjectMemberList: UiAnnotation UiObjectMember ; -/. -case $rule_number: { - sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiObjectMember); -} break; -./ - -UiObjectMemberList: UiObjectMemberList UiAnnotation UiObjectMember ; +UiObjectMemberList: UiObjectMemberList UiObjectMember ; /. case $rule_number: { AST::UiObjectMemberList *node = makeAstNode<AST:: UiObjectMemberList> (driver->nodePool(), - sym(1).UiObjectMemberList, sym(2).UiAttributeList, sym(3).UiObjectMember); + sym(1).UiObjectMemberList, sym(2).UiObjectMember); sym(1).Node = node; } break; ./ @@ -769,20 +700,11 @@ case $rule_number: { } break; ./ -UiArrayMemberList: UiAttributeList UiObjectDefinition ; -/. -case $rule_number: { - sym(2).UiObjectMember->attributes = sym(1).UiAttributeList->finish(); - sym(1).Node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), sym(2).UiObjectMember); -} break; -./ - -UiArrayMemberList: UiArrayMemberList T_COMMA UiAnnotation UiObjectDefinition ; +UiArrayMemberList: UiArrayMemberList T_COMMA UiObjectDefinition ; /. case $rule_number: { - sym(4).UiObjectMember->attributes = sym(3).UiAttributeList; AST::UiArrayMemberList *node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), - sym(1).UiArrayMemberList, sym(4).UiObjectMember); + sym(1).UiArrayMemberList, sym(3).UiObjectMember); node->commaToken = loc(2); sym(1).Node = node; } break; @@ -822,8 +744,8 @@ UiObjectMember: UiObjectDefinition ; UiObjectMember: UiQualifiedId T_COLON T_LBRACKET UiArrayMemberList T_RBRACKET ; /. case $rule_number: { - AST::UiArrayBinding *node = makeAstNode<AST::UiArrayBinding> (driver->nodePool(), sym(1).UiQualifiedId->finish(), - sym(4).UiArrayMemberList->finish()); + AST::UiArrayBinding *node = makeAstNode<AST::UiArrayBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(4).UiArrayMemberList->finish()); node->colonToken = loc(2); node->lbracketToken = loc(3); node->rbracketToken = loc(5); @@ -831,7 +753,7 @@ case $rule_number: { } break; ./ -UiObjectMember: UiQualifiedId T_COLON Expression UiObjectInitializer ; +UiObjectMember: UiQualifiedId T_COLON Expression UiObjectInitializer ; /. case $rule_number: { if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(3).Expression)) { @@ -850,6 +772,48 @@ case $rule_number: { } break; ./ +UiObjectMember: UiQualifiedId UiSignature T_COLON Expression UiObjectInitializer ; +/. +case $rule_number: { + if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(4).Expression)) { + AST::UiObjectBinding *node = makeAstNode<AST::UiObjectBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), qualifiedId, sym(5).UiObjectInitializer); + node->colonToken = loc(3); + sym(1).Node = node; + } else { + sym(1).Node = 0; + + diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(2), + QLatin1String("Expected a type name after token `:'"))); + + return false; // ### recover + } +} break; +./ + +UiObjectMember: UiQualifiedId UiSignature T_COLON Block ; +/.case $rule_number:./ + +UiObjectMember: UiQualifiedId UiSignature T_COLON EmptyStatement ; +/.case $rule_number:./ + +UiObjectMember: UiQualifiedId UiSignature T_COLON ExpressionStatement ; +/.case $rule_number:./ + +UiObjectMember: UiQualifiedId UiSignature T_COLON IfStatement ; --- ### do we really want if statement in a binding? +/.case $rule_number:./ + +/. +{ + AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(4).Statement); + node->colonToken = loc(3); + sym(1).Node = node; +} break; +./ + + + UiObjectMember: UiQualifiedId T_COLON Block ; /.case $rule_number:./ @@ -864,8 +828,8 @@ UiObjectMember: UiQualifiedId T_COLON IfStatement ; --- ### do we really want if /. { - AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), sym(1).UiQualifiedId->finish(), - sym(3).Statement); + AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(3).Statement); node->colonToken = loc(2); sym(1).Node = node; } break; @@ -918,27 +882,89 @@ case $rule_number: { } break; ./ -UiObjectMember: T_SIGNAL T_IDENTIFIER T_LPAREN UiParameterListOpt T_RPAREN ; +UiFormal: JsIdentifier ; +/. +case $rule_number: { + AST::UiFormal *node = makeAstNode<AST::UiFormal>(driver->nodePool(), sym(1).sval); + node->identifierToken = loc(1); + sym(1).UiFormal = node; +} break; +./ + +UiFormal: JsIdentifier T_AS JsIdentifier ; +/. +case $rule_number: { + AST::UiFormal *node = makeAstNode<AST::UiFormal>(driver->nodePool(), + sym(1).sval, sym(3).sval); + node->identifierToken = loc(1); + node->asToken = loc(2); + node->aliasToken = loc(3); + sym(1).UiFormal = node; +} break; +./ + +UiFormalList: UiFormal ; +/. +case $rule_number: { + sym(1).UiFormalList = makeAstNode<AST::UiFormalList>(driver->nodePool(), + sym(1).UiFormal); +} break; +./ + +UiFormalList: UiFormalList T_COMMA UiFormal ; +/. +case $rule_number: { + sym(1).UiFormalList = makeAstNode<AST::UiFormalList>(driver->nodePool(), + sym(1).UiFormalList, sym(3).UiFormal); +} break; +./ + +UiSignature: T_LPAREN T_RPAREN ; +/. +case $rule_number: { + AST::UiSignature *node = makeAstNode<AST::UiSignature>(driver->nodePool()); + node->lparenToken = loc(1); + node->rparenToken = loc(3); + sym(1).UiSignature = node; +} break; +./ + +UiSignature: T_LPAREN UiFormalList T_RPAREN ; +/. +case $rule_number: { + AST::UiSignature *node = makeAstNode<AST::UiSignature>(driver->nodePool(), + sym(2).UiFormalList->finish()); + node->lparenToken = loc(1); + node->rparenToken = loc(3); + sym(1).UiSignature = node; +} break; +./ + +UiObjectMember: T_SIGNAL T_IDENTIFIER T_LPAREN UiParameterListOpt T_RPAREN T_AUTOMATIC_SEMICOLON ; +UiObjectMember: T_SIGNAL T_IDENTIFIER T_LPAREN UiParameterListOpt T_RPAREN T_SEMICOLON ; /. case $rule_number: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); node->typeToken = loc(2); - node->identifierToken = loc(3); + node->identifierToken = loc(2); node->parameters = sym(4).UiParameterList; + node->semicolonToken = loc(6); sym(1).Node = node; } break; ./ -UiObjectMember: T_SIGNAL T_IDENTIFIER ; +UiObjectMember: T_SIGNAL T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; +UiObjectMember: T_SIGNAL T_IDENTIFIER T_SEMICOLON ; /. case $rule_number: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); node->typeToken = loc(2); - node->identifierToken = loc(3); + node->identifierToken = loc(2); + node->semicolonToken = loc(3); sym(1).Node = node; } break; ./ @@ -1102,7 +1128,7 @@ case $rule_number: { PrimaryExpression: T_NUMERIC_LITERAL ; /. case $rule_number: { - AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval, lexer->flags); + AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval); node->literalToken = loc(1); sym(1).Node = node; } break; diff --git a/src/declarative/qml/parser/qmljsast.cpp b/src/declarative/qml/parser/qmljsast.cpp index fb4ea8a..1d7f09e 100644 --- a/src/declarative/qml/parser/qmljsast.cpp +++ b/src/declarative/qml/parser/qmljsast.cpp @@ -49,44 +49,6 @@ QT_BEGIN_NAMESPACE namespace QmlJS { namespace AST { -int NumericLiteral::suffixLength[] = { - 0, // noSuffix - 2, // emSuffix - 2, // exSuffix - 2, // pxSuffix - 2, // cmSuffix - 2, // mmSuffix - 2, // inSuffix - 2, // ptSuffix - 2, // pcSuffix - 3, // degSuffix - 3, // radSuffix - 4, // gradSuffix - 2, // msSuffix - 1, // sSuffix - 2, // hzSuffix - 3 // khzSuffix -}; - -const char *const NumericLiteral::suffixSpell[] = { - "", - "em", - "ex", - "px", - "cm", - "mm", - "in", - "pt", - "pc", - "deg", - "rad", - "grad", - "ms", - "s", - "hz", - "khz" -}; - ExpressionNode *Node::expressionCast() { return 0; @@ -839,29 +801,34 @@ void UiProgram::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiAttributeList::accept0(Visitor *visitor) +void UiSignature::accept0(Visitor *visitor) { if (visitor->visit(this)) { - for (UiAttributeList *it = this; it; it = it->next) - acceptChild(it->attribute, visitor); + acceptChild(formals, visitor); } - visitor->endVisit(this); } -void UiAttribute::accept0(Visitor *visitor) +void UiFormalList::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(value, visitor); + for (UiFormalList *it = this; it; it = it->next) { + acceptChild(it->formal, visitor); + } } + visitor->endVisit(this); +} +void UiFormal::accept0(Visitor *visitor) +{ + if (visitor->visit(this)) { + } visitor->endVisit(this); } void UiPublicMember::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(expression, visitor); } @@ -871,7 +838,6 @@ void UiPublicMember::accept0(Visitor *visitor) void UiObjectDefinition::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(qualifiedTypeNameId, visitor); acceptChild(initializer, visitor); } @@ -892,7 +858,6 @@ void UiObjectInitializer::accept0(Visitor *visitor) void UiObjectBinding::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(qualifiedId, visitor); acceptChild(qualifiedTypeNameId, visitor); acceptChild(initializer, visitor); @@ -904,7 +869,6 @@ void UiObjectBinding::accept0(Visitor *visitor) void UiScriptBinding::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(qualifiedId, visitor); acceptChild(statement, visitor); } @@ -915,7 +879,6 @@ void UiScriptBinding::accept0(Visitor *visitor) void UiArrayBinding::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(qualifiedId, visitor); for (UiArrayMemberList *it = members; it; it = it->next) acceptChild(it->member, visitor); @@ -973,7 +936,6 @@ void UiImportList::accept0(Visitor *visitor) void UiSourceElement::accept0(Visitor *visitor) { if (visitor->visit(this)) { - acceptChild(attributes, visitor); acceptChild(sourceElement, visitor); } diff --git a/src/declarative/qml/parser/qmljsast_p.h b/src/declarative/qml/parser/qmljsast_p.h index 73b2cbc..9745153 100644 --- a/src/declarative/qml/parser/qmljsast_p.h +++ b/src/declarative/qml/parser/qmljsast_p.h @@ -214,8 +214,9 @@ public: Kind_UiQualifiedId, Kind_UiScriptBinding, Kind_UiSourceElement, - Kind_UiAttributeList, - Kind_UiAttribute + Kind_UiFormal, + Kind_UiFormalList, + Kind_UiSignature }; inline Node() @@ -271,6 +272,89 @@ public: virtual SourceLocation lastSourceLocation() const = 0; }; +class UiFormal: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiFormal) + + UiFormal(NameId *name, NameId *alias = 0) + : name(name), alias(alias) + { } + + virtual SourceLocation firstSourceLocation() const + { return SourceLocation(); } + + virtual SourceLocation lastSourceLocation() const + { return SourceLocation(); } + + virtual void accept0(Visitor *visitor); + +// attributes + NameId *name; + NameId *alias; + SourceLocation identifierToken; + SourceLocation asToken; + SourceLocation aliasToken; +}; + +class UiFormalList: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiFormalList) + + UiFormalList(UiFormal *formal) + : formal(formal), next(this) {} + + UiFormalList(UiFormalList *previous, UiFormal *formal) + : formal(formal) + { + next = previous->next; + previous->next = this; + } + + UiFormalList *finish() + { + UiFormalList *head = next; + next = 0; + return head; + } + + virtual SourceLocation firstSourceLocation() const + { return SourceLocation(); } + + virtual SourceLocation lastSourceLocation() const + { return SourceLocation(); } + + virtual void accept0(Visitor *visitor); + +// attributes + UiFormal *formal; + UiFormalList *next; +}; + +class UiSignature: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiSignature) + + UiSignature(UiFormalList *formals = 0) + : formals(formals) + { } + + virtual SourceLocation firstSourceLocation() const + { return SourceLocation(); } + + virtual SourceLocation lastSourceLocation() const + { return SourceLocation(); } + + virtual void accept0(Visitor *visitor); + +// attributes + SourceLocation lparenToken; + UiFormalList *formals; + SourceLocation rparenToken; +}; + class NestedExpression: public ExpressionNode { public: @@ -402,30 +486,8 @@ class NumericLiteral: public ExpressionNode public: QMLJS_DECLARE_AST_NODE(NumericLiteral) - enum Suffix { // ### keep it in sync with the Suffix enum in qmljslexer_p.h - noSuffix, - emSuffix, - exSuffix, - pxSuffix, - cmSuffix, - mmSuffix, - inSuffix, - ptSuffix, - pcSuffix, - degSuffix, - radSuffix, - gradSuffix, - msSuffix, - sSuffix, - hzSuffix, - khzSuffix - }; - - static int suffixLength[]; - static const char *const suffixSpell[]; - - NumericLiteral(double v, int suffix): - value(v), suffix(suffix) { kind = K; } + NumericLiteral(double v): + value(v) { kind = K; } virtual ~NumericLiteral() {} virtual void accept0(Visitor *visitor); @@ -438,7 +500,6 @@ public: // attributes: double value; - int suffix; SourceLocation literalToken; }; @@ -2183,56 +2244,6 @@ public: UiObjectMemberList *members; }; -class UiAttributeList: public Node -{ -public: - QMLJS_DECLARE_AST_NODE(UiAttributeList) - - UiAttributeList(UiAttribute *attribute) - : attribute(attribute), next(this) - { kind = K; } - - UiAttributeList(UiAttributeList *previous, UiAttribute *attribute) - : attribute(attribute) - { - next = previous->next; - previous->next = this; - kind = K; - } - - UiAttributeList *finish() - { - UiAttributeList *head = next; - next = 0; - return head; - } - - virtual void accept0(Visitor *visitor); - -// attributes - UiAttribute *attribute; - UiAttributeList *next; -}; - -class UiAttribute: public Node -{ -public: - QMLJS_DECLARE_AST_NODE(UiAttribute) - - UiAttribute(NameId *name, ExpressionNode *value = 0) - : name(name), value(value) - { kind = K; } - - virtual void accept0(Visitor *visitor); - -// attributes - NameId *name; - ExpressionNode *value; - SourceLocation atToken; - SourceLocation nameToken; - SourceLocation equalToken; -}; - class UiQualifiedId: public Node { public: @@ -2331,9 +2342,6 @@ class UiObjectMember: public Node public: virtual SourceLocation firstSourceLocation() const = 0; virtual SourceLocation lastSourceLocation() const = 0; - -// attributes - UiAttributeList *attributes; }; class UiObjectMemberList: public Node @@ -2341,21 +2349,16 @@ class UiObjectMemberList: public Node public: QMLJS_DECLARE_AST_NODE(UiObjectMemberList) - UiObjectMemberList(UiAttributeList *attributes, UiObjectMember *member) + UiObjectMemberList(UiObjectMember *member) : next(this), member(member) - { - kind = K; - member->attributes = attributes; - } + { kind = K; } - UiObjectMemberList(UiObjectMemberList *previous, UiAttributeList *attributes, - UiObjectMember *member) + UiObjectMemberList(UiObjectMemberList *previous, UiObjectMember *member) : member(member) { kind = K; next = previous->next; previous->next = this; - member->attributes = attributes; } virtual void accept0(Visitor *visitor); diff --git a/src/declarative/qml/parser/qmljsastfwd_p.h b/src/declarative/qml/parser/qmljsastfwd_p.h index 18b3704..f79cfc2 100644 --- a/src/declarative/qml/parser/qmljsastfwd_p.h +++ b/src/declarative/qml/parser/qmljsastfwd_p.h @@ -176,8 +176,9 @@ class UiObjectMember; class UiObjectMemberList; class UiArrayMemberList; class UiQualifiedId; -class UiAttributeList; -class UiAttribute; +class UiFormalList; +class UiFormal; +class UiSignature; } } // namespace AST diff --git a/src/declarative/qml/parser/qmljsastvisitor_p.h b/src/declarative/qml/parser/qmljsastvisitor_p.h index c2486d7..237640f 100644 --- a/src/declarative/qml/parser/qmljsastvisitor_p.h +++ b/src/declarative/qml/parser/qmljsastvisitor_p.h @@ -82,8 +82,9 @@ public: virtual bool visit(UiObjectMemberList *) { return true; } virtual bool visit(UiArrayMemberList *) { return true; } virtual bool visit(UiQualifiedId *) { return true; } - virtual bool visit(UiAttributeList *) { return true; } - virtual bool visit(UiAttribute *) { return true; } + virtual bool visit(UiSignature *) { return true; } + virtual bool visit(UiFormalList *) { return true; } + virtual bool visit(UiFormal *) { return true; } virtual void endVisit(UiProgram *) {} virtual void endVisit(UiImportList *) {} @@ -98,8 +99,9 @@ public: virtual void endVisit(UiObjectMemberList *) {} virtual void endVisit(UiArrayMemberList *) {} virtual void endVisit(UiQualifiedId *) {} - virtual void endVisit(UiAttributeList *) {} - virtual void endVisit(UiAttribute *) {} + virtual void endVisit(UiSignature *) {} + virtual void endVisit(UiFormalList *) {} + virtual void endVisit(UiFormal *) {} // QmlJS virtual bool visit(ThisExpression *) { return true; } diff --git a/src/declarative/qml/parser/qmljsgrammar.cpp b/src/declarative/qml/parser/qmljsgrammar.cpp index 13a68c8..21dde3f 100644 --- a/src/declarative/qml/parser/qmljsgrammar.cpp +++ b/src/declarative/qml/parser/qmljsgrammar.cpp @@ -51,367 +51,366 @@ const char *const QmlJSGrammar::spell [] = { "||", "+", "+=", "++", "?", "}", "]", "%", "%=", "return", ")", ";", 0, "*", "*=", "string literal", "property", "signal", "switch", "this", "throw", "~", "try", "typeof", "var", "void", "while", "with", "^", "^=", - "null", "true", "false", "const", "debugger", "reserved word", "multiline string literal", "@", "public", "import", - "as", 0, 0, 0, 0, 0}; + "null", "true", "false", "const", "debugger", "reserved word", "multiline string literal", "public", "import", "as", + 0, 0, 0, 0, 0}; const int QmlJSGrammar::lhs [] = { - 96, 96, 96, 97, 100, 100, 103, 103, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 102, 101, 107, 107, 109, 109, 111, 111, 110, 110, - 113, 113, 114, 114, 116, 116, 116, 117, 117, 108, - 115, 115, 115, 115, 115, 115, 115, 122, 122, 122, - 123, 123, 124, 124, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 106, 106, 105, 105, - 105, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 106, - 106, 129, 129, 129, 129, 128, 128, 131, 131, 133, - 133, 133, 133, 133, 133, 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, 134, 134, 135, 135, - 135, 135, 135, 138, 138, 139, 139, 139, 139, 137, - 137, 140, 140, 141, 141, 142, 142, 142, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, - 144, 144, 145, 145, 145, 146, 146, 146, 146, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, - 148, 148, 149, 149, 149, 149, 149, 150, 150, 150, - 150, 150, 151, 151, 152, 152, 153, 153, 154, 154, - 155, 155, 156, 156, 157, 157, 158, 158, 159, 159, - 160, 160, 161, 161, 162, 162, 132, 132, 163, 163, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 99, 99, 165, 165, 166, 166, 167, 167, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 118, 179, 179, 178, 178, - 126, 126, 180, 180, 181, 181, 183, 183, 182, 184, - 187, 185, 185, 188, 186, 186, 119, 120, 120, 121, - 121, 168, 168, 168, 168, 168, 168, 168, 169, 169, - 169, 169, 170, 170, 170, 170, 171, 171, 172, 174, - 189, 189, 192, 192, 190, 190, 193, 191, 173, 173, - 173, 175, 175, 176, 176, 176, 194, 195, 177, 177, - 125, 136, 199, 199, 196, 196, 197, 197, 200, 201, - 201, 202, 202, 198, 198, 130, 130, 203}; + 95, 95, 95, 96, 99, 99, 102, 102, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 101, 100, 107, 107, 109, 109, 110, 110, 106, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 116, 116, 116, 117, 117, 118, 118, 119, 119, + 120, 120, 111, 111, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 105, 105, + 104, 104, 104, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 105, 105, 125, 125, 125, 125, 124, 124, 127, + 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, + 132, 132, 132, 132, 132, 135, 135, 136, 136, 136, + 136, 134, 134, 137, 137, 138, 138, 139, 139, 139, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, + 143, 144, 144, 144, 144, 144, 144, 144, 145, 145, + 145, 145, 145, 145, 146, 146, 146, 146, 146, 147, + 147, 147, 147, 147, 148, 148, 149, 149, 150, 150, + 151, 151, 152, 152, 153, 153, 154, 154, 155, 155, + 156, 156, 157, 157, 158, 158, 159, 159, 128, 128, + 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 98, 98, 162, 162, 163, 163, + 164, 164, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 112, 176, 176, + 175, 175, 122, 122, 177, 177, 178, 178, 180, 180, + 179, 181, 184, 182, 182, 185, 183, 183, 113, 114, + 114, 115, 115, 165, 165, 165, 165, 165, 165, 165, + 166, 166, 166, 166, 167, 167, 167, 167, 168, 168, + 169, 171, 186, 186, 189, 189, 187, 187, 190, 188, + 170, 170, 170, 172, 172, 173, 173, 173, 191, 192, + 174, 174, 121, 133, 196, 196, 193, 193, 194, 194, + 197, 198, 198, 199, 199, 195, 195, 126, 126, 200}; const int QmlJSGrammar:: rhs[] = { 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 5, 5, 3, 3, 4, 4, 6, 6, 5, 5, - 0, 2, 1, 1, 1, 2, 1, 1, 2, 4, - 1, 1, 2, 3, 1, 2, 4, 2, 3, 2, - 1, 5, 4, 3, 3, 3, 3, 1, 1, 1, - 0, 1, 2, 4, 5, 2, 4, 4, 5, 5, - 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 2, 1, 3, 2, 3, 2, 1, + 5, 4, 5, 4, 4, 4, 4, 3, 3, 3, + 3, 1, 1, 1, 0, 1, 2, 4, 1, 3, + 1, 3, 2, 3, 6, 6, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 3, 3, 4, 5, 3, 4, 3, 1, - 3, 1, 2, 3, 4, 1, 2, 3, 5, 1, + 1, 1, 1, 2, 3, 3, 4, 5, 3, 4, + 3, 1, 3, 1, 2, 3, 4, 1, 2, 3, + 5, 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, - 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, 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, 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, 3, 1, 3, 2, 2, - 2, 0, 1, 2, 0, 1, 1, 2, 2, 7, - 5, 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, 3, 3, 4, 5, 2, 2, 2, - 8, 8, 1, 3, 0, 1, 0, 1, 1, 1, - 2, 1, 1, 0, 1, 0, 1, 2}; + 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, 3, 1, 3, + 2, 2, 2, 0, 1, 2, 0, 1, 1, 2, + 2, 7, 5, 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, 3, 3, 4, 5, 2, + 2, 2, 8, 8, 1, 3, 0, 1, 0, 1, + 1, 1, 2, 1, 1, 0, 1, 0, 1, 2}; const int QmlJSGrammar::action_default [] = { - 0, 0, 0, 21, 0, 176, 243, 207, 215, 211, - 155, 227, 203, 3, 140, 73, 156, 219, 223, 144, - 173, 154, 159, 139, 193, 180, 0, 80, 81, 76, - 344, 69, 346, 0, 0, 0, 0, 78, 0, 0, - 74, 77, 0, 0, 70, 71, 79, 72, 0, 75, - 0, 0, 169, 0, 0, 156, 175, 158, 157, 0, - 0, 0, 171, 172, 170, 174, 0, 204, 0, 0, - 0, 0, 194, 0, 0, 0, 0, 0, 0, 184, - 0, 0, 0, 178, 179, 177, 182, 186, 185, 183, - 181, 196, 195, 197, 0, 212, 0, 208, 0, 0, - 150, 137, 149, 138, 106, 107, 108, 133, 109, 134, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 135, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 136, 0, 0, 148, 244, 151, - 0, 152, 0, 153, 147, 0, 240, 233, 231, 238, - 239, 237, 236, 242, 235, 234, 232, 241, 228, 0, - 216, 0, 0, 220, 0, 0, 224, 0, 0, 150, - 142, 0, 141, 0, 146, 160, 0, 345, 335, 336, - 0, 333, 0, 334, 0, 337, 251, 258, 257, 265, - 253, 0, 254, 338, 0, 343, 255, 256, 261, 259, - 340, 339, 342, 262, 0, 273, 0, 0, 0, 0, - 344, 69, 0, 346, 70, 245, 287, 71, 0, 0, - 0, 274, 0, 0, 263, 264, 0, 252, 260, 288, - 289, 332, 341, 0, 303, 304, 305, 306, 0, 299, - 300, 301, 302, 329, 330, 0, 0, 0, 0, 0, - 292, 293, 249, 247, 209, 217, 213, 229, 205, 250, - 0, 156, 221, 225, 198, 187, 0, 0, 206, 0, - 0, 0, 0, 199, 0, 0, 0, 0, 0, 191, - 189, 192, 190, 188, 201, 200, 202, 0, 214, 0, - 210, 0, 248, 156, 0, 230, 245, 246, 0, 245, - 0, 0, 295, 0, 0, 0, 297, 0, 218, 0, - 0, 222, 0, 0, 226, 285, 0, 277, 286, 280, - 0, 284, 0, 245, 278, 0, 245, 0, 0, 296, - 0, 0, 0, 298, 345, 335, 0, 0, 337, 0, - 331, 0, 321, 0, 0, 0, 291, 0, 290, 0, - 347, 0, 105, 267, 270, 0, 106, 273, 109, 134, - 111, 112, 76, 116, 117, 69, 118, 121, 74, 77, - 70, 245, 71, 79, 124, 72, 126, 75, 128, 129, - 274, 131, 132, 136, 0, 98, 0, 0, 100, 104, - 102, 88, 101, 103, 0, 99, 87, 268, 266, 144, - 145, 150, 0, 143, 0, 320, 0, 307, 308, 0, - 319, 0, 0, 0, 310, 315, 313, 316, 0, 0, - 314, 315, 0, 311, 0, 312, 269, 318, 0, 269, - 317, 0, 322, 323, 0, 269, 324, 325, 0, 0, - 326, 0, 0, 0, 327, 328, 162, 161, 0, 0, - 0, 294, 0, 0, 0, 309, 282, 275, 0, 283, - 279, 0, 281, 271, 0, 272, 276, 92, 0, 0, - 96, 82, 0, 84, 94, 0, 85, 95, 97, 86, - 93, 83, 0, 89, 166, 164, 168, 165, 163, 167, - 2, 5, 0, 7, 6, 21, 1, 90, 67, 68, + 0, 0, 0, 21, 0, 178, 245, 209, 217, 213, + 157, 229, 205, 3, 142, 75, 158, 221, 225, 146, + 175, 156, 161, 141, 195, 182, 0, 82, 83, 78, + 346, 71, 348, 0, 0, 0, 0, 80, 0, 0, + 76, 79, 0, 0, 72, 73, 81, 74, 0, 77, + 0, 0, 171, 0, 0, 158, 177, 160, 159, 0, + 0, 0, 173, 174, 172, 176, 0, 206, 0, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 0, 186, + 0, 0, 0, 180, 181, 179, 184, 188, 187, 185, + 183, 198, 197, 199, 0, 214, 0, 210, 0, 0, + 152, 139, 151, 140, 108, 109, 110, 135, 111, 136, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 137, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 138, 0, 0, 150, 246, 153, + 0, 154, 0, 155, 149, 0, 242, 235, 233, 240, + 241, 239, 238, 244, 237, 236, 234, 243, 230, 0, + 218, 0, 0, 222, 0, 0, 226, 0, 0, 152, + 144, 0, 143, 0, 148, 162, 0, 347, 337, 338, + 0, 335, 0, 336, 0, 339, 253, 260, 259, 267, + 255, 0, 256, 340, 0, 345, 257, 258, 263, 261, + 342, 341, 344, 264, 0, 275, 0, 0, 0, 0, + 346, 71, 0, 348, 72, 247, 289, 73, 0, 0, + 0, 276, 0, 0, 265, 266, 0, 254, 262, 290, + 291, 334, 343, 0, 305, 306, 307, 308, 0, 301, + 302, 303, 304, 331, 332, 0, 0, 0, 0, 0, + 294, 295, 251, 249, 211, 219, 215, 231, 207, 252, + 0, 158, 223, 227, 200, 189, 0, 0, 208, 0, + 0, 0, 0, 201, 0, 0, 0, 0, 0, 193, + 191, 194, 192, 190, 203, 202, 204, 0, 216, 0, + 212, 0, 250, 158, 0, 232, 247, 248, 0, 247, + 0, 0, 297, 0, 0, 0, 299, 0, 220, 0, + 0, 224, 0, 0, 228, 287, 0, 279, 288, 282, + 0, 286, 0, 247, 280, 0, 247, 0, 0, 298, + 0, 0, 0, 300, 347, 337, 0, 0, 339, 0, + 333, 0, 323, 0, 0, 0, 293, 0, 292, 0, + 349, 0, 107, 269, 272, 0, 108, 275, 111, 136, + 113, 114, 78, 118, 119, 71, 120, 123, 76, 79, + 72, 247, 73, 81, 126, 74, 128, 77, 130, 131, + 276, 133, 134, 138, 0, 100, 0, 0, 102, 106, + 104, 90, 103, 105, 0, 101, 89, 270, 268, 146, + 147, 152, 0, 145, 0, 322, 0, 309, 310, 0, + 321, 0, 0, 0, 312, 317, 315, 318, 0, 0, + 316, 317, 0, 313, 0, 314, 271, 320, 0, 271, + 319, 0, 324, 325, 0, 271, 326, 327, 0, 0, + 328, 0, 0, 0, 329, 330, 164, 163, 0, 0, + 0, 296, 0, 0, 0, 311, 284, 277, 0, 285, + 281, 0, 283, 273, 0, 274, 278, 94, 0, 0, + 98, 84, 0, 86, 96, 0, 87, 97, 99, 88, + 95, 85, 0, 91, 168, 166, 170, 167, 165, 169, + 2, 5, 0, 7, 6, 0, 1, 92, 69, 70, 0, 0, 0, 9, 10, 0, 11, 12, 0, 13, - 0, 0, 14, 0, 19, 20, 91, 0, 15, 16, - 0, 17, 18, 8, 23, 0, 0, 25, 24, 4, - 27, 28, 29, 0, 32, 31, 30, 22, 0, 21, - 40, 38, 0, 21, 65, 0, 0, 70, 71, 41, - 33, 0, 66, 0, 50, 49, 48, 0, 0, 59, - 0, 60, 0, 63, 64, 0, 0, 0, 57, 0, - 58, 0, 61, 62, 56, 51, 52, 0, 0, 0, - 0, 54, 55, 53, 0, 44, 45, 0, 46, 47, - 269, 0, 43, 106, 273, 109, 134, 111, 112, 76, - 116, 117, 69, 118, 121, 74, 77, 70, 245, 71, - 79, 124, 72, 126, 75, 128, 129, 274, 131, 132, - 136, 73, 0, 0, 35, 21, 42, 0, 37, 26, - 36, 39, 0, 34, 348}; + 0, 0, 14, 0, 19, 20, 93, 0, 15, 16, + 0, 17, 18, 8, 22, 0, 4, 0, 29, 67, + 0, 0, 72, 27, 73, 30, 23, 0, 0, 68, + 0, 44, 43, 42, 0, 0, 61, 0, 62, 0, + 65, 66, 0, 0, 0, 59, 0, 60, 0, 63, + 64, 0, 57, 45, 58, 46, 0, 0, 0, 0, + 48, 0, 55, 56, 47, 28, 24, 0, 0, 0, + 38, 39, 0, 40, 41, 271, 0, 32, 108, 275, + 111, 136, 113, 114, 78, 118, 119, 71, 120, 123, + 76, 79, 72, 247, 73, 81, 126, 74, 128, 77, + 130, 131, 276, 133, 134, 138, 75, 0, 25, 0, + 31, 26, 49, 53, 51, 0, 0, 50, 0, 54, + 52, 0, 34, 35, 0, 36, 37, 33, 350}; const int QmlJSGrammar::goto_default [] = { - 4, 496, 353, 191, 495, 529, 524, 494, 493, 15, - 538, 526, 549, 528, 527, 532, 352, 536, 543, 550, - 622, 540, 186, 190, 192, 196, 566, 577, 576, 195, - 227, 23, 469, 468, 351, 350, 6, 349, 102, 19, - 14, 140, 21, 10, 139, 16, 22, 52, 20, 5, - 25, 24, 264, 12, 258, 7, 254, 9, 256, 8, - 255, 17, 262, 18, 263, 11, 257, 253, 294, 406, - 259, 260, 197, 188, 187, 199, 228, 198, 203, 224, - 225, 189, 355, 354, 226, 458, 457, 316, 317, 460, - 319, 459, 318, 414, 418, 421, 417, 416, 436, 437, - 180, 194, 176, 179, 193, 201, 200, 0}; + 4, 496, 353, 191, 495, 526, 491, 494, 493, 15, + 525, 535, 537, 536, 617, 528, 579, 186, 190, 192, + 196, 553, 566, 565, 624, 625, 195, 227, 23, 469, + 468, 351, 350, 6, 349, 352, 102, 19, 14, 140, + 21, 10, 139, 16, 22, 52, 20, 5, 25, 24, + 264, 12, 258, 7, 254, 9, 256, 8, 255, 17, + 262, 18, 263, 11, 257, 253, 294, 406, 259, 260, + 197, 188, 187, 199, 228, 198, 203, 224, 225, 189, + 355, 354, 226, 458, 457, 316, 317, 460, 319, 459, + 318, 414, 418, 421, 417, 416, 436, 437, 180, 194, + 176, 179, 193, 201, 200, 0}; const int QmlJSGrammar::action_index [] = { - 142, 814, 1973, 78, 97, 86, -96, 90, 73, 71, - 257, -96, 315, 92, -96, -96, 539, 93, 81, 277, - 242, -96, -96, -96, 453, 252, 814, -96, -96, -96, - 214, -96, 1789, 1076, 814, 814, 814, -96, 729, 814, - -96, -96, 814, 814, -96, -96, -96, -96, 814, -96, - 814, 814, -96, 814, 814, 109, 207, -96, -96, 814, - 814, 814, -96, -96, -96, 205, 814, 313, 814, 814, - 814, 814, 434, 814, 814, 814, 814, 814, 814, 184, - 814, 814, 814, 146, 149, 150, 189, 204, 328, 328, - 328, 552, 473, 463, 814, 40, 814, 87, 1605, 814, - 814, -96, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -96, -96, -96, 140, 814, -96, -96, 65, - 33, -96, 814, -96, -96, 814, -96, -96, -96, -96, - -96, -96, -96, -96, -96, -96, -96, -96, -96, 814, - 29, 814, 814, 63, 59, 814, -96, 1605, 814, 814, - -96, 96, -96, 15, -96, -96, 31, -96, 208, 60, - 20, -96, 249, -96, 49, 2065, -96, -96, -96, -96, - -96, 248, -96, -96, 44, -96, -96, -96, -96, -96, - -96, 2065, -96, -96, 377, -96, 387, 83, 1973, 58, - 234, 72, 66, 2249, 67, 814, -96, 69, 54, 814, - 53, -96, 51, 45, -96, -96, 283, -96, -96, -96, - -96, -96, -96, 104, -96, -96, -96, -96, 102, -96, - -96, -96, -96, -96, -96, 48, 47, 814, 117, 120, - -96, -96, 988, -96, 77, 57, 64, -96, 406, 76, - 61, 582, 176, 100, 479, 328, 269, 814, 311, 814, - 814, 814, 814, 397, 814, 814, 814, 814, 814, 328, - 328, 328, 328, 328, 345, 360, 341, 814, 39, 814, - 70, 814, -96, 645, 814, -96, 814, 62, 24, 814, - 12, 1973, -96, 814, 131, 1973, -96, 814, 68, 814, - 814, 176, 89, 814, -96, 75, 95, 38, -96, -96, - 814, -96, 273, 814, -96, 79, 814, 74, 1973, -96, - 814, 111, 1973, -96, -16, 279, -41, -12, 2065, -37, - -96, 1973, -96, 814, 119, 1973, 6, 1973, -96, 22, - 18, -32, -96, -96, 1973, -52, 352, -2, 394, 98, - 814, 1973, 82, -34, 308, -7, -30, 729, 2, 4, - -96, 903, -96, 0, -5, 27, 814, 42, 21, 814, - 46, 814, 16, 14, 814, -96, 1881, 52, -96, -96, - -96, -96, -96, -96, 814, -96, -96, -96, -96, 307, - -96, 814, -22, -96, 1973, -96, 107, -96, -96, 1973, - -96, 814, 125, 13, -96, 37, -96, 35, 88, 814, - -96, 34, 10, -96, -4, -96, 1973, -96, 103, 1973, - -96, 263, -96, -96, 108, 1973, -8, -96, 11, 25, - -96, 260, -36, -6, -96, -96, -96, -96, 814, 115, - 1973, -96, 814, 112, 1973, -96, 43, -96, 190, -96, - -96, 814, -96, -96, 194, -96, -96, -96, 99, 1164, - -96, -96, 1337, -96, -96, 1425, -96, -96, -96, -96, - -96, -96, 101, -96, -96, -96, -96, -96, -96, -96, - -96, -96, 408, -96, -54, -57, -96, -96, -96, -96, - 177, 332, 216, -96, -96, 132, -96, -96, 237, -96, - 221, 163, -96, 122, -96, -96, -96, 240, -96, -96, - 126, -96, -96, -96, -96, 1605, 343, -96, -86, -96, - -96, -96, -1, 1697, -96, -96, -96, -96, 159, 121, - -96, -96, 470, 118, -96, -38, 174, 170, 3, -96, - -96, 203, -96, 173, -96, -96, -96, 32, 151, -96, - 814, -96, 145, -96, -96, 5, 7, 223, -96, 814, - -96, 187, -96, -96, 19, 141, 17, -45, 230, 191, - 228, -96, -96, -96, 1249, -96, -96, 309, -96, -96, - 2157, 1513, -96, 338, 1, 369, 85, 814, 1973, 82, - 9, 285, 36, 8, 729, 30, 26, -96, 903, -96, - 50, 28, 56, 814, 55, 23, 814, 41, 814, -26, - -23, -29, 124, 454, -96, -73, -96, 374, -96, -96, - -96, -96, 460, -96, -96, + 157, 803, 2033, -22, 55, 68, -95, 96, 32, -10, + 282, -95, 348, 42, -95, -95, 636, 92, 75, 201, + 218, -95, -95, -95, 544, 253, 803, -95, -95, -95, + 179, -95, 1760, 1230, 803, 803, 803, -95, 719, 803, + -95, -95, 803, 803, -95, -95, -95, -95, 803, -95, + 803, 803, -95, 803, 803, 104, 202, -95, -95, 803, + 803, 803, -95, -95, -95, 198, 803, 340, 803, 803, + 803, 803, 544, 803, 803, 803, 803, 803, 803, 206, + 803, 803, 803, 64, 72, 69, 253, 167, 182, 158, + 150, 454, 544, 544, 803, -70, 803, 96, 1669, 803, + 803, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, 137, 803, -95, -95, 82, + 61, -95, 803, -95, -95, 803, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, 803, + 6, 803, 803, 43, 39, 803, -95, 1669, 803, 803, + -95, 143, -95, 9, -95, -95, 29, -95, 264, 59, + 10, -95, 259, -95, 8, 1942, -95, -95, -95, -95, + -95, 274, -95, -95, 31, -95, -95, -95, -95, -95, + -95, 1942, -95, -95, 421, -95, 414, 105, 2033, 40, + 234, 71, 41, 2215, 66, 803, -95, 65, 28, 803, + 20, -95, 22, 11, -95, -95, 290, -95, -95, -95, + -95, -95, -95, 119, -95, -95, -95, -95, 112, -95, + -95, -95, -95, -95, -95, -17, 27, 803, 135, 117, + -95, -95, 975, -95, 48, -6, 62, -95, 400, 85, + 63, 569, 93, 102, 472, 235, 205, 803, 400, 803, + 803, 803, 803, 398, 803, 803, 803, 803, 803, 253, + 295, 323, 241, 323, 472, 472, 355, 803, 5, 803, + 81, 803, -95, 636, 803, -95, 803, 76, 53, 803, + 57, 2033, -95, 803, 146, 2033, -95, 803, 54, 803, + 803, 90, 84, 803, -95, 12, 125, -24, -95, -95, + 803, -95, 203, 803, -95, -49, 803, -47, 2033, -95, + 803, 130, 2033, -95, -34, 285, -28, 0, 1942, -21, + -95, 2033, -95, 803, 129, 2033, 1, 2033, -95, 17, + 19, -29, -95, -95, 2033, -33, 405, 21, 375, 107, + 803, 2033, 23, -20, 305, -1, -31, 719, 3, 4, + -95, 891, -95, 7, -35, -3, 803, 33, 2, 803, + 13, 803, -18, -11, 803, -95, 1851, 16, -95, -95, + -95, -95, -95, -95, 803, -95, -95, -95, -95, 281, + -95, 803, -45, -95, 2033, -95, 70, -95, -95, 2033, + -95, 803, 122, -12, -95, 14, -95, 34, 106, 803, + -95, -2, 30, -95, -19, -95, 2033, -95, 103, 2033, + -95, 250, -95, -95, 116, 2033, 18, -95, -5, 2, + -95, 280, -60, 2, -95, -95, -95, -95, 803, 110, + 2033, -95, 803, 99, 2033, -95, -8, -95, 156, -95, + -95, 803, -95, -95, 136, -95, -95, -95, 97, 1317, + -95, -95, 1404, -95, -95, 1491, -95, -95, -95, -95, + -95, -95, 98, -95, -95, -95, -95, -95, -95, -95, + -95, -95, 433, -95, 51, 344, -95, -95, -95, -95, + 139, 366, 155, -95, -95, 73, -95, -95, 186, -95, + 190, 162, -95, 101, -95, -95, -95, 131, -95, -95, + 88, -95, -95, -95, -95, 111, -95, 495, -95, -95, + 47, 298, 221, -95, 60, -95, -95, 518, 306, -95, + 255, -95, -95, -95, 58, 292, -95, 803, -95, 246, + -95, -95, 52, 56, 164, -95, 803, -95, 228, -95, + -95, 151, -95, 209, -95, 95, 67, 175, 200, 210, + -95, 86, -95, -95, -95, -95, -95, 1143, 303, 91, + -95, -95, 347, -95, -95, 2124, 1578, -95, 397, 89, + 386, 80, 803, 2033, 94, 26, 308, 74, 25, 719, + 44, 49, -95, 891, -95, 45, 24, 37, 803, 36, + 15, 803, 50, 803, 38, 35, 46, 120, -95, 372, + -95, -95, -14, -95, -95, 183, 238, -95, 257, -95, + -95, 1059, -95, -95, 335, -95, -95, -95, -95, - -108, 7, 100, -6, -108, -108, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -40, -108, -108, -108, - -108, -108, -108, -108, -108, -108, 103, -108, -108, -108, - 32, -108, -108, 27, 37, 80, 79, -108, 89, 159, - -108, -108, 167, 162, -108, -108, -108, -108, 156, -108, - 163, 155, -108, 178, 173, -108, -108, -108, -108, 170, - 177, 180, -108, -108, -108, -108, 116, -108, 119, 112, - 137, 111, -108, 110, 108, 121, 145, 149, 148, -108, - 135, 132, 123, -108, -108, -108, -108, -108, -108, -108, - -108, -108, -108, -108, 130, -108, 128, -108, 143, 43, - 40, -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, 53, -108, -108, -108, - -108, -108, 54, -108, -108, 55, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -108, -108, -108, 106, - -108, 131, -19, -108, -108, -29, -108, 231, 13, 175, - -108, -108, -108, -108, -108, -108, -108, -108, 30, -108, - -108, -108, 3, -108, -108, 18, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, - -108, 91, -108, -108, 44, -108, 49, -108, 50, -108, - 57, -108, -108, -108, -108, 59, -108, -108, -108, 56, - 39, -108, -108, -108, -108, -108, 77, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -108, 24, -108, -108, - -108, -108, 85, -108, -108, -108, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, 17, 206, -108, 240, - 232, 205, 209, -108, 96, 84, 93, 95, 87, -108, - -108, -108, -108, -108, -108, -108, -108, 236, -108, 217, - -108, 185, -108, -108, 233, -108, 136, -108, -108, 176, - -108, 0, -108, 8, -108, 41, -108, 184, -108, 187, - 203, -108, -108, 196, -108, -108, -108, -108, -108, -108, - 230, -108, 101, 98, -108, -108, 151, -108, 46, -108, - 52, -108, 65, -108, -108, 113, -108, -108, 90, -108, - -108, 62, -108, 66, -108, 63, -108, 42, -108, -108, - -108, -108, -108, -108, 81, -108, 68, -108, 70, -108, - 74, 83, -108, -108, 45, -108, -108, 78, -108, -108, - -108, 47, -108, -108, -108, -108, 10, -108, -21, 163, - -108, 61, -108, -108, -2, -108, -16, -108, -108, -108, - -108, -108, -108, -108, 21, -108, -108, -108, -108, -108, - -108, 82, -108, -108, 31, -108, -108, -108, -108, 4, - -108, 5, -108, -108, -108, -108, -108, -83, -108, 72, - -108, -13, -108, -108, -108, -108, -26, -108, -108, -22, - -108, -108, -108, -108, -108, -108, -11, -108, -108, -3, - -108, 73, -108, 58, -108, -108, -108, -108, 71, -108, - 69, -108, 67, -108, 76, -108, -108, -108, -108, -108, - -108, 36, -108, -108, 88, -108, -108, -108, -108, 51, - -108, -108, 75, -108, -108, 48, -108, -108, -108, -108, - -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, - -108, -108, 104, -108, 60, -108, -108, -108, -108, -108, - -108, -108, 64, -108, -108, -108, -108, -108, 33, -108, - 6, -108, -108, -108, -108, -108, -108, 9, -108, -108, - -108, -108, -108, -108, -108, 169, 262, -108, 11, -108, - -108, -108, -108, 227, -108, -108, -108, -108, -108, 12, - -108, -108, 278, -8, -108, -108, -5, -108, -108, -108, - -108, -108, -108, -17, -108, -108, -108, -108, -108, -108, - 2, -108, -108, -108, -108, -108, -108, -108, -108, 35, - -108, -108, -108, -108, -108, 23, -108, -108, 26, 25, - 38, -108, -108, -108, 288, -108, -108, 16, -108, -108, - -108, 361, -108, 20, -108, 15, -108, 97, 28, -108, - -108, 22, -108, -108, 94, -108, -108, -108, 29, -108, - -108, -108, -108, 19, -108, 14, 163, -108, 102, -108, - -108, -108, -108, 219, -108, 34, -108, 86, -108, -108, - -108, -108, 286, -108, -108}; + -106, 3, 1, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -54, -106, -106, -106, + -106, -106, -106, -106, -106, -106, 72, -106, -106, -106, + 4, -106, -106, -16, 18, 100, 170, -106, 174, 167, + -106, -106, 164, 182, -106, -106, -106, -106, 127, -106, + 126, 117, -106, 113, 131, -106, -106, -106, -106, 146, + 135, 143, -106, -106, -106, -106, 139, -106, 159, 173, + 109, 83, -106, 136, 149, 150, 156, 133, 120, -106, + 158, 176, 177, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, 91, -106, 101, -106, 94, -2, + -29, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, 33, -106, -106, -106, + -106, -106, 14, -106, -106, 19, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, 85, + -106, 63, 49, -106, -106, 53, -106, 311, 60, 118, + -106, -106, -106, -106, -106, -106, -106, -106, 51, -106, + -106, -106, -4, -106, -106, 59, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, 122, -106, -106, 30, -106, 44, -106, 41, -106, + 27, -106, -106, -106, -106, 84, -106, -106, -106, 71, + 58, -106, -106, -106, -106, -106, 64, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, 13, -106, -106, + -106, -106, 65, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -1, 197, -106, 188, + 187, 221, 229, -106, 90, 87, 93, 105, 107, -106, + -106, -106, -106, -106, -106, -106, -106, 230, -106, 207, + -106, 219, -106, -106, 205, -106, 180, -106, -106, 106, + -106, 28, -106, 31, -106, 26, -106, 185, -106, 198, + 186, -106, -106, 217, -106, -106, -106, -106, -106, -106, + 220, -106, 81, 97, -106, -106, 172, -106, 76, -106, + 78, -106, 69, -106, -106, 89, -106, -106, 86, -106, + -106, 75, -106, 80, -106, 70, -106, 82, -106, -106, + -106, -106, -106, -106, 42, -106, 39, -106, 40, -106, + 214, 48, -106, -106, 37, -106, -106, 163, -106, -106, + -106, 52, -106, -106, -106, -106, 61, -106, 50, 151, + -106, 67, -106, -106, 43, -106, 45, -106, -106, -106, + -106, -106, -106, -106, 47, -106, -106, -106, -106, -106, + -106, 98, -106, -106, 57, -106, -106, -106, -106, 54, + -106, 55, -106, -106, -106, -106, -106, -38, -106, 66, + -106, -24, -106, -106, -106, -106, -15, -106, -106, -18, + -106, -106, -106, -106, -106, -106, -46, -106, -106, 24, + -106, 36, -106, 25, -106, -106, -106, -106, 35, -106, + 68, -106, 34, -106, 38, -106, -106, -106, -106, -106, + -106, 21, -106, -106, 111, -106, -106, -106, -106, 62, + -106, -106, 132, -106, -106, 56, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, 92, -106, 77, 96, -106, -106, -106, -106, + -106, -106, -9, -106, -106, -106, -106, -106, 0, -106, + -7, -106, -106, -106, -106, -106, -106, 22, -106, -106, + -106, -106, -106, -106, -106, -106, -106, 265, -106, -106, + -106, 16, -106, -106, -106, -106, -106, 280, -106, -106, + -11, -106, -106, -106, -106, -106, -106, 23, -106, -106, + -106, -106, -106, -106, -106, -106, 29, -106, -106, -106, + -106, -106, -106, 12, -106, -106, -106, 11, 8, 5, + -106, -106, -106, -106, -106, -106, -106, 277, 2, -106, + -106, -106, 7, -106, -106, -106, 233, -106, 9, -106, + 15, -106, 73, 17, -106, -106, 6, -106, -106, 74, + -106, -106, -106, 32, -106, -106, -106, -106, 20, -106, + 10, 151, -106, 104, -106, -106, -106, -106, -106, 112, + -106, -106, -106, -106, -106, -106, 88, -106, 95, -106, + -106, 284, -106, -106, -8, -106, -106, -106, -106}; const int QmlJSGrammar::action_info [] = { - -100, 525, 252, 398, -90, -133, 343, -103, -133, -122, - 448, -104, 439, 452, 525, 582, 533, 426, 340, 337, - 335, 338, 347, 396, 443, 579, 386, 435, 553, 384, - 525, 411, 574, -104, -125, 492, 567, -122, 403, 419, - 419, 335, 419, -100, 343, 252, 415, 441, -130, -127, - 452, 425, 448, -130, 435, 575, 435, -103, 435, 394, - 461, 558, -127, -125, 411, 159, 165, 178, 182, 330, - 136, 267, 301, 142, 404, 174, 409, 94, 267, 341, - 184, 452, 185, 247, 291, 299, 435, 448, 66, -114, - 411, 66, 320, 144, 252, 159, 313, 634, 422, 231, - 136, 0, 343, 322, 136, 287, 0, 472, 0, 136, - 429, 136, 0, 0, 438, 0, 287, 289, 96, 136, - 136, 94, 296, 136, 246, 136, 53, 136, 439, 0, - 0, 161, 625, 136, 328, 162, 0, 54, 0, 136, - 326, 0, 289, 423, 244, 243, 244, 243, 136, 96, - 309, 57, 172, 136, 310, 473, 323, 0, 560, 244, - 243, 483, 58, 242, 241, 237, 236, 492, 408, 407, - 554, 332, 454, 631, 510, 450, 541, 249, 307, 345, - 626, 251, 250, 515, 514, 413, 53, 522, 521, 53, - 53, 305, 539, 507, 506, 136, 137, 54, 464, 554, - 54, 54, 554, 31, 0, 525, 564, 563, 525, 80, - 584, 81, 561, 559, 80, 556, 81, 59, 510, 59, - 554, 0, 82, 31, 519, 518, 555, 82, 0, 80, - 569, 81, 0, 3, 2, 1, 539, 31, 504, 503, - 44, 45, 82, 31, 556, 31, 0, 556, 573, 572, - 31, 465, 463, 517, 59, 555, 136, 31, 555, 31, - 44, 45, 60, 31, 60, 556, 31, 502, 61, 31, - 61, 136, 98, 0, 44, 45, 555, 80, 31, 81, - 44, 45, 44, 45, 570, 568, 0, 44, 45, 31, - 82, 99, 167, 100, 44, 45, 44, 45, 31, 60, - 44, 45, 31, 44, 45, 61, 44, 45, 31, 230, - 229, 168, 31, 169, 31, 44, 45, 136, 0, 0, - 0, -344, 167, 0, 433, 432, 44, 45, 0, 269, - 270, 68, 69, 68, 69, 44, 45, 31, 0, 44, - 45, 168, 539, 401, -344, 44, 45, 510, 0, 44, - 45, 44, 45, 80, 0, 81, 271, 272, 70, 71, - 70, 71, 0, 0, 274, 275, 82, 31, 274, 275, - 230, 229, 31, 276, 44, 45, 277, 276, 278, 511, - 277, 31, 278, 274, 275, 0, 0, 0, 0, 0, - 0, 0, 276, 512, 509, 277, 0, 278, 31, 235, - 234, 0, 499, 31, 44, 45, 31, 0, 0, 44, - 45, 0, 0, 235, 234, 0, 31, 0, 44, 45, - 274, 275, 508, 31, 269, 270, 0, 0, 498, 276, - 240, 239, 277, 499, 278, 44, 45, 31, 235, 234, - 44, 45, 0, 44, 45, 0, 0, 0, 240, 239, - 0, 271, 272, 44, 45, 240, 239, 73, 74, 498, - 44, 45, 0, 0, 0, 75, 76, 499, 0, 77, - 545, 78, 0, 500, 44, 45, 73, 74, 0, 0, - 545, 0, 546, 31, 75, 76, 73, 74, 77, 31, - 78, 0, 546, 498, 75, 76, 73, 74, 77, 31, - 78, 0, 274, 275, 75, 76, 0, 0, 77, 0, - 78, 276, 0, 499, 277, 0, 278, 0, 0, 499, - 44, 45, 0, 0, 0, 0, 547, 548, 0, 499, - 0, 0, 0, 0, 221, 0, 547, 548, 0, 498, - 0, 525, 146, 205, 221, 498, 0, 0, 0, 0, - 0, 0, 147, 205, 0, 498, 148, 0, 0, 0, - 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, - 0, 0, 0, 0, 0, 73, 74, 0, 151, 0, - 152, 57, 0, 75, 76, 146, 0, 77, 153, 78, - 0, 154, 58, 0, 0, 147, 0, 155, 0, 148, - 0, 0, 0, 156, 0, 0, 0, 0, 149, 0, - 150, 0, 0, 303, 0, 0, 0, 0, 157, 0, - 0, 151, 0, 152, 57, 0, 0, 0, 0, 0, - 0, 153, 0, 0, 154, 58, 0, 0, 0, 0, - 155, 0, 0, 0, 0, 0, 156, 0, 146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, - 0, 157, 148, 0, 0, 0, 0, 0, 0, 0, - 0, 149, 0, 150, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 151, 0, 152, 57, 0, 0, - 0, 0, 0, 0, 153, 0, 0, 154, 58, 0, - 0, 0, 0, 155, 0, 0, 0, 0, 0, 156, + 443, 411, 335, 419, -127, 343, -102, 330, 96, 461, + -124, -106, 326, 328, -105, 403, 252, 347, 448, 419, + -132, 415, 398, 394, 384, 452, 396, 386, -135, 320, + -116, 441, 337, 338, 340, 435, 425, 426, 439, 419, + -129, 185, 287, -129, -127, 159, 165, 452, 435, 267, + 136, -124, -105, 435, 94, 638, -106, -132, 448, 246, + 411, 343, 252, 247, 411, 178, 492, 182, 96, 174, + 184, 452, 409, 404, 448, 626, 252, 343, 341, -92, + 94, -102, 267, 289, 136, 554, 231, 545, 335, 561, + 142, 313, 307, 291, 159, 307, -135, 66, 631, 0, + 0, -116, 287, 568, 53, 472, 136, 136, 53, 53, + 429, 136, 53, 540, 299, 54, 422, 301, 136, 54, + 54, 144, 438, 54, 296, 161, 510, 571, 619, 162, + 136, 408, 407, 322, 507, 506, 439, 136, 136, 492, + 289, 244, 243, 136, 527, 136, 57, 573, 572, 522, + 521, 136, 309, 473, 136, 0, 310, 58, 483, 454, + 31, 423, 515, 514, 464, 31, 244, 243, 244, 243, + 450, 556, 0, 242, 241, 80, 620, 81, 251, 250, + 237, 236, 413, 80, 31, 81, 323, 563, 82, 345, + 332, 628, 80, 137, 81, 249, 82, 44, 45, 172, + 504, 503, 44, 45, 31, 82, 305, 80, 31, 81, + 59, 0, 564, 562, 59, 31, 167, 465, 463, 31, + 82, 44, 45, 519, 518, 557, 555, 0, 502, 541, + 59, 80, 31, 81, 31, 168, 136, 169, 541, 31, + 0, 44, 45, 629, 82, 44, 45, 3, 2, 1, + 541, 517, 44, 45, 136, 60, 44, 45, 136, 60, + 80, 61, 81, 31, 0, 61, 80, 31, 81, 44, + 45, 44, 45, 82, 543, 60, 44, 45, 80, 82, + 81, 61, 136, 543, 541, 542, 31, 0, 31, 560, + 559, 82, 0, 31, 542, 543, 167, 98, 0, 547, + 44, 45, 0, 0, 44, 45, 542, 551, 550, 31, + 0, 433, 432, 577, 31, 168, 99, 401, 100, 31, + 80, 510, 81, 44, 45, 44, 45, 31, 0, 543, + 44, 45, 31, 82, 31, 230, 229, 31, 0, 527, + 542, -346, 578, 136, -346, 0, 44, 45, 80, 0, + 81, 44, 45, 548, 546, 136, 44, 45, 68, 69, + 0, 82, 0, 623, 44, 45, 68, 69, 527, 44, + 45, 44, 45, 31, 44, 45, 0, 0, 274, 275, + 527, 510, 0, 0, 0, 70, 71, 276, 0, 0, + 277, 0, 278, 70, 71, 0, 230, 229, 0, 0, + 0, 31, 0, 499, 31, 0, 0, 0, 230, 229, + 44, 45, 0, 511, 0, 31, 0, 0, 269, 270, + 0, 274, 275, 0, 0, 0, 31, 512, 509, 498, + 276, 499, 0, 277, 31, 278, 240, 239, 44, 45, + 0, 44, 45, 31, 0, 271, 272, 240, 239, 0, + 31, 0, 44, 45, 0, 508, 0, 498, 235, 234, + 0, 0, 31, 44, 45, 0, 235, 234, 0, 0, + 0, 44, 45, 0, 0, 240, 239, 73, 74, 0, + 44, 45, 235, 234, 0, 75, 76, 44, 45, 77, + 0, 78, 499, 0, 0, 274, 275, 0, 500, 44, + 45, 0, 0, 0, 276, 530, 0, 277, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 531, 498, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, + 531, 0, 0, 0, 0, 0, 0, 31, 0, 0, + 533, 0, 0, 0, 499, 0, 0, 0, 0, 0, + 0, 532, 534, 0, 0, 0, 0, 73, 74, 221, + 0, 0, 146, 575, 0, 75, 76, 499, 205, 77, + 498, 78, 147, 0, 532, 534, 148, 0, 0, 0, + 0, 0, 221, 0, 0, 149, 0, 150, 0, 0, + 303, 205, 0, 498, 0, 0, 0, 0, 151, 0, + 152, 57, 0, 0, 0, 0, 0, 0, 153, 0, + 0, 154, 58, 0, 0, 0, 0, 155, 0, 0, + 0, 0, 0, 156, 0, 0, 0, 0, 0, 146, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 147, + 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 149, 0, 150, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 151, 0, 152, 57, 0, + 0, 0, 0, 0, 0, 153, 0, 0, 154, 58, + 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, @@ -421,16 +420,7 @@ const int QmlJSGrammar::action_info [] = { 0, 0, 0, 0, 46, 44, 45, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 27, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 32, 33, 0, - 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, - 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, - 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -123, 0, 0, 0, 26, 27, 28, 0, 0, 0, + 0, 0, 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 33, 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, 0, @@ -438,95 +428,102 @@ const int QmlJSGrammar::action_info [] = { 0, 0, 0, 0, 0, 0, 0, 0, 46, 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, - 0, 32, 33, 0, 34, 0, 0, 0, 35, 0, - 36, 38, 39, 0, 0, 41, 0, 0, 0, 42, - 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 46, 44, 45, 0, 47, 0, 48, - 0, 50, 266, 51, 0, 0, 0, 0, 40, 49, - 29, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 470, 0, 0, 26, 27, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, - 33, 0, 34, 0, 0, 0, 35, 0, 36, 38, - 39, 0, 0, 41, 0, 0, 0, 42, 0, 43, - 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 44, 45, 0, 47, 0, 48, 0, 50, - 0, 51, 0, 0, 0, 0, 40, 49, 29, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 478, 0, 0, 26, 27, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 32, 33, 0, - 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, - 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, - 481, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, - 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, + 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 32, 33, 0, 34, 0, 0, + 0, 35, 0, 36, 38, 39, 0, 0, 41, 0, + 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 44, 45, 0, + 47, 0, 48, 0, 50, 0, 51, 0, 0, 0, + 0, 40, 49, 29, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 27, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 32, 33, + 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, + 0, 0, 41, 0, 0, 0, 42, 0, 43, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 44, 45, 0, 47, 0, 48, 0, 50, 266, + 51, 0, 0, 0, 0, 40, 49, 29, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 212, - 0, 0, 590, 591, 0, 34, 0, 0, 0, 35, + 0, 0, 585, 33, 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 46, 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 470, 0, 0, 26, 27, + 0, 0, 0, 0, 26, 27, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 31, 212, 0, 0, 585, 586, 0, 34, + 0, 0, 0, 35, 0, 36, 38, 39, 0, 0, + 41, 0, 0, 0, 42, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 216, 0, 0, 0, 46, 44, + 45, 0, 47, 0, 48, 0, 50, 0, 51, 0, + 0, 0, 0, 40, 49, 29, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, + 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, + 0, 0, 0, 32, 33, 0, 34, 0, 0, 0, + 35, 0, 36, 38, 39, 0, 0, 41, 0, 0, + 0, 42, 0, 43, 0, 0, 471, 0, 0, 0, + 0, 0, 0, 0, 0, 46, 44, 45, 0, 47, + 0, 48, 0, 50, 0, 51, 0, 0, 0, 0, + 40, 49, 29, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 478, 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 33, 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, 0, 41, 0, 0, 0, 42, 0, - 43, 0, 0, 476, 0, 0, 0, 0, 0, 0, + 43, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 46, 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 26, 27, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 32, 33, - 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, - 0, 0, 41, 0, 0, 0, 42, 0, 43, 0, - 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 44, 45, 0, 47, 0, 48, 0, 50, 0, - 51, 0, 0, 0, 0, 40, 49, 29, 0, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 470, 0, 0, 26, 27, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 32, 33, 0, 34, - 0, 0, 0, 35, 0, 36, 38, 39, 0, 0, - 41, 0, 0, 0, 42, 0, 43, 0, 0, 471, - 0, 0, 499, 0, 0, 0, 0, 0, 46, 44, - 45, 0, 47, 0, 48, 0, 50, 0, 51, 0, - 0, 0, 0, 40, 49, 29, 0, 0, 498, 37, - 525, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 105, 106, 0, 0, 108, 110, 111, 0, 0, 112, - 0, 113, 0, 0, 0, 115, 116, 117, 0, 0, - 0, 0, 0, 0, 31, 118, 119, 120, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, - 0, 44, 45, 125, 126, 127, 0, 129, 130, 131, - 132, 133, 134, 0, 0, 122, 128, 114, 107, 109, - 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 105, 106, 0, 0, 108, 110, 111, 0, - 0, 112, 0, 113, 0, 0, 0, 115, 116, 117, - 0, 0, 0, 0, 0, 0, 31, 118, 119, 120, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 0, 534, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 44, 45, 125, 126, 127, 0, 129, - 130, 131, 132, 133, 134, 0, 0, 122, 128, 114, - 107, 109, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 470, 0, 0, 26, 27, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 31, 0, 0, 0, 32, 33, 0, + 34, 0, 0, 0, 35, 0, 36, 38, 39, 0, + 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, + 476, 0, 0, 0, 0, 0, 0, 0, 0, 46, + 44, 45, 0, 47, 0, 48, 0, 50, 0, 51, + 0, 0, 0, 0, 40, 49, 29, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 478, + 0, 0, 26, 27, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 32, 33, 0, 34, 0, 0, + 0, 35, 0, 36, 38, 39, 0, 0, 41, 0, + 0, 0, 42, 0, 43, 0, 0, 479, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 44, 45, 0, + 47, 0, 48, 0, 50, 0, 51, 0, 0, 0, + 0, 40, 49, 29, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 470, 0, 0, 26, + 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, + 0, 32, 33, 0, 34, 0, 0, 0, 35, 0, + 36, 38, 39, 0, 0, 41, 0, 0, 0, 42, + 0, 43, 0, 0, 471, 0, 0, 499, 0, 0, + 0, 0, 0, 46, 44, 45, 0, 47, 0, 48, + 0, 50, 0, 51, 0, 0, 0, 0, 40, 49, + 29, 0, 0, 498, 37, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, 106, 0, 0, 108, 110, 111, 0, 0, 112, 0, 113, 0, 0, 0, 115, - 116, 117, 0, 0, 0, 0, 0, 0, 388, 118, + 116, 117, 0, 0, 0, 0, 0, 0, 31, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 389, 0, 0, 0, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, - 0, 0, 0, 0, 393, 390, 392, 125, 126, 127, + 0, 0, 0, 0, 0, 44, 45, 125, 126, 127, 0, 129, 130, 131, 132, 133, 134, 0, 0, 122, 128, 114, 107, 109, 123, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 105, 106, 0, 0, 108, + 110, 111, 0, 0, 112, 0, 113, 0, 0, 0, + 115, 116, 117, 0, 0, 0, 0, 0, 0, 388, + 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 0, 0, 0, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 0, 393, 390, 392, 125, 126, + 127, 0, 129, 130, 131, 132, 133, 134, 0, 0, + 122, 128, 114, 107, 109, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, 106, 0, 0, 108, 110, 111, 0, 0, 112, 0, 113, 0, 0, 0, 115, 116, 117, 0, 0, 0, 0, 0, 0, @@ -536,6 +533,15 @@ const int QmlJSGrammar::action_info [] = { 124, 0, 0, 0, 0, 0, 393, 390, 392, 125, 126, 127, 0, 129, 130, 131, 132, 133, 134, 0, 0, 122, 128, 114, 107, 109, 123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, + 0, 206, 0, 26, 27, 28, 208, 0, 0, 0, + 0, 0, 0, 209, 210, 0, 0, 0, 0, 0, + 0, 211, 212, 0, 0, 213, 33, 0, 34, 0, + 0, 0, 35, 0, 36, 38, 39, 0, 0, 41, + 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, + 0, 215, 0, 216, 0, 0, 0, 46, 214, 217, + 218, 47, 219, 48, 220, 50, 221, 51, 222, 223, + 0, 0, 40, 49, 29, 205, 207, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 206, 0, 26, 27, 28, 208, 0, 0, 0, 0, 0, 0, 209, 30, 0, 0, 0, 0, @@ -545,158 +551,142 @@ const int QmlJSGrammar::action_info [] = { 0, 0, 215, 0, 216, 0, 0, 0, 46, 214, 217, 218, 47, 219, 48, 220, 50, 221, 51, 222, 223, 0, 0, 40, 49, 29, 205, 207, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 0, 0, 0, 0, 206, 0, 26, 27, 28, 208, - 0, 0, 0, 0, 0, 0, 209, 210, 0, 0, - 0, 0, 0, 0, 211, 212, 0, 0, 213, 33, - 0, 34, 0, 0, 0, 35, 0, 36, 38, 39, - 0, 0, 41, 0, 0, 0, 42, 0, 43, 0, - 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, - 46, 214, 217, 218, 47, 219, 48, 220, 50, 221, - 51, 222, 223, 0, 0, 40, 49, 29, 205, 207, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 593, 105, 106, 0, 0, 595, 110, 597, 27, - 28, 598, 0, 113, 0, 0, 0, 115, 600, 601, - 0, 0, 0, 0, 0, 0, 602, 603, 119, 120, - 213, 33, 0, 34, 0, 0, 0, 35, 0, 36, - 604, 39, 0, 0, 606, 0, 0, 0, 42, 0, - 43, 0, 0, 0, 0, 0, 608, 0, 216, 0, - 0, 0, 610, 607, 609, 611, 612, 613, 48, 615, - 616, 617, 618, 619, 620, 0, 0, 605, 614, 599, - 594, 596, 123, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 356, 105, 106, 0, 0, 358, 110, - 360, 27, 28, 361, 0, 113, 0, 0, 0, 115, - 363, 364, 0, 0, 0, 0, 0, 0, 365, 366, - 119, 120, 213, 33, 0, 34, 0, 0, 0, 35, - 0, 36, 367, 39, 0, 0, 369, 0, 0, 0, - 42, 0, 43, 0, -269, 0, 0, 0, 371, 0, - 216, 0, 0, 0, 373, 370, 372, 374, 375, 376, - 48, 378, 379, 380, 381, 382, 383, 0, 0, 368, - 377, 362, 357, 359, 123, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 588, 105, + 106, 0, 0, 590, 110, 592, 27, 28, 593, 0, + 113, 0, 0, 0, 115, 595, 596, 0, 0, 0, + 0, 0, 0, 597, 598, 119, 120, 213, 33, 0, + 34, 0, 0, 0, 35, 0, 36, 599, 39, 0, + 0, 601, 0, 0, 0, 42, 0, 43, 0, 0, + 0, 0, 0, 603, 0, 216, 0, 0, 0, 605, + 602, 604, 606, 607, 608, 48, 610, 611, 612, 613, + 614, 615, 0, 0, 600, 609, 594, 589, 591, 123, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 356, + 105, 106, 0, 0, 358, 110, 360, 27, 28, 361, + 0, 113, 0, 0, 0, 115, 363, 364, 0, 0, + 0, 0, 0, 0, 365, 366, 119, 120, 213, 33, + 0, 34, 0, 0, 0, 35, 0, 36, 367, 39, + 0, 0, 369, 0, 0, 0, 42, 0, 43, 0, + -271, 0, 0, 0, 371, 0, 216, 0, 0, 0, + 373, 370, 372, 374, 375, 376, 48, 378, 379, 380, + 381, 382, 383, 0, 0, 368, 377, 362, 357, 359, + 123, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 491, 434, 302, 632, 565, 562, 410, 166, 412, 557, - 13, 304, 183, 431, 420, 516, 171, 164, 520, 445, - 202, 387, 431, 542, 238, 629, 315, 248, 145, 233, - 245, 177, 297, 405, 385, 583, 434, 592, 571, 181, - 482, 177, 513, 306, 348, 627, 135, 581, 329, 578, - 297, 580, 245, 233, 177, 331, 427, 395, 238, 431, - 430, 434, 297, 467, 342, 346, 334, 333, 523, 344, - 453, 451, 462, 505, 449, 428, 141, 233, 455, 238, - 444, 424, 442, 397, 477, 245, 456, 480, 440, 138, - 143, 158, 202, 202, 0, 497, 0, 456, 628, 0, - 0, 297, 490, 0, 0, 0, 55, 475, 447, 0, - 315, 474, 0, 497, 501, 0, 0, 399, 141, 55, - 400, 175, 181, 402, 55, 55, 485, 484, 399, 55, - 261, 400, 55, 399, 280, 265, 400, 283, 55, 297, - 55, 55, 55, 281, 175, 282, 279, 55, 55, 447, - 175, 55, 101, 55, 297, 55, 55, 55, 86, 103, - 79, 55, 93, 91, 55, 160, 55, 325, 55, 67, - 72, 87, 85, 55, 466, 55, 55, 55, 530, 297, - 55, 84, 55, 97, 83, 531, 0, 95, 92, 324, - 55, 339, 163, 55, 55, 88, 0, 232, 90, 89, - 55, 55, 447, 489, 55, 298, 486, 55, 55, 488, - 446, 141, 55, 336, 487, 55, 173, 62, 55, 0, - 327, 65, 55, 55, 63, 55, 56, 64, 497, 55, - 293, 630, 55, 629, 265, 265, 530, 265, 0, 0, - 101, 293, 535, 531, 308, 300, 265, 103, 293, 311, - 55, 55, 292, 265, 55, 265, 265, 285, 0, 265, - 268, 286, 55, 314, 0, 0, 0, 265, 0, 170, - 312, 497, 0, 290, 537, 293, 0, 55, 293, 0, - 265, 55, 265, 265, 284, 55, 265, 497, 551, 0, - 265, 587, 273, 0, 288, 497, 551, 321, 0, 0, - 295, 0, 0, 0, 0, 633, 0, 544, 552, 0, - 585, 586, 588, 589, 0, 544, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 505, 135, 516, 490, 141, 183, 13, 637, 315, 513, + 544, 622, 145, 177, 570, 177, 248, 467, 233, 245, + 574, 482, 587, 431, 238, 552, 549, 434, 306, 569, + 302, 520, 558, 567, 304, 297, 334, 453, 449, 233, + 455, 445, 444, 245, 397, 442, 177, 143, 233, 238, + 245, 440, 158, 238, 462, 297, 410, 420, 412, 405, + 181, 202, 430, 171, 431, 427, 138, 434, 424, 428, + 451, 333, 346, 456, 431, 434, 385, 342, 329, 387, + 395, 331, 164, 344, 348, 523, 166, 297, 202, 477, + 315, 0, 0, 0, 0, 480, 0, 627, 181, 0, + 297, 497, 501, 101, 622, 497, 55, 524, 261, 297, + 55, 399, 447, 265, 400, 55, 55, 175, 175, 630, + 456, 497, 163, 621, 202, 0, 55, 0, 55, 103, + 55, 141, 93, 55, 55, 280, 55, 402, 279, 0, + 0, 281, 160, 55, 55, 484, 95, 55, 55, 447, + 55, 141, 55, 282, 97, 283, 55, 173, 92, 56, + 55, 475, 447, 55, 325, 474, 0, 324, 90, 55, + 55, 446, 489, 300, 55, 297, 55, 65, 55, 55, + 63, 89, 55, 297, 79, 339, 55, 336, 64, 55, + 67, 62, 55, 55, 55, 466, 446, 86, 87, 55, + 399, 55, 55, 400, 88, 83, 0, 55, 72, 487, + 55, 399, 486, 55, 400, 485, 55, 0, 0, 55, + 55, 0, 91, 84, 85, 55, 232, 488, 55, 293, + 55, 55, 0, 265, 265, 265, 265, 284, 273, 327, + 55, 55, 616, 308, 618, 265, 265, 298, 293, 268, + 55, 312, 0, 265, 0, 265, 0, 55, 311, 175, + 293, 290, 293, 293, 55, 265, 467, 265, 265, 265, + 295, 285, 55, 55, 497, 538, 0, 265, 265, 286, + 582, 0, 314, 0, 292, 321, 288, 634, 0, 497, + 538, 529, 539, 576, 580, 581, 583, 584, 0, 0, + 0, 632, 633, 635, 636, 0, 529, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 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, 103, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 621, 0, 0, 624, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 467, 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, 0, 0, 0}; const int QmlJSGrammar::action_check [] = { - 7, 87, 36, 55, 33, 7, 36, 7, 7, 7, - 36, 7, 20, 36, 87, 60, 17, 7, 55, 60, - 36, 33, 16, 55, 60, 8, 8, 33, 66, 7, - 87, 36, 29, 7, 7, 89, 29, 7, 60, 5, - 5, 36, 5, 7, 36, 36, 33, 36, 7, 7, - 36, 55, 36, 7, 33, 36, 33, 7, 33, 7, - 17, 29, 7, 7, 36, 2, 7, 36, 8, 31, - 8, 1, 60, 8, 7, 60, 7, 48, 1, 7, - 60, 36, 33, 36, 8, 61, 33, 36, 1, 7, - 36, 1, 17, 60, 36, 2, 7, 0, 10, 55, - 8, -1, 36, 8, 8, 48, -1, 8, -1, 8, - 7, 8, -1, -1, 6, -1, 48, 78, 78, 8, - 8, 48, 61, 8, 76, 8, 40, 8, 20, -1, - -1, 50, 8, 8, 60, 54, -1, 51, -1, 8, - 61, -1, 78, 55, 61, 62, 61, 62, 8, 78, - 50, 42, 56, 8, 54, 56, 61, -1, 7, 61, - 62, 60, 53, 61, 62, 61, 62, 89, 61, 62, - 29, 60, 60, 55, 15, 60, 55, 60, 2, 60, - 56, 61, 62, 61, 62, 60, 40, 61, 62, 40, - 40, 60, 33, 61, 62, 8, 56, 51, 8, 29, - 51, 51, 29, 29, -1, 87, 61, 62, 87, 25, - 7, 27, 61, 62, 25, 74, 27, 12, 15, 12, - 29, -1, 38, 29, 61, 62, 85, 38, -1, 25, - 7, 27, -1, 91, 92, 93, 33, 29, 61, 62, - 66, 67, 38, 29, 74, 29, -1, 74, 61, 62, - 29, 61, 62, 90, 12, 85, 8, 29, 85, 29, - 66, 67, 57, 29, 57, 74, 29, 90, 63, 29, - 63, 8, 15, -1, 66, 67, 85, 25, 29, 27, - 66, 67, 66, 67, 61, 62, -1, 66, 67, 29, - 38, 34, 15, 36, 66, 67, 66, 67, 29, 57, - 66, 67, 29, 66, 67, 63, 66, 67, 29, 61, - 62, 34, 29, 36, 29, 66, 67, 8, -1, -1, - -1, 36, 15, -1, 61, 62, 66, 67, -1, 18, - 19, 18, 19, 18, 19, 66, 67, 29, -1, 66, - 67, 34, 33, 36, 36, 66, 67, 15, -1, 66, - 67, 66, 67, 25, -1, 27, 45, 46, 45, 46, - 45, 46, -1, -1, 23, 24, 38, 29, 23, 24, - 61, 62, 29, 32, 66, 67, 35, 32, 37, 47, - 35, 29, 37, 23, 24, -1, -1, -1, -1, -1, - -1, -1, 32, 61, 62, 35, -1, 37, 29, 61, - 62, -1, 59, 29, 66, 67, 29, -1, -1, 66, - 67, -1, -1, 61, 62, -1, 29, -1, 66, 67, - 23, 24, 90, 29, 18, 19, -1, -1, 85, 32, - 61, 62, 35, 59, 37, 66, 67, 29, 61, 62, - 66, 67, -1, 66, 67, -1, -1, -1, 61, 62, - -1, 45, 46, 66, 67, 61, 62, 23, 24, 85, - 66, 67, -1, -1, -1, 31, 32, 59, -1, 35, - 10, 37, -1, 65, 66, 67, 23, 24, -1, -1, - 10, -1, 22, 29, 31, 32, 23, 24, 35, 29, - 37, -1, 22, 85, 31, 32, 23, 24, 35, 29, - 37, -1, 23, 24, 31, 32, -1, -1, 35, -1, - 37, 32, -1, 59, 35, -1, 37, -1, -1, 59, - 66, 67, -1, -1, -1, -1, 66, 67, -1, 59, - -1, -1, -1, -1, 74, -1, 66, 67, -1, 85, - -1, 87, 3, 83, 74, 85, -1, -1, -1, -1, - -1, -1, 13, 83, -1, 85, 17, -1, -1, -1, - -1, -1, -1, -1, -1, 26, -1, 28, -1, -1, - -1, -1, -1, -1, -1, 23, 24, -1, 39, -1, - 41, 42, -1, 31, 32, 3, -1, 35, 49, 37, - -1, 52, 53, -1, -1, 13, -1, 58, -1, 17, - -1, -1, -1, 64, -1, -1, -1, -1, 26, -1, - 28, -1, -1, 31, -1, -1, -1, -1, 79, -1, - -1, 39, -1, 41, 42, -1, -1, -1, -1, -1, - -1, 49, -1, -1, 52, 53, -1, -1, -1, -1, - 58, -1, -1, -1, -1, -1, 64, -1, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, - -1, 79, 17, -1, -1, -1, -1, -1, -1, -1, - -1, 26, -1, 28, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 39, -1, 41, 42, -1, -1, - -1, -1, -1, -1, 49, -1, -1, 52, 53, -1, - -1, -1, -1, 58, -1, -1, -1, -1, -1, 64, + 60, 36, 36, 5, 7, 36, 7, 31, 78, 17, + 7, 7, 61, 60, 7, 60, 36, 16, 36, 5, + 7, 33, 55, 7, 7, 36, 55, 8, 7, 17, + 7, 36, 60, 33, 55, 33, 55, 7, 20, 5, + 7, 33, 48, 7, 7, 2, 7, 36, 33, 1, + 8, 7, 7, 33, 48, 0, 7, 7, 36, 76, + 36, 36, 36, 36, 36, 36, 88, 8, 78, 60, + 60, 36, 7, 7, 36, 89, 36, 36, 7, 33, + 48, 7, 1, 78, 8, 29, 55, 29, 36, 29, + 8, 7, 2, 8, 2, 2, 7, 1, 7, -1, + -1, 7, 48, 8, 40, 8, 8, 8, 40, 40, + 7, 8, 40, 66, 61, 51, 10, 60, 8, 51, + 51, 60, 6, 51, 61, 50, 15, 60, 8, 54, + 8, 61, 62, 8, 61, 62, 20, 8, 8, 88, + 78, 61, 62, 8, 33, 8, 42, 61, 62, 61, + 62, 8, 50, 56, 8, -1, 54, 53, 60, 60, + 29, 55, 61, 62, 8, 29, 61, 62, 61, 62, + 60, 7, -1, 61, 62, 25, 56, 27, 61, 62, + 61, 62, 60, 25, 29, 27, 61, 36, 38, 60, + 60, 8, 25, 56, 27, 60, 38, 66, 67, 56, + 61, 62, 66, 67, 29, 38, 60, 25, 29, 27, + 12, -1, 61, 62, 12, 29, 15, 61, 62, 29, + 38, 66, 67, 61, 62, 61, 62, -1, 89, 29, + 12, 25, 29, 27, 29, 34, 8, 36, 29, 29, + -1, 66, 67, 60, 38, 66, 67, 90, 91, 92, + 29, 89, 66, 67, 8, 57, 66, 67, 8, 57, + 25, 63, 27, 29, -1, 63, 25, 29, 27, 66, + 67, 66, 67, 38, 74, 57, 66, 67, 25, 38, + 27, 63, 8, 74, 29, 85, 29, -1, 29, 61, + 62, 38, -1, 29, 85, 74, 15, 15, -1, 7, + 66, 67, -1, -1, 66, 67, 85, 61, 62, 29, + -1, 61, 62, 7, 29, 34, 34, 36, 36, 29, + 25, 15, 27, 66, 67, 66, 67, 29, -1, 74, + 66, 67, 29, 38, 29, 61, 62, 29, -1, 33, + 85, 36, 36, 8, 36, -1, 66, 67, 25, -1, + 27, 66, 67, 61, 62, 8, 66, 67, 18, 19, + -1, 38, -1, 60, 66, 67, 18, 19, 33, 66, + 67, 66, 67, 29, 66, 67, -1, -1, 23, 24, + 33, 15, -1, -1, -1, 45, 46, 32, -1, -1, + 35, -1, 37, 45, 46, -1, 61, 62, -1, -1, + -1, 29, -1, 59, 29, -1, -1, -1, 61, 62, + 66, 67, -1, 47, -1, 29, -1, -1, 18, 19, + -1, 23, 24, -1, -1, -1, 29, 61, 62, 85, + 32, 59, -1, 35, 29, 37, 61, 62, 66, 67, + -1, 66, 67, 29, -1, 45, 46, 61, 62, -1, + 29, -1, 66, 67, -1, 89, -1, 85, 61, 62, + -1, -1, 29, 66, 67, -1, 61, 62, -1, -1, + -1, 66, 67, -1, -1, 61, 62, 23, 24, -1, + 66, 67, 61, 62, -1, 31, 32, 66, 67, 35, + -1, 37, 59, -1, -1, 23, 24, -1, 65, 66, + 67, -1, -1, -1, 32, 10, -1, 35, -1, 37, + -1, -1, -1, -1, -1, -1, -1, 22, 85, -1, + -1, -1, -1, -1, 29, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, + 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, + 55, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, 66, 67, -1, -1, -1, -1, 23, 24, 74, + -1, -1, 3, 55, -1, 31, 32, 59, 83, 35, + 85, 37, 13, -1, 66, 67, 17, -1, -1, -1, + -1, -1, 74, -1, -1, 26, -1, 28, -1, -1, + 31, 83, -1, 85, -1, -1, -1, -1, 39, -1, + 41, 42, -1, -1, -1, -1, -1, -1, 49, -1, + -1, 52, 53, -1, -1, -1, -1, 58, -1, -1, + -1, -1, -1, 64, -1, -1, -1, -1, -1, 3, + -1, -1, -1, -1, -1, -1, -1, -1, 79, 13, + -1, -1, -1, 17, -1, -1, -1, -1, -1, -1, + -1, -1, 26, -1, 28, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 39, -1, 41, 42, -1, + -1, -1, -1, -1, -1, 49, -1, -1, 52, 53, + -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 79, -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, @@ -706,16 +696,7 @@ const int QmlJSGrammar::action_check [] = { -1, -1, -1, -1, 65, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, -1, 75, - -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, - 86, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 7, -1, -1, -1, 11, 12, 13, -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, @@ -723,33 +704,24 @@ const int QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, 86, - -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, -1, 69, -1, 71, - -1, 73, 74, 75, -1, -1, -1, -1, 80, 81, - 82, -1, -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, - -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, - -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, -1, 75, - -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, - 86, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, + 69, -1, 71, -1, 73, -1, 75, -1, -1, -1, + -1, 80, 81, 82, -1, -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, 74, + 75, -1, -1, -1, -1, 80, 81, 82, -1, -1, + -1, 86, -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, @@ -758,6 +730,23 @@ const int QmlJSGrammar::action_check [] = { 61, -1, -1, -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, -1, 75, -1, + -1, -1, -1, 80, 81, 82, -1, -1, -1, 86, + -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, -1, 69, + -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, + 80, 81, 82, -1, -1, -1, 86, -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, @@ -767,51 +756,50 @@ const int QmlJSGrammar::action_check [] = { -1, -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, 86, -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, -1, 69, -1, 71, -1, 73, -1, - 75, -1, -1, -1, -1, 80, 81, 82, -1, -1, - -1, 86, -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, 59, -1, -1, -1, -1, -1, 65, 66, - 67, -1, 69, -1, 71, -1, 73, -1, 75, -1, - -1, -1, -1, 80, 81, 82, -1, -1, 85, 86, - 87, -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, -1, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, - 85, -1, -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, -1, 66, 67, 68, 69, 70, -1, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, - 83, 84, 85, -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, -1, 69, -1, 71, -1, 73, -1, 75, + -1, -1, -1, -1, 80, 81, 82, -1, -1, -1, + 86, -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, -1, + 69, -1, 71, -1, 73, -1, 75, -1, -1, -1, + -1, 80, 81, 82, -1, -1, -1, 86, -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, 59, -1, -1, + -1, -1, -1, 65, 66, 67, -1, 69, -1, 71, + -1, 73, -1, 75, -1, -1, -1, -1, 80, 81, + 82, -1, -1, 85, 86, -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, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, -1, -1, 65, 66, 67, 68, 69, 70, + -1, -1, -1, -1, -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, 85, -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, -1, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, 82, 83, 84, 85, -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, @@ -821,6 +809,15 @@ const int QmlJSGrammar::action_check [] = { 59, -1, -1, -1, -1, -1, 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, 85, -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, + -1, -1, 80, 81, 82, 83, 84, -1, 86, -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, @@ -830,81 +827,66 @@ const int QmlJSGrammar::action_check [] = { -1, -1, 59, -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, -1, 86, - -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, -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, -1, -1, 80, 81, 82, 83, 84, 85, + 86, -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, + 55, -1, -1, -1, 59, -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, - -1, 86, -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, -1, -1, 80, 81, 82, - 83, 84, 85, 86, -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, -1, -1, 80, - 81, 82, 83, 84, 85, 86, -1, -1, -1, -1, - -1, -1, -1, -1, -1, + 85, 86, -1, -1, -1, -1, -1, -1, -1, -1, - 6, 22, 2, 11, 9, 3, 2, 36, 3, 26, - 3, 3, 9, 3, 97, 9, 3, 36, 9, 22, - 2, 37, 3, 11, 9, 14, 9, 3, 68, 9, - 2, 9, 3, 2, 36, 9, 22, 21, 3, 9, - 3, 9, 9, 2, 2, 11, 3, 9, 2, 26, - 3, 26, 2, 9, 9, 3, 82, 36, 9, 3, - 82, 22, 3, 36, 2, 2, 9, 2, 8, 3, - 3, 2, 36, 9, 3, 3, 36, 9, 2, 9, - 22, 94, 9, 2, 36, 2, 9, 36, 99, 36, - 36, 36, 2, 2, -1, 9, -1, 9, 12, -1, - -1, 3, 2, -1, -1, -1, 45, 32, 47, -1, - 9, 36, -1, 9, 10, -1, -1, 39, 36, 45, - 42, 47, 9, 41, 45, 45, 47, 47, 39, 45, - 45, 42, 45, 39, 50, 50, 42, 50, 45, 3, - 45, 45, 45, 50, 47, 50, 50, 45, 45, 47, - 47, 45, 9, 45, 3, 45, 45, 45, 50, 16, - 50, 45, 51, 51, 45, 59, 45, 69, 45, 53, - 51, 50, 49, 45, 86, 45, 45, 45, 9, 3, - 45, 49, 45, 55, 49, 16, -1, 57, 51, 88, - 45, 101, 61, 45, 45, 50, -1, 106, 50, 50, - 45, 45, 47, 47, 45, 69, 47, 45, 45, 47, - 47, 36, 45, 100, 47, 45, 41, 47, 45, -1, - 69, 48, 45, 45, 47, 45, 48, 47, 9, 45, - 45, 12, 45, 14, 50, 50, 9, 50, -1, -1, - 9, 45, 15, 16, 60, 69, 50, 16, 45, 62, - 45, 45, 67, 50, 45, 50, 50, 52, -1, 50, - 54, 52, 45, 67, -1, -1, -1, 50, -1, 38, - 67, 9, -1, 56, 12, 45, -1, 45, 45, -1, - 50, 45, 50, 50, 52, 45, 50, 9, 10, -1, - 50, 3, 52, -1, 58, 9, 10, 67, -1, -1, - 67, -1, -1, -1, -1, 19, -1, 29, 30, -1, - 22, 23, 24, 25, -1, 29, 30, -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, + 9, 3, 9, 2, 33, 9, 3, 15, 9, 9, + 21, 9, 66, 9, 9, 9, 3, 33, 9, 2, + 9, 3, 15, 3, 9, 9, 3, 17, 2, 21, + 2, 9, 3, 21, 3, 3, 9, 3, 3, 9, + 2, 17, 17, 2, 2, 9, 9, 33, 9, 9, + 2, 97, 33, 9, 33, 3, 2, 95, 3, 2, + 9, 2, 80, 3, 3, 80, 33, 17, 92, 3, + 2, 2, 2, 9, 3, 17, 33, 2, 2, 34, + 33, 3, 33, 3, 2, 8, 33, 3, 2, 33, + 9, -1, -1, -1, -1, 33, -1, 9, 9, -1, + 3, 9, 10, 9, 9, 9, 43, 11, 43, 3, + 43, 37, 45, 48, 40, 43, 43, 45, 45, 24, + 9, 9, 59, 11, 2, -1, 43, -1, 43, 35, + 43, 33, 49, 43, 43, 48, 43, 39, 48, -1, + -1, 48, 57, 43, 43, 45, 55, 43, 43, 45, + 43, 33, 43, 48, 53, 48, 43, 39, 49, 46, + 43, 29, 45, 43, 67, 33, -1, 86, 48, 43, + 43, 45, 45, 67, 43, 3, 43, 46, 43, 43, + 45, 48, 43, 3, 48, 99, 43, 98, 45, 43, + 51, 45, 43, 43, 43, 84, 45, 48, 48, 43, + 37, 43, 43, 40, 48, 47, -1, 43, 49, 45, + 43, 37, 45, 43, 40, 45, 43, -1, -1, 43, + 43, -1, 49, 47, 47, 43, 104, 45, 43, 43, + 43, 43, -1, 48, 48, 48, 48, 50, 50, 67, + 43, 43, 9, 58, 11, 48, 48, 67, 43, 52, + 43, 65, -1, 48, -1, 48, -1, 43, 60, 45, + 43, 54, 43, 43, 43, 48, 33, 48, 48, 48, + 65, 50, 43, 43, 9, 10, -1, 48, 48, 50, + 3, -1, 65, -1, 65, 65, 56, 3, -1, 9, + 10, 26, 27, 13, 17, 18, 19, 20, -1, -1, + -1, 17, 18, 19, 20, -1, 26, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 9, -1, -1, 12, 13, -1, -1, -1, -1, -1, + 9, -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, 36, -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, -1, -1, -1}; diff --git a/src/declarative/qml/parser/qmljsgrammar_p.h b/src/declarative/qml/parser/qmljsgrammar_p.h index 7ffda6a..c2bc60e 100644 --- a/src/declarative/qml/parser/qmljsgrammar_p.h +++ b/src/declarative/qml/parser/qmljsgrammar_p.h @@ -59,13 +59,12 @@ class QmlJSGrammar public: enum { EOF_SYMBOL = 0, - REDUCE_HERE = 95, - SHIFT_THERE = 94, + REDUCE_HERE = 94, + SHIFT_THERE = 93, T_AND = 1, T_AND_AND = 2, T_AND_EQ = 3, - T_AS = 90, - T_AT = 87, + T_AS = 89, T_AUTOMATIC_SEMICOLON = 62, T_BREAK = 4, T_CASE = 5, @@ -86,9 +85,9 @@ public: T_EQ_EQ = 18, T_EQ_EQ_EQ = 19, T_FALSE = 82, - T_FEED_JS_EXPRESSION = 93, - T_FEED_JS_STATEMENT = 92, - T_FEED_UI_PROGRAM = 91, + T_FEED_JS_EXPRESSION = 92, + T_FEED_JS_STATEMENT = 91, + T_FEED_UI_PROGRAM = 90, T_FINALLY = 20, T_FOR = 21, T_FUNCTION = 22, @@ -100,7 +99,7 @@ public: T_GT_GT_GT_EQ = 28, T_IDENTIFIER = 29, T_IF = 30, - T_IMPORT = 89, + T_IMPORT = 88, T_IN = 31, T_INSTANCEOF = 32, T_LBRACE = 33, @@ -127,7 +126,7 @@ public: T_PLUS_EQ = 52, T_PLUS_PLUS = 53, T_PROPERTY = 66, - T_PUBLIC = 88, + T_PUBLIC = 87, T_QUESTION = 54, T_RBRACE = 55, T_RBRACKET = 56, @@ -155,15 +154,15 @@ public: T_XOR = 78, T_XOR_EQ = 79, - ACCEPT_STATE = 634, - RULE_COUNT = 348, - STATE_COUNT = 635, - TERMINAL_COUNT = 96, - NON_TERMINAL_COUNT = 108, + ACCEPT_STATE = 638, + RULE_COUNT = 350, + STATE_COUNT = 639, + TERMINAL_COUNT = 95, + NON_TERMINAL_COUNT = 106, - GOTO_INDEX_OFFSET = 635, - GOTO_INFO_OFFSET = 2345, - GOTO_CHECK_OFFSET = 2345 + GOTO_INDEX_OFFSET = 639, + GOTO_INFO_OFFSET = 2310, + GOTO_CHECK_OFFSET = 2310 }; static const char *const spell []; diff --git a/src/declarative/qml/parser/qmljslexer.cpp b/src/declarative/qml/parser/qmljslexer.cpp index 0756f10..beb5ebd 100644 --- a/src/declarative/qml/parser/qmljslexer.cpp +++ b/src/declarative/qml/parser/qmljslexer.cpp @@ -755,64 +755,6 @@ int Lexer::lex() bol = false; } - if (state == Number) { - // CSS-style suffix for numeric literals - - flags = noSuffix; - - const ushort c = QChar::toLower(current); - const ushort n1 = QChar::toLower(next1); - const ushort n2 = QChar::toLower(next2); - const ushort n3 = QChar::toLower(next3); - - if (c == 'e' && n1 == 'm') { - flags = emSuffix; - shift(2); - } else if (c == 'e' && n1 == 'x') { - flags = exSuffix; - shift(2); - } else if (c == 'p' && n1 == 'x') { - flags = pxSuffix; - shift(2); - } else if (c == 'c' && n1 == 'm') { - flags = cmSuffix; - shift(2); - } else if (c == 'm' && n1 == 'm') { - flags = mmSuffix; - shift(2); - } else if (c == 'i' && n1 == 'n') { - flags = inSuffix; - shift(2); - } else if (c == 'p' && n1 == 't') { - flags = ptSuffix; - shift(2); - } else if (c == 'p' && n1 == 'c') { - flags = pcSuffix; - shift(1); - } else if (c == 'd' && n1 == 'e' && n2 == 'g') { - flags = degSuffix; - shift(3); - } else if (c == 'r' && n1 == 'a' && n2 == 'd') { - flags = radSuffix; - shift(3); - } else if (c == 'g' && n1 == 'r' && n2 == 'a' && n3 == 'd') { - flags = gradSuffix; - shift(4); - } else if (c == 'm' && n1 == 's') { - flags = msSuffix; - shift(2); - } else if (c == 's') { - flags = sSuffix; - shift(1); - } else if (c == 'h' && n1 == 'z') { - flags = hzSuffix; - shift(2); - } else if (c == 'k' && n1 == 'h' && n2 == 'z') { - flags = khzSuffix; - shift(3); - } - } - // no identifiers allowed directly after numeric literal, e.g. "3in" is bad if ((state == Number || state == Octal || state == Hex) && isIdentLetter(current)) { @@ -1038,7 +980,6 @@ int Lexer::matchPunctuator(ushort c1, ushort c2, case '[': shift(1); return QmlJSGrammar::T_LBRACKET; case ']': shift(1); return QmlJSGrammar::T_RBRACKET; case ';': shift(1); return QmlJSGrammar::T_SEMICOLON; - case '@': shift(1); return QmlJSGrammar::T_AT; default: return -1; } diff --git a/src/declarative/qml/parser/qmljslexer_p.h b/src/declarative/qml/parser/qmljslexer_p.h index e1ff23e..5817868 100644 --- a/src/declarative/qml/parser/qmljslexer_p.h +++ b/src/declarative/qml/parser/qmljslexer_p.h @@ -112,25 +112,6 @@ public: Other, Bad }; - enum Suffix { - noSuffix, - emSuffix, - exSuffix, - pxSuffix, - cmSuffix, - mmSuffix, - inSuffix, - ptSuffix, - pcSuffix, - degSuffix, - radSuffix, - gradSuffix, - msSuffix, - sSuffix, - hzSuffix, - khzSuffix - }; - enum Error { NoError, IllegalCharacter, diff --git a/src/declarative/qml/parser/qmljsparser.cpp b/src/declarative/qml/parser/qmljsparser.cpp index 296559b..9bd6e6f 100644 --- a/src/declarative/qml/parser/qmljsparser.cpp +++ b/src/declarative/qml/parser/qmljsparser.cpp @@ -292,109 +292,60 @@ case 20: { } break; case 21: { - sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiObjectMember); + sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember); } break; -case 23: { - sym(1).UiAttributeList = sym(1).UiAttributeList->finish(); -} break; - -case 24: { - sym(1).UiAttributeList = makeAstNode<AST::UiAttributeList>(driver->nodePool(), sym(1).UiAttribute); -} break; - -case 25: { - sym(1).UiAttributeList = makeAstNode<AST::UiAttributeList>(driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiAttribute); +case 22: { + sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember); } break; -case 28: { - AST::UiAttribute *ast = makeAstNode<AST::UiAttribute>(driver->nodePool(), sym(2).sval); - ast->atToken = loc(1); - ast->nameToken = loc(2); - sym(1).UiAttribute = ast; -} break; - -case 29: { - AST::UiAttribute *ast = makeAstNode<AST::UiAttribute>(driver->nodePool(), - sym(2).sval, sym(4).Expression); - ast->atToken = loc(1); - ast->nameToken = loc(2); - ast->equalToken = loc(3); - sym(1).UiAttribute = ast; -} break; - -case 30: { - AST::IdentifierExpression *node = makeAstNode<AST::IdentifierExpression> (driver->nodePool(), sym(1).sval); - node->identifierToken = loc(1); - sym(1).Node = node; -} break; - -case 31: { - AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval, lexer->flags); - node->literalToken = loc(1); - sym(1).Node = node; -} break; - -case 32: { - sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), - sym(1).UiAttributeList, sym(2).UiObjectMember); -} break; - -case 33: { +case 23: { AST::UiObjectMemberList *node = makeAstNode<AST:: UiObjectMemberList> (driver->nodePool(), - sym(1).UiObjectMemberList, sym(2).UiAttributeList, sym(3).UiObjectMember); + sym(1).UiObjectMemberList, sym(2).UiObjectMember); sym(1).Node = node; } break; -case 34: { +case 24: { sym(1).Node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), sym(1).UiObjectMember); } break; -case 35: { - sym(2).UiObjectMember->attributes = sym(1).UiAttributeList->finish(); - sym(1).Node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), sym(2).UiObjectMember); -} break; - -case 36: { - sym(4).UiObjectMember->attributes = sym(3).UiAttributeList; +case 25: { AST::UiArrayMemberList *node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), - sym(1).UiArrayMemberList, sym(4).UiObjectMember); + sym(1).UiArrayMemberList, sym(3).UiObjectMember); node->commaToken = loc(2); sym(1).Node = node; } break; -case 37: { +case 26: { AST::UiObjectInitializer *node = makeAstNode<AST::UiObjectInitializer> (driver->nodePool(), (AST::UiObjectMemberList*)0); node->lbraceToken = loc(1); node->rbraceToken = loc(2); sym(1).Node = node; } break; -case 38: { +case 27: { AST::UiObjectInitializer *node = makeAstNode<AST::UiObjectInitializer> (driver->nodePool(), sym(2).UiObjectMemberList->finish()); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -case 39: { +case 28: { AST::UiObjectDefinition *node = makeAstNode<AST::UiObjectDefinition> (driver->nodePool(), sym(1).UiQualifiedId->finish(), sym(2).UiObjectInitializer); sym(1).Node = node; } break; -case 41: { - AST::UiArrayBinding *node = makeAstNode<AST::UiArrayBinding> (driver->nodePool(), sym(1).UiQualifiedId->finish(), - sym(4).UiArrayMemberList->finish()); +case 30: { + AST::UiArrayBinding *node = makeAstNode<AST::UiArrayBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(4).UiArrayMemberList->finish()); node->colonToken = loc(2); node->lbracketToken = loc(3); node->rbracketToken = loc(5); sym(1).Node = node; } break; -case 42: { +case 31: { if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(3).Expression)) { AST::UiObjectBinding *node = makeAstNode<AST::UiObjectBinding> (driver->nodePool(), sym(1).UiQualifiedId->finish(), qualifiedId, sym(4).UiObjectInitializer); @@ -409,62 +360,127 @@ case 42: { return false; // ### recover } } break; -case 43:case 44:case 45:case 46: + +case 32: { + if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(4).Expression)) { + AST::UiObjectBinding *node = makeAstNode<AST::UiObjectBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), qualifiedId, sym(5).UiObjectInitializer); + node->colonToken = loc(3); + sym(1).Node = node; + } else { + sym(1).Node = 0; + + diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(2), + QLatin1String("Expected a type name after token `:'"))); + + return false; // ### recover + } +} break; +case 33:case 34:case 35:case 36: +{ + AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(4).Statement); + node->colonToken = loc(3); + sym(1).Node = node; +} break; +case 37:case 38:case 39:case 40: { - AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), sym(1).UiQualifiedId->finish(), - sym(3).Statement); + AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(), + sym(1).UiQualifiedId->finish(), sym(3).Statement); node->colonToken = loc(2); sym(1).Node = node; } break; -case 47: +case 41: -case 48: { +case 42: { sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount()); break; } -case 50: { +case 44: { sym(1).Node = 0; } break; -case 51: { +case 45: { sym(1).Node = sym(1).UiParameterList->finish (); } break; -case 52: { +case 46: { AST::UiParameterList *node = makeAstNode<AST::UiParameterList> (driver->nodePool(), sym(1).sval, sym(2).sval); node->identifierToken = loc(2); sym(1).Node = node; } break; -case 53: { +case 47: { AST::UiParameterList *node = makeAstNode<AST::UiParameterList> (driver->nodePool(), sym(1).UiParameterList, sym(3).sval, sym(4).sval); node->commaToken = loc(2); node->identifierToken = loc(4); sym(1).Node = node; } break; -case 54: { +case 48: { + AST::UiFormal *node = makeAstNode<AST::UiFormal>(driver->nodePool(), sym(1).sval); + node->identifierToken = loc(1); + sym(1).UiFormal = node; +} break; + +case 49: { + AST::UiFormal *node = makeAstNode<AST::UiFormal>(driver->nodePool(), + sym(1).sval, sym(3).sval); + node->identifierToken = loc(1); + node->asToken = loc(2); + node->aliasToken = loc(3); + sym(1).UiFormal = node; +} break; + +case 50: { + sym(1).UiFormalList = makeAstNode<AST::UiFormalList>(driver->nodePool(), + sym(1).UiFormal); +} break; + +case 51: { + sym(1).UiFormalList = makeAstNode<AST::UiFormalList>(driver->nodePool(), + sym(1).UiFormalList, sym(3).UiFormal); +} break; + +case 52: { + AST::UiSignature *node = makeAstNode<AST::UiSignature>(driver->nodePool()); + node->lparenToken = loc(1); + node->rparenToken = loc(3); + sym(1).UiSignature = node; +} break; + +case 53: { + AST::UiSignature *node = makeAstNode<AST::UiSignature>(driver->nodePool(), + sym(2).UiFormalList->finish()); + node->lparenToken = loc(1); + node->rparenToken = loc(3); + sym(1).UiSignature = node; +} break; + +case 55: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); node->typeToken = loc(2); - node->identifierToken = loc(3); + node->identifierToken = loc(2); node->parameters = sym(4).UiParameterList; + node->semicolonToken = loc(6); sym(1).Node = node; } break; -case 55: { +case 57: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); node->typeToken = loc(2); - node->identifierToken = loc(3); + node->identifierToken = loc(2); + node->semicolonToken = loc(3); sym(1).Node = node; } break; -case 57: { +case 59: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(2).sval, sym(3).sval); node->propertyToken = loc(1); node->typeToken = loc(2); @@ -473,7 +489,7 @@ case 57: { sym(1).Node = node; } break; -case 59: { +case 61: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval); node->isDefaultMember = true; node->defaultToken = loc(1); @@ -484,7 +500,7 @@ case 59: { sym(1).Node = node; } break; -case 61: { +case 63: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(2).sval, sym(3).sval, sym(5).Expression); node->propertyToken = loc(1); @@ -495,7 +511,7 @@ case 61: { sym(1).Node = node; } break; -case 63: { +case 65: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval, sym(6).Expression); node->isDefaultMember = true; @@ -508,76 +524,76 @@ case 63: { sym(1).Node = node; } break; -case 64: { +case 66: { sym(1).Node = makeAstNode<AST::UiSourceElement>(driver->nodePool(), sym(1).Node); } break; -case 65: { +case 67: { sym(1).Node = makeAstNode<AST::UiSourceElement>(driver->nodePool(), sym(1).Node); } break; -case 66: -case 67: +case 68: +case 69: { AST::UiQualifiedId *node = makeAstNode<AST::UiQualifiedId> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount())); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 69: { +case 71: { QString s = QLatin1String(QmlJSGrammar::spell[T_PROPERTY]); sym(1).sval = driver->intern(s.constData(), s.length()); break; } -case 70: { +case 72: { QString s = QLatin1String(QmlJSGrammar::spell[T_SIGNAL]); sym(1).sval = driver->intern(s.constData(), s.length()); break; } -case 71: { +case 73: { AST::ThisExpression *node = makeAstNode<AST::ThisExpression> (driver->nodePool()); node->thisToken = loc(1); sym(1).Node = node; } break; -case 72: { +case 74: { AST::IdentifierExpression *node = makeAstNode<AST::IdentifierExpression> (driver->nodePool(), sym(1).sval); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 73: { +case 75: { AST::NullExpression *node = makeAstNode<AST::NullExpression> (driver->nodePool()); node->nullToken = loc(1); sym(1).Node = node; } break; -case 74: { +case 76: { AST::TrueLiteral *node = makeAstNode<AST::TrueLiteral> (driver->nodePool()); node->trueToken = loc(1); sym(1).Node = node; } break; -case 75: { +case 77: { AST::FalseLiteral *node = makeAstNode<AST::FalseLiteral> (driver->nodePool()); node->falseToken = loc(1); sym(1).Node = node; } break; -case 76: { - AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval, lexer->flags); +case 78: { + AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval); node->literalToken = loc(1); sym(1).Node = node; } break; -case 77: -case 78: { +case 79: +case 80: { AST::StringLiteral *node = makeAstNode<AST::StringLiteral> (driver->nodePool(), sym(1).sval); node->literalToken = loc(1); sym(1).Node = node; } break; -case 79: { +case 81: { bool rx = lexer->scanRegExp(Lexer::NoPrefix); if (!rx) { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); @@ -588,7 +604,7 @@ case 79: { sym(1).Node = node; } break; -case 80: { +case 82: { bool rx = lexer->scanRegExp(Lexer::EqualPrefix); if (!rx) { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); @@ -599,28 +615,28 @@ case 80: { sym(1).Node = node; } break; -case 81: { +case 83: { AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), (AST::Elision *) 0); node->lbracketToken = loc(1); node->rbracketToken = loc(2); sym(1).Node = node; } break; -case 82: { +case 84: { AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision->finish()); node->lbracketToken = loc(1); node->rbracketToken = loc(3); sym(1).Node = node; } break; -case 83: { +case 85: { AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ()); node->lbracketToken = loc(1); node->rbracketToken = loc(3); sym(1).Node = node; } break; -case 84: { +case 86: { AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), (AST::Elision *) 0); node->lbracketToken = loc(1); @@ -629,7 +645,7 @@ case 84: { sym(1).Node = node; } break; -case 85: { +case 87: { AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision->finish()); node->lbracketToken = loc(1); @@ -638,7 +654,7 @@ case 85: { sym(1).Node = node; } break; -case 86: { +case 88: { AST::ObjectLiteral *node = 0; if (sym(2).Node) node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(), @@ -650,7 +666,7 @@ case 86: { sym(1).Node = node; } break; -case 87: { +case 89: { AST::ObjectLiteral *node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ()); node->lbraceToken = loc(1); @@ -658,67 +674,67 @@ case 87: { sym(1).Node = node; } break; -case 88: { +case 90: { AST::NestedExpression *node = makeAstNode<AST::NestedExpression>(driver->nodePool(), sym(2).Expression); node->lparenToken = loc(1); node->rparenToken = loc(3); sym(1).Node = node; } break; -case 89: { +case 91: { AST::UiQualifiedId *node = makeAstNode<AST::UiQualifiedId> (driver->nodePool(), sym(1).sval); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 90: { +case 92: { AST::UiQualifiedId *node = makeAstNode<AST::UiQualifiedId> (driver->nodePool(), sym(1).UiQualifiedId, sym(3).sval); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 91: { +case 93: { sym(1).Node = makeAstNode<AST::ElementList> (driver->nodePool(), (AST::Elision *) 0, sym(1).Expression); } break; -case 92: { +case 94: { sym(1).Node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).Elision->finish(), sym(2).Expression); } break; -case 93: { +case 95: { AST::ElementList *node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).ElementList, (AST::Elision *) 0, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 94: { +case 96: { AST::ElementList *node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision->finish(), sym(4).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 95: { +case 97: { AST::Elision *node = makeAstNode<AST::Elision> (driver->nodePool()); node->commaToken = loc(1); sym(1).Node = node; } break; -case 96: { +case 98: { AST::Elision *node = makeAstNode<AST::Elision> (driver->nodePool(), sym(1).Elision); node->commaToken = loc(2); sym(1).Node = node; } break; -case 97: { +case 99: { AST::PropertyNameAndValueList *node = makeAstNode<AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression); node->colonToken = loc(2); sym(1).Node = node; } break; -case 98: { +case 100: { AST::PropertyNameAndValueList *node = makeAstNode<AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression); node->commaToken = loc(2); @@ -726,40 +742,36 @@ case 98: { sym(1).Node = node; } break; -case 99: { +case 101: { AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 100: -case 101: { +case 102: +case 103: { AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount())); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 102: { +case 104: { AST::StringLiteralPropertyName *node = makeAstNode<AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 103: { +case 105: { AST::NumericLiteralPropertyName *node = makeAstNode<AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 104: { +case 106: { AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -case 105: - -case 106: - case 107: case 108: @@ -817,25 +829,29 @@ case 133: case 134: case 135: + +case 136: + +case 137: { sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount()); } break; -case 140: { +case 142: { AST::ArrayMemberExpression *node = makeAstNode<AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -case 141: { +case 143: { AST::FieldMemberExpression *node = makeAstNode<AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 142: { +case 144: { AST::NewMemberExpression *node = makeAstNode<AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(4).ArgumentList); node->newToken = loc(1); node->lparenToken = loc(3); @@ -843,316 +859,309 @@ case 142: { sym(1).Node = node; } break; -case 144: { +case 146: { AST::NewExpression *node = makeAstNode<AST::NewExpression> (driver->nodePool(), sym(2).Expression); node->newToken = loc(1); sym(1).Node = node; } break; -case 145: { +case 147: { AST::CallExpression *node = makeAstNode<AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -case 146: { +case 148: { AST::CallExpression *node = makeAstNode<AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -case 147: { +case 149: { AST::ArrayMemberExpression *node = makeAstNode<AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -case 148: { +case 150: { AST::FieldMemberExpression *node = makeAstNode<AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 149: { +case 151: { sym(1).Node = 0; } break; -case 150: { +case 152: { sym(1).Node = sym(1).ArgumentList->finish(); } break; -case 151: { +case 153: { sym(1).Node = makeAstNode<AST::ArgumentList> (driver->nodePool(), sym(1).Expression); } break; -case 152: { +case 154: { AST::ArgumentList *node = makeAstNode<AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 156: { +case 158: { AST::PostIncrementExpression *node = makeAstNode<AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression); node->incrementToken = loc(2); sym(1).Node = node; } break; -case 157: { +case 159: { AST::PostDecrementExpression *node = makeAstNode<AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression); node->decrementToken = loc(2); sym(1).Node = node; } break; -case 159: { +case 161: { AST::DeleteExpression *node = makeAstNode<AST::DeleteExpression> (driver->nodePool(), sym(2).Expression); node->deleteToken = loc(1); sym(1).Node = node; } break; -case 160: { +case 162: { AST::VoidExpression *node = makeAstNode<AST::VoidExpression> (driver->nodePool(), sym(2).Expression); node->voidToken = loc(1); sym(1).Node = node; } break; -case 161: { +case 163: { AST::TypeOfExpression *node = makeAstNode<AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression); node->typeofToken = loc(1); sym(1).Node = node; } break; -case 162: { +case 164: { AST::PreIncrementExpression *node = makeAstNode<AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression); node->incrementToken = loc(1); sym(1).Node = node; } break; -case 163: { +case 165: { AST::PreDecrementExpression *node = makeAstNode<AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression); node->decrementToken = loc(1); sym(1).Node = node; } break; -case 164: { +case 166: { AST::UnaryPlusExpression *node = makeAstNode<AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression); node->plusToken = loc(1); sym(1).Node = node; } break; -case 165: { +case 167: { AST::UnaryMinusExpression *node = makeAstNode<AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression); node->minusToken = loc(1); sym(1).Node = node; } break; -case 166: { +case 168: { AST::TildeExpression *node = makeAstNode<AST::TildeExpression> (driver->nodePool(), sym(2).Expression); node->tildeToken = loc(1); sym(1).Node = node; } break; -case 167: { +case 169: { AST::NotExpression *node = makeAstNode<AST::NotExpression> (driver->nodePool(), sym(2).Expression); node->notToken = loc(1); sym(1).Node = node; } break; -case 169: { +case 171: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 170: { +case 172: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 171: { +case 173: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 173: { +case 175: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 174: { +case 176: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 176: { +case 178: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 177: { +case 179: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 178: { +case 180: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 180: { +case 182: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 181: { +case 183: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 182: { +case 184: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 183: { +case 185: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 184: { +case 186: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 185: { +case 187: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 187: { +case 189: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 188: { +case 190: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 189: { +case 191: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 190: { +case 192: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 191: { +case 193: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 193: { +case 195: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 194: { +case 196: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 195: { +case 197: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 196: { +case 198: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 198: { +case 200: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 199: { +case 201: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 200: { +case 202: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 201: { - AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::StrictNotEqual, sym(3).Expression); - node->operatorToken = loc(2); - sym(1).Node = node; -} break; - case 203: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::BitAnd, sym(3).Expression); + QSOperator::StrictNotEqual, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; @@ -1166,7 +1175,7 @@ case 205: { case 207: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::BitXor, sym(3).Expression); + QSOperator::BitAnd, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; @@ -1180,7 +1189,7 @@ case 209: { case 211: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::BitOr, sym(3).Expression); + QSOperator::BitXor, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; @@ -1194,7 +1203,7 @@ case 213: { case 215: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::And, sym(3).Expression); + QSOperator::BitOr, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; @@ -1208,7 +1217,7 @@ case 217: { case 219: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, - QSOperator::Or, sym(3).Expression); + QSOperator::And, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; @@ -1221,6 +1230,13 @@ case 221: { } break; case 223: { + AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, + QSOperator::Or, sym(3).Expression); + node->operatorToken = loc(2); + sym(1).Node = node; +} break; + +case 225: { AST::ConditionalExpression *node = makeAstNode<AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); @@ -1228,7 +1244,7 @@ case 223: { sym(1).Node = node; } break; -case 225: { +case 227: { AST::ConditionalExpression *node = makeAstNode<AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); @@ -1236,112 +1252,112 @@ case 225: { sym(1).Node = node; } break; -case 227: { +case 229: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 229: { +case 231: { AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -case 230: { +case 232: { sym(1).ival = QSOperator::Assign; } break; -case 231: { +case 233: { sym(1).ival = QSOperator::InplaceMul; } break; -case 232: { +case 234: { sym(1).ival = QSOperator::InplaceDiv; } break; -case 233: { +case 235: { sym(1).ival = QSOperator::InplaceMod; } break; -case 234: { +case 236: { sym(1).ival = QSOperator::InplaceAdd; } break; -case 235: { +case 237: { sym(1).ival = QSOperator::InplaceSub; } break; -case 236: { +case 238: { sym(1).ival = QSOperator::InplaceLeftShift; } break; -case 237: { +case 239: { sym(1).ival = QSOperator::InplaceRightShift; } break; -case 238: { +case 240: { sym(1).ival = QSOperator::InplaceURightShift; } break; -case 239: { +case 241: { sym(1).ival = QSOperator::InplaceAnd; } break; -case 240: { +case 242: { sym(1).ival = QSOperator::InplaceXor; } break; -case 241: { +case 243: { sym(1).ival = QSOperator::InplaceOr; } break; -case 243: { +case 245: { AST::Expression *node = makeAstNode<AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 244: { +case 246: { sym(1).Node = 0; } break; -case 247: { +case 249: { AST::Expression *node = makeAstNode<AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -case 248: { +case 250: { sym(1).Node = 0; } break; -case 265: { +case 267: { AST::Block *node = makeAstNode<AST::Block> (driver->nodePool(), sym(2).StatementList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -case 266: { +case 268: { sym(1).Node = makeAstNode<AST::StatementList> (driver->nodePool(), sym(1).Statement); } break; -case 267: { +case 269: { sym(1).Node = makeAstNode<AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement); } break; -case 268: { +case 270: { sym(1).Node = 0; } break; -case 269: { +case 271: { sym(1).Node = sym(1).StatementList->finish (); } break; -case 271: { +case 273: { AST::VariableStatement *node = makeAstNode<AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST)); node->declarationKindToken = loc(1); @@ -1349,76 +1365,76 @@ case 271: { sym(1).Node = node; } break; -case 272: { +case 274: { sym(1).ival = T_CONST; } break; -case 273: { +case 275: { sym(1).ival = T_VAR; } break; -case 274: { +case 276: { sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration); } break; -case 275: { +case 277: { AST::VariableDeclarationList *node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); node->commaToken = loc(2); sym(1).Node = node; } break; -case 276: { +case 278: { sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration); } break; -case 277: { +case 279: { sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); } break; -case 278: { +case 280: { AST::VariableDeclaration *node = makeAstNode<AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 279: { +case 281: { AST::VariableDeclaration *node = makeAstNode<AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 280: { +case 282: { // ### TODO: AST for initializer sym(1) = sym(2); } break; -case 281: { +case 283: { sym(1).Node = 0; } break; -case 283: { +case 285: { // ### TODO: AST for initializer sym(1) = sym(2); } break; -case 284: { +case 286: { sym(1).Node = 0; } break; -case 286: { +case 288: { AST::EmptyStatement *node = makeAstNode<AST::EmptyStatement> (driver->nodePool()); node->semicolonToken = loc(1); sym(1).Node = node; } break; -case 288: { +case 290: { AST::ExpressionStatement *node = makeAstNode<AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 289: { +case 291: { AST::IfStatement *node = makeAstNode<AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -1427,7 +1443,7 @@ case 289: { sym(1).Node = node; } break; -case 290: { +case 292: { AST::IfStatement *node = makeAstNode<AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -1435,7 +1451,7 @@ case 290: { sym(1).Node = node; } break; -case 292: { +case 294: { AST::DoWhileStatement *node = makeAstNode<AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression); node->doToken = loc(1); node->whileToken = loc(3); @@ -1445,7 +1461,7 @@ case 292: { sym(1).Node = node; } break; -case 293: { +case 295: { AST::WhileStatement *node = makeAstNode<AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); node->whileToken = loc(1); node->lparenToken = loc(2); @@ -1453,7 +1469,7 @@ case 293: { sym(1).Node = node; } break; -case 294: { +case 296: { AST::ForStatement *node = makeAstNode<AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); node->forToken = loc(1); @@ -1464,7 +1480,7 @@ case 294: { sym(1).Node = node; } break; -case 295: { +case 297: { AST::LocalForStatement *node = makeAstNode<AST::LocalForStatement> (driver->nodePool(), sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression, sym(8).Expression, sym(10).Statement); @@ -1477,7 +1493,7 @@ case 295: { sym(1).Node = node; } break; -case 296: { +case 298: { AST:: ForEachStatement *node = makeAstNode<AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement); node->forToken = loc(1); @@ -1487,7 +1503,7 @@ case 296: { sym(1).Node = node; } break; -case 297: { +case 299: { AST::LocalForEachStatement *node = makeAstNode<AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement); node->forToken = loc(1); @@ -1498,14 +1514,14 @@ case 297: { sym(1).Node = node; } break; -case 299: { +case 301: { AST::ContinueStatement *node = makeAstNode<AST::ContinueStatement> (driver->nodePool()); node->continueToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 301: { +case 303: { AST::ContinueStatement *node = makeAstNode<AST::ContinueStatement> (driver->nodePool(), sym(2).sval); node->continueToken = loc(1); node->identifierToken = loc(2); @@ -1513,14 +1529,14 @@ case 301: { sym(1).Node = node; } break; -case 303: { +case 305: { AST::BreakStatement *node = makeAstNode<AST::BreakStatement> (driver->nodePool()); node->breakToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 305: { +case 307: { AST::BreakStatement *node = makeAstNode<AST::BreakStatement> (driver->nodePool(), sym(2).sval); node->breakToken = loc(1); node->identifierToken = loc(2); @@ -1528,14 +1544,14 @@ case 305: { sym(1).Node = node; } break; -case 307: { +case 309: { AST::ReturnStatement *node = makeAstNode<AST::ReturnStatement> (driver->nodePool(), sym(2).Expression); node->returnToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -case 308: { +case 310: { AST::WithStatement *node = makeAstNode<AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); node->withToken = loc(1); node->lparenToken = loc(2); @@ -1543,7 +1559,7 @@ case 308: { sym(1).Node = node; } break; -case 309: { +case 311: { AST::SwitchStatement *node = makeAstNode<AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock); node->switchToken = loc(1); node->lparenToken = loc(2); @@ -1551,90 +1567,90 @@ case 309: { sym(1).Node = node; } break; -case 310: { +case 312: { AST::CaseBlock *node = makeAstNode<AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -case 311: { +case 313: { AST::CaseBlock *node = makeAstNode<AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(5); sym(1).Node = node; } break; -case 312: { +case 314: { sym(1).Node = makeAstNode<AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause); } break; -case 313: { +case 315: { sym(1).Node = makeAstNode<AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause); } break; -case 314: { +case 316: { sym(1).Node = 0; } break; -case 315: { +case 317: { sym(1).Node = sym(1).CaseClauses->finish (); } break; -case 316: { +case 318: { AST::CaseClause *node = makeAstNode<AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList); node->caseToken = loc(1); node->colonToken = loc(3); sym(1).Node = node; } break; -case 317: { +case 319: { AST::DefaultClause *node = makeAstNode<AST::DefaultClause> (driver->nodePool(), sym(3).StatementList); node->defaultToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -case 318: -case 319: { +case 320: +case 321: { AST::LabelledStatement *node = makeAstNode<AST::LabelledStatement> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()), sym(3).Statement); node->identifierToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -case 320: { +case 322: { AST::LabelledStatement *node = makeAstNode<AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement); node->identifierToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -case 322: { +case 324: { AST::ThrowStatement *node = makeAstNode<AST::ThrowStatement> (driver->nodePool(), sym(2).Expression); node->throwToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -case 323: { +case 325: { AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch); node->tryToken = loc(1); sym(1).Node = node; } break; -case 324: { +case 326: { AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -case 325: { +case 327: { AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -case 326: { +case 328: { AST::Catch *node = makeAstNode<AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Block); node->catchToken = loc(1); node->lparenToken = loc(2); @@ -1643,20 +1659,20 @@ case 326: { sym(1).Node = node; } break; -case 327: { +case 329: { AST::Finally *node = makeAstNode<AST::Finally> (driver->nodePool(), sym(2).Block); node->finallyToken = loc(1); sym(1).Node = node; } break; -case 329: { +case 331: { AST::DebuggerStatement *node = makeAstNode<AST::DebuggerStatement> (driver->nodePool()); node->debuggerToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -case 330: { +case 332: { AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); node->identifierToken = loc(2); @@ -1667,7 +1683,7 @@ case 330: { sym(1).Node = node; } break; -case 331: { +case 333: { AST::FunctionExpression *node = makeAstNode<AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); if (sym(2).sval) @@ -1679,56 +1695,56 @@ case 331: { sym(1).Node = node; } break; -case 332: { +case 334: { AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).sval); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 333: { +case 335: { AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval); node->commaToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 334: { +case 336: { sym(1).Node = 0; } break; -case 335: { +case 337: { sym(1).Node = sym(1).FormalParameterList->finish (); } break; -case 336: { +case 338: { sym(1).Node = 0; } break; -case 338: { +case 340: { sym(1).Node = makeAstNode<AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ()); } break; -case 339: { +case 341: { sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElement); } break; -case 340: { +case 342: { sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement); } break; -case 341: { +case 343: { sym(1).Node = makeAstNode<AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement); } break; -case 342: { +case 344: { sym(1).Node = makeAstNode<AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration); } break; -case 343: { +case 345: { sym(1).sval = 0; } break; -case 345: { +case 347: { sym(1).Node = 0; } break; diff --git a/src/declarative/qml/parser/qmljsparser_p.h b/src/declarative/qml/parser/qmljsparser_p.h index 74d3c84..e352f43 100644 --- a/src/declarative/qml/parser/qmljsparser_p.h +++ b/src/declarative/qml/parser/qmljsparser_p.h @@ -120,8 +120,9 @@ public: AST::UiObjectMemberList *UiObjectMemberList; AST::UiArrayMemberList *UiArrayMemberList; AST::UiQualifiedId *UiQualifiedId; - AST::UiAttributeList *UiAttributeList; - AST::UiAttribute *UiAttribute; + AST::UiSignature *UiSignature; + AST::UiFormalList *UiFormalList; + AST::UiFormal *UiFormal; }; public: @@ -221,9 +222,9 @@ protected: -#define J_SCRIPT_REGEXPLITERAL_RULE1 79 +#define J_SCRIPT_REGEXPLITERAL_RULE1 81 -#define J_SCRIPT_REGEXPLITERAL_RULE2 80 +#define J_SCRIPT_REGEXPLITERAL_RULE2 82 QT_END_NAMESPACE diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index d8b69df..75e5692 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -5,7 +5,7 @@ SOURCES += qml/qmlparser.cpp \ qml/qmlexpression.cpp \ qml/qmlbinding.cpp \ qml/qmlmetaproperty.cpp \ - qml/qmlbindablecomponent.cpp \ + qml/qmlcomponentjs.cpp \ qml/qmlcomponent.cpp \ qml/qmlcontext.cpp \ qml/qmlcustomparser.cpp \ @@ -38,8 +38,8 @@ HEADERS += qml/qmlparser_p.h \ qml/qmlbinding.h \ qml/qmlbinding_p.h \ qml/qmlmetaproperty.h \ - qml/qmlbindablecomponent.h \ - qml/qmlbindablecomponent_p.h \ + qml/qmlcomponentjs_p.h \ + qml/qmlcomponentjs_p_p.h \ qml/qmlcomponent.h \ qml/qmlcomponent_p.h \ qml/qmlcustomparser_p.h \ diff --git a/src/declarative/qml/qmlbasicscript.cpp b/src/declarative/qml/qmlbasicscript.cpp index 073642f..b940d61 100644 --- a/src/declarative/qml/qmlbasicscript.cpp +++ b/src/declarative/qml/qmlbasicscript.cpp @@ -89,7 +89,7 @@ class QmlBasicScriptPrivate { public: enum Flags { OwnData = 0x00000001 }; - + int size; int stateSize; int instructionCount; @@ -102,14 +102,14 @@ public: return (const char *)(instructions() + instructionCount); } - const char *data() const + const char *data() const { return (const char *)(instructions() + instructionCount) + exprLen + 1; } static unsigned int alignRound(int s) { - if (s % 4) + if (s % 4) s += 4 - (s % 4); return s; } @@ -177,10 +177,10 @@ static QVariant fetch_value(QObject *o, int idx, int type) return QVariant(val); } break; - default: + default: { if (QmlMetaType::isObject(type)) { - // NOTE: This assumes a cast to QObject does not alter the + // NOTE: This assumes a cast to QObject does not alter the // object pointer QObject *val = 0; void *args[] = { &val, 0 }; @@ -241,14 +241,14 @@ struct QmlBasicScriptCompiler evaluated using the QmlBasicScript engine. To see if the QmlBasicScript engine can handle a binding, call compile() - and check the return value, or isValid() afterwards. + and check the return value, or isValid() afterwards. To evaluate the binding, the QmlBasicScript instance needs some memory in which to cache state. This may be allocated by calling newScriptState() and destroyed by calling deleteScriptState(). The state data is then passed to the run() method when evaluating the binding. - To further accelerate binding, QmlBasicScript can return a precompiled + To further accelerate binding, QmlBasicScript can return a precompiled version of itself that can be saved for future use. Call compileData() to get an opaque pointer to the compiled state, and compileDataSize() for the size of this data in bytes. This data can be saved and passed to future @@ -271,10 +271,10 @@ QmlBasicScript::QmlBasicScript() previously created QmlBasicScript instance. Any other data will almost certainly cause the QmlBasicScript engine to crash. - \a data must continue to be valid throughout the QmlBasicScript instance + \a data must continue to be valid throughout the QmlBasicScript instance life. It does not assume ownership of the memory. - If \a owner is set, it is referenced on creation and dereferenced on + If \a owner is set, it is referenced on creation and dereferenced on destruction of this instance. */ @@ -407,8 +407,8 @@ bool QmlBasicScript::compile(const Expression &expression) if (bsc.compile(expression.expression.asAST())) { int len = ::strlen(src); flags = QmlBasicScriptPrivate::OwnData; - int size = sizeof(QmlBasicScriptPrivate) + - bsc.bytecode.count() * sizeof(ScriptInstruction) + + int size = sizeof(QmlBasicScriptPrivate) + + bsc.bytecode.count() * sizeof(ScriptInstruction) + QmlBasicScriptPrivate::alignRound(bsc.data.count() + len + 1); d = (QmlBasicScriptPrivate *) malloc(size); d->size = size; @@ -416,10 +416,10 @@ bool QmlBasicScript::compile(const Expression &expression) d->instructionCount = bsc.bytecode.count(); d->exprLen = len; ::memcpy((char *)d->expr(), src, len + 1); - for (int ii = 0; ii < d->instructionCount; ++ii) + for (int ii = 0; ii < d->instructionCount; ++ii) d->instructions()[ii] = bsc.bytecode.at(ii); ::memcpy((char *)d->data(), bsc.data.constData(), bsc.data.count()); - } + } return d != 0; } @@ -431,15 +431,14 @@ bool QmlBasicScriptCompiler::compile(QmlJS::AST::Node *node) bool QmlBasicScriptCompiler::tryConstant(QmlJS::AST::Node *node) { - if (node->kind == AST::Node::Kind_TrueLiteral || + if (node->kind == AST::Node::Kind_TrueLiteral || node->kind == AST::Node::Kind_FalseLiteral) return true; if (node->kind == AST::Node::Kind_NumericLiteral) { AST::NumericLiteral *lit = static_cast<AST::NumericLiteral *>(node); - return lit->suffix == AST::NumericLiteral::noSuffix && - double(int(lit->value)) == lit->value; + return double(int(lit->value)) == lit->value; } return false; @@ -469,13 +468,13 @@ bool QmlBasicScriptCompiler::tryName(QmlJS::AST::Node *node) node->kind == AST::Node::Kind_FieldMemberExpression; } -bool QmlBasicScriptCompiler::buildName(QStringList &name, +bool QmlBasicScriptCompiler::buildName(QStringList &name, QmlJS::AST::Node *node) { if (node->kind == AST::Node::Kind_IdentifierExpression) { name << static_cast<AST::IdentifierExpression*>(node)->name->asString(); } else if (node->kind == AST::Node::Kind_FieldMemberExpression) { - AST::FieldMemberExpression *expr = + AST::FieldMemberExpression *expr = static_cast<AST::FieldMemberExpression *>(node); if (!buildName(name, expr->base)) @@ -499,7 +498,7 @@ QmlBasicScriptCompiler::fetch(int type, const QMetaObject *mo, int idx) if (prop.isConstant()) instr.constant.notify = 0; else - instr.constant.notify = prop.notifySignalIndex(); + instr.constant.notify = prop.notifySignalIndex(); instr.constant.type = prop.userType(); bytecode << instr; return QmlMetaType::metaObjectForType(prop.userType()); @@ -518,7 +517,7 @@ bool QmlBasicScriptCompiler::parseName(AST::Node *node) const QString &name = nameParts.at(ii); // We don't handle signal properties - if (name.length() > 2 && name.startsWith(QLatin1String("on")) && + if (name.length() > 2 && name.startsWith(QLatin1String("on")) && name.at(2).isUpper()) return false; @@ -543,10 +542,10 @@ bool QmlBasicScriptCompiler::parseName(AST::Node *node) d1Idx = component->metaObject()->indexOfProperty(cname); if (d0Idx != -1) { - metaType = fetch(ScriptInstruction::FetchContextConstant, + metaType = fetch(ScriptInstruction::FetchContextConstant, context->metaObject(), d0Idx); } else if(d1Idx != -1) { - metaType = fetch(ScriptInstruction::FetchRootConstant, + metaType = fetch(ScriptInstruction::FetchRootConstant, component->metaObject(), d1Idx); } else { return false; @@ -602,7 +601,7 @@ bool QmlBasicScriptCompiler::compileExpression(QmlJS::AST::Node *node) bool QmlBasicScriptCompiler::tryBinaryExpression(AST::Node *node) { if (node->kind == AST::Node::Kind_BinaryExpression) { - AST::BinaryExpression *expr = + AST::BinaryExpression *expr = static_cast<AST::BinaryExpression *>(node); if (expr->op == QSOperator::Equal) @@ -614,7 +613,7 @@ bool QmlBasicScriptCompiler::tryBinaryExpression(AST::Node *node) bool QmlBasicScriptCompiler::compileBinaryExpression(AST::Node *node) { if (node->kind == AST::Node::Kind_BinaryExpression) { - AST::BinaryExpression *expr = + AST::BinaryExpression *expr = static_cast<AST::BinaryExpression *>(node); if (!compileExpression(expr->left)) return false; @@ -631,7 +630,7 @@ bool QmlBasicScriptCompiler::compileBinaryExpression(AST::Node *node) bytecode.append(instr); return true; - } + } return false; } @@ -639,7 +638,7 @@ bool QmlBasicScriptCompiler::compileBinaryExpression(AST::Node *node) \enum QmlBasicScript::CacheState \value NoChange The query has not change. Any previous monitoring is still valid. - \value Incremental The query has been incrementally changed. Any previous + \value Incremental The query has been incrementally changed. Any previous monitoring is still valid, but needs to have the fresh properties added to it. \value Reset The entire query has been reset from the beginning. Any previous @@ -647,60 +646,60 @@ bool QmlBasicScriptCompiler::compileBinaryExpression(AST::Node *node) */ /*! - Run the script in \a context and return the result. \a voidCache should - contain state memory previously acquired from newScript. + Run the script in \a context and return the result. \a voidCache should + contain state memory previously acquired from newScript. */ QVariant QmlBasicScript::run(QmlContext *context, void *voidCache, CacheState *cached) { Q_UNUSED(voidCache); if (!isValid()) return QVariant(); - + QmlContextPrivate *contextPrivate = context->d_func(); - QmlEnginePrivate *enginePrivate = context->engine()->d_func(); + QmlEnginePrivate *enginePrivate = QmlEnginePrivate::get(context->engine()); QStack<QVariant> stack; - + CacheState state = NoChange; for (int idx = 0; idx < d->instructionCount; ++idx) { const ScriptInstruction &instr = d->instructions()[idx]; switch(instr.type) { - case ScriptInstruction::LoadIdObject: + case ScriptInstruction::LoadIdObject: { stack.push(contextPrivate->propertyValues.at(instr.fetch.idx)); enginePrivate->capturedProperties << - QmlEnginePrivate::CapturedProperty(context, -1, contextPrivate->notifyIndex + instr.fetch.idx); + QmlEnginePrivate::CapturedProperty(context, -1, contextPrivate->notifyIndex + instr.fetch.idx); state = Reset; } break; - case ScriptInstruction::FetchContextConstant: + case ScriptInstruction::FetchContextConstant: { QObject *obj = contextPrivate->defaultObjects.at(0); stack.push(fetch_value(obj, instr.constant.idx, instr.constant.type)); if (obj && instr.constant.notify != 0) enginePrivate->capturedProperties << - QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); + QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); state = Reset; } break; - case ScriptInstruction::FetchRootConstant: + case ScriptInstruction::FetchRootConstant: { QObject *obj = contextPrivate->defaultObjects.at(1); stack.push(fetch_value(obj, instr.constant.idx, instr.constant.type)); if (obj && instr.constant.notify != 0) enginePrivate->capturedProperties << - QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); + QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); state = Reset; } break; - case ScriptInstruction::FetchConstant: + case ScriptInstruction::FetchConstant: { QVariant o = stack.pop(); QObject *obj = qvariant_cast<QObject *>(o); @@ -708,7 +707,7 @@ QVariant QmlBasicScript::run(QmlContext *context, void *voidCache, CacheState *c stack.push(fetch_value(obj, instr.constant.idx, instr.constant.type)); if (obj && instr.constant.notify != 0) enginePrivate->capturedProperties << - QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); + QmlEnginePrivate::CapturedProperty(obj, instr.constant.idx, instr.constant.notify); state = Reset; } break; diff --git a/src/declarative/qml/qmlbinding.cpp b/src/declarative/qml/qmlbinding.cpp index 431dd66..41cef49 100644 --- a/src/declarative/qml/qmlbinding.cpp +++ b/src/declarative/qml/qmlbinding.cpp @@ -139,8 +139,7 @@ void QmlBinding::update() } else { QVariant value = this->value(); - if ((uint)d->property.propertyType() >= QVariant::UserType && - value.type() == QVariant::String) { + if (value.type() == QVariant::String) { QmlMetaType::StringConverter con = QmlMetaType::customStringConverter(d->property.propertyType()); if (con) value = con(value.toString()); diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index 20f0d93f..9c9a7bd 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -628,6 +628,9 @@ bool QmlCompiler::buildObject(Object *obj, const BindingContext &ctxt) if (tr.component) obj->url = tr.component->url(); + if (tr.type) + obj->typeName = tr.type->qmlTypeName(); + obj->className = tr.className; // This object is a "Component" element if (obj->metatype == &QmlComponent::staticMetaObject) { @@ -1427,7 +1430,7 @@ bool QmlCompiler::buildAttachedProperty(QmlParser::Property *prop, const BindingContext &ctxt) { Q_ASSERT(prop->value); - int id = QmlMetaType::attachedPropertiesFuncId("Qt/4.6/"+prop->name); // XXX Should not hard-code namespace + int id = QmlMetaType::attachedPropertiesFuncId(prop->name); Q_ASSERT(id != -1); // This is checked in compileProperty() prop->index = id; @@ -1714,7 +1717,7 @@ bool QmlCompiler::buildPropertyObjectAssignment(QmlParser::Property *prop, QmlParser::Object *root = v->object; QmlParser::Object *component = new QmlParser::Object; component->type = componentTypeRef(); - component->typeName = "Component"; + component->typeName = "Qt/4.6/Component"; component->metatype = &QmlComponent::staticMetaObject; component->location = root->location; QmlParser::Value *componentValue = new QmlParser::Value; @@ -2085,6 +2088,7 @@ void QmlCompiler::genBindingAssignment(QmlParser::Value *binding, store.assignBinding.value = dataRef; store.assignBinding.context = ref.bindingContext.stack; store.assignBinding.owner = ref.bindingContext.owner; + store.line = prop->location.end.line; output->bytecode << store; } diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index 7dcc373..8fb7736 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -330,7 +330,7 @@ void QmlComponent::setData(const QByteArray &data, const QUrl &url) d->url = url; QmlCompositeTypeData *typeData = - d->engine->d_func()->typeManager.getImmediate(data, url); + QmlEnginePrivate::get(d->engine)->typeManager.getImmediate(data, url); if (typeData->status == QmlCompositeTypeData::Waiting) { @@ -361,7 +361,7 @@ void QmlComponent::loadUrl(const QUrl &url) d->url = url; QmlCompositeTypeData *data = - d->engine->d_func()->typeManager.get(d->url); + QmlEnginePrivate::get(d->engine)->typeManager.get(d->url); if (data->status == QmlCompositeTypeData::Waiting) { @@ -481,8 +481,8 @@ QObject *QmlComponent::beginCreate(QmlContext *context) return 0; } - if (!d->engine->d_func()->rootComponent) - d->engine->d_func()->rootComponent = this; + if (!QmlEnginePrivate::get(d->engine)->rootComponent) + QmlEnginePrivate::get(d->engine)->rootComponent = this; QmlContextPrivate *contextPriv = static_cast<QmlContextPrivate *>(QObjectPrivate::get(context)); @@ -500,7 +500,7 @@ QObject *QmlComponent::beginCreate(QmlContext *context) if (vme.isError()) d->errors = vme.errors(); - QmlEnginePrivate *ep = d->engine->d_func(); + QmlEnginePrivate *ep = QmlEnginePrivate::get(d->engine); if (ep->rootComponent == this) { ep->rootComponent = 0; diff --git a/src/declarative/qml/qmlbindablecomponent.cpp b/src/declarative/qml/qmlcomponentjs.cpp index 6938592..df3e834 100644 --- a/src/declarative/qml/qmlbindablecomponent.cpp +++ b/src/declarative/qml/qmlcomponentjs.cpp @@ -39,50 +39,52 @@ ** ****************************************************************************/ -#include "qmlbindablecomponent.h" -#include "qmlbindablecomponent_p.h" +#include "qmlcomponentjs_p.h" +#include "qmlcomponentjs_p_p.h" +#include "qmlengine_p.h" #include "qmlcomponent.h" QT_BEGIN_NAMESPACE -QmlBindableComponent::QmlBindableComponent(QmlEngine *engine, QObject *parent) - : QmlComponent(*(new QmlBindableComponentPrivate), parent) + +QmlComponentJS::QmlComponentJS(QmlEngine *engine, QObject *parent) + : QmlComponent(*(new QmlComponentJSPrivate), parent) { - Q_D(QmlBindableComponent); + Q_D(QmlComponentJS); d->engine = engine; connect(this, SIGNAL(statusChanged(QmlComponent::Status)), this, SLOT(statusChange(QmlComponent::Status))); } -QmlBindableComponent::QmlBindableComponent(QmlEngine *engine, const QUrl &url, QObject *parent) - : QmlComponent(*(new QmlBindableComponentPrivate), parent) +QmlComponentJS::QmlComponentJS(QmlEngine *engine, const QUrl &url, QObject *parent) + : QmlComponent(*(new QmlComponentJSPrivate), parent) { - Q_D(QmlBindableComponent); + Q_D(QmlComponentJS); d->engine = engine; loadUrl(url); connect(this, SIGNAL(statusChanged(QmlComponent::Status)), this, SLOT(statusChange(QmlComponent::Status))); } -void QmlBindableComponent::setContext(QmlContext* c) +void QmlComponentJS::setContext(QmlContext* c) { - Q_D(QmlBindableComponent); + Q_D(QmlComponentJS); d->ctxt =c; } /*! Create a script object instance from this component. Returns a null script object if creation failed. It will create the instance in the - same context that it was created it. QmlBindableComponent is only + same context that it was created it. QmlComponentJS is only meant to be created from with script - C++ developers should just use QmlComponent directly. Similar to QmlComponent::create(), but creates an object suitable for usage within scripts. */ -QScriptValue QmlBindableComponent::createObject() +QScriptValue QmlComponentJS::createObject() { - Q_D(QmlBindableComponent); + Q_D(QmlComponentJS); QObject* ret = create(d->ctxt); - return QmlEngine::qmlScriptObject(ret, d->engine); + return QmlEnginePrivate::qmlScriptObject(ret, d->engine); } /*! @@ -95,9 +97,9 @@ QScriptValue QmlBindableComponent::createObject() \sa errors() */ -QString QmlBindableComponent::errorsString() const +QString QmlComponentJS::errorsString() const { - Q_D(const QmlBindableComponent); + Q_D(const QmlComponentJS); QString ret; if(!isError()) return ret; @@ -110,9 +112,9 @@ QString QmlBindableComponent::errorsString() const } -void QmlBindableComponent::statusChange(QmlComponent::Status newStatus) +void QmlComponentJS::statusChange(QmlComponent::Status newStatus) { - Q_D(QmlBindableComponent); + Q_D(QmlComponentJS); if(newStatus == d->prevStatus) return; if(newStatus == QmlComponent::Null || d->prevStatus == QmlComponent::Null) diff --git a/src/declarative/qml/qmlbindablecomponent.h b/src/declarative/qml/qmlcomponentjs_p.h index 43e3537..8c69b5f 100644 --- a/src/declarative/qml/qmlbindablecomponent.h +++ b/src/declarative/qml/qmlcomponentjs_p.h @@ -39,8 +39,19 @@ ** ****************************************************************************/ -#ifndef QMLBINDABLECOMPONENT_H -#define QMLBINDABLECOMPONENT_H +#ifndef QMLCOMPONENTJS_P_H +#define QMLCOMPONENTJS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// #include <QtCore/qobject.h> #include <QtCore/qstring.h> @@ -49,23 +60,19 @@ #include <QtDeclarative/qmlcomponent.h> #include <QtDeclarative/qmlerror.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE -QT_MODULE(Declarative) - -class QmlBindableComponentPrivate; +class QmlComponentJSPrivate; class QmlEngine; class QmlContext; -class Q_DECLARATIVE_EXPORT QmlBindableComponent : public QmlComponent +class Q_DECLARATIVE_EXPORT QmlComponentJS : public QmlComponent { Q_OBJECT - Q_DECLARE_PRIVATE(QmlBindableComponent) + Q_DECLARE_PRIVATE(QmlComponentJS) friend class QmlEngine; public: - QmlBindableComponent(QmlEngine *, const QUrl &url, QObject *parent = 0); - QmlBindableComponent(QmlEngine *, QObject *parent=0); + QmlComponentJS(QmlEngine *, const QUrl &url, QObject *parent = 0); + QmlComponentJS(QmlEngine *, QObject *parent=0); Q_PROPERTY(bool isNull READ isNull NOTIFY isNullChanged); Q_PROPERTY(bool isReady READ isReady NOTIFY isReadyChanged); Q_PROPERTY(bool isError READ isError NOTIFY isErrorChanged); @@ -86,7 +93,6 @@ private slots: QT_END_NAMESPACE -QML_DECLARE_TYPE(QmlBindableComponent) +QML_DECLARE_TYPE(QmlComponentJS) -QT_END_HEADER -#endif +#endif // QMLCOMPONENTJS_P_H diff --git a/src/declarative/qml/qmlbindablecomponent_p.h b/src/declarative/qml/qmlcomponentjs_p_p.h index 79335df..47ce491 100644 --- a/src/declarative/qml/qmlbindablecomponent_p.h +++ b/src/declarative/qml/qmlcomponentjs_p_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QMLBINDABLECOMPONENT_P_H -#define QMLBINDABLECOMPONENT_P_H +#ifndef QMLCOMPONENTJS_P_P_H +#define QMLCOMPONENTJS_P_P_H // // W A R N I N G @@ -54,18 +54,18 @@ // #include "qmlcomponent.h" -#include "qmlbindablecomponent.h" +#include "qmlcomponentjs_p.h" #include "qmlcomponent_p.h" QT_BEGIN_NAMESPACE class QmlContext; -class QmlBindableComponentPrivate : public QmlComponentPrivate +class QmlComponentJSPrivate : public QmlComponentPrivate { - Q_DECLARE_PUBLIC(QmlBindableComponent) + Q_DECLARE_PUBLIC(QmlComponentJS) public: - QmlBindableComponentPrivate() : QmlComponentPrivate(), - prevStatus(QmlBindableComponent::Null), ctxt(0) + QmlComponentJSPrivate() : QmlComponentPrivate(), + prevStatus(QmlComponentJS::Null), ctxt(0) { } QmlComponent::Status prevStatus; @@ -74,4 +74,4 @@ public: QT_END_NAMESPACE -#endif +#endif // QMLCOMPONENTJS_P_P_H diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp index 6f17b70..b0a8642 100644 --- a/src/declarative/qml/qmlcompositetypemanager.cpp +++ b/src/declarative/qml/qmlcompositetypemanager.cpp @@ -247,7 +247,7 @@ void QmlCompositeTypeManager::setData(QmlCompositeTypeData *unit, unit->errors << unit->data.errors(); } else { foreach (QmlScriptParser::Import imp, unit->data.imports()) { - if (!engine->d_func()->addToImport(&unit->imports, imp.uri, imp.qualifier, imp.version, imp.type)) { + if (!QmlEnginePrivate::get(engine)->addToImport(&unit->imports, imp.uri, imp.qualifier, imp.version, imp.type)) { QmlError error; error.setUrl(url); error.setDescription(tr("Import %1 unavailable").arg(imp.uri)); @@ -323,7 +323,7 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit) } QUrl url; - if (!engine->d_func()->resolveType(unit->imports, type, &ref.type, &url)) { + if (!QmlEnginePrivate::get(engine)->resolveType(unit->imports, type, &ref.type, &url)) { // XXX could produce error message here. } diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp index bc2e6bf..dabaa5e 100644 --- a/src/declarative/qml/qmlcontext.cpp +++ b/src/declarative/qml/qmlcontext.cpp @@ -106,9 +106,9 @@ void QmlContextPrivate::init() parent->d_func()->childContexts.insert(q); //set scope chain - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); QScriptValue scopeObj = - scriptEngine->newObject(engine->d_func()->contextClass, scriptEngine->newVariant(QVariant::fromValue((QObject*)q))); + scriptEngine->newObject(QmlEnginePrivate::get(engine)->contextClass, scriptEngine->newVariant(QVariant::fromValue((QObject*)q))); if (!parent) scopeChain.append(scriptEngine->globalObject()); else diff --git a/src/declarative/qml/qmldom.cpp b/src/declarative/qml/qmldom.cpp index 5082fda..c6b7192 100644 --- a/src/declarative/qml/qmldom.cpp +++ b/src/declarative/qml/qmldom.cpp @@ -93,10 +93,10 @@ QmlDomDocumentPrivate::~QmlDomDocumentPrivate() file.open(QIODevice::ReadOnly); QByteArray xmlData = file.readAll(); - QDomDocument document; - document.load(xmlData); + QmlDomDocument document; + document.load(qmlengine, xmlData); - QDomObject rootObject = document.rootObject(); + QmlDomObject rootObject = document.rootObject(); qDebug() << rootObject.objectType(); foreach(QmlDomProperty property, rootObject.properties()) qDebug() << property.propertyName(); @@ -161,7 +161,6 @@ QList<QmlDomImport> QmlDomDocument::imports() const */ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data, const QUrl &url) { - Q_UNUSED(engine); d->errors.clear(); d->imports.clear(); @@ -748,11 +747,11 @@ bool QmlDomObject::isValid() const } /*! - Returns the type name of this object. + Returns the fully-qualified type name of this object. - For example, the type of this object would be "QGraphicsWidget". + For example, the type of this object would be "Qt/4.6/Rect". \qml -QGraphicsWidget { } +Rect { } \endqml */ QByteArray QmlDomObject::objectType() const @@ -762,6 +761,23 @@ QByteArray QmlDomObject::objectType() const } /*! + Returns the fully-qualified type name of this object. + + For example, the type of this object would be "Qt/4.6/Rect". + \qml +Rect { } + \endqml +*/ +QByteArray QmlDomObject::objectClassName() const +{ + if (d->object) + return d->object->className; + else + return QByteArray(); +} + + +/*! Returns the QML id assigned to this object, or an empty QByteArray if no id has been assigned. @@ -951,7 +967,7 @@ QByteArray QmlDomObject::customTypeData() const bool QmlDomObject::isComponent() const { return d->isVirtualComponent || - (d->object && d->object->typeName == "Component"); + (d->object && d->object->typeName == "Qt/4.6/Component"); } /*! diff --git a/src/declarative/qml/qmldom.h b/src/declarative/qml/qmldom.h index 339570b..1c70206 100644 --- a/src/declarative/qml/qmldom.h +++ b/src/declarative/qml/qmldom.h @@ -150,6 +150,7 @@ public: bool isValid() const; QByteArray objectType() const; + QByteArray objectClassName() const; QString objectId() const; void setObjectId(const QByteArray &); diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 33c6710..321feb9 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -71,7 +71,7 @@ #include <QtCore/qcoreapplication.h> #include <QtCore/qdir.h> #include <qmlcomponent.h> -#include <qmlbindablecomponent.h> +#include "private/qmlcomponentjs_p.h" #include "private/qmlmetaproperty_p.h" #include <private/qmlbinding_p.h> #include <private/qmlvme_p.h> @@ -94,11 +94,13 @@ struct StaticQtMetaObject : public QObject }; QmlEnginePrivate::QmlEnginePrivate(QmlEngine *e) -: rootContext(0), currentBindContext(0), currentExpression(0), q(e), - isDebugging(false), rootComponent(0), networkAccessManager(0), typeManager(e), +: rootContext(0), currentBindContext(0), currentExpression(0), + isDebugging(false), contextClass(0), objectClass(0), valueTypeClass(0), + scriptEngine(this), rootComponent(0), networkAccessManager(0), typeManager(e), uniqueId(1) { - QScriptValue qtObject = scriptEngine.newQMetaObject(StaticQtMetaObject::get()); + QScriptValue qtObject = + scriptEngine.newQMetaObject(StaticQtMetaObject::get()); scriptEngine.globalObject().setProperty(QLatin1String("Qt"), qtObject); } @@ -146,6 +148,7 @@ Q_GLOBAL_STATIC(QmlEngineDebugServer, qmlEngineDebugServer); void QmlEnginePrivate::init() { + Q_Q(QmlEngine); scriptEngine.installTranslatorFunctions(); contextClass = new QmlContextScriptClass(q); objectClass = new QmlObjectScriptClass(q); @@ -157,13 +160,11 @@ void QmlEnginePrivate::init() debugger->attachTo(&scriptEngine); } #endif - //###needed for the other funcs, but should it be exposed? - scriptEngine.globalObject().setProperty(QLatin1String("qmlEngine"), - scriptEngine.newQObject(q)); + scriptEngine.globalObject().setProperty(QLatin1String("createQmlObject"), - scriptEngine.newFunction(QmlEngine::createQmlObject, 1)); + scriptEngine.newFunction(QmlEnginePrivate::createQmlObject, 1)); scriptEngine.globalObject().setProperty(QLatin1String("createComponent"), - scriptEngine.newFunction(QmlEngine::createComponent, 1)); + scriptEngine.newFunction(QmlEnginePrivate::createComponent, 1)); if (QCoreApplication::instance()->thread() == q->thread() && QmlEngineDebugServer::isDebuggingEnabled()) { @@ -520,11 +521,13 @@ void QmlInstanceDeclarativeData::destroyed(QObject *object) } /*! \internal */ +/* QScriptEngine *QmlEngine::scriptEngine() { Q_D(QmlEngine); return &d->scriptEngine; } +*/ /*! Creates a QScriptValue allowing you to use \a object in QML script. @@ -533,17 +536,12 @@ QScriptEngine *QmlEngine::scriptEngine() The QScriptValue returned is a QtScript Object, not a QtScript QObject, due to the special needs of QML requiring more functionality than a standard QtScript QObject. - - You'll want to use this function if you are writing C++ code which - dynamically creates and returns objects when called from QtScript, - and these objects are visual items in the QML tree. - - \sa QScriptEngine::newQObject() */ -QScriptValue QmlEngine::qmlScriptObject(QObject* object, QmlEngine* engine) +QScriptValue QmlEnginePrivate::qmlScriptObject(QObject* object, + QmlEngine* engine) { - return engine->scriptEngine()->newObject(new QmlObjectScriptClass(engine), - engine->scriptEngine()->newQObject(object)); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + return scriptEngine->newObject(new QmlObjectScriptClass(engine), scriptEngine->newQObject(object)); } /*! @@ -598,22 +596,24 @@ QScriptValue QmlEngine::qmlScriptObject(QObject* object, QmlEngine* engine) If you want to just create an arbitrary string of QML, instead of loading a qml file, consider the createQmlObject() function. - \sa QmlComponent::createObject(), QmlEngine::createQmlObject() */ -QScriptValue QmlEngine::createComponent(QScriptContext *ctxt, QScriptEngine *engine) +QScriptValue QmlEnginePrivate::createComponent(QScriptContext *ctxt, + QScriptEngine *engine) { - QmlBindableComponent* c; - QmlEngine* activeEngine = qobject_cast<QmlEngine*>( - engine->globalObject().property(QLatin1String("qmlEngine")).toQObject()); - QmlContext* context =activeEngine->d_func()->currentExpression->context(); - if(ctxt->argumentCount() != 1 || !activeEngine){ - c = new QmlBindableComponent(activeEngine); + QmlComponentJS* c; + + QmlEnginePrivate *activeEnginePriv = + static_cast<QmlScriptEngine*>(engine)->p; + QmlEngine* activeEngine = activeEnginePriv->q_func(); + + QmlContext* context = activeEnginePriv->currentExpression->context(); + if(ctxt->argumentCount() != 1) { + c = new QmlComponentJS(activeEngine); }else{ QUrl url = QUrl(context->resolvedUrl(ctxt->argument(0).toString())); - if(!url.isValid()){ + if(!url.isValid()) url = QUrl(ctxt->argument(0).toString()); - } - c = new QmlBindableComponent(activeEngine, url, activeEngine); + c = new QmlComponentJS(activeEngine, url, activeEngine); } c->setContext(context); return engine->newQObject(c); @@ -643,21 +643,15 @@ QScriptValue QmlEngine::createComponent(QScriptContext *ctxt, QScriptEngine *eng instead. 'New components' refers to external QML files that have not yet been loaded, and so it is safe to use createQmlObject to load built-in components. - - \sa QmlEngine::createComponent() */ -QScriptValue QmlEngine::createQmlObject(QScriptContext *ctxt, QScriptEngine *engine) +QScriptValue QmlEnginePrivate::createQmlObject(QScriptContext *ctxt, QScriptEngine *engine) { - QmlEngine* activeEngine = qobject_cast<QmlEngine*>( - engine->globalObject().property(QLatin1String("qmlEngine")).toQObject()); - if(ctxt->argumentCount() < 2 || !activeEngine){ - if(ctxt->argumentCount() < 2){ - qWarning() << "createQmlObject requires two arguments, A QML string followed by an existing QML item id."; - }else{ - qWarning() << "createQmlObject cannot find engine."; - } + QmlEnginePrivate *activeEnginePriv = + static_cast<QmlScriptEngine*>(engine)->p; + QmlEngine* activeEngine = activeEnginePriv->q_func(); + + if(ctxt->argumentCount() < 2) return engine->nullValue(); - } QString qml = ctxt->argument(0).toString(); QUrl url; @@ -669,24 +663,25 @@ QScriptValue QmlEngine::createQmlObject(QScriptContext *ctxt, QScriptEngine *eng QmlComponent component(activeEngine, qml.toUtf8(), url); if(component.isError()) { QList<QmlError> errors = component.errors(); - foreach (const QmlError &error, errors) { - qWarning() <<"Error in createQmlObject(): "<< error; - } + qWarning() <<"QmlEngine::createQmlObject():"; + foreach (const QmlError &error, errors) + qWarning() << " " << error; return engine->nullValue(); } QObject *obj = component.create(qmlCtxt); + if(component.isError()) { QList<QmlError> errors = component.errors(); - foreach (const QmlError &error, errors) { - qWarning() <<"Error in createQmlObject(): "<< error; - } + qWarning() <<"QmlEngine::createQmlObject():"; + foreach (const QmlError &error, errors) + qWarning() << " " << error; return engine->nullValue(); } - if(obj){ + if(obj) { obj->setParent(parentArg); obj->setProperty("parent", QVariant::fromValue<QObject*>(parentArg)); return qmlScriptObject(obj, activeEngine); @@ -695,7 +690,8 @@ QScriptValue QmlEngine::createQmlObject(QScriptContext *ctxt, QScriptEngine *eng } QmlScriptClass::QmlScriptClass(QmlEngine *bindengine) -: QScriptClass(bindengine->scriptEngine()), engine(bindengine) +: QScriptClass(QmlEnginePrivate::getScriptEngine(bindengine)), + engine(bindengine) { } @@ -762,8 +758,7 @@ QmlContextScriptClass::queryProperty(const QScriptValue &object, } for (int ii = 0; !rv && ii < bindContext->d_func()->defaultObjects.count(); ++ii) { - rv = engine->d_func()->queryObject(propName, id, - bindContext->d_func()->defaultObjects.at(ii)); + rv = QmlEnginePrivate::get(engine)->queryObject(propName, id, bindContext->d_func()->defaultObjects.at(ii)); if (rv) *id |= (ii << 24); } @@ -785,7 +780,8 @@ QScriptValue QmlContextScriptClass::property(const QScriptValue &object, uint basicId = id & QmlScriptClass::ClassIdMask; - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QmlEnginePrivate *ep = QmlEnginePrivate::get(engine); switch (basicId) { case VariantPropertyId: @@ -799,18 +795,18 @@ QScriptValue QmlContextScriptClass::property(const QScriptValue &object, #endif QScriptValue rv; if (QmlMetaType::isObject(value.userType())) { - rv = scriptEngine->newObject(engine->d_func()->objectClass, scriptEngine->newVariant(value)); + rv = scriptEngine->newObject(ep->objectClass, scriptEngine->newVariant(value)); } else { rv = scriptEngine->newVariant(value); } - engine->d_func()->capturedProperties << QmlEnginePrivate::CapturedProperty(bindContext, -1, index + bindContext->d_func()->notifyIndex); + ep->capturedProperties << QmlEnginePrivate::CapturedProperty(bindContext, -1, index + bindContext->d_func()->notifyIndex); return rv; } default: { int objId = (id & ClassIdSelectorMask) >> 24; QObject *obj = bindContext->d_func()->defaultObjects.at(objId); - QScriptValue rv = engine->d_func()->propertyObject(name, obj, + QScriptValue rv = ep->propertyObject(name, obj, id & ~QmlScriptClass::ClassIdSelectorMask); if (rv.isValid()) { #ifdef PROPERTY_DEBUG @@ -844,7 +840,7 @@ void QmlContextScriptClass::setProperty(QScriptValue &object, int objIdx = (id & QmlScriptClass::ClassIdSelectorMask) >> 24; QObject *obj = bindContext->d_func()->defaultObjects.at(objIdx); - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); QScriptValue oldact = scriptEngine->currentContext()->activationObject(); scriptEngine->currentContext()->setActivationObject(scriptEngine->globalObject()); @@ -952,9 +948,10 @@ QmlObjectScriptClass::QmlObjectScriptClass(QmlEngine *bindEngine) : QmlScriptClass(bindEngine) { engine = bindEngine; - prototypeObject = engine->scriptEngine()->newObject(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(bindEngine); + prototypeObject = scriptEngine->newObject(); prototypeObject.setProperty(QLatin1String("destroy"), - engine->scriptEngine()->newFunction(QmlObjectDestroy)); + scriptEngine->newFunction(QmlObjectDestroy)); } QmlObjectScriptClass::~QmlObjectScriptClass() @@ -980,7 +977,7 @@ QScriptClass::QueryFlags QmlObjectScriptClass::queryProperty(const QScriptValue #endif if (obj) - rv = engine->d_func()->queryObject(propName, id, obj); + rv = QmlEnginePrivate::get(engine)->queryObject(propName, id, obj); return rv; } @@ -996,7 +993,8 @@ QScriptValue QmlObjectScriptClass::property(const QScriptValue &object, qWarning() << "QmlObject Property:" << propName << obj; #endif - QScriptValue rv = engine->d_func()->propertyObject(name, obj, id); + QScriptValue rv = + QmlEnginePrivate::get(engine)->propertyObject(name, obj, id); if (rv.isValid()) { #ifdef PROPERTY_DEBUG qWarning() << "~Property: Resolved property" << propName @@ -1022,7 +1020,7 @@ void QmlObjectScriptClass::setProperty(QScriptValue &object, qWarning() << "Set QmlObject Property" << name.toString() << value.toVariant(); #endif - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); QScriptValue oldact = scriptEngine->currentContext()->activationObject(); scriptEngine->currentContext()->setActivationObject(scriptEngine->globalObject()); diff --git a/src/declarative/qml/qmlengine.h b/src/declarative/qml/qmlengine.h index 2faad66..6066059 100644 --- a/src/declarative/qml/qmlengine.h +++ b/src/declarative/qml/qmlengine.h @@ -86,28 +86,7 @@ public: static QmlContext *contextForObject(const QObject *); static void setContextForObject(QObject *, QmlContext *); - static QScriptValue qmlScriptObject(QObject*, QmlEngine*); - - static QScriptValue createComponent(QScriptContext*, QScriptEngine*); - static QScriptValue createQmlObject(QScriptContext*, QScriptEngine*); - private: - // LK: move to the private class - QScriptEngine *scriptEngine(); - friend class QFxItem; // XXX - friend class QmlScriptPrivate; - friend class QmlCompositeTypeManager; - friend class QmlCompiler; - friend class QmlScriptClass; - friend class QmlContext; - friend class QmlContextPrivate; - friend class QmlExpression; - friend class QmlExpressionPrivate; - friend class QmlBasicScript; - friend class QmlVME; - friend class QmlComponent; - friend class QmlContextScriptClass; //### - friend class QmlObjectScriptClass; //### Q_DECLARE_PRIVATE(QmlEngine) }; diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h index b8d49aa..18cdd83 100644 --- a/src/declarative/qml/qmlengine_p.h +++ b/src/declarative/qml/qmlengine_p.h @@ -114,7 +114,6 @@ public: QmlContext *rootContext; QmlContext *currentBindContext; QmlExpression *currentExpression; - QmlEngine *q; bool isDebugging; #ifdef QT_SCRIPTTOOLS_LIB QScriptEngineDebugger *debugger; @@ -127,7 +126,13 @@ public: QmlContext *setCurrentBindContext(QmlContext *); QStack<QmlContext *> activeContexts; - QScriptEngine scriptEngine; + struct QmlScriptEngine : public QScriptEngine + { + QmlScriptEngine(QmlEnginePrivate *priv) + : p(priv) {} + QmlEnginePrivate *p; + }; + QmlScriptEngine scriptEngine; QUrl baseUrl; @@ -188,6 +193,13 @@ public: bool resolveType(const Imports&, const QByteArray& type, QmlType** type_return, QUrl* url_return, ImportedNamespace** ns_return=0) const; void resolveTypeInNamespace(ImportedNamespace*, const QByteArray& type, QmlType** type_return, QUrl* url_return ) const; + + static QScriptValue qmlScriptObject(QObject*, QmlEngine*); + static QScriptValue createComponent(QScriptContext*, QScriptEngine*); + static QScriptValue createQmlObject(QScriptContext*, QScriptEngine*); + + static QScriptEngine *getScriptEngine(QmlEngine *e) { return &e->d_func()->scriptEngine; } + static QmlEnginePrivate *get(QmlEngine *e) { return e->d_func(); } }; class QmlScriptClass : public QScriptClass diff --git a/src/declarative/qml/qmlexpression.cpp b/src/declarative/qml/qmlexpression.cpp index ea0e9aa..2c06efa 100644 --- a/src/declarative/qml/qmlexpression.cpp +++ b/src/declarative/qml/qmlexpression.cpp @@ -51,7 +51,7 @@ Q_DECLARE_METATYPE(QList<QObject *>); QT_BEGIN_NAMESPACE QmlExpressionPrivate::QmlExpressionPrivate() -: ctxt(0), expressionFunctionValid(false), sseData(0), me(0), trackChange(true), line(-1), id(0), guardList(0), guardListLength(0) +: ctxt(0), expressionFunctionValid(false), sseData(0), me(0), trackChange(true), line(-1), guardList(0), guardListLength(0) { } @@ -63,8 +63,6 @@ void QmlExpressionPrivate::init(QmlContext *ctxt, const QString &expr, expression = expr; this->ctxt = ctxt; - if (ctxt && ctxt->engine()) - id = ctxt->engine()->d_func()->getUniqueId(); if (ctxt) ctxt->d_func()->childExpressions.insert(q); this->me = me; @@ -78,8 +76,6 @@ void QmlExpressionPrivate::init(QmlContext *ctxt, void *expr, QmlRefCount *rc, sse.load((const char *)expr, rc); this->ctxt = ctxt; - if (ctxt && ctxt->engine()) - id = ctxt->engine()->d_func()->getUniqueId(); if (ctxt) ctxt->d_func()->childExpressions.insert(q); this->me = me; @@ -244,7 +240,7 @@ QVariant QmlExpressionPrivate::evalQtScript() if (me) ctxtPriv->defaultObjects.insert(ctxtPriv->highPriorityCount, me); - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); QScriptValueList oldScopeChain = scriptEngine->currentContext()->scopeChain(); @@ -257,7 +253,7 @@ QVariant QmlExpressionPrivate::evalQtScript() QmlRewrite::RewriteBinding rewriteBinding; const QString code = rewriteBinding(expression); - expressionFunction = scriptEngine->evaluate(code, fileName.toString(), line); + expressionFunction = scriptEngine->evaluate(code, fileName, line); expressionFunctionValid = true; } @@ -346,7 +342,7 @@ QVariant QmlExpression::value() QmlBasicScript::CacheState cacheState = QmlBasicScript::Reset; - QmlEnginePrivate *ep = engine()->d_func(); + QmlEnginePrivate *ep = QmlEnginePrivate::get(engine()); QmlExpression *lastCurrentExpression = ep->currentExpression; QPODVector<QmlEnginePrivate::CapturedProperty> lastCapturedProperties; @@ -421,7 +417,7 @@ void QmlExpression::setTrackChange(bool trackChange) void QmlExpression::setSourceLocation(const QUrl &fileName, int line) { Q_D(QmlExpression); - d->fileName = fileName; + d->fileName = fileName.toString(); d->line = line; } @@ -437,15 +433,6 @@ QObject *QmlExpression::scopeObject() const return d->me; } -/*! - \internal -*/ -quint32 QmlExpression::id() const -{ - Q_D(const QmlExpression); - return d->id; -} - /*! \internal */ void QmlExpression::__q_notify() { diff --git a/src/declarative/qml/qmlexpression.h b/src/declarative/qml/qmlexpression.h index 6db6ef9..d5f0cbb 100644 --- a/src/declarative/qml/qmlexpression.h +++ b/src/declarative/qml/qmlexpression.h @@ -80,8 +80,6 @@ public: QObject *scopeObject() const; - quint32 id() const; - public Q_SLOTS: QVariant value(); diff --git a/src/declarative/qml/qmlexpression_p.h b/src/declarative/qml/qmlexpression_p.h index 41b7749..cb89ce0 100644 --- a/src/declarative/qml/qmlexpression_p.h +++ b/src/declarative/qml/qmlexpression_p.h @@ -83,11 +83,9 @@ public: QObject *me; bool trackChange; - QUrl fileName; + QString fileName; int line; - quint32 id; - QVariant evalSSE(QmlBasicScript::CacheState &cacheState); QVariant evalQtScript(); diff --git a/src/declarative/qml/qmlmetatype.cpp b/src/declarative/qml/qmlmetatype.cpp index 3552b44..a037702 100644 --- a/src/declarative/qml/qmlmetatype.cpp +++ b/src/declarative/qml/qmlmetatype.cpp @@ -56,7 +56,7 @@ #include <qstringlist.h> #include <qvector.h> #include <qlocale.h> -//#include <ctypes.h> +#include <ctype.h> #include <QtCore/qcryptographichash.h> #include <private/qmlcustomparser_p.h> diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h index 927c9e6..120af75 100644 --- a/src/declarative/qml/qmlparser_p.h +++ b/src/declarative/qml/qmlparser_p.h @@ -115,8 +115,10 @@ namespace QmlParser int type; // The url of this object if it is an external type. Used by the DOM QUrl url; - // The name of this type + // The fully-qualified name of this type QByteArray typeName; + // The class name + QByteArray className; // The id assigned to the object (if any). Set by the QmlCompiler QString id; // The id index assigned to the object (if any). Set by the QmlCompiler diff --git a/src/declarative/qml/qmlrewrite.cpp b/src/declarative/qml/qmlrewrite.cpp index 02bf8fa..c708418 100644 --- a/src/declarative/qml/qmlrewrite.cpp +++ b/src/declarative/qml/qmlrewrite.cpp @@ -61,7 +61,7 @@ void RewriteBinding::accept(AST::Node *node) AST::Node::acceptChild(node, this); } -QString RewriteBinding::rewrite(QString code, unsigned position, +QString RewriteBinding::rewrite(QString code, unsigned position, AST::Statement *node) { TextWriter w; @@ -101,57 +101,6 @@ bool RewriteBinding::visit(AST::ExpressionStatement *ast) return false; } -bool RewriteBinding::visit(AST::NumericLiteral *node) -{ - if (node->suffix != AST::NumericLiteral::noSuffix) { - const int suffixLength = AST::NumericLiteral::suffixLength[node->suffix]; - const char *suffixSpell = AST::NumericLiteral::suffixSpell[node->suffix]; - QString pre; - pre += QLatin1String("qmlNumberFrom"); - pre += QChar(QLatin1Char(suffixSpell[0])).toUpper(); - pre += QLatin1String(&suffixSpell[1]); - pre += QLatin1Char('('); - _writer->replace(node->literalToken.begin() - _position, 0, pre); - _writer->replace(node->literalToken.end() - _position - suffixLength, - suffixLength, - QLatin1String(")")); - } - - return false; -} - -QString RewriteNumericLiterals::operator()(QString code, unsigned position, AST::Node *node) -{ - TextWriter w; - _writer = &w; - _position = position; - - AST::Node::acceptChild(node, this); - - w.write(&code); - - return code; -} - -bool RewriteNumericLiterals::visit(AST::NumericLiteral *node) -{ - if (node->suffix != AST::NumericLiteral::noSuffix) { - const int suffixLength = AST::NumericLiteral::suffixLength[node->suffix]; - const char *suffixSpell = AST::NumericLiteral::suffixSpell[node->suffix]; - QString pre; - pre += QLatin1String("qmlNumberFrom"); - pre += QChar(QLatin1Char(suffixSpell[0])).toUpper(); - pre += QLatin1String(&suffixSpell[1]); - pre += QLatin1Char('('); - _writer->replace(node->literalToken.begin() - _position, 0, pre); - _writer->replace(node->literalToken.end() - _position - suffixLength, - suffixLength, - QLatin1String(")")); - } - - return false; -} - } // namespace QmlRewrite QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlrewrite_p.h b/src/declarative/qml/qmlrewrite_p.h index 51a8015..b6fe017 100644 --- a/src/declarative/qml/qmlrewrite_p.h +++ b/src/declarative/qml/qmlrewrite_p.h @@ -78,21 +78,6 @@ protected: QString rewrite(QString code, unsigned position, AST::Statement *node); virtual bool visit(AST::Block *ast); virtual bool visit(AST::ExpressionStatement *ast); - virtual bool visit(AST::NumericLiteral *node); -}; - -class RewriteNumericLiterals: protected AST::Visitor -{ - unsigned _position; - TextWriter *_writer; - -public: - QString operator()(QString code, unsigned position, AST::Node *node); - -protected: - using AST::Visitor::visit; - - virtual bool visit(AST::NumericLiteral *node); }; } // namespace QmlRewrite diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp index c1c11c7..2f82f0d 100644 --- a/src/declarative/qml/qmlscriptparser.cpp +++ b/src/declarative/qml/qmlscriptparser.cpp @@ -154,15 +154,12 @@ protected: const AST::SourceLocation &last) const { return _contents.mid(first.offset, last.offset + last.length - first.offset); } - QmlRewrite::RewriteNumericLiterals rewriteNumericLiterals; - QString asString(AST::ExpressionNode *expr) { if (! expr) return QString(); - return rewriteNumericLiterals(textAt(expr->firstSourceLocation(), expr->lastSourceLocation()), - expr->firstSourceLocation().offset, expr); + return textAt(expr->firstSourceLocation(), expr->lastSourceLocation()); } QString asString(AST::Statement *stmt) @@ -170,9 +167,7 @@ protected: if (! stmt) return QString(); - QString s = rewriteNumericLiterals(textAt(stmt->firstSourceLocation(), stmt->lastSourceLocation()), - stmt->firstSourceLocation().offset, stmt); - + QString s = textAt(stmt->firstSourceLocation(), stmt->lastSourceLocation()); s += QLatin1Char('\n'); return s; } @@ -479,7 +474,7 @@ bool ProcessAST::visit(AST::UiPublicMember *node) const QString memberType = p->type->asString(); const char *qtType = 0; for(int ii = 0; !qtType && ii < propTypeNameToTypesCount; ++ii) { - if(QLatin1String(propTypeNameToTypes[ii].name) == memberType) + if(QLatin1String(propTypeNameToTypes[ii].name) == memberType) qtType = propTypeNameToTypes[ii].qtName; } @@ -530,7 +525,7 @@ bool ProcessAST::visit(AST::UiPublicMember *node) property.isDefaultProperty = node->isDefaultMember; property.type = type; property.name = name.toUtf8(); - property.location = location(node->firstSourceLocation(), + property.location = location(node->firstSourceLocation(), node->lastSourceLocation()); if (node->expression) { // default value @@ -588,11 +583,7 @@ QmlParser::Variant ProcessAST::getVariant(AST::ExpressionNode *expr) } else if (expr->kind == AST::Node::Kind_FalseLiteral) { return QmlParser::Variant(false); } else if (AST::NumericLiteral *lit = AST::cast<AST::NumericLiteral *>(expr)) { - if (lit->suffix == AST::NumericLiteral::noSuffix) - return QmlParser::Variant(lit->value, asString(expr)); - else - return QmlParser::Variant(asString(expr), expr); - + return QmlParser::Variant(lit->value, asString(expr)); } else { if (AST::UnaryMinusExpression *unaryMinus = AST::cast<AST::UnaryMinusExpression *>(expr)) { @@ -624,7 +615,7 @@ bool ProcessAST::visit(AST::UiScriptBinding *node) if (AST::ExpressionStatement *stmt = AST::cast<AST::ExpressionStatement *>(node->statement)) { primitive = getVariant(stmt->expression); } else { // do binding - primitive = QmlParser::Variant(asString(node->statement), + primitive = QmlParser::Variant(asString(node->statement), node->statement); } diff --git a/src/declarative/qml/qmlvaluetype.cpp b/src/declarative/qml/qmlvaluetype.cpp index a01b4a7..571263e 100644 --- a/src/declarative/qml/qmlvaluetype.cpp +++ b/src/declarative/qml/qmlvaluetype.cpp @@ -61,6 +61,8 @@ QmlValueType *QmlValueTypeFactory::valueType(int t) switch (t) { case QVariant::Rect: return new QmlRectValueType; + case QVariant::Vector3D: + return new QmlVector3DValueType; default: return 0; } @@ -128,4 +130,51 @@ void QmlRectValueType::setHeight(int h) rect.setHeight(h); } +QmlVector3DValueType::QmlVector3DValueType(QObject *parent) +: QmlValueType(parent) +{ +} + +void QmlVector3DValueType::read(QObject *obj, int idx) +{ + void *a[] = { &vector, 0 }; + QMetaObject::metacall(obj, QMetaObject::ReadProperty, idx, a); +} + +void QmlVector3DValueType::write(QObject *obj, int idx) +{ + void *a[] = { &vector, 0 }; + QMetaObject::metacall(obj, QMetaObject::WriteProperty, idx, a); +} + +qreal QmlVector3DValueType::x() const +{ + return vector.x(); +} + +qreal QmlVector3DValueType::y() const +{ + return vector.y(); +} + +qreal QmlVector3DValueType::z() const +{ + return vector.z(); +} + +void QmlVector3DValueType::setX(qreal x) +{ + vector.setX(x); +} + +void QmlVector3DValueType::setY(qreal y) +{ + vector.setY(y); +} + +void QmlVector3DValueType::setZ(qreal z) +{ + vector.setZ(z); +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlvaluetype_p.h b/src/declarative/qml/qmlvaluetype_p.h index 5581df7..b19c1ba 100644 --- a/src/declarative/qml/qmlvaluetype_p.h +++ b/src/declarative/qml/qmlvaluetype_p.h @@ -56,6 +56,7 @@ #include <QtCore/qobject.h> #include <QtCore/qrect.h> #include <QtCore/qvariant.h> +#include <QtGui/qvector3d.h> QT_BEGIN_NAMESPACE @@ -105,6 +106,30 @@ public: private: QRect rect; }; + +class QmlVector3DValueType : public QmlValueType +{ + Q_PROPERTY(qreal x READ x WRITE setX); + Q_PROPERTY(qreal y READ y WRITE setY); + Q_PROPERTY(qreal z READ z WRITE setZ); + Q_OBJECT +public: + QmlVector3DValueType(QObject *parent = 0); + + virtual void read(QObject *, int); + virtual void write(QObject *, int); + + qreal x() const; + qreal y() const; + qreal z() const; + void setX(qreal); + void setY(qreal); + void setZ(qreal); + +private: + QVector3D vector; +}; + QT_END_NAMESPACE #endif // QMLVALUETYPE_P_H diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp index ebf0a73..1cfd5e9 100644 --- a/src/declarative/qml/qmlvme.cpp +++ b/src/declarative/qml/qmlvme.cpp @@ -143,7 +143,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt, QmlCompiledData QStack<ListInstance> qliststack; vmeErrors.clear(); - QmlEnginePrivate *ep = ctxt->engine()->d_func(); + QmlEnginePrivate *ep = QmlEnginePrivate::get(ctxt->engine()); for (int ii = start; !isError() && ii < (start + count); ++ii) { QmlInstruction &instr = comp->bytecode[ii]; diff --git a/src/declarative/qml/rewriter/rewriter.pri b/src/declarative/qml/rewriter/rewriter.pri index de3c298..550741b 100644 --- a/src/declarative/qml/rewriter/rewriter.pri +++ b/src/declarative/qml/rewriter/rewriter.pri @@ -1,5 +1,7 @@ INCLUDEPATH += $$PWD +DEPENDPATH += $$PWD + HEADERS += $$PWD/textwriter_p.h SOURCES += $$PWD/textwriter.cpp diff --git a/src/declarative/util/qmlfontfamily.cpp b/src/declarative/util/qmlfontfamily.cpp index 407d2ab..e539085 100644 --- a/src/declarative/util/qmlfontfamily.cpp +++ b/src/declarative/util/qmlfontfamily.cpp @@ -57,13 +57,14 @@ class QmlFontFamilyPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QmlFontFamily); public: - QmlFontFamilyPrivate() : reply(0) {} + QmlFontFamilyPrivate() : reply(0), loading(false) {} void addFontToDatabase(const QByteArray &); QUrl url; QString name; QNetworkReply *reply; + bool loading; }; QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,FontFamily,QmlFontFamily) @@ -94,6 +95,8 @@ void QmlFontFamily::setSource(const QUrl &url) return; d->url = qmlContext(this)->resolvedUrl(url); + d->loading = true; + emit loadingChanged(); #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML if (d->url.scheme() == QLatin1String("file")) { QFile file(d->url.toLocalFile()); @@ -125,6 +128,12 @@ void QmlFontFamily::setName(const QString &name) emit nameChanged(); } +bool QmlFontFamily::isLoading() const +{ + Q_D(const QmlFontFamily); + return d->loading; +} + void QmlFontFamily::replyFinished() { Q_D(QmlFontFamily); @@ -144,6 +153,8 @@ void QmlFontFamilyPrivate::addFontToDatabase(const QByteArray &ba) if (id != -1) { name = QFontDatabase::applicationFontFamilies(id).at(0); emit q->nameChanged(); + loading = false; + emit q->loadingChanged(); } else { qWarning() << "Cannot load font: " << name << url; } diff --git a/src/declarative/util/qmlfontfamily.h b/src/declarative/util/qmlfontfamily.h index 739a553..c647f67 100644 --- a/src/declarative/util/qmlfontfamily.h +++ b/src/declarative/util/qmlfontfamily.h @@ -59,6 +59,7 @@ class Q_DECLARATIVE_EXPORT QmlFontFamily : public QObject Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged) public: QmlFontFamily(QObject *parent = 0); @@ -70,11 +71,14 @@ public: QString name() const; void setName(const QString &name); + bool isLoading() const; + private Q_SLOTS: void replyFinished(); Q_SIGNALS: void nameChanged(); + void loadingChanged(); }; QT_END_NAMESPACE diff --git a/src/declarative/util/qmlscript.cpp b/src/declarative/util/qmlscript.cpp index cfe5a1e..ca9aad5 100644 --- a/src/declarative/util/qmlscript.cpp +++ b/src/declarative/util/qmlscript.cpp @@ -185,9 +185,9 @@ void QmlScriptPrivate::addScriptToEngine(const QString &script, const QString &s Q_Q(QmlScript); QmlEngine *engine = qmlEngine(q); QmlContext *context = qmlContext(q); - QScriptEngine *scriptEngine = engine->scriptEngine(); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); - QScriptContext *currentContext = engine->scriptEngine()->currentContext(); + QScriptContext *currentContext = scriptEngine->currentContext(); QScriptValueList oldScopeChain = currentContext->scopeChain(); QScriptValue oldact = currentContext->activationObject(); diff --git a/src/declarative/util/qmlstate.cpp b/src/declarative/util/qmlstate.cpp index a5fe8a7..c41c31a 100644 --- a/src/declarative/util/qmlstate.cpp +++ b/src/declarative/util/qmlstate.cpp @@ -92,6 +92,24 @@ void ActionEvent::reverse() { } +QList<Action> ActionEvent::extraActions() +{ + return QList<Action>(); +} + +bool ActionEvent::changesBindings() +{ + return false; +} + +void ActionEvent::clearForwardBindings() +{ +} + +void ActionEvent::clearReverseBindings() +{ +} + /*! \internal */ @@ -399,10 +417,12 @@ void QmlState::apply(QmlStateGroup *group, QmlTransition *trans, QmlState *rever // into this state need to be translated into apply actions for (int ii = 0; ii < d->revertList.count(); ++ii) { bool found = false; - for (int jj = 0; !found && jj < applyList.count(); ++jj) { - const Action &action = applyList.at(jj); - if (action.property == d->revertList.at(ii).property) - found = true; + if (!d->revertList.at(ii).event) { //### corresponding test for events? + for (int jj = 0; !found && jj < applyList.count(); ++jj) { + const Action &action = applyList.at(jj); + if (action.property == d->revertList.at(ii).property) + found = true; + } } if (!found) { QVariant cur = d->revertList.at(ii).property.read(); diff --git a/src/declarative/util/qmlstate.h b/src/declarative/util/qmlstate.h index e453446..7b3021b 100644 --- a/src/declarative/util/qmlstate.h +++ b/src/declarative/util/qmlstate.h @@ -73,6 +73,7 @@ public: QmlBinding *toBinding; ActionEvent *event; + //strictly for matching QObject *specifiedObject; QString specifiedProperty; @@ -84,9 +85,17 @@ class ActionEvent public: virtual ~ActionEvent(); virtual QString typeName() const; + virtual void execute(); virtual bool isReversable(); virtual void reverse(); + + //virtual bool hasExtraActions(); + virtual QList<Action> extraActions(); + + virtual bool changesBindings(); + virtual void clearForwardBindings(); + virtual void clearReverseBindings(); }; class QmlStateGroup; diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp index 791628c..e2cbae4 100644 --- a/src/declarative/util/qmlstateoperations.cpp +++ b/src/declarative/util/qmlstateoperations.cpp @@ -272,4 +272,245 @@ QmlRunScript::ActionList QmlRunScript::actions() return rv; } +/*! + \qmlclass SetAnchors + \brief The SetAnchors element allows you to change anchors in a state. +*/ + +QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,SetAnchors,QmlSetAnchors) + +class QmlSetAnchorsPrivate : public QObjectPrivate +{ +public: + QmlSetAnchorsPrivate() : target(0) {} + + QString name; + QFxItem *target; + QString resetString; + QStringList resetList; + QFxAnchorLine left; + QFxAnchorLine right; + QFxAnchorLine top; + QFxAnchorLine bottom; + QFxAnchorLine origLeft; + QFxAnchorLine origRight; + QFxAnchorLine origTop; + QFxAnchorLine origBottom; + qreal origX; + qreal origY; + qreal origWidth; + qreal origHeight; +}; + +QmlSetAnchors::QmlSetAnchors(QObject *parent) + : QmlStateOperation(*(new QmlSetAnchorsPrivate), parent) +{ +} + +QmlSetAnchors::~QmlSetAnchors() +{ +} + +QmlSetAnchors::ActionList QmlSetAnchors::actions() +{ + Action a; + a.event = this; + return ActionList() << a; +} + +QFxItem *QmlSetAnchors::object() const +{ + Q_D(const QmlSetAnchors); + return d->target; +} + +void QmlSetAnchors::setObject(QFxItem *target) +{ + Q_D(QmlSetAnchors); + d->target = target; +} + +QString QmlSetAnchors::reset() const +{ + Q_D(const QmlSetAnchors); + return d->resetString; +} + +void QmlSetAnchors::setReset(const QString &reset) +{ + Q_D(QmlSetAnchors); + d->resetString = reset; + d->resetList = d->resetString.split(QLatin1Char(',')); +} + +QFxAnchorLine QmlSetAnchors::left() const +{ + Q_D(const QmlSetAnchors); + return d->left; +} + +void QmlSetAnchors::setLeft(const QFxAnchorLine &edge) +{ + Q_D(QmlSetAnchors); + d->left = edge; +} + +QFxAnchorLine QmlSetAnchors::right() const +{ + Q_D(const QmlSetAnchors); + return d->right; +} + +void QmlSetAnchors::setRight(const QFxAnchorLine &edge) +{ + Q_D(QmlSetAnchors); + d->right = edge; +} + +QFxAnchorLine QmlSetAnchors::top() const +{ + Q_D(const QmlSetAnchors); + return d->top; +} + +void QmlSetAnchors::setTop(const QFxAnchorLine &edge) +{ + Q_D(QmlSetAnchors); + d->top = edge; +} + +QFxAnchorLine QmlSetAnchors::bottom() const +{ + Q_D(const QmlSetAnchors); + return d->bottom; +} + +void QmlSetAnchors::setBottom(const QFxAnchorLine &edge) +{ + Q_D(QmlSetAnchors); + d->bottom = edge; +} + +void QmlSetAnchors::execute() +{ + Q_D(QmlSetAnchors); + if (!d->target) + return; + + //set any anchors that have been specified + if (d->left.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setLeft(d->left); + if (d->right.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setRight(d->right); + if (d->top.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setTop(d->top); + if (d->bottom.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setBottom(d->bottom); +} + +bool QmlSetAnchors::isReversable() +{ + return true; +} + +void QmlSetAnchors::reverse() +{ + Q_D(QmlSetAnchors); + if (!d->target) + return; + + //restore previous anchors + if (d->origLeft.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setLeft(d->origLeft); + if (d->origRight.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setRight(d->origRight); + if (d->origTop.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setTop(d->origTop); + if (d->origBottom.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->setBottom(d->origBottom); + +} + +QString QmlSetAnchors::typeName() const +{ + return QLatin1String("SetAnchors"); +} + +QList<Action> QmlSetAnchors::extraActions() +{ + Q_D(QmlSetAnchors); + QList<Action> extra; + + //### try to be smarter about which ones we add. + // or short-circuit later on if they haven't actually changed. + // we shouldn't set explicit width if there wasn't one before. + if (d->target) { + Action a; + a.fromValue = d->origX; + a.property = QmlMetaProperty(d->target, "x"); + extra << a; + + a.fromValue = d->origY; + a.property = QmlMetaProperty(d->target, "y"); + extra << a; + + a.fromValue = d->origWidth; + a.property = QmlMetaProperty(d->target, "width"); + extra << a; + + a.fromValue = d->origHeight; + a.property = QmlMetaProperty(d->target, "height"); + extra << a; + } + + return extra; +} + +bool QmlSetAnchors::changesBindings() +{ + return true; +} + +void QmlSetAnchors::clearForwardBindings() +{ + Q_D(QmlSetAnchors); + d->origLeft = d->target->anchors()->left(); + d->origRight = d->target->anchors()->right(); + d->origTop = d->target->anchors()->top(); + d->origBottom = d->target->anchors()->bottom(); + d->origX = d->target->x(); + d->origY = d->target->y(); + d->origWidth = d->target->width(); + d->origHeight = d->target->height(); + + //reset any anchors that have been specified + if (d->resetList.contains(QLatin1String("left"))) + d->target->anchors()->resetLeft(); + if (d->resetList.contains(QLatin1String("right"))) + d->target->anchors()->resetRight(); + if (d->resetList.contains(QLatin1String("top"))) + d->target->anchors()->resetTop(); + if (d->resetList.contains(QLatin1String("bottom"))) + d->target->anchors()->resetBottom(); +} + +void QmlSetAnchors::clearReverseBindings() +{ + Q_D(QmlSetAnchors); + d->origX = d->target->x(); + d->origY = d->target->y(); + d->origWidth = d->target->width(); + d->origHeight = d->target->height(); + + //reset any anchors that were set in the state + if (d->left.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->resetLeft(); + if (d->right.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->resetRight(); + if (d->top.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->resetTop(); + if (d->bottom.anchorLine != QFxAnchorLine::Invalid) + d->target->anchors()->resetBottom(); +} + QT_END_NAMESPACE diff --git a/src/declarative/util/qmlstateoperations.h b/src/declarative/util/qmlstateoperations.h index 67cd1cf..f595e16 100644 --- a/src/declarative/util/qmlstateoperations.h +++ b/src/declarative/util/qmlstateoperations.h @@ -44,6 +44,7 @@ #include <QtDeclarative/qmlstate.h> #include <QtDeclarative/qfxitem.h> +#include <QtDeclarative/qfxanchors.h> QT_BEGIN_HEADER @@ -101,10 +102,58 @@ public: virtual void execute(); }; +class QmlSetAnchorsPrivate; +class Q_DECLARATIVE_EXPORT QmlSetAnchors : public QmlStateOperation, public ActionEvent +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QmlSetAnchors) + + Q_PROPERTY(QFxItem *target READ object WRITE setObject) + Q_PROPERTY(QString reset READ reset WRITE setReset) + Q_PROPERTY(QFxAnchorLine left READ left WRITE setLeft) + Q_PROPERTY(QFxAnchorLine right READ right WRITE setRight) + Q_PROPERTY(QFxAnchorLine top READ top WRITE setTop) + Q_PROPERTY(QFxAnchorLine bottom READ bottom WRITE setBottom) + +public: + QmlSetAnchors(QObject *parent=0); + ~QmlSetAnchors(); + + virtual ActionList actions(); + + QFxItem *object() const; + void setObject(QFxItem *); + + QString reset() const; + void setReset(const QString &); + + QFxAnchorLine left() const; + void setLeft(const QFxAnchorLine &edge); + + QFxAnchorLine right() const; + void setRight(const QFxAnchorLine &edge); + + QFxAnchorLine top() const; + void setTop(const QFxAnchorLine &edge); + + QFxAnchorLine bottom() const; + void setBottom(const QFxAnchorLine &edge); + + virtual void execute(); + virtual bool isReversable(); + virtual void reverse(); + virtual QString typeName() const; + virtual QList<Action> extraActions(); + virtual bool changesBindings(); + virtual void clearForwardBindings(); + virtual void clearReverseBindings(); +}; + QT_END_NAMESPACE QML_DECLARE_TYPE(QmlParentChange) QML_DECLARE_TYPE(QmlRunScript) +QML_DECLARE_TYPE(QmlSetAnchors) QT_END_HEADER diff --git a/src/declarative/util/qmltransitionmanager.cpp b/src/declarative/util/qmltransitionmanager.cpp index 4609de8..b2d9414 100644 --- a/src/declarative/util/qmltransitionmanager.cpp +++ b/src/declarative/util/qmltransitionmanager.cpp @@ -95,7 +95,13 @@ void QmlTransitionManagerPrivate::applyBindings() if (action.toBinding) { action.property.setBinding(action.toBinding); action.toBinding->forceUpdate(); + } else if (action.event) { + if (action.reverseEvent) + action.event->reverse(); + else + action.event->execute(); } + } bindingsList.clear(); @@ -113,6 +119,13 @@ void QmlTransitionManager::transition(const QList<Action> &list, d->bindingsList << action; if (action.fromBinding) action.property.setBinding(0); // Disable current binding + if (action.event && action.event->changesBindings()) { //### assume isReversable()? + d->bindingsList << action; + if (action.reverseEvent) + action.event->clearReverseBindings(); + else + action.event->clearForwardBindings(); + } } // Animated transitions need both the start and the end value for @@ -126,13 +139,22 @@ void QmlTransitionManager::transition(const QList<Action> &list, if (!d->bindingsList.isEmpty()) { + //### do extra actions here? + // Apply all the property and binding changes - foreach(const Action &action, applyList) { + for (int ii = 0; ii < applyList.size(); ++ii) { + const Action &action = applyList.at(ii); if (action.toBinding) { action.property.setBinding(action.toBinding); action.toBinding->forceUpdate(); } else if (!action.event) { action.property.write(action.toValue); + } else if (action.event->isReversable()) { + if (action.reverseEvent) + action.event->reverse(); + else + action.event->execute(); + applyList << action.event->extraActions(); } } @@ -141,16 +163,28 @@ void QmlTransitionManager::transition(const QList<Action> &list, Action *action = &applyList[ii]; if (action->event) continue; - const QmlMetaProperty &prop = action->property; - if (action->toBinding) + if (action->toBinding || !action->toValue.isValid()) { //### is this always right (used for exta actions) action->toValue = prop.read(); + } } // Revert back to the original values foreach(const Action &action, applyList) { - if (action.event) + if (action.event) { + if (action.event->isReversable()) { + if (action.reverseEvent) { //reverse the reverse + action.event->clearForwardBindings(); + action.event->execute(); + action.event->clearReverseBindings(); + } else { + action.event->clearReverseBindings(); + action.event->reverse(); + action.event->clearForwardBindings(); + } + } continue; + } if (action.toBinding) action.property.setBinding(0); // Make sure this is disabled during the transition @@ -195,12 +229,12 @@ void QmlTransitionManager::transition(const QList<Action> &list, // applied at the end in applyBindings() to avoid any nastiness mid // transition foreach(const Action &action, applyList) { - if (action.event) { + if (action.event && !action.event->changesBindings()) { if (action.event->isReversable() && action.reverseEvent) action.event->reverse(); else action.event->execute(); - } else { + } else if (!action.event) { action.property.write(action.toValue); } } |