aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp4
-rw-r--r--src/qml/compiler/qqmlirbuilder_p.h2
-rw-r--r--src/qml/compiler/qqmltypecompiler.cpp6
-rw-r--r--src/qml/compiler/qv4compileddata_p.h13
-rw-r--r--src/qml/compiler/qv4isel_moth.cpp6
-rw-r--r--src/qml/compiler/qv4isel_moth_p.h2
-rw-r--r--src/qml/compiler/qv4isel_p.cpp4
-rw-r--r--src/qml/compiler/qv4isel_p.h4
-rw-r--r--src/qml/doc/snippets/qml/qtbinding/variantlistmap/main.cpp2
-rw-r--r--src/qml/doc/snippets/qml/statemachine/basicstate.qml6
-rw-r--r--src/qml/doc/snippets/qml/statemachine/finalstate.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/guardcondition.qml11
-rw-r--r--src/qml/doc/snippets/qml/statemachine/historystate.qml14
-rw-r--r--src/qml/doc/snippets/qml/statemachine/signaltransition.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/signaltransitionsignal.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/simplestatemachine.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/statemachine-button-history.qml12
-rw-r--r--src/qml/doc/snippets/qml/statemachine/statemachine-button-nested-ignore-quit.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/statemachine-button-nested.qml10
-rw-r--r--src/qml/doc/snippets/qml/statemachine/statemachine-button.qml8
-rw-r--r--src/qml/doc/snippets/qml/statemachine/timeouttransition.qml10
-rw-r--r--src/qml/doc/src/cppintegration/exposecppattributes.qdoc12
-rw-r--r--src/qml/doc/src/javascript/date.qdoc6
-rw-r--r--src/qml/doc/src/statemachine.qdoc235
-rw-r--r--src/qml/jit/qv4isel_masm.cpp6
-rw-r--r--src/qml/jit/qv4isel_masm_p.h2
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4arraydata.cpp269
-rw-r--r--src/qml/jsruntime/qv4arraydata_p.h78
-rw-r--r--src/qml/jsruntime/qv4arrayobject.cpp28
-rw-r--r--src/qml/jsruntime/qv4dateobject.cpp8
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp14
-rw-r--r--src/qml/jsruntime/qv4lookup.cpp17
-rw-r--r--src/qml/jsruntime/qv4mm.cpp29
-rw-r--r--src/qml/jsruntime/qv4object.cpp43
-rw-r--r--src/qml/jsruntime/qv4object_p.h7
-rw-r--r--src/qml/jsruntime/qv4objectiterator.cpp31
-rw-r--r--src/qml/jsruntime/qv4objectiterator_p.h5
-rw-r--r--src/qml/jsruntime/qv4objectproto.cpp10
-rw-r--r--src/qml/jsruntime/qv4profiling_p.h10
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp6
-rw-r--r--src/qml/jsruntime/qv4script.cpp13
-rw-r--r--src/qml/jsruntime/qv4script_p.h2
-rw-r--r--src/qml/parser/qqmljs.g115
-rw-r--r--src/qml/parser/qqmljsgrammar.cpp1668
-rw-r--r--src/qml/parser/qqmljsgrammar_p.h12
-rw-r--r--src/qml/parser/qqmljsparser.cpp384
-rw-r--r--src/qml/parser/qqmljsparser_p.h4
-rw-r--r--src/qml/qml/ftw/qqmlrefcount_p.h3
-rw-r--r--src/qml/qml/qqmlapplicationengine.cpp6
-rw-r--r--src/qml/qml/qqmlbinding.cpp15
-rw-r--r--src/qml/qml/qqmlcompileddata.cpp5
-rw-r--r--src/qml/qml/qqmlcompiler_p.h2
-rw-r--r--src/qml/qml/qqmlcontext_p.h3
-rw-r--r--src/qml/qml/qqmlengine.cpp10
-rw-r--r--src/qml/qml/qqmlengine_p.h1
-rw-r--r--src/qml/qml/qqmlexpression.cpp19
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp3
-rw-r--r--src/qml/qml/qqmlproperty.cpp9
-rw-r--r--src/qml/qml/qqmltypeloader.cpp15
-rw-r--r--src/qml/qml/qqmltypeloader_p.h2
61 files changed, 1673 insertions, 1604 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
index a96fafac9b..339278fbe8 100644
--- a/src/qml/compiler/qqmlirbuilder.cpp
+++ b/src/qml/compiler/qqmlirbuilder.cpp
@@ -538,7 +538,6 @@ Document::Document(bool debugMode)
, program(0)
, jsGenerator(&jsModule)
, unitFlags(0)
- , javaScriptCompilationUnit(0)
{
}
@@ -1502,7 +1501,7 @@ bool IRBuilder::isStatementNodeScript(QQmlJS::AST::Statement *statement)
QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output)
{
- QV4::CompiledData::CompilationUnit *compilationUnit = output.javaScriptCompilationUnit;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = output.javaScriptCompilationUnit;
QV4::CompiledData::Unit *jsUnit = compilationUnit->createUnitData(&output);
const uint unitSize = jsUnit->unitSize;
@@ -1811,6 +1810,7 @@ static QV4::IR::Type resolveQmlType(QQmlEnginePrivate *qmlEngine, QV4::IR::Membe
if (type->isCompositeSingleton()) {
QQmlRefPointer<QQmlTypeData> tdata = qmlEngine->typeLoader.getType(type->singletonInstanceInfo()->url);
Q_ASSERT(tdata);
+ tdata->release(); // Decrease the reference count added from QQmlTypeLoader::getType()
// When a singleton tries to reference itself, it may not be complete yet.
if (tdata->isComplete()) {
initMetaObjectResolver(resolver, qmlEngine->propertyCacheForType(tdata->compiledData()->metaTypeId));
diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
index ddd9a22bc2..cc22023f8e 100644
--- a/src/qml/compiler/qqmlirbuilder_p.h
+++ b/src/qml/compiler/qqmlirbuilder_p.h
@@ -317,7 +317,7 @@ struct Q_QML_PRIVATE_EXPORT Document
QV4::Compiler::JSUnitGenerator jsGenerator;
quint32 unitFlags;
- QV4::CompiledData::CompilationUnit *javaScriptCompilationUnit;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> javaScriptCompilationUnit;
QHash<int, QStringList> extraSignalParameters;
QV4::CompiledData::TypeReferenceMap typeReferences;
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp
index 13367efc3d..3a27a859fd 100644
--- a/src/qml/compiler/qqmltypecompiler.cpp
+++ b/src/qml/compiler/qqmltypecompiler.cpp
@@ -232,8 +232,6 @@ bool QQmlTypeCompiler::compile()
document->javaScriptCompilationUnit->data = qmlUnit;
compiledData->compilationUnit = document->javaScriptCompilationUnit;
- if (compiledData->compilationUnit)
- compiledData->compilationUnit->ref();
// Add to type registry of composites
if (compiledData->isCompositeType())
@@ -2336,8 +2334,6 @@ bool QQmlPropertyValidator::validateObjectBinding(QQmlPropertyData *property, co
return true;
}
- if (isComponent(binding->value.objectIndex))
- return true;
if (QQmlMetaType::isInterface(property->propType)) {
// Can only check at instantiation time if the created sub-object successfully casts to the
@@ -2356,6 +2352,8 @@ bool QQmlPropertyValidator::validateObjectBinding(QQmlPropertyData *property, co
}
}
return true;
+ } else if (isComponent(binding->value.objectIndex)) {
+ return true;
} else if (binding->flags & QV4::CompiledData::Binding::IsSignalHandlerObject && property->isFunction()) {
return true;
} else if (QQmlValueTypeFactory::isValueType(property->propType)) {
diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h
index e5b7681a7c..6791970461 100644
--- a/src/qml/compiler/qv4compileddata_p.h
+++ b/src/qml/compiler/qv4compileddata_p.h
@@ -39,6 +39,7 @@
#include <QHash>
#include <private/qv4value_p.h>
#include <private/qv4executableallocator_p.h>
+#include <private/qqmlrefcount_p.h>
QT_BEGIN_NAMESPACE
@@ -559,18 +560,16 @@ struct TypeReferenceMap : QHash<int, TypeReference>
// CompilationUnit * (for functions that need to clean up)
// CompiledData::Function *compiledFunction
-struct Q_QML_PRIVATE_EXPORT CompilationUnit
+struct Q_QML_PRIVATE_EXPORT CompilationUnit : public QQmlRefCount
{
#ifdef V4_BOOTSTRAP
CompilationUnit()
- : refCount(0)
- , data(0)
+ : data(0)
{}
virtual ~CompilationUnit() {}
#else
CompilationUnit()
- : refCount(0)
- , data(0)
+ : data(0)
, engine(0)
, runtimeStrings(0)
, runtimeLookups(0)
@@ -580,10 +579,6 @@ struct Q_QML_PRIVATE_EXPORT CompilationUnit
virtual ~CompilationUnit();
#endif
- void ref() { ++refCount; }
- void deref() { if (!--refCount) delete this; }
-
- int refCount;
Unit *data;
// Called only when building QML, when we build the header for JS first and append QML data
diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp
index 40a44844ce..39977375c4 100644
--- a/src/qml/compiler/qv4isel_moth.cpp
+++ b/src/qml/compiler/qv4isel_moth.cpp
@@ -446,13 +446,15 @@ void InstructionSelection::run(int functionIndex)
delete[] codeStart;
}
-QV4::CompiledData::CompilationUnit *InstructionSelection::backendCompileStep()
+QQmlRefPointer<QV4::CompiledData::CompilationUnit> InstructionSelection::backendCompileStep()
{
compilationUnit->codeRefs.resize(irModule->functions.size());
int i = 0;
foreach (IR::Function *irFunction, irModule->functions)
compilationUnit->codeRefs[i++] = codeRefs[irFunction];
- return compilationUnit.take();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> result;
+ result.take(compilationUnit.take());
+ return result;
}
void InstructionSelection::callValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result)
diff --git a/src/qml/compiler/qv4isel_moth_p.h b/src/qml/compiler/qv4isel_moth_p.h
index 938b60ca05..89f575c633 100644
--- a/src/qml/compiler/qv4isel_moth_p.h
+++ b/src/qml/compiler/qv4isel_moth_p.h
@@ -66,7 +66,7 @@ public:
virtual void run(int functionIndex);
protected:
- virtual QV4::CompiledData::CompilationUnit *backendCompileStep();
+ virtual QQmlRefPointer<CompiledData::CompilationUnit> backendCompileStep();
virtual void visitJump(IR::Jump *);
virtual void visitCJump(IR::CJump *);
diff --git a/src/qml/compiler/qv4isel_p.cpp b/src/qml/compiler/qv4isel_p.cpp
index f160954f84..e419084238 100644
--- a/src/qml/compiler/qv4isel_p.cpp
+++ b/src/qml/compiler/qv4isel_p.cpp
@@ -72,12 +72,12 @@ EvalInstructionSelection::~EvalInstructionSelection()
EvalISelFactory::~EvalISelFactory()
{}
-QV4::CompiledData::CompilationUnit *EvalInstructionSelection::compile(bool generateUnitData)
+QQmlRefPointer<CompiledData::CompilationUnit> EvalInstructionSelection::compile(bool generateUnitData)
{
for (int i = 0; i < irModule->functions.size(); ++i)
run(i);
- QV4::CompiledData::CompilationUnit *unit = backendCompileStep();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> unit = backendCompileStep();
if (generateUnitData)
unit->data = jsGenerator->generateUnit();
return unit;
diff --git a/src/qml/compiler/qv4isel_p.h b/src/qml/compiler/qv4isel_p.h
index 984e8ab4bf..504d255eaf 100644
--- a/src/qml/compiler/qv4isel_p.h
+++ b/src/qml/compiler/qv4isel_p.h
@@ -57,7 +57,7 @@ public:
EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator);
virtual ~EvalInstructionSelection() = 0;
- QV4::CompiledData::CompilationUnit *compile(bool generateUnitData = true);
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compile(bool generateUnitData = true);
void setUseFastLookups(bool b) { useFastLookups = b; }
void setUseTypeInference(bool onoff) { useTypeInference = onoff; }
@@ -74,7 +74,7 @@ public:
protected:
virtual void run(int functionIndex) = 0;
- virtual QV4::CompiledData::CompilationUnit *backendCompileStep() = 0;
+ virtual QQmlRefPointer<QV4::CompiledData::CompilationUnit> backendCompileStep() = 0;
bool useFastLookups;
bool useTypeInference;
diff --git a/src/qml/doc/snippets/qml/qtbinding/variantlistmap/main.cpp b/src/qml/doc/snippets/qml/qtbinding/variantlistmap/main.cpp
index 60ce955a19..f3879e0785 100644
--- a/src/qml/doc/snippets/qml/qtbinding/variantlistmap/main.cpp
+++ b/src/qml/doc/snippets/qml/qtbinding/variantlistmap/main.cpp
@@ -48,7 +48,7 @@ int main(int argc, char *argv[]) {
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QVariantList list;
-list << 10 << Qt::green << "bottles";
+list << 10 << QColor(Qt::green) << "bottles";
QVariantMap map;
map.insert("language", "QML");
diff --git a/src/qml/doc/snippets/qml/statemachine/basicstate.qml b/src/qml/doc/snippets/qml/statemachine/basicstate.qml
index dd9d100e9d..ccdd2b2ec1 100644
--- a/src/qml/doc/snippets/qml/statemachine/basicstate.qml
+++ b/src/qml/doc/snippets/qml/statemachine/basicstate.qml
@@ -39,15 +39,15 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: state
running: true
- StateBase {
+ DSM.State {
id: state
}
}
diff --git a/src/qml/doc/snippets/qml/statemachine/finalstate.qml b/src/qml/doc/snippets/qml/statemachine/finalstate.qml
index d03a4bce40..5865436a52 100644
--- a/src/qml/doc/snippets/qml/statemachine/finalstate.qml
+++ b/src/qml/doc/snippets/qml/statemachine/finalstate.qml
@@ -39,22 +39,22 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: state
running: true
- StateBase {
+ DSM.State {
id: state
- TimeoutTransition {
+ DSM.TimeoutTransition {
targetState: finalState
timeout: 200
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
onFinished: console.log("state finished")
diff --git a/src/qml/doc/snippets/qml/statemachine/guardcondition.qml b/src/qml/doc/snippets/qml/statemachine/guardcondition.qml
index f9ecf450bd..3d4badb350 100644
--- a/src/qml/doc/snippets/qml/statemachine/guardcondition.qml
+++ b/src/qml/doc/snippets/qml/statemachine/guardcondition.qml
@@ -39,23 +39,23 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
Button {
anchors.fill: parent
id: button
- StateMachine {
- StateBase {
- SignalTransition {
+ DSM.StateMachine {
+ DSM.State {
+ DSM.SignalTransition {
targetState: finalState
signal: button.mysignal
// the guard condition uses the mystr string argument from mysignal
guard: mystr == "test"
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
}
@@ -66,4 +66,3 @@ Rectangle {
}
}
//! [document]
-
diff --git a/src/qml/doc/snippets/qml/statemachine/historystate.qml b/src/qml/doc/snippets/qml/statemachine/historystate.qml
index 237cf57175..7559bfe06c 100644
--- a/src/qml/doc/snippets/qml/statemachine/historystate.qml
+++ b/src/qml/doc/snippets/qml/statemachine/historystate.qml
@@ -39,38 +39,38 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
Button {
anchors.fill: parent
id: button
text: "Press me"
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: parentState
running: true
- StateBase {
+ DSM.State {
id: parentState
initialState: child2
onEntered: console.log("parentState entered")
onExited: console.log("parentState exited")
- StateBase {
+ DSM.State {
id: child1
onEntered: console.log("child1 entered")
onExited: console.log("child1 exited")
}
- StateBase {
+ DSM.State {
id: child2
onEntered: console.log("child2 entered")
onExited: console.log("child2 exited")
}
- HistoryState {
+ DSM.HistoryState {
id: historyState
defaultState: child1
}
- SignalTransition {
+ DSM.SignalTransition {
targetState: historyState
// Clicking the button will cause the state machine to enter the child state
diff --git a/src/qml/doc/snippets/qml/statemachine/signaltransition.qml b/src/qml/doc/snippets/qml/statemachine/signaltransition.qml
index 7402ac089f..d00a103d7c 100644
--- a/src/qml/doc/snippets/qml/statemachine/signaltransition.qml
+++ b/src/qml/doc/snippets/qml/statemachine/signaltransition.qml
@@ -39,23 +39,23 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: state
running: true
- StateBase {
+ DSM.State {
id: state
- SignalTransition {
+ DSM.SignalTransition {
targetState: finalState
signal: button.clicked
guard: guardButton.checked
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
onFinished: Qt.quit()
diff --git a/src/qml/doc/snippets/qml/statemachine/signaltransitionsignal.qml b/src/qml/doc/snippets/qml/statemachine/signaltransitionsignal.qml
index 44608fed36..90ebd70eb5 100644
--- a/src/qml/doc/snippets/qml/statemachine/signaltransitionsignal.qml
+++ b/src/qml/doc/snippets/qml/statemachine/signaltransitionsignal.qml
@@ -39,21 +39,21 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
Button {
anchors.fill: parent
id: button
- StateMachine {
- StateBase {
- SignalTransition {
+ DSM.StateMachine {
+ DSM.State {
+ DSM.SignalTransition {
targetState: finalState
signal: button.clicked
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
}
diff --git a/src/qml/doc/snippets/qml/statemachine/simplestatemachine.qml b/src/qml/doc/snippets/qml/statemachine/simplestatemachine.qml
index f5c6923cd1..4e5ea9b65c 100644
--- a/src/qml/doc/snippets/qml/statemachine/simplestatemachine.qml
+++ b/src/qml/doc/snippets/qml/statemachine/simplestatemachine.qml
@@ -39,26 +39,26 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
Button {
anchors.fill: parent
id: button
text: "Finish state"
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: state
running: true
- StateBase {
+ DSM.State {
id: state
- SignalTransition {
+ DSM.SignalTransition {
targetState: finalState
signal: button.clicked
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
onFinished: Qt.quit()
diff --git a/src/qml/doc/snippets/qml/statemachine/statemachine-button-history.qml b/src/qml/doc/snippets/qml/statemachine/statemachine-button-history.qml
index 10595a9398..8f628232c1 100644
--- a/src/qml/doc/snippets/qml/statemachine/statemachine-button-history.qml
+++ b/src/qml/doc/snippets/qml/statemachine/statemachine-button-history.qml
@@ -39,8 +39,8 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0
Rectangle {
//![0]
@@ -71,7 +71,7 @@ Rectangle {
// start the state machine
running: true
- StateBase {
+ State {
id: s1
// set the initial state
initialState: s11
@@ -84,7 +84,7 @@ Rectangle {
// do something when the state enters/exits
onEntered: console.log("s1 entered")
onExited: console.log("s1 exited")
- StateBase {
+ State {
id: s11
// create a transition from s1 to s2 when the button is clicked
SignalTransition {
@@ -96,7 +96,7 @@ Rectangle {
onExited: console.log("s11 exited")
}
- StateBase {
+ State {
id: s12
// create a transition from s2 to s3 when the button is clicked
SignalTransition {
@@ -107,7 +107,7 @@ Rectangle {
onEntered: console.log("s12 entered")
onExited: console.log("s12 exited")
}
- StateBase {
+ State {
id: s13
// create a transition from s3 to s1 when the button is clicked
SignalTransition {
@@ -133,7 +133,7 @@ Rectangle {
onEntered: console.log("s2 entered")
onExited: console.log("s2 exited")
}
- StateBase {
+ State {
id: s3
SignalTransition {
targetState: s1h
diff --git a/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested-ignore-quit.qml b/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested-ignore-quit.qml
index 00f9cd3871..bf84b4cc90 100644
--- a/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested-ignore-quit.qml
+++ b/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested-ignore-quit.qml
@@ -39,8 +39,8 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0
Rectangle {
Row {
@@ -66,7 +66,7 @@ Rectangle {
// start the state machine
running: true
- StateBase {
+ State {
id: s1
// set the initial state
initialState: s11
@@ -79,7 +79,7 @@ Rectangle {
// do something when the state enters/exits
onEntered: console.log("s1 entered")
onExited: console.log("s1 exited")
- StateBase {
+ State {
id: s11
// create a transition from s11 to s12 when the button is clicked
SignalTransition {
@@ -92,7 +92,7 @@ Rectangle {
}
//![0]
- StateBase {
+ State {
id: s12
// create a transition from s12 to s13 when the button is clicked
SignalTransition {
@@ -112,7 +112,7 @@ Rectangle {
}
//![0]
- StateBase {
+ State {
id: s13
// create a transition from s13 to s11 when the button is clicked
SignalTransition {
diff --git a/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested.qml b/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested.qml
index 68bd57d85f..dfa093716f 100644
--- a/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested.qml
+++ b/src/qml/doc/snippets/qml/statemachine/statemachine-button-nested.qml
@@ -39,8 +39,8 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0
Rectangle {
//![0]
@@ -67,7 +67,7 @@ Rectangle {
// start the state machine
running: true
- StateBase {
+ State {
id: s1
// set the initial state
initialState: s11
@@ -80,7 +80,7 @@ Rectangle {
// do something when the state enters/exits
onEntered: console.log("s1 entered")
onExited: console.log("s1 exited")
- StateBase {
+ State {
id: s11
// create a transition from s11 to s12 when the button is clicked
SignalTransition {
@@ -92,7 +92,7 @@ Rectangle {
onExited: console.log("s11 exited")
}
- StateBase {
+ State {
id: s12
// create a transition from s12 to s13 when the button is clicked
SignalTransition {
@@ -103,7 +103,7 @@ Rectangle {
onEntered: console.log("s12 entered")
onExited: console.log("s12 exited")
}
- StateBase {
+ State {
id: s13
// create a transition from s13 to s11 when the button is clicked
SignalTransition {
diff --git a/src/qml/doc/snippets/qml/statemachine/statemachine-button.qml b/src/qml/doc/snippets/qml/statemachine/statemachine-button.qml
index f2817ead8b..6c4ed846e5 100644
--- a/src/qml/doc/snippets/qml/statemachine/statemachine-button.qml
+++ b/src/qml/doc/snippets/qml/statemachine/statemachine-button.qml
@@ -39,8 +39,8 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0
Rectangle {
//![0]
@@ -60,7 +60,7 @@ Rectangle {
// start the state machine
running: true
- StateBase {
+ State {
id: s1
// create a transition from s1 to s2 when the button is clicked
SignalTransition {
@@ -72,7 +72,7 @@ Rectangle {
onExited: console.log("s1 exited")
}
- StateBase {
+ State {
id: s2
// create a transition from s2 to s3 when the button is clicked
SignalTransition {
@@ -83,7 +83,7 @@ Rectangle {
onEntered: console.log("s2 entered")
onExited: console.log("s2 exited")
}
- StateBase {
+ State {
id: s3
// create a transition from s3 to s1 when the button is clicked
SignalTransition {
diff --git a/src/qml/doc/snippets/qml/statemachine/timeouttransition.qml b/src/qml/doc/snippets/qml/statemachine/timeouttransition.qml
index b15c99cd22..7b8fa77b13 100644
--- a/src/qml/doc/snippets/qml/statemachine/timeouttransition.qml
+++ b/src/qml/doc/snippets/qml/statemachine/timeouttransition.qml
@@ -39,8 +39,8 @@
****************************************************************************/
//! [document]
-import QtQml.StateMachine 1.0
import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
Rectangle {
Button {
@@ -49,18 +49,18 @@ Rectangle {
text: "Finish state"
enabled: !stateMachine.running
onClicked: stateMachine.running = true
- StateMachine {
+ DSM.StateMachine {
id: stateMachine
initialState: state
running: true
- StateBase {
+ DSM.State {
id: state
- TimeoutTransition {
+ DSM.TimeoutTransition {
targetState: finalState
timeout: 1000
}
}
- FinalState {
+ DSM.FinalState {
id: finalState
}
}
diff --git a/src/qml/doc/src/cppintegration/exposecppattributes.qdoc b/src/qml/doc/src/cppintegration/exposecppattributes.qdoc
index 9527229204..d8e05b4358 100644
--- a/src/qml/doc/src/cppintegration/exposecppattributes.qdoc
+++ b/src/qml/doc/src/cppintegration/exposecppattributes.qdoc
@@ -398,13 +398,13 @@ methods, as shown below right:
\li
\code
int main(int argc, char *argv[]) {
- QCoreApplication app(argc, argv);
+ QGuiApplication app(argc, argv);
- QQmlEngine engine;
- Message msg;
- engine.rootContext()->setContextProperty("msg", &msg);
- QQmlComponent component(&engine, QUrl::fromLocalFile("MyItem.qml"));
- component.create();
+ MessageBoard msgBoard;
+ QQuickView view;
+ view.engine()->rootContext()->setContextProperty("msgBoard", &msgBoard);
+ view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+ view.show();
return app.exec();
}
diff --git a/src/qml/doc/src/javascript/date.qdoc b/src/qml/doc/src/javascript/date.qdoc
index 208e2be3f7..4f897af928 100644
--- a/src/qml/doc/src/javascript/date.qdoc
+++ b/src/qml/doc/src/javascript/date.qdoc
@@ -153,7 +153,7 @@
import QtQuick 2.0
Text {
- text: "The date is: " + Date().toLocaleString(Qt.locale("de_DE"))
+ text: "The date is: " + new Date().toLocaleString(Qt.locale("de_DE"))
}
\endcode
*/
@@ -175,7 +175,7 @@
import QtQuick 2.0
Text {
- text: "The date is: " + Date().toLocaleDateString(Qt.locale("de_DE"))
+ text: "The date is: " + new Date().toLocaleDateString(Qt.locale("de_DE"))
}
\endcode
*/
@@ -197,7 +197,7 @@
import QtQuick 2.0
Text {
- text: "The date is: " + Date().toLocaleTimeString(Qt.locale("de_DE"))
+ text: "The date is: " + new Date().toLocaleTimeString(Qt.locale("de_DE"))
}
\endcode
*/
diff --git a/src/qml/doc/src/statemachine.qdoc b/src/qml/doc/src/statemachine.qdoc
index 5a37ef8026..f200f6f3c0 100644
--- a/src/qml/doc/src/statemachine.qdoc
+++ b/src/qml/doc/src/statemachine.qdoc
@@ -26,91 +26,109 @@
****************************************************************************/
/*!
- \group qmlstatemachine
+ \qmlmodule QtQml.StateMachine 1.0
+ \title Declarative State Machine QML Types
+ \brief Provides QML types to create and execute state graphs.
+
+ The following is a list of QML types provided by the module:
+*/
+
+
+/*!
\page qmlstatemachine.html
\title The Declarative State Machine Framework
- \brief An overview of the Declarative State Machine Framework for constructing and executing state graphs.
+ \brief Overview of the Declarative State Machine Framework for constructing and executing state graphs.
\ingroup frameworks-technologies
\tableofcontents
- The Declarative State Machine Framework provides classes for creating and executing
- state graphs in QML. The concepts and notation are based on those from Harel's
- \l{http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf}
- {Statecharts: A visual formalism for complex systems}, which
- is also the basis of UML state diagrams. The semantics of state machine
- execution are based on \l{State Chart XML: State Machine Notation for
- Control Abstraction}{State Chart XML (SCXML)}.
-
- Statecharts provide a graphical way of modeling how a system reacts to
- stimuli. This is done by defining the possible \e states that the system can
- be in, and how the system can move from one state to another (\e transitions
- between states). A key characteristic of event-driven systems (such as Qt
- applications) is that behavior often depends not only on the last or current
- event, but also the events that preceded it. With statecharts, this
- information is easy to express.
-
- The Declarative State Machine Framework provides an API and execution model that can
- be used to effectively embed the elements and semantics of statecharts in Qml
- applications. The framework integrates tightly with Qt's meta-object system;
- for example, transitions between states can be triggered by signals, and
- states can be configured to set properties and invoke methods on QObjects.
- Qt's event system is used to drive the state machines.
-
- The state graph in the Declarative State Machine Framework is hierarchical. States
- can be nested inside of other states, and the current configuration of the
- state machine consists of the set of states which are currently active.
- All the states in a valid configuration of the state machine will
- have a common ancestor.
+ The Declarative State Machine Framework provides types for creating and
+ executing state graphs in QML. It is similar to the C++ State Machine
+ framework based on Harel's
+ \l{Statecharts: A visual formalism for complex systems}, which
+ is also the basis for UML state diagrams. Like its
+ \l{The State Machine Framework}{C++ counterpart}, the framework provides an
+ API and execution model based on \l{State Chart XML: State Machine Notation for
+ Control Abstraction}{State Chart XML (SCXML)}
+ to embed the elements and semantics of statecharts in QML applications.
For user interfaces with multiple visual states, independent of the
application's logical state, consider using QML States and Transitions.
- \section1 QML types in the Declarative State Machine Framework
+ These following QML types are provided by framework to create event-driven
+ state machines:
+
+ \annotatedlist statemachine-qmltypes
- These QML types are provided by QML for creating event-driven state machines.
+ \section1 Using both QtQuick and QtQml.StateMachine imports
- \annotatedlist qmlstatemachine
+ \warning If you're attempting to import both \l{QtQuick} and
+ \e{QtQml.StateMachine} in one single QML file, make sure to import
+ \e{QtQml.StateMachine} \e{last}. This way, the \e{State} type is provided
+ by the Declarative State Machine Framework and not by \l{QtQuick}:
+
+ \qml
+ import QtQuick 2.0
+ import QtQml.StateMachine 1.0
+
+ StateMachine {
+ State {
+ // okay, is of type QtQml.StateMachine.State
+ }
+ }
+ \endqml
+
+ Alternatively, you can import \e{QtQml.StateMachine} into a separate
+ namespace to avoid any ambiguity with QtQuick's \e{State} item:
+
+ \qml
+ import QtQuick 2.0
+ import QtQml.StateMachine 1.0 as DSM
+
+ DSM.StateMachine {
+ DSM.State {
+ // ...
+ }
+ }
+ \endqml
\section1 A Simple State Machine
To demonstrate the core functionality of the State Machine API, let's look
- at a small example: A state machine with three states, \c s1, \c s2 and \c
- s3. The state machine is controlled by a single QPushButton; when the button
+ at an example: A state machine with three states, \c s1, \c s2 and \c
+ s3. The state machine is controlled by a single Button; when the button
is clicked, the machine transitions to another state. Initially, the state
- machine is in state \c s1. The statechart for this machine is as follows:
+ machine is in state \c s1. The following is a state chart showing the
+ different states in our example.
- \image statemachine-button.png
- \omit
- \caption This is a caption
- \endomit
+ \image statemachine-button.png
The following snippet shows the code needed to create such a state machine.
\snippet qml/statemachine/statemachine-button.qml 0
- The state machine executes asynchronously, i.e. it becomes part of your
- application's event loop.
+ The state machine runs asynchronously to become part of your application's
+ event loop.
\section1 State Machines That Finish
The state machine defined in the previous section never finishes. In order
for a state machine to be able to finish, it needs to have a top-level \e
- final state (FinalState object). When the state machine enters a top-level
- final state, the machine will emit the \l{StateBase::finished}{finished}
- signal and halt.
+ final state (FinalState object). When the state machine enters the top-level
+ final state, the machine emits the \l{State::finished}{finished}
+ signal and halts.
All you need to do to introduce a final state in the graph is create a
FinalState object and use it as the target of one or more transitions.
- \section1 Sharing Transitions By Grouping States
+ \section1 Sharing Transitions
Assume we wanted the user to be able to quit the application at any time by
clicking a Quit button. In order to achieve this, we need to create a final
state and make it the target of a transition associated with the Quit
- button's clicked() signal. We could add a transition from each of \c s1, \c
- s2 and \c s3; however, this seems redundant, and one would also have to
+ button's \e clicked() signal. We could add a transition for each state;
+ however, this seems redundant and one would also have to
remember to add such a transition from every new state that is added in the
future.
@@ -121,54 +139,50 @@
state. The following diagram shows the new state machine.
\image statemachine-button-nested.png
- \omit
- \caption This is a caption
- \endomit
The three original states have been renamed \c s11, \c s12 and \c s13 to
- reflect that they are now children of the new top-level state, \c s1. Child
+ reflect that they are now childrens of the new top-level state, \c s1. Child
states implicitly inherit the transitions of their parent state. This means
it is now sufficient to add a single transition from \c s1 to the final
- state \c s2. New states added to \c s1 will also automatically inherit this
+ state, \c s2. New states added to \c s1 will automatically inherit this
transition.
All that's needed to group states is to specify the proper parent when the
state is created. You also need to specify which of the child states is the
- initial one (i.e. which child state the state machine should enter when the
+ initial one (the child state the state machine should enter when the
parent state is the target of a transition).
\snippet qml/statemachine/statemachine-button-nested.qml 0
In this case we want the application to quit when the state machine is
- finished, so the machine's finished() signal is connected to the
- application's quit() slot.
+ finished, so the machine's \e finished() signal is connected to the
+ application's \e quit() slot.
A child state can override an inherited transition. For example, the
following code adds a transition that effectively causes the Quit button to
- be ignored when the state machine is in state \c s12.
+ be ignored when the state machine is in state, \c s12.
\snippet qml/statemachine/statemachine-button-nested-ignore-quit.qml 0
- A transition can have any state as its target, i.e. the target state does
- not have to be on the same level in the state hierarchy as the source state.
+ A transition can have any state as its target irrespective of where the
+ target state is in the state hierarchy.
- \section1 Using History States to Save and Restore the Current State
+ \section1 Using History States
Imagine that we wanted to add an "interrupt" mechanism to the example
discussed in the previous section; the user should be able to click a button
to have the state machine perform some non-related task, after which the
state machine should resume whatever it was doing before (i.e. return to the
- old state, which is one of \c s11, \c s12 and \c s13 in this case).
+ old state, which is one of the three states in this case).
Such behavior can easily be modeled using \e{history states}. A history
state (HistoryState object) is a pseudo-state that represents the child
- state that the parent state was in the last time the parent state was
- exited.
+ state that the parent state was in before it exited last.
A history state is created as a child of the state for which we wish to
record the current child state; when the state machine detects the presence
of such a state at runtime, it automatically records the current (real)
- child state when the parent state is exited. A transition to the history
+ child state when the parent state exits. A transition to the history
state is in fact a transition to the child state that the state machine had
previously saved; the state machine automatically "forwards" the transition
to the real child state.
@@ -177,9 +191,6 @@
has been added.
\image statemachine-button-history.png
- \omit
- \caption This is a caption
- \endomit
The following code shows how it can be implemented; in this example we
simply display a message box when \c s3 is entered, then immediately return
@@ -187,43 +198,38 @@
\snippet qml/statemachine/statemachine-button-history.qml 0
- \section1 Using Parallel States to Avoid a Combinatorial Explosion of States
+ \section1 Using Parallel States
Assume that you wanted to model a set of mutually exclusive properties of a
car in a single state machine. Let's say the properties we are interested in
are Clean vs Dirty, and Moving vs Not moving. It would take four mutually
- exclusive states and eight transitions to be able to represent and freely
- move between all possible combinations.
+ exclusive states and eight transitions to represent the states and freely
+ move between all possible combinations as shown in the following state chart.
\image statemachine-nonparallel.png
- \omit
- \caption This is a caption
- \endomit
If we added a third property (say, Red vs Blue), the total number of states
would double, to eight; and if we added a fourth property (say, Enclosed vs
Convertible), the total number of states would double again, to 16.
- Using parallel states, the total number of states and transitions grows
- linearly as we add more properties, instead of exponentially. Furthermore,
- states can be added to or removed from the parallel state without affecting
- any of their sibling states.
+ This exponential increase can be reduced using parallel states, which enables
+ linear growth in the number of states and transitions as we add more
+ properties. Furthermore, states can be added to or removed from the parallel
+ state without affecting any of their sibling states. The following state
+ chart shows the different paralles states for the car example.
\image statemachine-parallel.png
- \omit
- \caption This is a caption
- \endomit
To create a parallel state group, set childMode to QState.ParallelStates.
\qml
- StateBase {
+ State {
id: s1
childMode: QState.ParallelStates
- StateBase {
+ State {
id: s11
}
- StateBase {
+ State {
id: s12
}
}
@@ -231,36 +237,34 @@
When a parallel state group is entered, all its child states will be
simultaneously entered. Transitions within the individual child states
- operate normally. However, any of the child states may take a transition which exits the parent
- state. When this happens, the parent state and all of its child states are exited.
+ operate normally. However, any of the child states may take a transition
+ which exits the parent state. When this happens, the parent state and all of
+ its child states are exited.
- The parallelism in the State Machine framework follows an interleaved semantics. All parallel
- operations will be executed in a single, atomic step of the event processing, so no event can
- interrupt the parallel operations. However, events will still be processed sequentially, since
- the machine itself is single threaded. As an example: Consider the situation where there are two
- transitions that exit the same parallel state group, and their conditions become true
- simultaneously. In this case, the event that is processed last of the two will not have any
- effect, since the first event will already have caused the machine to exit from the parallel
- state.
+ The parallelism in the State Machine framework follows an interleaved
+ semantics. All parallel operations will be executed in a single, atomic step
+ of the event processing, so no event can interrupt the parallel operations.
+ However, events will still be processed sequentially, as the machine itself
+ is single threaded. For example, consider the situation where there are two
+ transitions that exit the same parallel state group, and their conditions
+ become true simultaneously. In this case, the event that is processed last
+ of the two will not have any effect.
- \section1 Detecting that a Composite State has Finished
+ \section1 Exiting a Composite State
A child state can be final (a FinalState object); when a final child state
- is entered, the parent state emits the StateBase::finished signal. The
+ is entered, the parent state emits the State::finished signal. The
following diagram shows a composite state \c s1 which does some processing
before entering a final state:
\image statemachine-finished.png
- \omit
- \caption This is a caption
- \endomit
When \c s1 's final state is entered, \c s1 will automatically emit
- \l{StateBase::finished}{finished}. We use a signal transition to cause this event to
+ \l{State::finished}{finished}. We use a signal transition to cause this event to
trigger a state change:
\qml
- StateBase {
+ State {
id: s1
SignalTransition {
targetState: s2
@@ -270,25 +274,25 @@
\endqml
Using final states in composite states is useful when you want to hide the
- internal details of a composite state; i.e. the only thing the outside world
- should be able to do is enter the state, and get a notification when the
- state has completed its work. This is a very powerful abstraction and
- encapsulation mechanism when building complex (deeply nested) state
- machines. (In the above example, you could of course create a transition
+ internal details of a composite state. The outside world should be able to
+ enter the state and get a notification when the state has completed its work,
+ without the need to know the internal details. This is a very powerful
+ abstraction and encapsulation mechanism when building complex (deeply nested)
+ state machines. (In the above example, you could of course create a transition
directly from \c s1 's \c done state rather than relying on \c s1 's
finished() signal, but with the consequence that implementation details of
\c s1 are exposed and depended on).
- For parallel state groups, the StateBase::finished signal is emitted when \e
+ For parallel state groups, the State::finished signal is emitted when \e
all the child states have entered final states.
\section1 Targetless Transitions
A transition need not have a target state. A transition without a target can
be triggered the same way as any other transition; the difference is that
- when a targetless transition is triggered, it doesn't cause any state
- changes. This allows you to react to a signal or event when your machine is
- in a certain state, without having to leave that state. Example:
+ it doesn't cause any state changes. This allows you to react to a signal or
+ event when your machine is in a certain state, without having to leave that
+ state. For example:
\qml
Button {
@@ -298,7 +302,7 @@
id: stateMachine
initialState: s1
running: true
- StateBase {
+ State {
id: s1
SignalTransition {
signal: button.clicked
@@ -311,7 +315,14 @@
The "button pressed" message will be displayed each time the button is clicked, but the
state machine will remain in its current state (s1). If the target state
- were explicitly set to s1, however, s1 would be exited and re-entered each
- time (e.g. the QAbstractState::entered and QAbstractState::exited
+ were explicitly set to s1, s1 would be exited and re-entered each
+ time (the QAbstractState::entered and QAbstractState::exited
signals would be emitted).
+
+ \section1 Related Information
+
+ \list
+ \li \l{Declarative State Machine QML Types}
+ \li \l{The State Machine Framework}
+ \endlist
*/
diff --git a/src/qml/jit/qv4isel_masm.cpp b/src/qml/jit/qv4isel_masm.cpp
index 5cf00f6d60..9ff33feff2 100644
--- a/src/qml/jit/qv4isel_masm.cpp
+++ b/src/qml/jit/qv4isel_masm.cpp
@@ -293,9 +293,11 @@ const void *InstructionSelection::addConstantTable(QVector<Primitive> *values)
return finalValues.constData();
}
-QV4::CompiledData::CompilationUnit *InstructionSelection::backendCompileStep()
+QQmlRefPointer<QV4::CompiledData::CompilationUnit> InstructionSelection::backendCompileStep()
{
- return compilationUnit.take();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> result;
+ result.take(compilationUnit.take());
+ return result;
}
void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result)
diff --git a/src/qml/jit/qv4isel_masm_p.h b/src/qml/jit/qv4isel_masm_p.h
index 2f64bf1157..8ad97c640b 100644
--- a/src/qml/jit/qv4isel_masm_p.h
+++ b/src/qml/jit/qv4isel_masm_p.h
@@ -66,7 +66,7 @@ public:
const void *addConstantTable(QVector<QV4::Primitive> *values);
protected:
- virtual QV4::CompiledData::CompilationUnit *backendCompileStep();
+ virtual QQmlRefPointer<QV4::CompiledData::CompilationUnit> backendCompileStep();
virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result);
virtual void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Expr *result);
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index 9ac279bf87..4af8927a2e 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -78,7 +78,7 @@ void ArgumentsObject::fullyCreate()
uint numAccessors = qMin((int)context()->d()->function->formalParameterCount(), context()->d()->realArgumentCount);
uint argCount = qMin(context()->d()->realArgumentCount, context()->d()->callData->argc);
- ArrayData::realloc(this, ArrayData::Sparse, 0, argCount, true);
+ ArrayData::realloc(this, ArrayData::Sparse, argCount, true);
context()->d()->engine->requireArgumentsAccessors(numAccessors);
mappedArguments().ensureIndex(engine(), numAccessors);
for (uint i = 0; i < (uint)numAccessors; ++i) {
@@ -97,7 +97,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
fullyCreate();
Scope scope(ctx);
- Property *pd = arrayData()->getProperty(index);
+ Property *pd = arrayData() ? arrayData()->getProperty(index) : 0;
Property map;
PropertyAttributes mapAttrs;
bool isMapped = false;
@@ -106,6 +106,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
isMapped = arrayData()->attributes(index).isAccessor() && pd->getter() == context()->d()->engine->argumentsAccessors[index].getter();
if (isMapped) {
+ Q_ASSERT(arrayData());
mapAttrs = arrayData()->attributes(index);
map.copy(*pd, mapAttrs);
setArrayAttributes(index, Attr_Data);
@@ -119,6 +120,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
ctx->d()->strictMode = strict;
if (isMapped && attrs.isData()) {
+ Q_ASSERT(arrayData());
ScopedCallData callData(scope, 1);
callData->thisObject = this->asReturnedValue();
callData->args[0] = desc.value;
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp
index d58dbb91d4..3235a116ee 100644
--- a/src/qml/jsruntime/qv4arraydata.cpp
+++ b/src/qml/jsruntime/qv4arraydata.cpp
@@ -87,65 +87,60 @@ const ArrayVTable SparseArrayData::static_vtbl =
SparseArrayData::length
};
+Q_STATIC_ASSERT(sizeof(ArrayData::Data) == sizeof(SimpleArrayData::Data));
+Q_STATIC_ASSERT(sizeof(ArrayData::Data) == sizeof(SparseArrayData::Data));
-void ArrayData::realloc(Object *o, Type newType, uint offset, uint alloc, bool enforceAttributes)
+void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAttributes)
{
ArrayData *d = o->arrayData();
- uint oldAlloc = 0;
+ uint alloc = 8;
uint toCopy = 0;
- if (alloc < 8)
- alloc = 8;
+ uint offset = 0;
if (d) {
bool hasAttrs = d->attrs();
enforceAttributes |= hasAttrs;
- if (!offset && alloc <= d->alloc() && newType == d->type() && hasAttrs == enforceAttributes)
+ if (requested <= d->alloc() && newType == d->type() && hasAttrs == enforceAttributes)
return;
- oldAlloc = d->alloc();
if (d->type() < Sparse) {
- offset = qMax(offset, static_cast<SimpleArrayData *>(d)->offset());
+ offset = static_cast<SimpleArrayData *>(d)->d()->offset;
toCopy = static_cast<SimpleArrayData *>(d)->len();
} else {
- Q_ASSERT(!offset);
toCopy = d->alloc();
- newType = Sparse;
}
+ if (d->type() > newType)
+ newType = d->type();
}
if (enforceAttributes && newType == Simple)
newType = Complex;
- alloc = qMax(alloc, 2*oldAlloc) + offset;
- size_t size = alloc*sizeof(Value);
+ while (alloc < requested)
+ alloc *= 2;
+ size_t size = sizeof(ArrayData::Data) + (alloc - 1)*sizeof(Value);
if (enforceAttributes)
size += alloc*sizeof(PropertyAttributes);
+ ArrayData *newData;
if (newType < Sparse) {
- size += sizeof(SimpleArrayData::Data);
- SimpleArrayData *newData = static_cast<SimpleArrayData *>(o->engine()->memoryManager->allocManaged(size));
- new (newData->d()) SimpleArrayData::Data(o->engine());
- newData->setAlloc(alloc - offset);
- newData->setType(newType);
- newData->setArrayData(reinterpret_cast<Value *>(newData->d() + 1) + offset);
- newData->setAttrs(enforceAttributes ? reinterpret_cast<PropertyAttributes *>(newData->arrayData() + alloc) + offset : 0);
- newData->offset() = offset;
- newData->len() = d ? static_cast<SimpleArrayData *>(d)->len() : 0;
- o->setArrayData(newData);
+ SimpleArrayData *n = static_cast<SimpleArrayData *>(o->engine()->memoryManager->allocManaged(size));
+ new (n->d()) SimpleArrayData::Data(o->engine());
+ n->d()->offset = 0;
+ n->len() = d ? static_cast<SimpleArrayData *>(d)->len() : 0;
+ newData = n;
} else {
- size += sizeof(SparseArrayData::Data);
- SparseArrayData *newData = static_cast<SparseArrayData *>(o->engine()->memoryManager->allocManaged(size));
- new (newData->d()) SparseArrayData::Data(o->engine());
- newData->setAlloc(alloc);
- newData->setType(newType);
- newData->setArrayData(reinterpret_cast<Value *>(newData->d() + 1));
- newData->setAttrs(enforceAttributes ? reinterpret_cast<PropertyAttributes *>(newData->arrayData() + alloc) : 0);
- o->setArrayData(newData);
+ SparseArrayData *n = static_cast<SparseArrayData *>(o->engine()->memoryManager->allocManaged(size));
+ new (n->d()) SparseArrayData::Data(o->engine());
+ newData = n;
}
+ newData->setAlloc(alloc);
+ newData->setType(newType);
+ newData->setAttrs(enforceAttributes ? reinterpret_cast<PropertyAttributes *>(newData->d()->arrayData + alloc) : 0);
+ o->setArrayData(newData);
if (d) {
- memcpy(o->arrayData()->arrayData(), d->arrayData(), sizeof(Value)*toCopy);
if (enforceAttributes) {
if (d->attrs())
memcpy(o->arrayData()->attrs(), d->attrs(), sizeof(PropertyAttributes)*toCopy);
@@ -153,56 +148,56 @@ void ArrayData::realloc(Object *o, Type newType, uint offset, uint alloc, bool e
for (uint i = 0; i < toCopy; ++i)
o->arrayData()->attrs()[i] = Attr_Data;
}
+
+ if (toCopy > d->d()->alloc - offset) {
+ uint copyFromStart = toCopy - (d->d()->alloc - offset);
+ memcpy(o->arrayData()->d()->arrayData + toCopy - copyFromStart, d->d()->arrayData, sizeof(Value)*copyFromStart);
+ toCopy -= copyFromStart;
+ }
+ memcpy(o->arrayData()->d()->arrayData, d->d()->arrayData + offset, sizeof(Value)*toCopy);
}
if (newType != Sparse)
return;
- SparseArrayData *newData = static_cast<SparseArrayData *>(o->arrayData());
+ SparseArrayData *sparse = static_cast<SparseArrayData *>(o->arrayData());
+
+ uint *lastFree;
if (d && d->type() == Sparse) {
SparseArrayData *old = static_cast<SparseArrayData *>(d);
- newData->setSparse(old->sparse());
+ sparse->setSparse(old->sparse());
old->setSparse(0);
- newData->freeList() = old->freeList();
+ sparse->freeList() = old->freeList();
+ lastFree = &sparse->freeList();
} else {
- newData->setSparse(new SparseArray);
- uint *lastFree = &newData->freeList();
+ sparse->setSparse(new SparseArray);
+ lastFree = &sparse->freeList();
for (uint i = 0; i < toCopy; ++i) {
- if (!newData->arrayData()[i].isEmpty()) {
- SparseArrayNode *n = newData->sparse()->insert(i);
+ if (!sparse->arrayData()[i].isEmpty()) {
+ SparseArrayNode *n = sparse->sparse()->insert(i);
n->value = i;
} else {
*lastFree = i;
- newData->arrayData()[i].tag = Value::Empty_Type;
- lastFree = &newData->arrayData()[i].uint_32;
+ sparse->arrayData()[i].tag = Value::Empty_Type;
+ lastFree = &sparse->arrayData()[i].uint_32;
}
}
}
- uint *lastFree = &newData->freeList();
- for (uint i = toCopy; i < newData->alloc(); ++i) {
- *lastFree = i;
- newData->arrayData()[i].tag = Value::Empty_Type;
- lastFree = &newData->arrayData()[i].uint_32;
+ if (toCopy < sparse->alloc()) {
+ for (uint i = toCopy; i < sparse->alloc(); ++i) {
+ *lastFree = i;
+ sparse->arrayData()[i].tag = Value::Empty_Type;
+ lastFree = &sparse->arrayData()[i].uint_32;
+ }
+ *lastFree = UINT_MAX;
}
- *lastFree = newData->alloc();
-
// ### Could explicitly free the old data
}
-
-void SimpleArrayData::getHeadRoom(Object *o)
-{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData());
- Q_ASSERT(dd);
- Q_ASSERT(!dd->offset());
- uint offset = qMax(dd->len() >> 2, (uint)16);
- realloc(o, Simple, offset, 0, false);
-}
-
ArrayData *SimpleArrayData::reallocate(Object *o, uint n, bool enforceAttributes)
{
- realloc(o, Simple, 0, n, enforceAttributes);
+ realloc(o, Simple, n, enforceAttributes);
return o->arrayData();
}
@@ -211,7 +206,7 @@ void ArrayData::ensureAttributes(Object *o)
if (o->arrayData() && o->arrayData()->attrs())
return;
- ArrayData::realloc(o, Simple, 0, 0, true);
+ ArrayData::realloc(o, Simple, 0, true);
}
@@ -220,7 +215,7 @@ void SimpleArrayData::markObjects(Managed *d, ExecutionEngine *e)
SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
uint l = dd->len();
for (uint i = 0; i < l; ++i)
- dd->arrayData()[i].mark(e);
+ dd->data(i).mark(e);
}
ReturnedValue SimpleArrayData::get(const ArrayData *d, uint index)
@@ -228,7 +223,7 @@ ReturnedValue SimpleArrayData::get(const ArrayData *d, uint index)
const SimpleArrayData *dd = static_cast<const SimpleArrayData *>(d);
if (index >= dd->len())
return Primitive::emptyValue().asReturnedValue();
- return dd->arrayData()[index].asReturnedValue();
+ return dd->data(index).asReturnedValue();
}
bool SimpleArrayData::put(Object *o, uint index, ValueRef value)
@@ -236,7 +231,7 @@ bool SimpleArrayData::put(Object *o, uint index, ValueRef value)
SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData());
Q_ASSERT(index >= dd->len() || !dd->attrs() || !dd->attrs()[index].isAccessor());
// ### honour attributes
- dd->arrayData()[index] = value;
+ dd->data(index) = value;
if (index >= dd->len()) {
if (dd->attrs())
dd->attrs()[index] = Attr_Data;
@@ -252,12 +247,12 @@ bool SimpleArrayData::del(Object *o, uint index)
return true;
if (!dd->attrs() || dd->attrs()[index].isConfigurable()) {
- dd->arrayData()[index] = Primitive::emptyValue();
+ dd->data(index) = Primitive::emptyValue();
if (dd->attrs())
dd->attrs()[index] = Attr_Data;
return true;
}
- if (dd->arrayData()[index].isEmpty())
+ if (dd->data(index).isEmpty())
return true;
return false;
}
@@ -276,20 +271,14 @@ void SimpleArrayData::push_front(Object *o, Value *values, uint n)
{
SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData());
Q_ASSERT(!dd->attrs());
- for (int i = n - 1; i >= 0; --i) {
- if (!dd->offset()) {
- getHeadRoom(o);
- dd = static_cast<SimpleArrayData *>(o->arrayData());
- }
-
-
- --dd->offset();
- --dd->arrayData();
- ++dd->len();
- ++dd->alloc();
- *dd->arrayData() = values[i].asReturnedValue();
+ if (dd->len() + n > dd->alloc()) {
+ realloc(o, Simple, dd->len() + n, false);
+ dd = static_cast<SimpleArrayData *>(o->arrayData());
}
-
+ dd->d()->offset = (dd->d()->offset - n) % dd->d()->alloc;
+ dd->len() += n;
+ for (uint i = 0; i < n; ++i)
+ dd->data(i) = values[i].asReturnedValue();
}
ReturnedValue SimpleArrayData::pop_front(Object *o)
@@ -299,11 +288,9 @@ ReturnedValue SimpleArrayData::pop_front(Object *o)
if (!dd->len())
return Encode::undefined();
- ReturnedValue v = dd->arrayData()[0].isEmpty() ? Encode::undefined() : dd->arrayData()[0].asReturnedValue();
- ++dd->offset();
- ++dd->arrayData();
+ ReturnedValue v = dd->data(0).isEmpty() ? Encode::undefined() : dd->data(0).asReturnedValue();
+ dd->d()->offset = (dd->d()->offset + 1) % dd->d()->alloc;
--dd->len();
- --dd->alloc();
return v;
}
@@ -313,19 +300,17 @@ uint SimpleArrayData::truncate(Object *o, uint newLen)
if (dd->len() < newLen)
return newLen;
- if (dd->attrs()) {
- Value *it = dd->arrayData() + dd->len();
- const Value *begin = dd->arrayData() + newLen;
- while (--it >= begin) {
- if (!it->isEmpty() && !dd->attrs()[it - dd->arrayData()].isConfigurable()) {
- newLen = it - dd->arrayData() + 1;
- break;
- }
- *it = Primitive::emptyValue();
- }
+ if (!dd->attrs()) {
+ dd->len() = newLen;
+ return newLen;
}
- dd->len() = newLen;
- return newLen;
+
+ while (dd->len() > newLen) {
+ if (!dd->data(dd->len() - 1).isEmpty() && !dd->attrs()[dd->len() - 1].isConfigurable())
+ return dd->len();
+ --dd->len();
+ }
+ return dd->len();
}
uint SimpleArrayData::length(const ArrayData *d)
@@ -341,9 +326,9 @@ bool SimpleArrayData::putArray(Object *o, uint index, Value *values, uint n)
dd = static_cast<SimpleArrayData *>(o->arrayData());
}
for (uint i = dd->len(); i < index; ++i)
- dd->arrayData()[i] = Primitive::emptyValue();
+ dd->data(i) = Primitive::emptyValue();
for (uint i = 0; i < n; ++i)
- dd->arrayData()[index + i] = values[i];
+ dd->data(index + i) = values[i];
dd->len() = qMax(dd->len(), index + n);
return true;
}
@@ -385,7 +370,7 @@ void SparseArrayData::markObjects(Managed *d, ExecutionEngine *e)
ArrayData *SparseArrayData::reallocate(Object *o, uint n, bool enforceAttributes)
{
- realloc(o, Sparse, 0, n, enforceAttributes);
+ realloc(o, Sparse, n, enforceAttributes);
return o->arrayData();
}
@@ -397,12 +382,14 @@ uint SparseArrayData::allocate(Object *o, bool doubleSlot)
if (doubleSlot) {
uint *last = &dd->freeList();
while (1) {
- if (*last + 1 >= dd->alloc()) {
+ if (*last == UINT_MAX) {
reallocate(o, o->arrayData()->alloc() + 2, true);
dd = static_cast<SparseArrayData *>(o->arrayData());
last = &dd->freeList();
+ Q_ASSERT(*last != UINT_MAX);
}
+ Q_ASSERT(dd->arrayData()[*last].uint_32 != *last);
if (dd->arrayData()[*last].uint_32 == (*last + 1)) {
// found two slots in a row
uint idx = *last;
@@ -413,11 +400,12 @@ uint SparseArrayData::allocate(Object *o, bool doubleSlot)
last = &dd->arrayData()[*last].uint_32;
}
} else {
- if (dd->alloc() == dd->freeList()) {
- reallocate(o, o->arrayData()->alloc() + 2, false);
+ if (dd->freeList() == UINT_MAX) {
+ reallocate(o, o->arrayData()->alloc() + 1, false);
dd = static_cast<SparseArrayData *>(o->arrayData());
}
uint idx = dd->freeList();
+ Q_ASSERT(idx != UINT_MAX);
dd->freeList() = dd->arrayData()[idx].uint_32;
if (dd->attrs())
dd->attrs()[idx] = Attr_Data;
@@ -427,10 +415,11 @@ uint SparseArrayData::allocate(Object *o, bool doubleSlot)
ReturnedValue SparseArrayData::get(const ArrayData *d, uint index)
{
- SparseArrayNode *n = static_cast<const SparseArrayData *>(d)->sparse()->findNode(index);
- if (!n)
+ const SparseArrayData *s = static_cast<const SparseArrayData *>(d);
+ index = s->mappedIndex(index);
+ if (index == UINT_MAX)
return Primitive::emptyValue().asReturnedValue();
- return d->arrayData()[n->value].asReturnedValue();
+ return s->arrayData()[index].asReturnedValue();
}
bool SparseArrayData::put(Object *o, uint index, ValueRef value)
@@ -438,19 +427,21 @@ bool SparseArrayData::put(Object *o, uint index, ValueRef value)
if (value->isEmpty())
return true;
- SparseArrayNode *n = static_cast<SparseArrayData *>(o->arrayData())->sparse()->insert(index);
+ SparseArrayData *s = static_cast<SparseArrayData *>(o->arrayData());
+ SparseArrayNode *n = s->sparse()->insert(index);
Q_ASSERT(n->value == UINT_MAX || !o->arrayData()->attrs() || !o->arrayData()->attrs()[n->value].isAccessor());
if (n->value == UINT_MAX)
n->value = allocate(o);
- o->arrayData()->arrayData()[n->value] = value;
- if (o->arrayData()->attrs())
- o->arrayData()->attrs()[n->value] = Attr_Data;
+ s->arrayData()[n->value] = value;
+ if (s->attrs())
+ s->attrs()[n->value] = Attr_Data;
return true;
}
bool SparseArrayData::del(Object *o, uint index)
{
SparseArrayData *dd = static_cast<SparseArrayData *>(o->arrayData());
+
SparseArrayNode *n = dd->sparse()->findNode(index);
if (!n)
return true;
@@ -469,12 +460,12 @@ bool SparseArrayData::del(Object *o, uint index)
if (isAccessor) {
// free up both indices
- dd->arrayData()[pidx + 1].tag = Value::Undefined_Type;
+ dd->arrayData()[pidx + 1].tag = Value::Empty_Type;
dd->arrayData()[pidx + 1].uint_32 = static_cast<SparseArrayData *>(dd)->freeList();
dd->arrayData()[pidx].tag = Value::Undefined_Type;
dd->arrayData()[pidx].uint_32 = pidx + 1;
} else {
- dd->arrayData()[pidx].tag = Value::Undefined_Type;
+ dd->arrayData()[pidx].tag = Value::Empty_Type;
dd->arrayData()[pidx].uint_32 = static_cast<SparseArrayData *>(dd)->freeList();
}
@@ -509,21 +500,23 @@ PropertyAttributes SparseArrayData::attribute(const ArrayData *d, uint index)
void SparseArrayData::push_front(Object *o, Value *values, uint n)
{
+ SparseArrayData *d = static_cast<SparseArrayData *>(o->arrayData());
Q_ASSERT(!o->arrayData()->attrs());
for (int i = n - 1; i >= 0; --i) {
uint idx = allocate(o);
- o->arrayData()->arrayData()[idx] = values[i];
- static_cast<SparseArrayData *>(o->arrayData())->sparse()->push_front(idx);
+ d->arrayData()[idx] = values[i];
+ d->sparse()->push_front(idx);
}
}
ReturnedValue SparseArrayData::pop_front(Object *o)
{
+ SparseArrayData *d = static_cast<SparseArrayData *>(o->arrayData());
Q_ASSERT(!o->arrayData()->attrs());
- uint idx = static_cast<SparseArrayData *>(o->arrayData())->sparse()->pop_front();
+ uint idx = d->sparse()->pop_front();
ReturnedValue v;
if (idx != UINT_MAX) {
- v = o->arrayData()->arrayData()[idx].asReturnedValue();
+ v = d->arrayData()[idx].asReturnedValue();
free(o->arrayData(), idx);
} else {
v = Encode::undefined();
@@ -574,14 +567,14 @@ bool SparseArrayData::putArray(Object *o, uint index, Value *values, uint n)
}
-uint ArrayData::append(Object *obj, const ArrayObject *otherObj, uint n)
+uint ArrayData::append(Object *obj, ArrayObject *otherObj, uint n)
{
Q_ASSERT(!obj->arrayData()->hasAttributes());
if (!n)
return obj->getLength();
- const ArrayData *other = otherObj->arrayData();
+ ArrayData *other = otherObj->arrayData();
if (other->isSparse())
obj->initSparseArray();
@@ -591,21 +584,30 @@ uint ArrayData::append(Object *obj, const ArrayObject *otherObj, uint n)
uint oldSize = obj->getLength();
if (other->isSparse()) {
+ SparseArrayData *os = static_cast<SparseArrayData *>(other);
if (otherObj->hasAccessorProperty() && other->hasAttributes()) {
Scope scope(obj->engine());
ScopedValue v(scope);
- for (const SparseArrayNode *it = static_cast<const SparseArrayData *>(other)->sparse()->begin();
- it != static_cast<const SparseArrayData *>(other)->sparse()->end(); it = it->nextNode()) {
- v = otherObj->getValue(reinterpret_cast<Property *>(other->arrayData() + it->value), other->attrs()[it->value]);
+ for (const SparseArrayNode *it = os->sparse()->begin();
+ it != os->sparse()->end(); it = it->nextNode()) {
+ v = otherObj->getValue(reinterpret_cast<Property *>(os->arrayData() + it->value), other->attrs()[it->value]);
obj->arraySet(oldSize + it->key(), v);
}
} else {
for (const SparseArrayNode *it = static_cast<const SparseArrayData *>(other)->sparse()->begin();
- it != static_cast<const SparseArrayData *>(other)->sparse()->end(); it = it->nextNode())
- obj->arraySet(oldSize + it->key(), ValueRef(other->arrayData()[it->value]));
+ it != os->sparse()->end(); it = it->nextNode())
+ obj->arraySet(oldSize + it->key(), ValueRef(os->arrayData()[it->value]));
}
} else {
- obj->arrayPut(oldSize, other->arrayData(), n);
+ SimpleArrayData *os = static_cast<SimpleArrayData *>(other);
+ uint toCopy = n;
+ uint chunk = toCopy;
+ if (chunk > os->alloc() - os->d()->offset)
+ chunk -= os->alloc() - os->d()->offset;
+ obj->arrayPut(oldSize, os->arrayData() + os->d()->offset, chunk);
+ toCopy -= chunk;
+ if (toCopy)
+ obj->arrayPut(oldSize + chunk, os->arrayData(), toCopy);
}
return oldSize + n;
@@ -623,18 +625,19 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor)
if (index >= d->len()) {
// mark possible hole in the array
for (uint i = d->len(); i < index; ++i)
- d->arrayData()[i] = Primitive::emptyValue();
+ d->data(i) = Primitive::emptyValue();
d->len() = index + 1;
}
- return reinterpret_cast<Property *>(o->arrayData()->arrayData() + index);
+ return reinterpret_cast<Property *>(d->d()->arrayData + d->mappedIndex(index));
}
}
o->initSparseArray();
- SparseArrayNode *n = static_cast<SparseArrayData *>(o->arrayData())->sparse()->insert(index);
+ SparseArrayData *s = static_cast<SparseArrayData *>(o->arrayData());
+ SparseArrayNode *n = s->sparse()->insert(index);
if (n->value == UINT_MAX)
n->value = SparseArrayData::allocate(o, isAccessor);
- return reinterpret_cast<Property *>(o->arrayData()->arrayData() + n->value);
+ return reinterpret_cast<Property *>(s->arrayData() + n->value);
}
@@ -737,7 +740,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
if (!len)
return;
- if (!thisObject->arrayData()->length())
+ if (!thisObject->arrayData() || !thisObject->arrayData()->length())
return;
if (!(comparefn->isUndefined() || comparefn->asObject())) {
@@ -757,7 +760,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
return;
thisObject->setArrayData(0);
- ArrayData::realloc(thisObject, ArrayData::Simple, 0, sparse->sparse()->nEntries(), sparse->attrs() ? true : false);
+ ArrayData::realloc(thisObject, ArrayData::Simple, sparse->sparse()->nEntries(), sparse->attrs() ? true : false);
SimpleArrayData *d = static_cast<SimpleArrayData *>(thisObject->arrayData());
SparseArrayNode *n = sparse->sparse()->begin();
@@ -768,7 +771,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
break;
PropertyAttributes a = sparse->attrs() ? sparse->attrs()[n->value] : Attr_Data;
- d->arrayData()[i] = thisObject->getValue(reinterpret_cast<Property *>(sparse->arrayData() + n->value), a);
+ d->data(i) = thisObject->getValue(reinterpret_cast<Property *>(sparse->arrayData() + n->value), a);
d->attrs()[i] = a.isAccessor() ? Attr_Data : a;
n = n->nextNode();
@@ -778,7 +781,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
while (n != sparse->sparse()->end()) {
if (n->value >= len)
break;
- d->arrayData()[i] = sparse->arrayData()[n->value];
+ d->data(i) = sparse->arrayData()[n->value];
n = n->nextNode();
++i;
}
@@ -805,13 +808,13 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
// sort empty values to the end
for (uint i = 0; i < len; i++) {
- if (thisObject->arrayData()->arrayData()[i].isEmpty()) {
+ if (d->data(i).isEmpty()) {
while (--len > i)
- if (!thisObject->arrayData()->arrayData()[len].isEmpty())
+ if (!d->data(len).isEmpty())
break;
- Q_ASSERT(!thisObject->arrayData()->attrs() || !thisObject->arrayData()->attrs()[len].isAccessor());
- thisObject->arrayData()->arrayData()[i] = thisObject->arrayData()->arrayData()[len];
- thisObject->arrayData()->arrayData()[len] = Primitive::emptyValue();
+ Q_ASSERT(!d->attrs() || !d->attrs()[len].isAccessor());
+ d->data(i) = d->data(len);
+ d->data(len) = Primitive::emptyValue();
}
}
@@ -822,7 +825,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
ArrayElementLessThan lessThan(context, thisObject, comparefn);
- Value *begin = thisObject->arrayData()->arrayData();
+ Value *begin = thisObject->arrayData()->d()->arrayData;
sortHelper(begin, begin + len, *begin, lessThan);
#ifdef CHECK_SPARSE_ARRAYS
diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h
index 3b04fe973a..c2deb3e385 100644
--- a/src/qml/jsruntime/qv4arraydata_p.h
+++ b/src/qml/jsruntime/qv4arraydata_p.h
@@ -90,7 +90,15 @@ struct Q_QML_EXPORT ArrayData : public Managed
uint alloc;
Type type;
PropertyAttributes *attrs;
- Value *arrayData;
+ union {
+ uint len;
+ uint freeList;
+ };
+ union {
+ uint offset;
+ SparseArray *sparse;
+ };
+ Value arrayData[1];
};
V4_MANAGED(Managed)
@@ -101,16 +109,13 @@ struct Q_QML_EXPORT ArrayData : public Managed
void setType(Type t) { d()->type = t; }
PropertyAttributes *attrs() const { return d()->attrs; }
void setAttrs(PropertyAttributes *a) { d()->attrs = a; }
- Value *arrayData() const { return d()->arrayData; }
- Value *&arrayData() { return d()->arrayData; }
- void setArrayData(Value *v) { d()->arrayData = v; }
+ const Value *arrayData() const { return &d()->arrayData[0]; }
+ Value *arrayData() { return &d()->arrayData[0]; }
const ArrayVTable *vtable() const { return reinterpret_cast<const ArrayVTable *>(internalClass()->vtable); }
bool isSparse() const { return this && type() == Sparse; }
uint length() const {
- if (!this)
- return 0;
return vtable()->length(this);
}
@@ -123,23 +128,19 @@ struct Q_QML_EXPORT ArrayData : public Managed
}
bool isEmpty(uint i) const {
- if (!this)
- return true;
return (vtable()->get(this, i) == Primitive::emptyValue().asReturnedValue());
}
ReturnedValue get(uint i) const {
- if (!this)
- return Primitive::emptyValue().asReturnedValue();
return vtable()->get(this, i);
}
- inline Property *getProperty(uint index) const;
+ inline Property *getProperty(uint index);
static void ensureAttributes(Object *o);
- static void realloc(Object *o, Type newType, uint offset, uint alloc, bool enforceAttributes);
+ static void realloc(Object *o, Type newType, uint alloc, bool enforceAttributes);
static void sort(ExecutionContext *context, Object *thisObject, const ValueRef comparefn, uint dataLen);
- static uint append(Object *obj, const ArrayObject *otherObj, uint n);
+ static uint append(Object *obj, ArrayObject *otherObj, uint n);
static Property *insert(Object *o, uint index, bool isAccessor = false);
};
@@ -150,17 +151,25 @@ struct Q_QML_EXPORT SimpleArrayData : public ArrayData
Data(ExecutionEngine *engine)
: ArrayData::Data(engine->simpleArrayDataClass)
{}
- uint len;
- uint offset;
};
V4_ARRAYDATA
+ uint mappedIndex(uint index) const { return (index + d()->offset) % d()->alloc; }
+ Value data(uint index) const { return d()->arrayData[mappedIndex(index)]; }
+ Value &data(uint index) { return d()->arrayData[mappedIndex(index)]; }
+
+ Property *getProperty(uint index) {
+ if (index >= len())
+ return 0;
+ index = mappedIndex(index);
+ if (d()->arrayData[index].isEmpty())
+ return 0;
+ return reinterpret_cast<Property *>(d()->arrayData + index);
+ }
+
uint &len() { return d()->len; }
uint len() const { return d()->len; }
- uint &offset() { return d()->offset; }
- uint offset() const { return d()->offset; }
- static void getHeadRoom(Object *o);
static ArrayData *reallocate(Object *o, uint n, bool enforceAttributes);
static void markObjects(Managed *d, ExecutionEngine *e);
@@ -183,9 +192,6 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData
Data(ExecutionEngine *engine)
: ArrayData::Data(engine->emptyClass)
{ setVTable(staticVTable()); }
-
- uint freeList;
- SparseArray *sparse;
};
V4_ARRAYDATA
@@ -197,6 +203,20 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData
static uint allocate(Object *o, bool doubleSlot = false);
static void free(ArrayData *d, uint idx);
+ Property *getProperty(uint index) {
+ SparseArrayNode *n = sparse()->findNode(index);
+ if (!n)
+ return 0;
+ return reinterpret_cast<Property *>(arrayData() + n->value);
+ }
+
+ uint mappedIndex(uint index) const {
+ SparseArrayNode *n = sparse()->findNode(index);
+ if (!n)
+ return UINT_MAX;
+ return n->value;
+ }
+
static void destroy(Managed *d);
static void markObjects(Managed *d, ExecutionEngine *e);
@@ -214,20 +234,14 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData
};
-inline Property *ArrayData::getProperty(uint index) const
+inline Property *ArrayData::getProperty(uint index)
{
- if (!this)
- return 0;
if (type() != Sparse) {
- const SimpleArrayData *that = static_cast<const SimpleArrayData *>(this);
- if (index >= that->len() || arrayData()[index].isEmpty())
- return 0;
- return reinterpret_cast<Property *>(arrayData() + index);
+ SimpleArrayData *that = static_cast<SimpleArrayData *>(this);
+ return that->getProperty(index);
} else {
- SparseArrayNode *n = static_cast<const SparseArrayData *>(this)->sparse()->findNode(index);
- if (!n)
- return 0;
- return reinterpret_cast<Property *>(arrayData() + n->value);
+ SparseArrayData *that = static_cast<SparseArrayData *>(this);
+ return that->getProperty(index);
}
}
diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp
index 7515a839ce..011279ae07 100644
--- a/src/qml/jsruntime/qv4arrayobject.cpp
+++ b/src/qml/jsruntime/qv4arrayobject.cpp
@@ -268,6 +268,7 @@ ReturnedValue ArrayPrototype::method_push(CallContext *ctx)
return Encode::undefined();
instance->arrayCreate();
+ Q_ASSERT(instance->arrayData());
uint len = instance->getLength();
@@ -347,6 +348,7 @@ ReturnedValue ArrayPrototype::method_shift(CallContext *ctx)
return Encode::undefined();
instance->arrayCreate();
+ Q_ASSERT(instance->arrayData());
uint len = instance->getLength();
@@ -534,6 +536,7 @@ ReturnedValue ArrayPrototype::method_unshift(CallContext *ctx)
return Encode::undefined();
instance->arrayCreate();
+ Q_ASSERT(instance->arrayData());
uint len = instance->getLength();
@@ -614,20 +617,17 @@ ReturnedValue ArrayPrototype::method_indexOf(CallContext *ctx)
return Encode(-1);
} else {
Q_ASSERT(instance->arrayType() == ArrayData::Simple || instance->arrayType() == ArrayData::Complex);
- if (len > instance->arrayData()->length())
- len = instance->arrayData()->length();
- Value *val = instance->arrayData()->arrayData();
- Value *end = val + len;
- val += fromIndex;
- while (val < end) {
- if (!val->isEmpty()) {
- value = *val;
- if (scope.hasException())
- return Encode::undefined();
- if (RuntimeHelpers::strictEqual(value, searchValue))
- return Encode((uint)(val - instance->arrayData()->arrayData()));
- }
- ++val;
+ SimpleArrayData *sa = static_cast<SimpleArrayData *>(instance->arrayData());
+ if (len > sa->len())
+ len = sa->len();
+ uint idx = fromIndex;
+ while (idx < len) {
+ value = sa->data(idx);
+ if (scope.hasException())
+ return Encode::undefined();
+ if (RuntimeHelpers::strictEqual(value, searchValue))
+ return Encode(idx);
+ ++idx;
}
}
return Encode(-1);
diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp
index 66601b64e5..e00a705700 100644
--- a/src/qml/jsruntime/qv4dateobject.cpp
+++ b/src/qml/jsruntime/qv4dateobject.cpp
@@ -557,7 +557,13 @@ static inline QString ToString(double t)
{
if (std::isnan(t))
return QStringLiteral("Invalid Date");
- QString str = ToDateTime(t, Qt::LocalTime).toString() + QStringLiteral(" GMT");
+ QDateTime dateTime = ToDateTime(t, Qt::LocalTime);
+
+ // JavaScript knows a year 0, while QDateTime doesn't. So, in order to show the right date we
+ // have to add a year to negative ones here.
+ if (dateTime.date().year() < 0)
+ dateTime = dateTime.addYears(1);
+ QString str = dateTime.toString() + QStringLiteral(" GMT");
double tzoffset = LocalTZA + DaylightSavingTA(t);
if (tzoffset) {
int hours = static_cast<int>(::fabs(tzoffset) / 1000 / 60 / 60);
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp
index cddc45aaf5..f3ad8ef892 100644
--- a/src/qml/jsruntime/qv4functionobject.cpp
+++ b/src/qml/jsruntime/qv4functionobject.cpp
@@ -108,7 +108,7 @@ FunctionObject::Data::Data(InternalClass *ic)
FunctionObject::Data::~Data()
{
if (function)
- function->compilationUnit->deref();
+ function->compilationUnit->release();
}
void FunctionObject::init(String *n, bool createProto)
@@ -226,7 +226,7 @@ ReturnedValue FunctionCtor::construct(Managed *that, CallData *callData)
QV4::Compiler::JSUnitGenerator jsGenerator(&module);
QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));
- QV4::CompiledData::CompilationUnit *compilationUnit = isel->compile();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = isel->compile();
QV4::Function *vmf = compilationUnit->linkToEngine(v4);
return FunctionObject::createScriptFunction(v4->rootContext, vmf)->asReturnedValue();
@@ -298,9 +298,11 @@ ReturnedValue FunctionPrototype::method_apply(CallContext *ctx)
for (quint32 i = 0; i < len; ++i)
callData->args[i] = arr->getIndexed(i);
} else {
- int alen = qMin(len, arr->arrayData()->length());
- if (alen)
- memcpy(callData->args, arr->arrayData()->arrayData(), alen*sizeof(Value));
+ uint alen = arr->arrayData() ? arr->arrayData()->length() : 0;
+ if (alen > len)
+ alen = len;
+ for (uint i = 0; i < alen; ++i)
+ callData->args[i] = static_cast<SimpleArrayData *>(arr->arrayData())->data(i);
for (quint32 i = alen; i < len; ++i)
callData->args[i] = Primitive::undefinedValue();
}
@@ -416,7 +418,7 @@ SimpleScriptFunction::Data::Data(ExecutionContext *scope, Function *function, bo
setVTable(staticVTable());
this->function = function;
- function->compilationUnit->ref();
+ function->compilationUnit->addref();
Q_ASSERT(function);
Q_ASSERT(function->code);
diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp
index 6d4f05d8d4..254666eca2 100644
--- a/src/qml/jsruntime/qv4lookup.cpp
+++ b/src/qml/jsruntime/qv4lookup.cpp
@@ -139,7 +139,7 @@ ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const ValueRef object, co
}
if (idx < UINT_MAX) {
- if (!o->arrayData()->hasAttributes()) {
+ if (o->arrayData() && !o->arrayData()->hasAttributes()) {
ScopedValue v(scope, o->arrayData()->get(idx));
if (!v->isEmpty())
return v->asReturnedValue();
@@ -164,9 +164,10 @@ ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, const ValueRef object, c
Object *o = object->objectValue();
if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
- if (idx < static_cast<SimpleArrayData *>(o->arrayData())->len())
- if (!o->arrayData()->arrayData()[idx].isEmpty())
- return o->arrayData()->arrayData()[idx].asReturnedValue();
+ SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
+ if (idx < s->len())
+ if (!s->data(idx).isEmpty())
+ return s->data(idx).asReturnedValue();
}
return indexedGetterFallback(l, object, index);
@@ -197,8 +198,8 @@ void Lookup::indexedSetterFallback(Lookup *l, const ValueRef object, const Value
if (idx < UINT_MAX) {
if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
- if (s && idx < s->len() && !s->arrayData()[idx].isEmpty()) {
- s->arrayData()[idx] = value;
+ if (idx < s->len() && !s->data(idx).isEmpty()) {
+ s->data(idx) = value;
return;
}
}
@@ -221,8 +222,8 @@ void Lookup::indexedSetterObjectInt(Lookup *l, const ValueRef object, const Valu
Object *o = object->objectValue();
if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
- if (idx < s->len() && !s->arrayData()[idx].isEmpty()) {
- s->arrayData()[idx] = v;
+ if (idx < s->len() && !s->data(idx).isEmpty()) {
+ s->data(idx) = v;
return;
}
}
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp
index 0cb10b1506..b9a4a55b4a 100644
--- a/src/qml/jsruntime/qv4mm.cpp
+++ b/src/qml/jsruntime/qv4mm.cpp
@@ -104,6 +104,7 @@ struct MemoryManager::Data
};
LargeItem *largeItems;
+ std::size_t totalLargeItemsAllocated;
GCDeletable *deletable;
@@ -120,6 +121,7 @@ struct MemoryManager::Data
, maxShift(6)
, maxChunkSize(32*1024)
, largeItems(0)
+ , totalLargeItemsAllocated(0)
, deletable(0)
{
memset(smallItems, 0, sizeof(smallItems));
@@ -185,6 +187,9 @@ Managed *MemoryManager::allocData(std::size_t size)
// doesn't fit into a small bucket
if (size >= MemoryManager::Data::MaxItemSize) {
+ if (m_d->totalLargeItemsAllocated > 8 * 1024 * 1024)
+ runGC();
+
// we use malloc for this
MemoryManager::Data::LargeItem *item = static_cast<MemoryManager::Data::LargeItem *>(
malloc(Q_V4_PROFILE_ALLOC(m_d->engine, size + sizeof(MemoryManager::Data::LargeItem),
@@ -193,6 +198,7 @@ Managed *MemoryManager::allocData(std::size_t size)
item->next = m_d->largeItems;
item->size = size;
m_d->largeItems = item;
+ m_d->totalLargeItemsAllocated += size;
return item->managed();
}
@@ -255,6 +261,15 @@ Managed *MemoryManager::allocData(std::size_t size)
return m;
}
+static void drainMarkStack(QV4::ExecutionEngine *engine, Value *markBase)
+{
+ while (engine->jsStackTop > markBase) {
+ Managed *m = engine->popForGC();
+ Q_ASSERT (m->internalClass()->vtable->markObjects);
+ m->internalClass()->vtable->markObjects(m, engine);
+ }
+}
+
void MemoryManager::mark()
{
Value *markBase = m_d->engine->jsStackTop;
@@ -272,6 +287,9 @@ void MemoryManager::mark()
}
persistent->value.mark(m_d->engine);
persistent = persistent->next;
+
+ if (m_d->engine->jsStackTop >= m_d->engine->jsStackLimit)
+ drainMarkStack(m_d->engine, markBase);
}
collectFromJSStack();
@@ -304,14 +322,12 @@ void MemoryManager::mark()
if (keepAlive)
qobjectWrapper->getPointer()->mark(m_d->engine);
- }
- // now that we marked all roots, start marking recursively and popping from the mark stack
- while (m_d->engine->jsStackTop > markBase) {
- Managed *m = m_d->engine->popForGC();
- Q_ASSERT (m->internalClass()->vtable->markObjects);
- m->internalClass()->vtable->markObjects(m, m_d->engine);
+ if (m_d->engine->jsStackTop >= m_d->engine->jsStackLimit)
+ drainMarkStack(m_d->engine, markBase);
}
+
+ drainMarkStack(m_d->engine, markBase);
}
void MemoryManager::sweep(bool lastSweep)
@@ -466,6 +482,7 @@ void MemoryManager::runGC()
memset(m_d->allocCount, 0, sizeof(m_d->allocCount));
m_d->totalAlloc = 0;
+ m_d->totalLargeItemsAllocated = 0;
}
size_t MemoryManager::getUsedMem() const
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp
index 6d78c89d89..0c61d666ab 100644
--- a/src/qml/jsruntime/qv4object.cpp
+++ b/src/qml/jsruntime/qv4object.cpp
@@ -244,7 +244,7 @@ Property *Object::__getOwnProperty__(String *name, PropertyAttributes *attrs)
Property *Object::__getOwnProperty__(uint index, PropertyAttributes *attrs)
{
- Property *p = arrayData()->getProperty(index);
+ Property *p = arrayData() ? arrayData()->getProperty(index) : 0;
if (p) {
if (attrs)
*attrs = arrayData()->attributes(index);
@@ -289,7 +289,7 @@ Property *Object::__getPropertyDescriptor__(uint index, PropertyAttributes *attr
{
const Object *o = this;
while (o) {
- Property *p = o->arrayData()->getProperty(index);
+ Property *p = o->arrayData() ? o->arrayData()->getProperty(index) : 0;
if (p) {
if (attrs)
*attrs = o->arrayData()->attributes(index);
@@ -355,7 +355,7 @@ bool Object::hasOwnProperty(String *name) const
bool Object::hasOwnProperty(uint index) const
{
- if (!arrayData()->isEmpty(index))
+ if (arrayData() && !arrayData()->isEmpty(index))
return true;
if (isStringObject()) {
String *s = static_cast<const StringObject *>(this)->d()->value.asString();
@@ -414,7 +414,7 @@ PropertyAttributes Object::query(const Managed *m, String *name)
PropertyAttributes Object::queryIndexed(const Managed *m, uint index)
{
const Object *o = static_cast<const Object *>(m);
- if (o->arrayData()->get(index) != Primitive::emptyValue().asReturnedValue())
+ if (o->arrayData() && o->arrayData()->get(index) != Primitive::emptyValue().asReturnedValue())
return o->arrayData()->attributes(index);
if (o->isStringObject()) {
@@ -533,7 +533,8 @@ void Object::advanceIterator(Managed *m, ObjectIterator *it, String *&name, uint
while (it->arrayNode != o->sparseEnd()) {
int k = it->arrayNode->key();
uint pidx = it->arrayNode->value;
- Property *p = reinterpret_cast<Property *>(o->arrayData()->arrayData() + pidx);
+ SparseArrayData *sa = static_cast<SparseArrayData *>(o->arrayData());
+ Property *p = reinterpret_cast<Property *>(sa->arrayData() + pidx);
it->arrayNode = it->arrayNode->nextNode();
PropertyAttributes a = o->arrayData()->attributes(k);
if (!(it->flags & ObjectIterator::EnumerableOnly) || a.isEnumerable()) {
@@ -549,14 +550,15 @@ void Object::advanceIterator(Managed *m, ObjectIterator *it, String *&name, uint
}
// dense arrays
while (it->arrayIndex < o->arrayData()->length()) {
- Value *val = o->arrayData()->arrayData() + it->arrayIndex;
+ SimpleArrayData *sa = static_cast<SimpleArrayData *>(o->arrayData());
+ Value &val = sa->data(it->arrayIndex);
PropertyAttributes a = o->arrayData()->attributes(it->arrayIndex);
++it->arrayIndex;
- if (!val->isEmpty()
+ if (!val.isEmpty()
&& (!(it->flags & ObjectIterator::EnumerableOnly) || a.isEnumerable())) {
*index = it->arrayIndex - 1;
*attrs = a;
- pd->value = *val;
+ pd->value = val;
return;
}
}
@@ -616,7 +618,7 @@ ReturnedValue Object::internalGetIndexed(uint index, bool *hasProperty)
PropertyAttributes attrs;
Object *o = this;
while (o) {
- Property *p = o->arrayData()->getProperty(index);
+ Property *p = o->arrayData() ? o->arrayData()->getProperty(index) : 0;
if (p) {
pd = p;
attrs = o->arrayData()->attributes(index);
@@ -736,7 +738,7 @@ void Object::internalPutIndexed(uint index, const ValueRef value)
PropertyAttributes attrs;
- Property *pd = arrayData()->getProperty(index);
+ Property *pd = arrayData() ? arrayData()->getProperty(index) : 0;
if (pd)
attrs = arrayData()->attributes(index);
@@ -923,7 +925,7 @@ bool Object::defineOwnProperty2(ExecutionContext *ctx, uint index, const Propert
Property *current = 0;
// Clause 1
- {
+ if (arrayData()) {
current = arrayData()->getProperty(index);
if (!current && isStringObject())
current = static_cast<StringObject *>(this)->getIndex(index);
@@ -960,12 +962,12 @@ bool Object::__defineOwnProperty__(ExecutionContext *ctx, uint index, String *me
if (attrs.isEmpty())
return true;
- Property *current;
+ Property *current = 0;
PropertyAttributes cattrs;
if (member) {
current = propertyAt(index);
cattrs = internalClass()->propertyData[index];
- } else {
+ } else if (arrayData()) {
current = arrayData()->getProperty(index);
cattrs = arrayData()->attributes(index);
}
@@ -998,6 +1000,7 @@ bool Object::__defineOwnProperty__(ExecutionContext *ctx, uint index, String *me
if (!member) {
// need to convert the array and the slot
initSparseArray();
+ Q_ASSERT(arrayData());
setArrayAttributes(index, cattrs);
current = arrayData()->getProperty(index);
}
@@ -1073,14 +1076,14 @@ void Object::copyArrayData(Object *other)
} else if (other->hasAccessorProperty() && other->arrayData()->attrs() && other->arrayData()->isSparse()){
// do it the slow way
ScopedValue v(scope);
- for (const SparseArrayNode *it = static_cast<const SparseArrayData *>(other->arrayData())->sparse()->begin();
- it != static_cast<const SparseArrayData *>(other->arrayData())->sparse()->end(); it = it->nextNode()) {
- v = other->getValue(reinterpret_cast<Property *>(other->arrayData()->arrayData() + it->value), other->arrayData()->attrs()[it->value]);
+ SparseArrayData *osa = static_cast<SparseArrayData *>(other->arrayData());
+ for (const SparseArrayNode *it = osa->sparse()->begin(); it != osa->sparse()->end(); it = it->nextNode()) {
+ v = other->getValue(reinterpret_cast<Property *>(osa->arrayData() + it->value), other->arrayData()->attrs()[it->value]);
arraySet(it->key(), v);
}
} else {
Q_ASSERT(!arrayData() && other->arrayData());
- ArrayData::realloc(this, other->arrayData()->type(), 0, other->arrayData()->alloc(), other->arrayData()->attrs());
+ ArrayData::realloc(this, other->arrayData()->type(), other->arrayData()->alloc(), false);
if (other->arrayType() == ArrayData::Sparse) {
SparseArrayData *od = static_cast<SparseArrayData *>(other->arrayData());
SparseArrayData *dd = static_cast<SparseArrayData *>(arrayData());
@@ -1089,9 +1092,9 @@ void Object::copyArrayData(Object *other)
} else {
SimpleArrayData *d = static_cast<SimpleArrayData *>(arrayData());
d->len() = static_cast<SimpleArrayData *>(other->arrayData())->len();
- d->offset() = 0;
+ d->d()->offset = static_cast<SimpleArrayData *>(other->arrayData())->d()->offset;
}
- memcpy(arrayData()->arrayData(), other->arrayData()->arrayData(), arrayData()->alloc()*sizeof(Value));
+ memcpy(arrayData()->d()->arrayData, other->arrayData()->d()->arrayData, arrayData()->alloc()*sizeof(Value));
}
setArrayLengthUnchecked(other->getLength());
}
@@ -1132,7 +1135,7 @@ void Object::initSparseArray()
if (arrayType() == ArrayData::Sparse)
return;
- ArrayData::realloc(this, ArrayData::Sparse, 0, 0, false);
+ ArrayData::realloc(this, ArrayData::Sparse, 0, false);
}
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index 77debf121c..4e9d1527c2 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -114,8 +114,7 @@ struct Q_QML_EXPORT Object: Managed {
Members &memberData() { return d()->memberData; }
const Members &memberData() const { return d()->memberData; }
- const ArrayData *arrayData() const { return d()->arrayData; }
- ArrayData *arrayData() { return d()->arrayData; }
+ ArrayData *arrayData() const { return d()->arrayData; }
void setArrayData(ArrayData *a) { d()->arrayData = a; }
Property *propertyAt(uint index) const { return reinterpret_cast<Property *>(memberData().data() + index); }
@@ -222,12 +221,12 @@ public:
}
inline void arrayReserve(uint n) {
- ArrayData::realloc(this, ArrayData::Simple, 0, n, false);
+ ArrayData::realloc(this, ArrayData::Simple, n, false);
}
void arrayCreate() {
if (!arrayData())
- ArrayData::realloc(this, ArrayData::Simple, 0, 0, false);
+ ArrayData::realloc(this, ArrayData::Simple, 0, false);
#ifdef CHECK_SPARSE_ARRAYS
initSparseArray();
#endif
diff --git a/src/qml/jsruntime/qv4objectiterator.cpp b/src/qml/jsruntime/qv4objectiterator.cpp
index daee44cfb6..f9038472df 100644
--- a/src/qml/jsruntime/qv4objectiterator.cpp
+++ b/src/qml/jsruntime/qv4objectiterator.cpp
@@ -46,17 +46,7 @@ ObjectIterator::ObjectIterator(Value *scratch1, Value *scratch2, Object *o, uint
, memberIndex(0)
, flags(flags)
{
- object->o = o;
- current->o = o;
-#if QT_POINTER_SIZE == 4
- object->tag = QV4::Value::Managed_Type;
- current->tag = QV4::Value::Managed_Type;
-#endif
-
- if (object->as<ArgumentsObject>()) {
- Scope scope(object->engine());
- Scoped<ArgumentsObject> (scope, object->asReturnedValue())->fullyCreate();
- }
+ init(o);
}
ObjectIterator::ObjectIterator(Scope &scope, Object *o, uint flags)
@@ -67,8 +57,27 @@ ObjectIterator::ObjectIterator(Scope &scope, Object *o, uint flags)
, memberIndex(0)
, flags(flags)
{
+ init(o);
+}
+
+ObjectIterator::ObjectIterator(Value *scratch1, Value *scratch2, uint flags)
+ : object(scratch1)
+ , current(scratch2)
+ , arrayNode(0)
+ , arrayIndex(0)
+ , memberIndex(0)
+ , flags(flags)
+{
+ object->o = (Object*)0;
+ current->o = (Object*)0;
+ // Caller needs to call init!
+}
+
+void ObjectIterator::init(Object *o)
+{
object->o = o;
current->o = o;
+
#if QT_POINTER_SIZE == 4
object->tag = QV4::Value::Managed_Type;
current->tag = QV4::Value::Managed_Type;
diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h
index 4bb164ed0c..3ed73b5c08 100644
--- a/src/qml/jsruntime/qv4objectiterator_p.h
+++ b/src/qml/jsruntime/qv4objectiterator_p.h
@@ -50,6 +50,7 @@ struct ExecutionContext;
struct Property;
struct String;
struct InternalClass;
+struct ForEachIteratorObject;
struct Q_QML_EXPORT ObjectIterator
{
@@ -68,10 +69,14 @@ struct Q_QML_EXPORT ObjectIterator
ObjectIterator(Value *scratch1, Value *scratch2, Object *o, uint flags);
ObjectIterator(Scope &scope, Object *o, uint flags);
+ void init(Object *o);
void next(String *&name, uint *index, Property *pd, PropertyAttributes *attributes = 0);
ReturnedValue nextPropertyName(ValueRef value);
ReturnedValue nextPropertyNameAsString(ValueRef value);
ReturnedValue nextPropertyNameAsString();
+private:
+ friend struct ForEachIteratorObject;
+ ObjectIterator(Value *scratch1, Value *scratch2, uint flags); // Constructor that requires calling init()
};
struct ForEachIteratorObject: Object {
diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp
index a1c61307d1..9cbf4b204e 100644
--- a/src/qml/jsruntime/qv4objectproto.cpp
+++ b/src/qml/jsruntime/qv4objectproto.cpp
@@ -329,11 +329,11 @@ ReturnedValue ObjectPrototype::method_isSealed(CallContext *ctx)
if (!o->arrayData() || !o->arrayData()->length())
return Encode(true);
- if (o->arrayData()->length() && !o->arrayData()->attrs())
+ Q_ASSERT(o->arrayData() && o->arrayData()->length());
+ if (!o->arrayData()->attrs())
return Encode(false);
for (uint i = 0; i < o->arrayData()->alloc(); ++i) {
- // ### Fix for sparse arrays
if (!o->arrayData()->isEmpty(i))
if (o->arrayData()->attributes(i).isConfigurable())
return Encode(false);
@@ -355,14 +355,14 @@ ReturnedValue ObjectPrototype::method_isFrozen(CallContext *ctx)
if (o->internalClass() != o->internalClass()->frozen())
return Encode(false);
- if (!o->arrayData()->length())
+ if (!o->arrayData() || !o->arrayData()->length())
return Encode(true);
- if (o->arrayData()->length() && !o->arrayData()->attrs())
+ Q_ASSERT(o->arrayData() && o->arrayData()->length());
+ if (!o->arrayData()->attrs())
return Encode(false);
for (uint i = 0; i < o->arrayData()->alloc(); ++i) {
- // ### Fix for sparse arrays
if (!o->arrayData()->isEmpty(i))
if (o->arrayData()->attributes(i).isConfigurable() || o->arrayData()->attributes(i).isWritable())
return Encode(false);
diff --git a/src/qml/jsruntime/qv4profiling_p.h b/src/qml/jsruntime/qv4profiling_p.h
index 8224f8a851..7c66ee0049 100644
--- a/src/qml/jsruntime/qv4profiling_p.h
+++ b/src/qml/jsruntime/qv4profiling_p.h
@@ -80,23 +80,23 @@ public:
FunctionCall(Function *function, qint64 start, qint64 end) :
m_function(function), m_start(start), m_end(end)
- { m_function->compilationUnit->ref(); }
+ { m_function->compilationUnit->addref(); }
FunctionCall(const FunctionCall &other) :
m_function(other.m_function), m_start(other.m_start), m_end(other.m_end)
- { m_function->compilationUnit->ref(); }
+ { m_function->compilationUnit->addref(); }
~FunctionCall()
- { m_function->compilationUnit->deref(); }
+ { m_function->compilationUnit->release(); }
FunctionCall &operator=(const FunctionCall &other) {
if (&other != this) {
if (m_function)
- m_function->compilationUnit->deref();
+ m_function->compilationUnit->release();
m_function = other.m_function;
m_start = other.m_start;
m_end = other.m_end;
- m_function->compilationUnit->ref();
+ m_function->compilationUnit->addref();
}
return *this;
}
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 55047e1cf9..048ff935bf 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -580,7 +580,7 @@ ReturnedValue Runtime::getElement(ExecutionContext *ctx, const ValueRef object,
}
if (idx < UINT_MAX) {
- if (!o->arrayData()->hasAttributes()) {
+ if (o->arrayData() && !o->arrayData()->hasAttributes()) {
ScopedValue v(scope, o->arrayData()->get(idx));
if (!v->isEmpty())
return v->asReturnedValue();
@@ -606,8 +606,8 @@ void Runtime::setElement(ExecutionContext *ctx, const ValueRef object, const Val
if (idx < UINT_MAX) {
if (o->arrayType() == ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
- if (s && idx < s->len() && !s->arrayData()[idx].isEmpty()) {
- s->arrayData()[idx] = value;
+ if (s && idx < s->len() && !s->data(idx).isEmpty()) {
+ s->data(idx) = value;
return;
}
}
diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp
index 8e91c0e6a5..fa4b4b1894 100644
--- a/src/qml/jsruntime/qv4script.cpp
+++ b/src/qml/jsruntime/qv4script.cpp
@@ -62,7 +62,7 @@ QmlBindingWrapper::Data::Data(ExecutionContext *scope, Function *f, Object *qml)
setVTable(staticVTable());
function = f;
if (function)
- function->compilationUnit->ref();
+ function->compilationUnit->addref();
needsActivation = function ? function->needsActivation() : false;
Scope s(scope);
@@ -163,14 +163,9 @@ struct CompilationUnitHolder : public Object
: Object::Data(engine)
, unit(unit)
{
- unit->ref();
setVTable(staticVTable());
}
- ~Data()
- {
- unit->deref();
- }
- QV4::CompiledData::CompilationUnit *unit;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> unit;
};
V4_OBJECT(Object)
@@ -264,7 +259,7 @@ void Script::parse()
QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));
if (inheritContext)
isel->setUseFastLookups(false);
- QV4::CompiledData::CompilationUnit *compilationUnit = isel->compile();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = isel->compile();
vmFunction = compilationUnit->linkToEngine(v4);
ScopedObject holder(valueScope, v4->memoryManager->alloc<CompilationUnitHolder>(v4, compilationUnit));
compilationUnitHolder = holder.asReturnedValue();
@@ -313,7 +308,7 @@ Function *Script::function()
return vmFunction;
}
-QV4::CompiledData::CompilationUnit *Script::precompile(IR::Module *module, Compiler::JSUnitGenerator *unitGenerator, ExecutionEngine *engine, const QUrl &url, const QString &source, QList<QQmlError> *reportedErrors)
+QQmlRefPointer<QV4::CompiledData::CompilationUnit> Script::precompile(IR::Module *module, Compiler::JSUnitGenerator *unitGenerator, ExecutionEngine *engine, const QUrl &url, const QString &source, QList<QQmlError> *reportedErrors)
{
using namespace QQmlJS;
using namespace QQmlJS::AST;
diff --git a/src/qml/jsruntime/qv4script_p.h b/src/qml/jsruntime/qv4script_p.h
index 28ac5f3e01..ed93ce49ae 100644
--- a/src/qml/jsruntime/qv4script_p.h
+++ b/src/qml/jsruntime/qv4script_p.h
@@ -122,7 +122,7 @@ struct Q_QML_EXPORT Script {
Function *function();
- static QV4::CompiledData::CompilationUnit *precompile(IR::Module *module, Compiler::JSUnitGenerator *unitGenerator, ExecutionEngine *engine, const QUrl &url, const QString &source, QList<QQmlError> *reportedErrors = 0);
+ static QQmlRefPointer<CompiledData::CompilationUnit> precompile(IR::Module *module, Compiler::JSUnitGenerator *unitGenerator, ExecutionEngine *engine, const QUrl &url, const QString &source, QList<QQmlError> *reportedErrors = 0);
static ReturnedValue evaluate(ExecutionEngine *engine, const QString &script, Object *scopeObject);
};
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index de4fec4d56..616e3b3166 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -1,21 +1,31 @@
----------------------------------------------------------------------------
--
--- Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+-- Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-- Contact: http://www.qt-project.org/legal
--
-- This file is part of the QtQml module of the Qt Toolkit.
--
--- $QT_BEGIN_LICENSE:LGPL-ONLY$
+-- $QT_BEGIN_LICENSE:LGPL21$
+-- Commercial License Usage
+-- Licensees holding valid commercial Qt licenses may use this file in
+-- accordance with the commercial license agreement provided with the
+-- Software or, alternatively, in accordance with the terms contained in
+-- a written agreement between you and Digia. For licensing terms and
+-- conditions see http://qt.digia.com/licensing. For further information
+-- use the contact form at http://qt.digia.com/contact-us.
+--
-- GNU Lesser General Public License Usage
--- This file may be used under the terms of the GNU Lesser
--- General Public License version 2.1 as published by the Free Software
--- Foundation and appearing in the file LICENSE.LGPL included in the
--- packaging of this file. Please review the following information to
--- ensure the GNU Lesser General Public License version 2.1 requirements
--- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+-- Alternatively, this file may be used under the terms of the GNU Lesser
+-- General Public License version 2.1 or version 3 as published by the Free
+-- Software Foundation and appearing in the file LICENSE.LGPLv21 and
+-- LICENSE.LGPLv3 included in the packaging of this file. Please review the
+-- following information to ensure the GNU Lesser General Public License
+-- requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+-- http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
--
--- If you have questions regarding the use of this file, please contact
--- us via http://www.qt-project.org/.
+-- In addition, as a special exception, Digia gives you certain additional
+-- rights. These rights are described in the Digia Qt LGPL Exception
+-- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
--
-- $QT_END_LICENSE$
--
@@ -89,41 +99,33 @@
/./****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtQml module of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
+** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
+** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
** $QT_END_LICENSE$
**
****************************************************************************/
@@ -142,41 +144,33 @@
/:/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtQml module of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
+** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
+** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
** $QT_END_LICENSE$
**
****************************************************************************/
@@ -1090,6 +1084,31 @@ case $rule_number: {
} break;
./
+UiObjectMember: T_READONLY T_PROPERTY UiPropertyType JsIdentifier T_COLON UiQualifiedId UiObjectInitializer ;
+/.
+case $rule_number: {
+ AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(3), stringRef(4));
+ node->isReadonlyMember = true;
+ node->readonlyToken = loc(1);
+ node->propertyToken = loc(2);
+ node->typeToken = loc(3);
+ node->identifierToken = loc(4);
+ node->semicolonToken = loc(5); // insert a fake ';' before ':'
+
+ AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(4));
+ propertyName->identifierToken = loc(4);
+ propertyName->next = 0;
+
+ AST::UiObjectBinding *binding = new (pool) AST::UiObjectBinding(
+ propertyName, sym(6).UiQualifiedId, sym(7).UiObjectInitializer);
+ binding->colonToken = loc(5);
+
+ node->binding = binding;
+
+ sym(1).Node = node;
+} break;
+./
+
UiObjectMember: FunctionDeclaration ;
/.
case $rule_number: {
diff --git a/src/qml/parser/qqmljsgrammar.cpp b/src/qml/parser/qqmljsgrammar.cpp
index d3fb3f8d1f..2600a5e14c 100644
--- a/src/qml/parser/qqmljsgrammar.cpp
+++ b/src/qml/parser/qqmljsgrammar.cpp
@@ -57,35 +57,35 @@ const short QQmlJSGrammar::lhs [] = {
130, 130, 130, 130, 130, 130, 130, 111, 138, 138,
138, 139, 139, 140, 140, 111, 111, 111, 111, 111,
111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
- 111, 111, 124, 124, 124, 124, 124, 124, 124, 143,
+ 111, 111, 111, 124, 124, 124, 124, 124, 124, 124,
143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 129, 145, 145,
- 145, 145, 144, 144, 149, 149, 149, 147, 147, 150,
- 150, 150, 150, 153, 153, 153, 153, 153, 153, 153,
+ 143, 143, 143, 143, 143, 143, 143, 143, 129, 145,
+ 145, 145, 145, 144, 144, 149, 149, 149, 147, 147,
+ 150, 150, 150, 150, 153, 153, 153, 153, 153, 153,
153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
- 153, 153, 153, 153, 154, 154, 120, 120, 120, 120,
- 120, 157, 157, 158, 158, 158, 158, 156, 156, 159,
- 159, 160, 160, 161, 161, 161, 162, 162, 162, 162,
- 162, 162, 162, 162, 162, 162, 163, 163, 163, 163,
- 164, 164, 164, 165, 165, 165, 165, 166, 166, 166,
- 166, 166, 166, 166, 167, 167, 167, 167, 167, 167,
- 168, 168, 168, 168, 168, 169, 169, 169, 169, 169,
- 170, 170, 171, 171, 172, 172, 173, 173, 174, 174,
- 175, 175, 176, 176, 177, 177, 178, 178, 179, 179,
- 180, 180, 181, 181, 148, 148, 182, 182, 183, 183,
+ 153, 153, 153, 153, 153, 154, 154, 120, 120, 120,
+ 120, 120, 157, 157, 158, 158, 158, 158, 156, 156,
+ 159, 159, 160, 160, 161, 161, 161, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 163, 163, 163,
+ 163, 164, 164, 164, 165, 165, 165, 165, 166, 166,
+ 166, 166, 166, 166, 166, 167, 167, 167, 167, 167,
+ 167, 168, 168, 168, 168, 168, 169, 169, 169, 169,
+ 169, 170, 170, 171, 171, 172, 172, 173, 173, 174,
+ 174, 175, 175, 176, 176, 177, 177, 178, 178, 179,
+ 179, 180, 180, 181, 181, 148, 148, 182, 182, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
- 109, 109, 184, 184, 185, 185, 186, 186, 108, 108,
+ 183, 109, 109, 184, 184, 185, 185, 186, 186, 108,
108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 131, 195, 195, 194, 194, 142, 142,
- 196, 196, 197, 197, 199, 199, 198, 200, 203, 201,
- 201, 204, 202, 202, 132, 133, 133, 134, 134, 187,
- 187, 187, 187, 187, 187, 187, 187, 188, 188, 188,
- 188, 189, 189, 189, 189, 190, 190, 135, 136, 205,
- 205, 208, 208, 206, 206, 209, 207, 191, 192, 192,
- 137, 137, 137, 210, 211, 193, 193, 212, 141, 155,
- 155, 213, 213, 152, 152, 151, 151, 214, 112, 112,
- 215, 215, 110, 110, 146, 146, 216};
+ 108, 108, 108, 108, 131, 195, 195, 194, 194, 142,
+ 142, 196, 196, 197, 197, 199, 199, 198, 200, 203,
+ 201, 201, 204, 202, 202, 132, 133, 133, 134, 134,
+ 187, 187, 187, 187, 187, 187, 187, 187, 188, 188,
+ 188, 188, 189, 189, 189, 189, 190, 190, 135, 136,
+ 205, 205, 208, 208, 206, 206, 209, 207, 191, 192,
+ 192, 137, 137, 137, 210, 211, 193, 193, 212, 141,
+ 155, 155, 213, 213, 152, 152, 151, 151, 214, 112,
+ 112, 215, 215, 110, 110, 146, 146, 216};
const short QQmlJSGrammar::rhs [] = {
2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
@@ -95,110 +95,110 @@ const short QQmlJSGrammar::rhs [] = {
1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
1, 0, 1, 2, 4, 6, 6, 3, 3, 7,
7, 4, 4, 5, 5, 5, 6, 6, 10, 6,
+ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 3, 3, 4, 5, 3, 4, 3, 1, 1, 2,
- 3, 4, 1, 2, 3, 7, 8, 1, 3, 1,
+ 2, 3, 3, 4, 5, 3, 4, 3, 1, 1,
+ 2, 3, 4, 1, 2, 3, 7, 8, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 4, 3,
- 5, 1, 2, 4, 4, 4, 3, 0, 1, 1,
- 3, 1, 1, 1, 2, 2, 1, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 3, 3, 3,
- 1, 3, 3, 1, 3, 3, 3, 1, 3, 3,
- 3, 3, 3, 3, 1, 3, 3, 3, 3, 3,
- 1, 3, 3, 3, 3, 1, 3, 3, 3, 3,
- 1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
- 1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
- 1, 5, 1, 5, 1, 3, 1, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
+ 3, 5, 1, 2, 4, 4, 4, 3, 0, 1,
+ 1, 3, 1, 1, 1, 2, 2, 1, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 3, 3,
+ 3, 1, 3, 3, 1, 3, 3, 3, 1, 3,
+ 3, 3, 3, 3, 3, 1, 3, 3, 3, 3,
+ 3, 1, 3, 3, 3, 3, 1, 3, 3, 3,
+ 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 1, 5, 1, 5, 1, 3, 1, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 3, 0, 1, 1, 3, 0, 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, 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, 7, 5, 9, 10, 7, 8, 2, 2, 3,
- 3, 2, 2, 3, 3, 3, 3, 5, 5, 3,
- 5, 1, 2, 0, 1, 4, 3, 3, 3, 3,
- 3, 3, 4, 5, 2, 2, 2, 1, 8, 8,
- 7, 1, 3, 0, 1, 0, 1, 1, 1, 1,
- 1, 2, 1, 1, 0, 1, 2};
+ 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, 7, 5, 9, 10, 7, 8, 2, 2,
+ 3, 3, 2, 2, 3, 3, 3, 3, 5, 5,
+ 3, 5, 1, 2, 0, 1, 4, 3, 3, 3,
+ 3, 3, 3, 4, 5, 2, 2, 2, 1, 8,
+ 8, 7, 1, 3, 0, 1, 0, 1, 1, 1,
+ 1, 1, 2, 1, 1, 0, 1, 2};
const short QQmlJSGrammar::action_default [] = {
- 0, 0, 28, 0, 0, 0, 28, 0, 184, 251,
- 215, 223, 219, 163, 235, 211, 3, 148, 81, 164,
- 227, 231, 152, 181, 162, 167, 147, 201, 188, 0,
- 88, 89, 84, 0, 78, 73, 355, 0, 0, 0,
- 0, 86, 0, 0, 82, 85, 77, 0, 0, 74,
- 76, 79, 75, 87, 80, 0, 83, 0, 0, 177,
- 0, 0, 164, 183, 166, 165, 0, 0, 0, 179,
- 180, 178, 182, 0, 212, 0, 0, 0, 0, 202,
- 0, 0, 0, 0, 0, 0, 192, 0, 0, 0,
- 186, 187, 185, 190, 194, 193, 191, 189, 204, 203,
- 205, 0, 220, 0, 216, 0, 0, 158, 145, 157,
- 146, 114, 115, 116, 141, 117, 142, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 143, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 144, 0, 0, 156, 252, 159, 0, 160, 0,
- 161, 155, 0, 248, 241, 239, 246, 247, 245, 244,
- 250, 243, 242, 240, 249, 236, 0, 224, 0, 0,
- 228, 0, 0, 232, 0, 0, 158, 150, 0, 149,
- 0, 154, 168, 0, 344, 344, 345, 0, 342, 0,
- 343, 0, 346, 259, 266, 265, 273, 261, 0, 262,
- 0, 347, 0, 354, 263, 264, 81, 269, 267, 351,
- 348, 353, 270, 0, 281, 0, 0, 0, 0, 338,
- 0, 355, 253, 295, 0, 0, 0, 282, 0, 0,
- 271, 272, 0, 260, 268, 296, 297, 0, 344, 0,
- 0, 346, 0, 339, 340, 0, 328, 352, 0, 312,
- 313, 314, 315, 0, 308, 309, 310, 311, 336, 337,
- 0, 0, 0, 0, 0, 300, 301, 302, 257, 255,
- 217, 225, 221, 237, 213, 258, 0, 164, 229, 233,
- 206, 195, 0, 0, 214, 0, 0, 0, 0, 207,
- 0, 0, 0, 0, 0, 199, 197, 200, 198, 196,
- 209, 208, 210, 0, 222, 0, 218, 0, 256, 164,
- 0, 238, 253, 254, 0, 253, 0, 0, 304, 0,
- 0, 0, 306, 0, 226, 0, 0, 230, 0, 0,
- 234, 293, 0, 285, 294, 288, 0, 292, 0, 253,
- 286, 0, 253, 0, 0, 305, 0, 0, 0, 307,
- 0, 0, 0, 299, 0, 298, 81, 108, 356, 0,
- 0, 113, 275, 278, 0, 114, 281, 117, 142, 119,
- 120, 84, 124, 125, 78, 126, 129, 82, 85, 253,
- 79, 87, 132, 80, 134, 83, 136, 137, 282, 139,
- 140, 144, 0, 110, 109, 112, 96, 111, 95, 0,
- 105, 276, 274, 0, 0, 0, 346, 0, 106, 152,
- 153, 158, 0, 151, 0, 316, 317, 0, 344, 0,
- 0, 346, 0, 107, 0, 0, 0, 319, 324, 322,
- 325, 0, 0, 323, 324, 0, 320, 0, 321, 277,
- 327, 0, 277, 326, 0, 329, 330, 0, 277, 331,
- 332, 0, 0, 333, 0, 0, 0, 334, 335, 170,
- 169, 0, 0, 0, 303, 0, 0, 0, 318, 290,
- 283, 0, 291, 287, 0, 289, 279, 0, 280, 284,
- 0, 0, 346, 0, 341, 99, 0, 0, 103, 90,
- 0, 92, 101, 0, 93, 102, 104, 94, 100, 91,
- 0, 97, 174, 172, 176, 173, 171, 175, 349, 6,
- 350, 4, 2, 71, 98, 0, 0, 74, 76, 75,
- 37, 5, 0, 72, 0, 51, 50, 49, 0, 0,
+ 0, 0, 28, 0, 0, 0, 28, 0, 185, 252,
+ 216, 224, 220, 164, 236, 212, 3, 149, 82, 165,
+ 228, 232, 153, 182, 163, 168, 148, 202, 189, 0,
+ 89, 90, 85, 0, 79, 74, 356, 0, 0, 0,
+ 0, 87, 0, 0, 83, 86, 78, 0, 0, 75,
+ 77, 80, 76, 88, 81, 0, 84, 0, 0, 178,
+ 0, 0, 165, 184, 167, 166, 0, 0, 0, 180,
+ 181, 179, 183, 0, 213, 0, 0, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 193, 0, 0, 0,
+ 187, 188, 186, 191, 195, 194, 192, 190, 205, 204,
+ 206, 0, 221, 0, 217, 0, 0, 159, 146, 158,
+ 147, 115, 116, 117, 142, 118, 143, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 144, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 141, 145, 0, 0, 157, 253, 160, 0, 161, 0,
+ 162, 156, 0, 249, 242, 240, 247, 248, 246, 245,
+ 251, 244, 243, 241, 250, 237, 0, 225, 0, 0,
+ 229, 0, 0, 233, 0, 0, 159, 151, 0, 150,
+ 0, 155, 169, 0, 345, 345, 346, 0, 343, 0,
+ 344, 0, 347, 260, 267, 266, 274, 262, 0, 263,
+ 0, 348, 0, 355, 264, 265, 82, 270, 268, 352,
+ 349, 354, 271, 0, 282, 0, 0, 0, 0, 339,
+ 0, 356, 254, 296, 0, 0, 0, 283, 0, 0,
+ 272, 273, 0, 261, 269, 297, 298, 0, 345, 0,
+ 0, 347, 0, 340, 341, 0, 329, 353, 0, 313,
+ 314, 315, 316, 0, 309, 310, 311, 312, 337, 338,
+ 0, 0, 0, 0, 0, 301, 302, 303, 258, 256,
+ 218, 226, 222, 238, 214, 259, 0, 165, 230, 234,
+ 207, 196, 0, 0, 215, 0, 0, 0, 0, 208,
+ 0, 0, 0, 0, 0, 200, 198, 201, 199, 197,
+ 210, 209, 211, 0, 223, 0, 219, 0, 257, 165,
+ 0, 239, 254, 255, 0, 254, 0, 0, 305, 0,
+ 0, 0, 307, 0, 227, 0, 0, 231, 0, 0,
+ 235, 294, 0, 286, 295, 289, 0, 293, 0, 254,
+ 287, 0, 254, 0, 0, 306, 0, 0, 0, 308,
+ 0, 0, 0, 300, 0, 299, 82, 109, 357, 0,
+ 0, 114, 276, 279, 0, 115, 282, 118, 143, 120,
+ 121, 85, 125, 126, 79, 127, 130, 83, 86, 254,
+ 80, 88, 133, 81, 135, 84, 137, 138, 283, 140,
+ 141, 145, 0, 111, 110, 113, 97, 112, 96, 0,
+ 106, 277, 275, 0, 0, 0, 347, 0, 107, 153,
+ 154, 159, 0, 152, 0, 317, 318, 0, 345, 0,
+ 0, 347, 0, 108, 0, 0, 0, 320, 325, 323,
+ 326, 0, 0, 324, 325, 0, 321, 0, 322, 278,
+ 328, 0, 278, 327, 0, 330, 331, 0, 278, 332,
+ 333, 0, 0, 334, 0, 0, 0, 335, 336, 171,
+ 170, 0, 0, 0, 304, 0, 0, 0, 319, 291,
+ 284, 0, 292, 288, 0, 290, 280, 0, 281, 285,
+ 0, 0, 347, 0, 342, 100, 0, 0, 104, 91,
+ 0, 93, 102, 0, 94, 103, 105, 95, 101, 92,
+ 0, 98, 175, 173, 177, 174, 172, 176, 350, 6,
+ 351, 4, 2, 72, 99, 0, 0, 75, 77, 76,
+ 37, 5, 0, 73, 0, 51, 50, 49, 0, 0,
64, 0, 65, 41, 42, 43, 44, 46, 47, 68,
45, 0, 51, 0, 0, 0, 0, 0, 60, 0,
61, 0, 0, 32, 0, 0, 69, 33, 0, 36,
- 34, 30, 0, 35, 31, 0, 62, 0, 63, 152,
- 0, 66, 70, 0, 0, 0, 0, 67, 0, 58,
+ 34, 30, 0, 35, 31, 0, 62, 0, 63, 153,
+ 0, 66, 70, 0, 0, 0, 0, 153, 278, 0,
+ 67, 82, 115, 282, 118, 143, 120, 121, 85, 125,
+ 126, 127, 130, 83, 86, 254, 88, 133, 81, 135,
+ 84, 137, 138, 283, 140, 141, 145, 71, 0, 58,
52, 59, 53, 0, 0, 0, 0, 55, 0, 56,
- 57, 54, 0, 0, 152, 277, 0, 0, 48, 81,
- 114, 281, 117, 142, 119, 120, 84, 124, 125, 126,
- 129, 82, 85, 253, 87, 132, 80, 134, 83, 136,
- 137, 282, 139, 140, 144, 0, 38, 39, 0, 40,
- 8, 0, 0, 9, 0, 11, 0, 10, 0, 1,
- 27, 15, 14, 26, 13, 12, 29, 7, 0, 18,
- 0, 19, 0, 24, 25, 0, 20, 21, 0, 22,
- 23, 16, 17, 357};
+ 57, 54, 0, 0, 0, 0, 48, 0, 38, 39,
+ 0, 40, 8, 0, 0, 9, 0, 11, 0, 10,
+ 0, 1, 27, 15, 14, 26, 13, 12, 29, 7,
+ 0, 18, 0, 19, 0, 24, 25, 0, 20, 21,
+ 0, 22, 23, 16, 17, 358};
const short QQmlJSGrammar::goto_default [] = {
- 7, 639, 211, 198, 209, 521, 509, 634, 647, 508,
- 633, 637, 635, 643, 22, 640, 638, 636, 18, 520,
+ 7, 641, 211, 198, 209, 521, 509, 636, 649, 508,
+ 635, 639, 637, 645, 22, 642, 640, 638, 18, 520,
562, 552, 559, 554, 539, 193, 197, 199, 204, 234,
- 212, 231, 543, 583, 582, 203, 233, 26, 487, 486,
+ 212, 231, 543, 613, 612, 203, 233, 26, 487, 486,
359, 358, 9, 357, 360, 202, 480, 361, 109, 17,
147, 24, 13, 146, 19, 25, 59, 23, 8, 28,
27, 280, 15, 274, 10, 270, 12, 272, 11, 271,
@@ -209,295 +209,267 @@ const short QQmlJSGrammar::goto_default [] = {
0};
const short QQmlJSGrammar::action_index [] = {
- 239, 1406, 2692, 2692, 2794, 1119, 115, 29, 168, -106,
- 26, -23, -60, 225, -106, 306, 33, -106, -106, 732,
- -2, 145, 243, 223, -106, -106, -106, 379, 227, 1406,
- -106, -106, -106, 539, -106, -106, 2488, 1698, 1406, 1406,
- 1406, -106, 1023, 1406, -106, -106, -106, 1406, 1406, -106,
- -106, -106, -106, -106, -106, 1406, -106, 1406, 1406, -106,
- 1406, 1406, 114, 206, -106, -106, 1406, 1406, 1406, -106,
- -106, -106, 211, 1406, 302, 1406, 1406, 1406, 1406, 369,
- 1406, 1406, 1406, 1406, 1406, 1406, 226, 1406, 1406, 1406,
- 135, 151, 110, 257, 279, 276, 256, 222, 475, 475,
- 475, 1406, 7, 1406, 57, 2284, 1406, 1406, -106, -106,
+ 264, 1225, 2708, 2708, 2606, 938, 94, 104, 119, -106,
+ 92, 79, 81, 262, -106, 263, 78, -106, -106, 654,
+ 89, 125, 259, 229, -106, -106, -106, 322, 314, 1225,
+ -106, -106, -106, 412, -106, -106, 2300, 1713, 1225, 1225,
+ 1225, -106, 842, 1225, -106, -106, -106, 1225, 1225, -106,
+ -106, -106, -106, -106, -106, 1225, -106, 1225, 1225, -106,
+ 1225, 1225, 141, 216, -106, -106, 1225, 1225, 1225, -106,
+ -106, -106, 209, 1225, 281, 1225, 1225, 1225, 1225, 367,
+ 1225, 1225, 1225, 1225, 1225, 1225, 219, 1225, 1225, 1225,
+ 101, 102, 115, 314, 314, 314, 314, 314, 357, 347,
+ 337, 1225, 71, 1225, 70, 2198, 1225, 1225, -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, 136, 1406, -106, -106, 30, -24, -106, 1406,
- -106, -106, 1406, -106, -106, -106, -106, -106, -106, -106,
- -106, -106, -106, -106, -106, -106, 1406, 2, 1406, 1406,
- 10, 97, 1406, -106, 2284, 1406, 1406, -106, 141, -106,
- -45, -106, -106, 4, 457, 386, 89, 79, -106, 448,
- -106, 74, 2692, -106, -106, -106, -106, -106, 164, -106,
- 460, -106, 85, -106, -106, -106, 96, -106, -106, -106,
- 2692, -106, -106, 547, -106, 629, 143, 2794, 62, 54,
- 43, 2998, 1406, -106, 51, 1406, 52, -106, 47, 45,
- -106, -106, 454, -106, -106, -106, -106, 64, 352, 31,
- 61, 2692, 27, -106, -106, 2794, -106, -106, 139, -106,
- -106, -106, -106, 126, -106, -106, -106, -106, -106, -106,
- -6, 25, 1406, 130, 159, -106, -106, -106, 1600, -106,
- 68, 65, 5, -106, 308, 60, 3, 835, 99, 105,
- 337, 207, 408, 1406, 317, 1406, 1406, 1406, 1406, 353,
- 1406, 1406, 1406, 1406, 1406, 186, 203, 204, 212, 219,
- 333, 343, 359, 1406, 20, 1406, 202, 1406, -106, 732,
- 1406, -106, 1406, 81, 72, 1406, 77, 2794, -106, 1406,
- 149, 2794, -106, 1406, 80, 1406, 1406, 94, 88, 1406,
- -106, -8, 128, -25, -106, -106, 1406, -106, 471, 1406,
- -106, -53, 1406, -56, 2794, -106, 1406, 134, 2794, -106,
- 1406, 138, 2794, -5, 2794, -106, -4, -106, 9, -9,
- 37, -106, -106, 2794, -12, 555, 32, 629, 123, 1406,
- 2794, 41, 18, 504, 2386, 21, 1023, 49, 46, 1505,
- 2386, 42, 16, 44, 1406, 24, -10, 1406, 17, 1406,
- -15, -18, 2590, -106, -106, -106, -106, -106, -106, 1406,
- -106, -106, -106, -1, -26, -3, 2692, -27, -106, 277,
- -106, 1406, -28, -106, 90, -106, -106, 1, 552, -40,
- -11, 2692, -29, -106, 1406, 117, 14, -106, 50, -106,
- 40, 119, 1406, -106, 11, 35, -106, -54, -106, 2794,
- -106, 116, 2794, -106, 267, -106, -106, 121, 2794, -7,
- -106, -31, -19, -106, 376, 6, 78, -106, -106, -106,
- -106, 1406, 98, 2794, -106, 1406, 106, 2794, -106, 76,
- -106, 254, -106, -106, 1406, -106, -106, 552, -106, -106,
- 71, 75, 2692, 67, -106, -106, 122, 1992, -106, -106,
- 1796, -106, -106, 1894, -106, -106, -106, -106, -106, -106,
- 113, -106, -106, -106, -106, -106, -106, -106, -106, -106,
- 2692, -106, -106, -106, 111, 22, 929, 152, 39, 48,
- -106, -106, 301, -106, 147, -106, -106, -106, 468, 155,
- -106, 2182, -106, -106, -106, -106, -106, -106, -106, -106,
- -106, 178, -30, 463, 181, -14, 400, 229, -106, -32,
- -106, 929, 104, -106, 0, 929, -106, -106, 1311, -106,
- -106, -106, 1215, -106, -106, 248, -106, 2182, -106, 392,
- 59, -106, -106, 244, 552, 73, 2182, -106, 236, -106,
- 237, -106, 70, 15, 368, 214, 355, -106, 103, -106,
- -106, -106, 2087, 721, 392, 2896, 1698, 34, -106, 56,
- 598, 55, 629, 107, 1406, 2794, 53, 23, 544, 36,
- 1023, 58, 66, 1505, 69, 38, 63, 1406, 95, 84,
- 1406, 102, 1406, 83, 82, 124, -106, -106, 87, -106,
- -106, 929, 813, 91, 929, -106, 271, -106, 86, -106,
- -106, 100, 101, -106, -106, -106, -106, -106, 552, -106,
- 209, -106, 109, -106, -106, 552, -106, -106, 92, -106,
- -106, -106, -106, -106,
+ -106, -106, 98, 1225, -106, -106, 66, 65, -106, 1225,
+ -106, -106, 1225, -106, -106, -106, -106, -106, -106, -106,
+ -106, -106, -106, -106, -106, -106, 1225, 44, 1225, 1225,
+ 64, 57, 1225, -106, 2198, 1225, 1225, -106, 137, -106,
+ 49, -106, -106, 93, 344, 474, 95, 86, -106, 390,
+ -106, 85, 2708, -106, -106, -106, -106, -106, 189, -106,
+ 474, -106, 80, -106, -106, -106, 83, -106, -106, -106,
+ 2708, -106, -106, 490, -106, 551, 130, 2606, 46, 51,
+ 52, 2912, 1225, -106, 63, 1225, 56, -106, 58, 60,
+ -106, -106, 474, -106, -106, -106, -106, 61, 474, 62,
+ 67, 2708, 68, -106, -106, 2606, -106, -106, 87, -106,
+ -106, -106, -106, 110, -106, -106, -106, -106, -106, -106,
+ -24, 69, 1225, 122, 143, -106, -106, -106, 1419, -106,
+ 74, 76, 77, -106, 269, 73, 72, 611, 75, 114,
+ 397, 314, 474, 1225, 287, 1225, 1225, 1225, 1225, 397,
+ 1225, 1225, 1225, 1225, 1225, 218, 215, 198, 192, 182,
+ 397, 397, 312, 1225, 55, 1225, 59, 1225, -106, 654,
+ 1225, -106, 1225, 54, 53, 1225, 50, 2606, -106, 1225,
+ 124, 2606, -106, 1225, 90, 1225, 1225, 105, 88, 1225,
+ -106, 84, 157, -27, -106, -106, 1225, -106, 474, 1225,
+ -106, 82, 1225, 91, 2606, -106, 1225, 120, 2606, -106,
+ 1225, 103, 2606, -9, 2606, -106, -2, -106, 11, -30,
+ 17, -106, -106, 2606, -37, 469, 15, 551, 138, 1225,
+ 2606, 14, -16, 433, 2402, -20, 842, 6, 5, 1324,
+ 2402, 4, -36, 2, 1225, 7, -18, 1225, 10, 1225,
+ -26, -13, 2504, -106, -106, -106, -106, -106, -106, 1225,
+ -106, -106, -106, -33, -59, -25, 2708, 23, -106, 197,
+ -106, 1225, -12, -106, 140, -106, -106, 22, 474, -4,
+ 26, 2708, 12, -106, 1225, 113, 30, -106, 142, -106,
+ 142, 121, 1225, -106, -3, 45, -106, -5, -106, 2606,
+ -106, 108, 2606, -106, 207, -106, -106, 106, 2606, 37,
+ -106, 25, 36, -106, 474, 38, 40, -106, -106, -106,
+ -106, 1225, 136, 2606, -106, 1225, 166, 2606, -106, 13,
+ -106, 200, -106, -106, 1225, -106, -106, 474, -106, -106,
+ -17, 16, 2708, -11, -106, -106, 131, 1811, -106, -106,
+ 1615, -106, -106, 1517, -106, -106, -106, -106, -106, -106,
+ 109, -106, -106, -106, -106, -106, -106, -106, -106, -106,
+ 2708, -106, -106, -106, 233, -19, 748, 152, -60, 41,
+ -106, -106, 191, -106, 177, -106, -106, -106, 387, 203,
+ -106, 1906, -106, -106, -106, -106, -106, -106, -106, -106,
+ -106, 180, 43, 376, 174, 48, 474, 240, -106, 8,
+ -106, 748, 111, -106, -1, 748, -106, -106, 1130, -106,
+ -106, -106, 1034, -106, -106, 228, -106, 1906, -106, 295,
+ 21, -106, -106, 184, 379, 39, 2001, 288, 2810, 18,
+ -106, 34, 482, 33, 551, 138, 1225, 2606, 31, 9,
+ 399, 3, 643, 19, 29, 1324, 28, 1, 27, 1225,
+ 24, 0, 1225, 20, 1225, -7, -8, -106, 193, -106,
+ 205, -106, 47, 42, 329, 208, 319, -106, 128, -106,
+ -106, -106, 2096, 748, 1713, 35, -106, 132, -106, -106,
+ 32, -106, -106, 748, 748, 94, 748, -106, 250, -106,
+ 116, -106, -106, 233, 233, -106, -106, -106, -106, -106,
+ 393, -106, 214, -106, 100, -106, -106, 474, -106, -106,
+ 96, -106, -106, -106, -106, -106,
- -111, 43, 59, 70, 71, 369, 40, -111, -111, -111,
- -111, -111, -111, -111, -111, -111, -111, -111, -111, 21,
- -111, -111, -111, -111, -111, -111, -111, -111, -111, 79,
- -111, -111, -111, -16, -111, -111, 5, -26, 23, 73,
- 91, -111, 83, 61, -111, -111, -111, 88, 87, -111,
- -111, -111, -111, -111, -111, 29, -111, 66, 39, -111,
- 97, 193, -111, -111, -111, -111, 160, 180, 183, -111,
- -111, -111, -111, 176, -111, 167, 151, 155, 152, -111,
- 148, 187, 195, 197, 199, 201, -111, 186, 92, 194,
+ -111, 15, 71, 87, 80, 305, -6, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, -111, -111, -111, -42,
+ -111, -111, -111, -111, -111, -111, -111, -111, -111, 95,
+ -111, -111, -111, 3, -111, -111, -5, -11, 9, 109,
+ 91, -111, 62, 45, -111, -111, -111, 50, 63, -111,
+ -111, -111, -111, -111, -111, 32, -111, 203, 197, -111,
+ 189, 178, -111, -111, -111, -111, 182, 185, 188, -111,
+ -111, -111, -111, 193, -111, 198, 168, 113, 114, -111,
+ 133, 116, 123, 129, 130, 132, -111, 136, 139, 142,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- -111, 103, -111, 108, -111, 181, -2, -42, -111, -111,
+ -111, 148, -111, 151, -111, 186, 6, -37, -111, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- -111, -111, -111, 34, -111, -111, -111, -111, -111, 3,
- -111, -111, 10, -111, -111, -111, -111, -111, -111, -111,
- -111, -111, -111, -111, -111, -111, 127, -111, 109, 15,
- -111, -111, 16, -111, 225, 44, 128, -111, -111, -111,
- -111, -111, -111, -111, 25, 157, -111, -111, -111, 26,
- -111, -111, 24, -111, -111, -111, -111, -111, -111, -111,
- 22, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- 179, -111, -111, 45, -111, 46, -111, 107, -111, 48,
- -111, 106, 62, -111, -111, 163, -3, -111, -111, -111,
- -111, -111, -14, -111, -111, -111, -111, -111, 57, -111,
- -111, 224, -111, -111, -111, 227, -111, -111, -111, -111,
+ -111, -111, -111, 42, -111, -111, -111, -111, -111, 22,
+ -111, -111, 2, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, 96, -111, 66, 21,
+ -111, -111, 0, -111, 274, 35, 88, -111, -111, -111,
+ -111, -111, -111, -111, 41, 75, -111, -111, -111, 49,
+ -111, -111, 48, -111, -111, -111, -111, -111, -111, -111,
+ 57, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+ 77, -111, -111, 54, -111, 27, -111, 243, -111, 25,
+ -111, 160, 36, -111, -111, 169, 40, -111, -111, -111,
+ -111, -111, 56, -111, -111, -111, -111, -111, 180, -111,
+ -111, 163, -111, -111, -111, 246, -111, -111, -111, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- -111, -111, 35, -111, -111, -111, -111, -111, 72, -111,
+ -111, -111, 8, -111, -111, -111, -111, -111, 69, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- -111, -111, 12, 264, -111, 258, 246, 254, 209, -111,
- 60, 51, 52, 27, 53, -111, -111, -111, -111, -111,
- -111, -111, -111, 244, -111, 255, -111, 203, -111, -111,
- 207, -111, 217, -111, -111, 198, -111, 208, -111, 8,
- -111, 215, -111, 232, -111, 233, 234, -111, -111, 223,
- -111, -111, -111, -111, -111, -111, 230, -111, 95, 113,
- -111, -111, 153, -111, 156, -111, 2, -111, 147, -111,
- 58, -111, 137, -111, 100, -111, -111, -111, -111, -111,
- -111, -111, -111, 135, -111, 41, -111, 54, -111, 117,
- 162, -111, -111, 50, 169, -111, 174, -111, -111, 32,
- 178, -111, -111, -111, 31, -111, 7, 144, -111, 130,
- -111, -111, 142, -111, -111, -111, -111, -111, -111, 11,
- -111, -111, -111, -111, -111, -111, 214, -111, -111, -111,
- -111, 140, -111, -111, -111, -111, -111, -111, 158, -111,
- -111, 149, -111, -111, 47, -111, -111, -111, -111, -111,
- -55, -111, 38, -111, -67, -111, -111, -111, -111, 263,
- -111, -111, 262, -111, -111, -111, -111, -111, 190, -76,
- -111, -111, 30, -111, 19, -111, 14, -111, -111, -111,
- -111, 33, -111, 272, -111, 64, -111, 175, -111, -111,
- -111, -111, -111, -111, 18, -111, -111, 69, -111, -111,
- -111, -111, 114, -111, -111, -111, -111, 20, -111, -111,
- 110, -111, -111, 28, -111, -111, -111, -111, -111, -111,
+ -111, -111, 61, 211, -111, 272, 257, 256, 236, -111,
+ 81, 83, 85, 68, 94, -111, -111, -111, -111, -111,
+ -111, -111, -111, 235, -111, 218, -111, 209, -111, -111,
+ 244, -111, 227, -111, -111, 228, -111, 238, -111, 33,
+ -111, 167, -111, 245, -111, 253, 254, -111, -111, 225,
+ -111, -111, -111, -111, -111, -111, 217, -111, 194, 213,
+ -111, -111, 208, -111, 207, -111, 52, -111, 205, -111,
+ 55, -111, 201, -111, 199, -111, -111, -111, -111, -111,
+ -111, -111, -111, 278, -111, 39, -111, 34, -111, 173,
+ 219, -111, -111, 53, 231, -111, 73, -111, -111, 44,
+ 59, -111, -111, -111, 47, -111, 24, 102, -111, 101,
+ -111, -111, 111, -111, -111, -111, -111, -111, -111, 26,
+ -111, -111, -111, -111, -111, -111, 65, -111, -111, -111,
+ -111, 76, -111, -111, -111, -111, -111, -111, 79, -111,
+ -111, 89, -111, -111, 51, -111, -111, -111, -111, -111,
+ -62, -111, 37, -111, -63, -111, -111, -111, -111, 387,
+ -111, -111, 264, -111, -111, -111, -111, -111, 158, -54,
+ -111, -111, 28, -111, 38, -111, 23, -111, -111, -111,
+ -111, 43, -111, 78, -111, 58, -111, 67, -111, -111,
+ -111, -111, -111, -111, 18, -111, -111, 195, -111, -111,
+ -111, -111, 161, -111, -111, -111, -111, 20, -111, -111,
+ 157, -111, -111, 31, -111, -111, -111, -111, -111, -111,
-111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
- 86, -111, -111, -111, -111, -111, 55, -111, -111, -111,
- -111, -111, -111, -111, -7, -111, -111, -111, 1, -111,
- -111, 329, -111, -111, -111, -111, -111, -111, -111, -111,
- -111, -111, -111, 0, -11, -111, -10, -111, -111, -111,
- -111, 204, -111, -111, -111, 205, -111, -111, 317, -111,
- -111, -111, 311, -111, -111, -111, -111, 370, -111, -111,
- -9, -111, -111, -4, -12, -111, 337, -111, -111, -111,
- -18, -111, -111, -111, -1, -17, -6, -111, -111, -111,
- -111, -111, 466, 78, -111, 82, 307, -13, -111, -111,
- -8, -111, 6, -111, 74, 76, -111, -111, 9, -111,
- 85, -111, -111, 17, -111, -111, -111, 4, -111, -22,
- 84, -111, 67, -111, -111, -111, -111, -111, 49, -111,
- -111, 37, 42, 68, 77, -111, -111, -111, -111, -111,
- -111, -111, -111, -111, -111, -111, -111, -111, 13, -111,
- -111, -111, -111, -111, -111, 36, -111, -111, -111, -111,
- -111, -111, -111, -111};
+ 206, -111, -111, -111, -111, -111, -7, -111, -111, -111,
+ -111, -111, -111, -111, -24, -111, -111, -111, -12, -111,
+ -111, 342, -111, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, -111, -16, -32, -111, 5, -111, -111, -111,
+ -111, 152, -111, -111, -111, 248, -111, -111, 330, -111,
+ -111, -111, 324, -111, -111, -111, -111, 385, -111, -111,
+ -21, -111, -111, 1, 14, -111, 367, -111, 232, 12,
+ -111, -111, 11, -111, 10, -111, 164, 141, -111, -111,
+ 7, -111, 64, -111, -111, 19, -111, -111, -111, 17,
+ -111, -1, 60, -111, 46, -111, -111, -111, -111, -111,
+ -15, -111, -111, -111, -2, -17, -4, -111, -111, -111,
+ -111, -111, 484, 138, 313, -3, -111, -111, -111, -111,
+ 4, -111, -111, 13, 16, 97, 127, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+ -14, -111, -111, -111, -111, -111, -111, -8, -111, -111,
+ -111, -111, -111, -111, -111, -111};
const short QQmlJSGrammar::action_info [] = {
- 166, 438, 551, 245, 344, 454, 346, 544, 342, 336,
- 546, 354, 166, 452, 448, 181, 432, 392, 465, 103,
- 420, 461, 421, 448, -138, 101, 423, 73, 408, 663,
- 406, -135, 413, 558, 405, 404, 151, 418, 149, -141,
- 185, 143, 439, 402, 399, 432, 398, 428, -122, -111,
- 101, -133, 424, -112, 268, 432, -130, 350, 73, 268,
- -122, 262, -141, 245, 312, -130, 456, 558, 307, 283,
- -133, 261, 350, -112, 424, 588, -111, 578, 585, 350,
- 576, 465, 243, 461, 305, 448, 103, 424, 524, 143,
- 184, 240, 558, 474, 241, 329, 323, 189, 268, 305,
- 238, 323, -135, 245, 172, 573, 143, 192, 482, -138,
- 0, 448, 555, 303, 143, 174, 174, 448, 465, 461,
- 558, 143, 484, 442, 143, 143, 174, 451, 303, 435,
- 490, 481, 555, 315, 175, 175, 338, 317, 143, 191,
- 244, 452, 143, 0, 143, 175, 143, 662, 661, 143,
- 60, 416, 415, 660, 659, 325, 64, 143, 463, 326,
- 556, 61, 531, 0, 590, 589, 467, 65, 259, 258,
- 654, 653, 143, 501, 436, 60, 525, 426, 491, 0,
- 626, 542, 631, 632, 259, 258, 61, 257, 256, 339,
- 264, 60, 144, 174, 348, 168, 0, 179, 352, 169,
- 252, 251, 61, 283, 259, 258, 631, 632, 60, 321,
- 525, 87, 175, 88, 411, 0, 532, 530, 66, 61,
- 267, 265, 527, 66, 89, 236, 235, 527, 87, 87,
- 88, 88, 87, 526, 88, 66, 549, 87, 526, 88,
- 105, 89, 89, 525, 87, 89, 88, 87, 266, 88,
- 89, 87, 87, 88, 88, 567, 527, 89, 174, 106,
- 89, 107, 477, 67, 89, 89, 525, 526, 67, 68,
- 657, 656, 580, 525, 68, 143, 0, 175, 0, 176,
- 67, 87, 87, 88, 88, 0, 68, 0, 0, 527,
- 550, 548, 174, 0, 89, 89, 0, 581, 579, 0,
- 526, 87, 655, 88, 87, 0, 88, 0, 592, 568,
- 566, 175, 527, 411, 89, 478, 476, 89, 650, 527,
- 75, 76, 0, 526, 75, 76, 285, 286, 446, 445,
- 526, 0, 651, 649, 558, 285, 286, 6, 5, 4,
- 1, 3, 2, 0, 0, 0, 0, 77, 78, 0,
- 0, 77, 78, 287, 288, 0, 290, 291, 0, 0,
- 290, 291, 287, 288, 648, 292, 290, 291, 293, 292,
- 294, 0, 293, 0, 294, 292, 290, 291, 293, 0,
- 294, 35, 290, 291, 35, 292, 0, 0, 293, 0,
- 294, 292, 80, 81, 293, 593, 294, 35, 0, 0,
- 82, 83, 80, 81, 84, 35, 85, 174, 0, 0,
- 82, 83, 0, 0, 84, 35, 85, 0, 49, 52,
- 50, 49, 52, 50, 0, -98, 175, 0, 176, 35,
- 0, 0, 0, 0, 49, 52, 50, 35, 0, 0,
- 0, 0, 49, 52, 50, 0, 46, 34, 51, 46,
- 34, 51, 49, 52, 50, 0, 0, 0, 0, 0,
- 0, 0, 46, 34, 51, 0, 49, 52, 50, 0,
- 46, 34, 51, 0, 49, 52, 50, 35, 0, 0,
- 46, 34, 51, 35, 0, 0, 35, 0, 0, 35,
- 0, 0, 35, 0, 46, 34, 51, 35, 80, 81,
- 35, 0, 46, 34, 51, 0, 82, 83, 0, 0,
- 84, 0, 85, 0, 49, 52, 50, 0, 0, 0,
- 49, 52, 50, 49, 52, 50, 49, 52, 50, 49,
- 52, 50, 0, 35, 49, 52, 50, 49, 52, 50,
- 184, 0, 46, 34, 51, 0, 0, 0, 46, 34,
- 51, 46, 34, 51, 46, 34, 51, 46, 34, 51,
- 0, 0, 46, 34, 51, 46, 34, 51, 35, 0,
- 49, 52, 50, 35, 0, 184, 35, 0, 0, 0,
- 184, 35, 0, 0, 35, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 46, 34,
- 51, 0, 0, 0, 0, 49, 52, 50, 250, 249,
- 49, 52, 50, 49, 52, 50, 250, 249, 49, 52,
- 50, 49, 52, 50, 0, 0, 0, 35, 0, 0,
+ 424, 405, 432, 404, 346, 245, 573, 354, 406, -134,
+ 461, -112, -113, -131, -136, 448, 350, -139, 402, 392,
+ 268, -123, -142, 465, 399, 398, -131, -139, 465, 461,
+ 474, -136, 558, 448, -134, -112, -113, 424, -123, 350,
+ -142, 245, 551, 481, 484, 268, 576, 524, 413, 482,
+ 438, 558, 439, 261, 558, 615, 420, 452, 418, 421,
+ 283, 454, 143, 428, 172, 558, 166, 423, 558, 448,
+ 608, 73, 546, 448, 149, 283, 0, 323, 408, 0,
+ 544, 307, 268, 0, 0, 0, 143, 184, 350, 448,
+ 245, 166, 101, 73, 461, 329, 465, 238, 456, 424,
+ 241, 336, 618, 189, 665, 262, 143, 323, 0, 181,
+ 317, 143, 451, 0, 315, 442, 143, 143, 192, 555,
+ 0, 143, 240, 243, 303, 151, 452, 101, 143, 185,
+ 143, 435, 143, 312, 305, 244, 0, 0, 303, 490,
+ 555, 60, 60, 342, 143, 143, 191, 432, 252, 251,
+ 103, 344, 61, 61, 144, 60, 305, 662, 661, 60,
+ 103, 656, 655, 352, 325, 338, 61, 556, 326, 501,
+ 61, 257, 256, 426, 143, 168, 436, 664, 663, 169,
+ 348, 542, 264, 64, 321, 633, 634, 491, 628, 620,
+ 619, 259, 258, 179, 65, 174, 463, 143, 622, 259,
+ 258, 416, 415, 525, 267, 265, 525, 87, 477, 88,
+ 531, 0, 174, 525, 175, 143, 411, 87, 339, 88,
+ 89, 66, 0, 87, 558, 88, 467, 527, 66, 610,
+ 89, 175, 266, 411, 525, 567, 89, 525, 526, 0,
+ 87, 66, 88, 87, 87, 88, 88, 549, 174, 527,
+ 236, 235, 527, 89, 611, 609, 89, 89, 0, 527,
+ 526, 478, 476, 526, 532, 530, 67, 175, 446, 445,
+ 526, 0, 68, 67, 174, 659, 658, 105, 0, 68,
+ 527, 75, 76, 527, 0, 623, 67, 285, 286, 568,
+ 566, 526, 68, 175, 526, 176, 106, 652, 107, 75,
+ 76, 550, 548, 174, 0, 285, 286, 657, 77, 78,
+ 174, 653, 651, 0, 287, 288, 0, 0, 0, 0,
+ 0, -99, 175, 0, 176, 0, 77, 78, -99, 175,
+ 0, 176, 287, 288, 0, 290, 291, 0, 0, 87,
+ 0, 88, 0, 650, 292, 80, 81, 293, 35, 294,
+ 0, 0, 89, 82, 83, 0, 0, 84, 35, 85,
+ 80, 81, 6, 5, 4, 1, 3, 2, 82, 83,
+ 80, 81, 84, 35, 85, 0, 0, 0, 82, 83,
+ 80, 81, 84, 0, 85, 49, 52, 50, 82, 83,
+ 80, 81, 84, 0, 85, 49, 52, 50, 82, 83,
+ 0, 0, 84, 0, 85, 35, 0, 0, 35, 0,
+ 49, 52, 50, 46, 34, 51, 35, 0, 0, 35,
+ 290, 291, 35, 46, 34, 51, 0, 0, 35, 292,
+ 0, 0, 293, 0, 294, 184, 0, 0, 46, 34,
+ 51, 35, 49, 52, 50, 49, 52, 50, 184, 0,
+ 0, 0, 0, 49, 52, 50, 49, 52, 50, 49,
+ 52, 50, 35, 0, 0, 49, 52, 50, 0, 184,
+ 46, 34, 51, 46, 34, 51, 0, 0, 49, 52,
+ 50, 46, 34, 51, 46, 34, 51, 46, 34, 51,
+ 0, 0, 0, 46, 34, 51, 0, 0, 35, 49,
+ 52, 50, 0, 35, 0, 0, 46, 34, 51, 0,
+ 0, 35, 0, 0, 0, 0, 0, 0, 0, 35,
+ 0, 0, 0, 0, 0, 0, 0, 46, 34, 51,
+ 250, 249, 0, 0, 0, 49, 52, 50, 0, 0,
+ 49, 52, 50, 250, 249, 0, 0, 0, 49, 52,
+ 50, 250, 249, 0, 0, 0, 49, 52, 50, 0,
0, 0, 0, 46, 34, 51, 0, 0, 46, 34,
- 51, 46, 34, 51, 0, 0, 46, 34, 51, 46,
- 34, 51, 0, 0, 0, 0, 0, 0, 35, 250,
- 249, 0, 0, 0, 49, 52, 50, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 254, 46, 34, 51, 49, 52, 50, 0, 0,
+ 51, 0, 0, 0, 0, 0, 46, 34, 51, 0,
+ 35, 0, 0, 0, 46, 34, 51, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 46, 34, 51, 0, 0, 0, 0,
- 0, 0, 0, 30, 31, 153, 0, 0, 0, 0,
- 0, 0, 0, 33, 0, 154, 0, 0, 0, 155,
- 35, 0, 0, 0, 36, 37, 0, 38, 156, 0,
- 157, 0, 0, 0, 516, 0, 0, 0, 45, 0,
- 0, 158, 0, 159, 64, 0, 0, 0, 0, 0,
- 0, 160, 0, 0, 161, 65, 53, 49, 52, 50,
- 162, 54, 0, 0, 0, 0, 163, 0, 0, 0,
- 0, 0, 44, 56, 32, 0, 0, 0, 41, 0,
- 0, 0, 164, 0, 0, 46, 34, 51, 0, 0,
- 0, 0, 0, 0, 0, 30, 31, 0, 0, 0,
- 0, 0, 0, 0, 0, 33, 0, 0, 153, 0,
- 0, 0, 35, 0, 0, 0, 36, 37, 154, 38,
- 0, 0, 155, 0, 0, 0, 516, 0, 0, 0,
- 45, 156, 0, 157, 0, 0, 319, 0, 0, 0,
- 0, 0, 0, 0, 158, 0, 159, 64, 53, 49,
- 52, 50, 0, 54, 160, 0, 0, 161, 65, 0,
- 0, 0, 0, 162, 44, 56, 32, 0, 0, 163,
- 41, 0, 0, 0, 0, 0, 0, 46, 34, 51,
- 0, 0, 0, 0, 0, 164, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 255, 254, 153, 0, 0, 49, 52, 50,
+ 0, 0, 0, 0, 154, 0, 0, 0, 155, 0,
+ 0, 0, 0, 0, 0, 0, 0, 156, 0, 157,
+ 0, 0, 319, 0, 0, 46, 34, 51, 0, 0,
+ 158, 0, 159, 64, 0, 30, 31, 153, 0, 0,
+ 160, 0, 0, 161, 65, 33, 0, 154, 0, 162,
+ 0, 155, 35, 0, 0, 163, 36, 37, 0, 38,
+ 156, 0, 157, 0, 0, 0, 42, 0, 0, 0,
+ 45, 164, 0, 158, 0, 159, 64, 0, 0, 0,
+ 0, 0, 0, 160, 0, 0, 161, 65, 53, 49,
+ 52, 50, 162, 54, 0, 0, 0, 0, 163, 0,
+ 0, 0, 0, 0, 44, 56, 32, 0, 0, 0,
+ 41, 0, 0, 0, 164, 0, 0, 46, 34, 51,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 33, 0, 0, 0, 0, 0, 0, 35, 0,
- 0, 0, 36, 37, 0, 38, 0, 0, 0, 0,
- 0, 0, 516, 0, 0, 0, 45, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53, 49, 52, 50, 0, 54,
+ 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 35, 0, 0,
+ 0, 36, 37, 0, 38, 0, 0, 0, 0, 0,
+ 0, 516, 0, 0, 0, 45, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 56, 32, 0, 0, 0, 41, 0, 0, 0,
- 0, 0, 0, 46, 34, 51, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 30, 31, 0, 0, 0,
- 0, 0, 0, 0, 0, 33, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 0, 36, 37, 0, 38,
- 0, 0, 0, 0, 0, 0, 42, 0, 0, 0,
- 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 49,
- 52, 50, 0, 54, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 56, 32, 0, 0, 0,
- 41, 0, 0, 0, 0, 0, 0, 46, 34, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 515,
- 0, 30, 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 219, 0, 0, 0, 0, 0, 0, 35, 0,
- 0, 0, 36, 37, 0, 38, 0, 0, 0, 0,
- 0, 0, 516, 0, 0, 0, 45, 0, 0, 0,
+ 0, 0, 0, 53, 49, 52, 50, 0, 54, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
+ 56, 32, 0, 0, 0, 41, 0, 0, 0, 0,
+ 0, 0, 46, 34, 51, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 30, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
+ 0, 35, 0, 0, 0, 36, 37, 0, 38, 0,
+ 0, 0, 0, 0, 0, 42, 0, 0, 0, 45,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53, 517, 519, 518, 0, 54,
- 0, 0, 0, 0, 227, 0, 0, 0, 0, 0,
- 44, 56, 32, 214, 0, 0, 41, 0, 0, 0,
- 0, 0, 0, 46, 34, 51, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 515, 0, 30, 31, 0,
- 0, 0, 0, 0, 0, 0, 0, 219, 0, 0,
- 0, 0, 0, 0, 35, 0, 0, 0, 36, 37,
- 0, 38, 0, 0, 0, 0, 0, 0, 516, 0,
- 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
- 563, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 53, 517, 519, 518, 0, 54, 0, 0, 0, 0,
- 227, 0, 0, 0, 0, 0, 44, 56, 32, 214,
- 0, 0, 41, 0, 0, 0, 0, 0, 0, 46,
- 34, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 515, 0, 30, 31, 0, 0, 0, 0, 0,
- 0, 0, 0, 219, 0, 0, 0, 0, 0, 0,
- 35, 0, 0, 0, 36, 37, 0, 38, 0, 0,
- 0, 0, 0, 0, 516, 0, 0, 0, 45, 0,
- 0, 0, 0, 0, 0, 0, 560, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 53, 517, 519, 518,
- 0, 54, 0, 0, 0, 0, 227, 0, 0, 0,
- 0, 0, 44, 56, 32, 214, 0, 0, 41, 0,
- 0, 0, 0, 0, 0, 46, 34, 51, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 29, 30, 31,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,
- 0, 0, 0, 0, 0, 35, 0, 0, 0, 36,
- 37, 0, 38, 0, 0, 0, 39, 0, 40, 42,
- 43, 0, 0, 45, 0, 0, 0, 47, 0, 48,
+ 0, 0, 0, 0, 0, 0, 0, 53, 49, 52,
+ 50, 0, 54, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 44, 56, 32, 0, 0, 0, 41,
+ 0, 0, 0, 0, 0, 0, 46, 34, 51, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 515, 0,
+ 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 219, 0, 0, 0, 0, 0, 0, 35, 0, 0,
+ 0, 36, 37, 0, 38, 0, 0, 0, 0, 0,
+ 0, 516, 0, 0, 0, 45, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 53, 49, 52, 50, 0, 54, 0, 55, 0,
- 57, 0, 58, 0, 0, 0, 0, 44, 56, 32,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
- 46, 34, 51, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -131, 0, 0, 0, 29, 30, 31, 0,
+ 0, 0, 0, 53, 517, 519, 518, 0, 54, 0,
+ 0, 0, 0, 227, 0, 0, 0, 0, 0, 44,
+ 56, 32, 214, 0, 0, 41, 0, 0, 0, 0,
+ 0, 0, 46, 34, 51, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 515, 0, 30, 31, 0, 0,
+ 0, 0, 0, 0, 0, 0, 219, 0, 0, 0,
+ 0, 0, 0, 35, 0, 0, 0, 36, 37, 0,
+ 38, 0, 0, 0, 0, 0, 0, 516, 0, 0,
+ 0, 45, 0, 0, 0, 0, 0, 0, 0, 563,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
+ 517, 519, 518, 0, 54, 0, 0, 0, 0, 227,
+ 0, 0, 0, 0, 0, 44, 56, 32, 214, 0,
+ 0, 41, 0, 0, 0, 0, 0, 0, 46, 34,
+ 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 515, 0, 30, 31, 0, 0, 0, 0, 0, 0,
+ 0, 0, 219, 0, 0, 0, 0, 0, 0, 35,
+ 0, 0, 0, 36, 37, 0, 38, 0, 0, 0,
+ 0, 0, 0, 516, 0, 0, 0, 45, 0, 0,
+ 0, 0, 0, 0, 0, 560, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 53, 517, 519, 518, 0,
+ 54, 0, 0, 0, 0, 227, 0, 0, 0, 0,
+ 0, 44, 56, 32, 214, 0, 0, 41, 0, 0,
+ 0, 0, 0, 0, 46, 34, 51, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 29, 30, 31, 0,
0, 0, 0, 0, 0, 0, 0, 33, 0, 0,
0, 0, 0, 0, 35, 0, 0, 0, 36, 37,
0, 38, 0, 0, 0, 39, 0, 40, 42, 43,
@@ -507,369 +479,362 @@ const short QQmlJSGrammar::action_info [] = {
0, 58, 0, 0, 0, 0, 44, 56, 32, 0,
0, 0, 41, 0, 0, 0, 0, 0, 0, 46,
34, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 29, 30, 31, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 0, 36, 37, 0, 38, 0, 0, 0,
- 39, 0, 40, 42, 43, 0, 0, 45, 0, 0,
- 0, 47, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 53, 49, 52, 50, 0,
- 54, 0, 55, 0, 57, 282, 58, 0, 0, 0,
- 0, 44, 56, 32, 0, 0, 0, 41, 0, 0,
- 0, 0, 0, 0, 46, 34, 51, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 488, 0, 0, 29,
- 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
- 33, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 0, 36, 37, 0, 38, 0, 0, 0, 39, 0,
- 40, 42, 43, 0, 0, 45, 0, 0, 0, 47,
- 0, 48, 0, 0, 489, 0, 0, 0, 0, 0,
- 0, 0, 0, 53, 49, 52, 50, 0, 54, 0,
- 55, 0, 57, 0, 58, 0, 0, 0, 0, 44,
- 56, 32, 0, 0, 0, 41, 0, 0, 0, 0,
- 0, 0, 46, 34, 51, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 488, 0, 0, 29, 30, 31,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,
- 0, 0, 0, 0, 0, 35, 0, 0, 0, 36,
- 37, 0, 38, 0, 0, 0, 39, 0, 40, 42,
- 43, 0, 0, 45, 0, 0, 0, 47, 0, 48,
- 0, 0, 494, 0, 0, 0, 0, 0, 0, 0,
- 0, 53, 49, 52, 50, 0, 54, 0, 55, 0,
- 57, 0, 58, 0, 0, 0, 0, 44, 56, 32,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
- 46, 34, 51, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 496, 0, 0, 29, 30, 31, 0, 0,
+ 0, -132, 0, 0, 0, 29, 30, 31, 0, 0,
0, 0, 0, 0, 0, 0, 33, 0, 0, 0,
0, 0, 0, 35, 0, 0, 0, 36, 37, 0,
38, 0, 0, 0, 39, 0, 40, 42, 43, 0,
0, 45, 0, 0, 0, 47, 0, 48, 0, 0,
- 497, 0, 0, 0, 0, 0, 0, 0, 0, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
49, 52, 50, 0, 54, 0, 55, 0, 57, 0,
58, 0, 0, 0, 0, 44, 56, 32, 0, 0,
0, 41, 0, 0, 0, 0, 0, 0, 46, 34,
51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 496, 0, 0, 29, 30, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 0, 35, 0, 0, 0, 36, 37, 0, 38, 0,
- 0, 0, 39, 0, 40, 42, 43, 0, 0, 45,
- 0, 0, 0, 47, 0, 48, 0, 0, 499, 0,
- 0, 0, 0, 0, 0, 0, 0, 53, 49, 52,
- 50, 0, 54, 0, 55, 0, 57, 0, 58, 0,
- 0, 0, 0, 44, 56, 32, 0, 0, 0, 41,
- 0, 0, 0, 0, 0, 0, 46, 34, 51, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 29, 30,
+ 29, 30, 31, 0, 0, 0, 0, 0, 0, 0,
+ 0, 33, 0, 0, 0, 0, 0, 0, 35, 0,
+ 0, 0, 36, 37, 0, 38, 0, 0, 0, 39,
+ 0, 40, 42, 43, 0, 0, 45, 0, 0, 0,
+ 47, 0, 48, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 53, 49, 52, 50, 0, 54,
+ 0, 55, 0, 57, 282, 58, 0, 0, 0, 0,
+ 44, 56, 32, 0, 0, 0, 41, 0, 0, 0,
+ 0, 0, 0, 46, 34, 51, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 496, 0, 0, 29, 30,
31, 0, 0, 0, 0, 0, 0, 0, 0, 33,
- 0, 0, 0, 0, 0, 0, 35, 220, 0, 0,
- 595, 596, 0, 38, 0, 0, 0, 39, 0, 40,
+ 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
+ 36, 37, 0, 38, 0, 0, 0, 39, 0, 40,
42, 43, 0, 0, 45, 0, 0, 0, 47, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 223, 0,
- 0, 0, 53, 49, 52, 50, 224, 54, 0, 55,
- 226, 57, 0, 58, 0, 229, 0, 0, 44, 56,
+ 48, 0, 0, 497, 0, 0, 0, 0, 0, 0,
+ 0, 0, 53, 49, 52, 50, 0, 54, 0, 55,
+ 0, 57, 0, 58, 0, 0, 0, 0, 44, 56,
32, 0, 0, 0, 41, 0, 0, 0, 0, 0,
0, 46, 34, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 29, 30, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 0, 35, 220, 0, 0, 221, 37, 0, 38, 0,
- 0, 0, 39, 0, 40, 42, 43, 0, 0, 45,
- 0, 0, 0, 47, 0, 48, 0, 0, 0, 0,
- 0, 0, 0, 223, 0, 0, 0, 53, 49, 52,
- 50, 224, 54, 0, 55, 226, 57, 0, 58, 0,
- 229, 0, 0, 44, 56, 32, 0, 0, 0, 41,
- 0, 0, 0, 0, 0, 0, 46, 34, 51, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 111, 112,
- 113, 0, 0, 115, 117, 118, 0, 0, 119, 0,
- 120, 0, 0, 0, 122, 123, 124, 0, 0, 0,
- 0, 0, 0, 35, 125, 126, 127, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 131, 0, 0, 0, 0, 0, 0,
- 49, 52, 50, 132, 133, 134, 0, 136, 137, 138,
- 139, 140, 141, 0, 0, 129, 135, 121, 114, 116,
- 130, 0, 0, 0, 0, 0, 0, 0, 46, 34,
- 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 111, 112, 113, 0, 0, 115, 117, 118, 0, 0,
- 119, 0, 120, 0, 0, 0, 122, 123, 124, 0,
- 0, 0, 0, 0, 0, 35, 125, 126, 127, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
- 0, 0, 0, 395, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 131, 0, 0, 0, 0,
- 0, 397, 49, 52, 50, 132, 133, 134, 0, 136,
- 137, 138, 139, 140, 141, 0, 0, 129, 135, 121,
- 114, 116, 130, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 488, 0, 0, 29, 30, 31, 0,
+ 0, 0, 0, 0, 0, 0, 0, 33, 0, 0,
+ 0, 0, 0, 0, 35, 0, 0, 0, 36, 37,
+ 0, 38, 0, 0, 0, 39, 0, 40, 42, 43,
+ 0, 0, 45, 0, 0, 0, 47, 0, 48, 0,
+ 0, 494, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 49, 52, 50, 0, 54, 0, 55, 0, 57,
+ 0, 58, 0, 0, 0, 0, 44, 56, 32, 0,
+ 0, 0, 41, 0, 0, 0, 0, 0, 0, 46,
+ 34, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 488, 0, 0, 29, 30, 31, 0, 0, 0,
+ 0, 0, 0, 0, 0, 33, 0, 0, 0, 0,
+ 0, 0, 35, 0, 0, 0, 36, 37, 0, 38,
+ 0, 0, 0, 39, 0, 40, 42, 43, 0, 0,
+ 45, 0, 0, 0, 47, 0, 48, 0, 0, 489,
+ 0, 0, 0, 0, 0, 0, 0, 0, 53, 49,
+ 52, 50, 0, 54, 0, 55, 0, 57, 0, 58,
+ 0, 0, 0, 0, 44, 56, 32, 0, 0, 0,
+ 41, 0, 0, 0, 0, 0, 0, 46, 34, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 496,
+ 0, 0, 29, 30, 31, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 35, 0, 0, 0, 36, 37, 0, 38, 0, 0,
+ 0, 39, 0, 40, 42, 43, 0, 0, 45, 0,
+ 0, 0, 47, 0, 48, 0, 0, 499, 0, 0,
+ 0, 0, 0, 0, 0, 0, 53, 49, 52, 50,
+ 0, 54, 0, 55, 0, 57, 0, 58, 0, 0,
+ 0, 0, 44, 56, 32, 0, 0, 0, 41, 0,
+ 0, 0, 0, 0, 0, 46, 34, 51, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 29, 30, 31,
+ 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,
+ 0, 0, 0, 0, 0, 35, 220, 0, 0, 221,
+ 37, 0, 38, 0, 0, 0, 39, 0, 40, 42,
+ 43, 0, 0, 45, 0, 0, 0, 47, 0, 48,
+ 0, 0, 0, 0, 0, 0, 0, 223, 0, 0,
+ 0, 53, 49, 52, 50, 224, 54, 0, 55, 226,
+ 57, 0, 58, 0, 229, 0, 0, 44, 56, 32,
+ 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
+ 46, 34, 51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 29, 30, 31, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 35, 220, 0, 0, 578, 37, 0, 38, 0, 0,
+ 0, 39, 0, 40, 42, 43, 0, 0, 45, 0,
+ 0, 0, 47, 0, 48, 0, 0, 0, 0, 0,
+ 0, 0, 223, 0, 0, 0, 53, 49, 52, 50,
+ 224, 54, 0, 55, 226, 57, 0, 58, 0, 229,
+ 0, 0, 44, 56, 32, 0, 0, 0, 41, 0,
+ 0, 0, 0, 0, 0, 46, 34, 51, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 29, 30, 31,
+ 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,
+ 0, 0, 0, 0, 0, 35, 220, 0, 0, 578,
+ 624, 0, 38, 0, 0, 0, 39, 0, 40, 42,
+ 43, 0, 0, 45, 0, 0, 0, 47, 0, 48,
+ 0, 0, 0, 0, 0, 0, 0, 223, 0, 0,
+ 0, 53, 49, 52, 50, 224, 54, 0, 55, 226,
+ 57, 0, 58, 0, 229, 0, 0, 44, 56, 32,
+ 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
46, 34, 51, 0, 0, 0, 0, 0, 0, 0,
0, 0, 111, 112, 113, 0, 0, 115, 117, 118,
0, 0, 119, 0, 120, 0, 0, 0, 122, 123,
124, 0, 0, 0, 0, 0, 0, 35, 125, 126,
127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 0, 395, 0, 0, 0, 0,
+ 0, 128, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 131, 0, 0,
- 0, 0, 0, 397, 49, 52, 50, 132, 133, 134,
+ 0, 0, 0, 0, 49, 52, 50, 132, 133, 134,
0, 136, 137, 138, 139, 140, 141, 0, 0, 129,
135, 121, 114, 116, 130, 0, 0, 0, 0, 0,
- 0, 0, 46, 374, 380, 0, 0, 0, 0, 0,
+ 0, 0, 46, 34, 51, 0, 0, 0, 0, 0,
0, 0, 0, 0, 111, 112, 113, 0, 0, 115,
117, 118, 0, 0, 119, 0, 120, 0, 0, 0,
122, 123, 124, 0, 0, 0, 0, 0, 0, 35,
125, 126, 127, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 128, 0, 0, 0, 395, 0, 0,
- 0, 0, 0, 0, 0, 396, 0, 0, 0, 131,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 131,
0, 0, 0, 0, 0, 397, 49, 52, 50, 132,
133, 134, 0, 136, 137, 138, 139, 140, 141, 0,
0, 129, 135, 121, 114, 116, 130, 0, 0, 0,
0, 0, 0, 0, 46, 374, 380, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 213, 0, 0, 0,
- 0, 215, 0, 29, 30, 31, 217, 0, 0, 0,
- 0, 0, 0, 218, 219, 0, 0, 0, 0, 0,
- 0, 35, 220, 0, 0, 221, 37, 0, 38, 0,
- 0, 0, 39, 0, 40, 42, 43, 0, 0, 45,
- 0, 0, 0, 47, 0, 48, 0, 0, 0, 0,
- 0, 222, 0, 223, 0, 0, 0, 53, 49, 52,
- 50, 224, 54, 225, 55, 226, 57, 227, 58, 228,
- 229, 0, 0, 44, 56, 32, 214, 216, 0, 41,
+ 0, 0, 0, 0, 0, 0, 111, 112, 113, 0,
+ 0, 115, 117, 118, 0, 0, 119, 0, 120, 0,
+ 0, 0, 122, 123, 124, 0, 0, 0, 0, 0,
+ 0, 35, 125, 126, 127, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 395,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 131, 0, 0, 0, 0, 0, 397, 49, 52,
+ 50, 132, 133, 134, 0, 136, 137, 138, 139, 140,
+ 141, 0, 0, 129, 135, 121, 114, 116, 130, 0,
0, 0, 0, 0, 0, 0, 46, 34, 51, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 213, 0,
- 0, 0, 0, 215, 0, 29, 30, 31, 217, 0,
- 0, 0, 0, 0, 0, 218, 33, 0, 0, 0,
- 0, 0, 0, 35, 220, 0, 0, 221, 37, 0,
- 38, 0, 0, 0, 39, 0, 40, 42, 43, 0,
- 0, 45, 0, 0, 0, 47, 0, 48, 0, 0,
- 0, 0, 0, 222, 0, 223, 0, 0, 0, 53,
- 49, 52, 50, 224, 54, 225, 55, 226, 57, 227,
- 58, 228, 229, 0, 0, 44, 56, 32, 214, 216,
- 0, 41, 0, 0, 0, 0, 0, 0, 46, 34,
- 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 600, 112, 113, 0, 0, 602, 117, 604, 30, 31,
- 605, 0, 120, 0, 0, 0, 122, 607, 608, 0,
- 0, 0, 0, 0, 0, 35, 609, 126, 127, 221,
- 37, 0, 38, 0, 0, 0, 39, 0, 40, 610,
- 43, 0, 0, 612, 0, 0, 0, 47, 0, 48,
- 0, 0, 0, 0, 0, 613, 0, 223, 0, 0,
- 0, 614, 49, 52, 50, 615, 616, 617, 55, 619,
- 620, 621, 622, 623, 624, 0, 0, 611, 618, 606,
- 601, 603, 130, 41, 0, 0, 0, 0, 0, 0,
- 46, 374, 380, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 365, 112, 113, 0, 0, 367, 117, 369,
- 30, 31, 370, 0, 120, 0, 0, 0, 122, 372,
- 373, 0, 0, 0, 0, 0, 0, 35, 375, 126,
- 127, 221, 37, 0, 38, 0, 0, 0, 39, 0,
- 40, 376, 43, 0, 0, 378, 0, 0, 0, 47,
- 0, 48, 0, -277, 0, 0, 0, 379, 0, 223,
- 0, 0, 0, 381, 49, 52, 50, 382, 383, 384,
- 55, 386, 387, 388, 389, 390, 391, 0, 0, 377,
- 385, 371, 366, 368, 130, 41, 0, 0, 0, 0,
- 0, 0, 46, 374, 380, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 111, 112,
+ 113, 0, 0, 115, 117, 118, 0, 0, 119, 0,
+ 120, 0, 0, 0, 122, 123, 124, 0, 0, 0,
+ 0, 0, 0, 35, 125, 126, 127, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 128, 0, 0,
+ 0, 395, 0, 0, 0, 0, 0, 0, 0, 396,
+ 0, 0, 0, 131, 0, 0, 0, 0, 0, 397,
+ 49, 52, 50, 132, 133, 134, 0, 136, 137, 138,
+ 139, 140, 141, 0, 0, 129, 135, 121, 114, 116,
+ 130, 0, 0, 0, 0, 0, 0, 0, 46, 374,
+ 380, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 213, 0, 0, 0, 0, 215, 0, 29, 30, 31,
+ 217, 0, 0, 0, 0, 0, 0, 218, 33, 0,
+ 0, 0, 0, 0, 0, 35, 220, 0, 0, 221,
+ 37, 0, 38, 0, 0, 0, 39, 0, 40, 42,
+ 43, 0, 0, 45, 0, 0, 0, 47, 0, 48,
+ 0, 0, 0, 0, 0, 222, 0, 223, 0, 0,
+ 0, 53, 49, 52, 50, 224, 54, 225, 55, 226,
+ 57, 227, 58, 228, 229, 0, 0, 44, 56, 32,
+ 214, 216, 0, 41, 0, 0, 0, 0, 0, 0,
+ 46, 34, 51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 213, 0, 0, 0, 0, 215, 0, 29,
+ 30, 31, 217, 0, 0, 0, 0, 0, 0, 218,
+ 219, 0, 0, 0, 0, 0, 0, 35, 220, 0,
+ 0, 221, 37, 0, 38, 0, 0, 0, 39, 0,
+ 40, 42, 43, 0, 0, 45, 0, 0, 0, 47,
+ 0, 48, 0, 0, 0, 0, 0, 222, 0, 223,
+ 0, 0, 0, 53, 49, 52, 50, 224, 54, 225,
+ 55, 226, 57, 227, 58, 228, 229, 0, 0, 44,
+ 56, 32, 214, 216, 0, 41, 0, 0, 0, 0,
+ 0, 0, 46, 34, 51, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 582, 112, 113, 0, 0, 584,
+ 117, 586, 30, 31, 587, 0, 120, 0, 0, 0,
+ 122, 589, 590, 0, 0, 0, 0, 0, 0, 35,
+ 591, 126, 127, 221, 37, 0, 38, 0, 0, 0,
+ 39, 0, 40, 592, 43, 0, 0, 594, 0, 0,
+ 0, 47, 0, 48, 0, 0, 0, 0, 0, 595,
+ 0, 223, 0, 0, 0, 596, 49, 52, 50, 597,
+ 598, 599, 55, 601, 602, 603, 604, 605, 606, 0,
+ 0, 593, 600, 588, 583, 585, 130, 41, 0, 0,
+ 0, 0, 0, 0, 46, 374, 380, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 365, 112, 113, 0,
+ 0, 367, 117, 369, 30, 31, 370, 0, 120, 0,
+ 0, 0, 122, 372, 373, 0, 0, 0, 0, 0,
+ 0, 35, 375, 126, 127, 221, 37, 0, 38, 0,
+ 0, 0, 39, 0, 40, 376, 43, 0, 0, 378,
+ 0, 0, 0, 47, 0, 48, 0, -278, 0, 0,
+ 0, 379, 0, 223, 0, 0, 0, 381, 49, 52,
+ 50, 382, 383, 384, 55, 386, 387, 388, 389, 390,
+ 391, 0, 0, 377, 385, 371, 366, 368, 130, 41,
+ 0, 0, 0, 0, 0, 0, 46, 374, 380, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
- 148, 142, 183, 447, 469, 347, 575, 444, 547, 627,
- 248, 320, 587, 572, 584, 586, 485, 591, 565, 529,
- 313, 545, 447, 393, 253, 528, 500, 183, 574, 453,
- 331, 652, 447, 437, 444, 313, 462, 455, 263, 457,
- 237, 441, 206, 188, 190, 150, 16, 178, 433, 630,
- 425, 641, 165, 400, 658, 458, 642, 171, 173, 248,
- 475, 351, 498, 248, 253, 313, 183, 466, 183, 541,
- 495, 629, 253, 512, 511, 188, 145, 206, 260, 645,
- 644, 62, 0, 62, 362, 507, 298, 469, 206, 206,
- 247, 514, 514, 62, 206, 460, 646, 409, 152, 409,
- 599, 628, 355, 239, 206, 62, 62, 62, 362, 260,
- 296, 297, 299, 331, 62, 62, 313, 504, 206, 295,
- 62, 62, 459, 460, 356, 206, 277, 62, 62, 502,
- 182, 281, 206, 62, 410, 182, 410, 401, 62, 353,
- 459, 62, 62, 506, 505, 62, 62, 503, 493, 349,
- 91, 62, 492, 206, 63, 206, 313, 62, 345, 483,
- 393, 479, 62, 62, 260, 206, 444, 206, 510, 102,
- 148, 62, 104, 182, 206, 188, 188, 468, 180, 170,
- 206, 62, 148, 247, 62, 394, 460, 393, 409, 340,
- 412, 341, 362, 206, 422, 167, 393, 206, 62, 108,
- 459, 313, 62, 187, 419, 62, 62, 86, 206, 62,
- 318, 98, 100, 403, 62, 99, 69, 322, 514, 514,
- 313, 62, 417, 553, 557, 410, 206, 79, 110, 246,
- 62, 343, 206, 206, 62, 0, 70, 62, 74, 71,
- 62, 62, 206, 108, 90, 206, 93, 62, 62, 62,
- 72, 62, 92, 62, 94, 62, 95, 309, 96, 407,
- 97, 309, 281, 62, 362, 362, 281, 0, 281, 242,
- 302, 0, 110, 177, 464, 0, 316, 309, 0, 308,
- 206, 206, 281, 311, 309, 0, 62, 62, 309, 281,
- 206, 281, 281, 281, 0, 314, 0, 0, 62, 330,
- 62, 324, 0, 281, 327, 281, 337, 300, 62, 62,
- 328, 304, 62, 281, 281, 301, 564, 281, 62, 289,
- 306, 569, 561, 281, 0, 514, 553, 284, 625, 0,
- 0, 514, 0, 0, 522, 0, 0, 0, 0, 0,
- 522, 0, 0, 0, 0, 0, 513, 523, 0, 485,
- 443, 440, 513, 523, 533, 534, 535, 536, 540, 537,
- 538, 577, 533, 534, 535, 536, 540, 537, 538, 0,
+ 545, 572, 565, 632, 654, 148, 529, 541, 528, 142,
+ 660, 263, 500, 393, 617, 616, 621, 614, 16, 629,
+ 444, 183, 313, 547, 447, 183, 631, 643, 253, 248,
+ 644, 485, 575, 574, 607, 152, 320, 437, 178, 313,
+ 441, 433, 173, 183, 165, 253, 462, 313, 457, 447,
+ 444, 453, 253, 458, 425, 347, 455, 248, 351, 188,
+ 475, 466, 498, 171, 150, 447, 206, 190, 400, 468,
+ 0, 183, 248, 495, 469, 237, 409, 393, 409, 331,
+ 464, 247, 512, 206, 145, 206, 62, 409, 507, 206,
+ 0, 511, 0, 188, 0, 206, 206, 188, 206, 62,
+ 62, 504, 460, 417, 62, 206, 505, 206, 647, 646,
+ 407, 0, 0, 410, 62, 410, 459, 62, 148, 506,
+ 62, 187, 62, 277, 410, 419, 412, 298, 281, 393,
+ 148, 0, 0, 0, 422, 62, 170, 62, 180, 62,
+ 295, 514, 296, 260, 297, 62, 648, 503, 62, 62,
+ 62, 182, 514, 299, 394, 62, 62, 460, 459, 206,
+ 362, 630, 362, 62, 167, 502, 514, 62, 62, 322,
+ 62, 553, 444, 99, 100, 93, 206, 62, 356, 206,
+ 510, 206, 94, 62, 62, 206, 62, 62, 95, 96,
+ 62, 97, 86, 62, 90, 493, 62, 91, 188, 492,
+ 92, 355, 62, 353, 108, 62, 483, 349, 242, 345,
+ 247, 313, 331, 469, 102, 104, 313, 206, 62, 206,
+ 182, 260, 62, 206, 206, 206, 239, 62, 98, 182,
+ 313, 313, 62, 110, 362, 72, 62, 206, 69, 62,
+ 318, 70, 62, 62, 71, 260, 63, 62, 246, 393,
+ 581, 62, 62, 460, 0, 74, 206, 62, 79, 459,
+ 0, 206, 514, 309, 206, 62, 362, 557, 281, 0,
+ 281, 309, 62, 0, 284, 403, 281, 281, 0, 309,
+ 401, 0, 206, 306, 281, 308, 343, 479, 340, 62,
+ 62, 341, 108, 337, 281, 281, 206, 302, 309, 62,
+ 0, 330, 304, 281, 281, 314, 316, 62, 309, 0,
+ 62, 62, 281, 281, 324, 281, 281, 301, 300, 514,
+ 311, 110, 177, 0, 327, 0, 62, 569, 522, 564,
+ 328, 281, 553, 289, 627, 561, 0, 0, 514, 0,
+ 513, 523, 0, 0, 514, 0, 0, 522, 0, 0,
+ 0, 0, 443, 522, 0, 485, 0, 0, 0, 513,
+ 523, 0, 0, 0, 0, 513, 523, 533, 534, 535,
+ 536, 540, 537, 538, 0, 0, 0, 0, 0, 0,
+ 0, 577, 0, 0, 0, 0, 0, 0, 0, 362,
+ 579, 580, 533, 534, 535, 536, 540, 537, 538, 569,
+ 0, 0, 0, 0, 0, 206, 0, 0, 570, 571,
+ 533, 534, 535, 536, 540, 537, 538, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 514, 569, 0, 0, 0, 0, 0,
- 0, 0, 522, 570, 571, 533, 534, 535, 536, 540,
- 537, 538, 0, 0, 513, 523, 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, 440, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 577, 0,
+ 0, 0, 0, 0, 0, 0, 0, 625, 626, 533,
+ 534, 535, 536, 540, 537, 538, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 594, 0, 0, 0, 0, 0, 0, 0, 0, 597,
- 598, 533, 534, 535, 536, 540, 537, 538, 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, 0};
+ 0, 0, 0, 0, 0};
const short QQmlJSGrammar::action_check [] = {
- 2, 55, 34, 7, 60, 36, 31, 37, 61, 17,
- 24, 16, 2, 20, 33, 60, 5, 8, 36, 79,
- 60, 36, 33, 33, 7, 48, 55, 1, 55, 0,
- 33, 7, 60, 33, 60, 36, 60, 36, 8, 7,
- 36, 8, 7, 55, 7, 5, 55, 33, 7, 7,
- 48, 7, 36, 7, 36, 5, 7, 36, 1, 36,
- 7, 36, 7, 7, 61, 7, 60, 33, 8, 1,
- 7, 77, 36, 7, 36, 60, 7, 29, 8, 36,
- 7, 36, 55, 36, 79, 33, 79, 36, 66, 8,
- 36, 60, 33, 17, 33, 7, 2, 8, 36, 79,
- 36, 2, 7, 7, 7, 66, 8, 33, 33, 7,
- -1, 33, 8, 48, 8, 15, 15, 33, 36, 36,
- 33, 8, 55, 7, 8, 8, 15, 6, 48, 10,
- 8, 60, 8, 61, 34, 34, 8, 60, 8, 60,
- 55, 20, 8, -1, 8, 34, 8, 61, 62, 8,
- 40, 61, 62, 61, 62, 50, 42, 8, 60, 54,
- 56, 51, 7, -1, 61, 62, 60, 53, 61, 62,
- 61, 62, 8, 60, 55, 40, 29, 60, 56, -1,
- 56, 29, 91, 92, 61, 62, 51, 61, 62, 61,
- 60, 40, 56, 15, 60, 50, -1, 56, 60, 54,
- 61, 62, 51, 1, 61, 62, 91, 92, 40, 60,
- 29, 25, 34, 27, 36, -1, 61, 62, 12, 51,
- 61, 62, 75, 12, 38, 61, 62, 75, 25, 25,
- 27, 27, 25, 86, 27, 12, 7, 25, 86, 27,
- 15, 38, 38, 29, 25, 38, 27, 25, 89, 27,
- 38, 25, 25, 27, 27, 7, 75, 38, 15, 34,
- 38, 36, 8, 57, 38, 38, 29, 86, 57, 63,
- 61, 62, 36, 29, 63, 8, -1, 34, -1, 36,
- 57, 25, 25, 27, 27, -1, 63, -1, -1, 75,
- 61, 62, 15, -1, 38, 38, -1, 61, 62, -1,
- 86, 25, 93, 27, 25, -1, 27, -1, 7, 61,
- 62, 34, 75, 36, 38, 61, 62, 38, 47, 75,
- 18, 19, -1, 86, 18, 19, 18, 19, 61, 62,
- 86, -1, 61, 62, 33, 18, 19, 98, 99, 100,
- 101, 102, 103, -1, -1, -1, -1, 45, 46, -1,
- -1, 45, 46, 45, 46, -1, 23, 24, -1, -1,
- 23, 24, 45, 46, 93, 32, 23, 24, 35, 32,
- 37, -1, 35, -1, 37, 32, 23, 24, 35, -1,
- 37, 29, 23, 24, 29, 32, -1, -1, 35, -1,
- 37, 32, 23, 24, 35, 94, 37, 29, -1, -1,
- 31, 32, 23, 24, 35, 29, 37, 15, -1, -1,
- 31, 32, -1, -1, 35, 29, 37, -1, 66, 67,
- 68, 66, 67, 68, -1, 33, 34, -1, 36, 29,
- -1, -1, -1, -1, 66, 67, 68, 29, -1, -1,
- -1, -1, 66, 67, 68, -1, 94, 95, 96, 94,
- 95, 96, 66, 67, 68, -1, -1, -1, -1, -1,
- -1, -1, 94, 95, 96, -1, 66, 67, 68, -1,
- 94, 95, 96, -1, 66, 67, 68, 29, -1, -1,
- 94, 95, 96, 29, -1, -1, 29, -1, -1, 29,
- -1, -1, 29, -1, 94, 95, 96, 29, 23, 24,
- 29, -1, 94, 95, 96, -1, 31, 32, -1, -1,
- 35, -1, 37, -1, 66, 67, 68, -1, -1, -1,
- 66, 67, 68, 66, 67, 68, 66, 67, 68, 66,
- 67, 68, -1, 29, 66, 67, 68, 66, 67, 68,
- 36, -1, 94, 95, 96, -1, -1, -1, 94, 95,
- 96, 94, 95, 96, 94, 95, 96, 94, 95, 96,
- -1, -1, 94, 95, 96, 94, 95, 96, 29, -1,
- 66, 67, 68, 29, -1, 36, 29, -1, -1, -1,
- 36, 29, -1, -1, 29, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 94, 95,
- 96, -1, -1, -1, -1, 66, 67, 68, 61, 62,
- 66, 67, 68, 66, 67, 68, 61, 62, 66, 67,
- 68, 66, 67, 68, -1, -1, -1, 29, -1, -1,
+ 36, 60, 5, 36, 31, 7, 66, 16, 33, 7,
+ 36, 7, 7, 7, 7, 33, 36, 7, 55, 8,
+ 36, 7, 7, 36, 7, 55, 7, 7, 36, 36,
+ 17, 7, 33, 33, 7, 7, 7, 36, 7, 36,
+ 7, 7, 34, 60, 55, 36, 7, 66, 60, 33,
+ 55, 33, 7, 77, 33, 8, 60, 20, 36, 33,
+ 1, 36, 8, 33, 7, 33, 2, 55, 33, 33,
+ 29, 1, 24, 33, 8, 1, -1, 2, 55, -1,
+ 37, 8, 36, -1, -1, -1, 8, 36, 36, 33,
+ 7, 2, 48, 1, 36, 7, 36, 36, 60, 36,
+ 33, 17, 60, 8, 0, 36, 8, 2, -1, 60,
+ 60, 8, 6, -1, 61, 7, 8, 8, 33, 8,
+ -1, 8, 60, 55, 48, 60, 20, 48, 8, 36,
+ 8, 10, 8, 61, 79, 55, -1, -1, 48, 8,
+ 8, 40, 40, 61, 8, 8, 60, 5, 61, 62,
+ 79, 60, 51, 51, 56, 40, 79, 61, 62, 40,
+ 79, 61, 62, 60, 50, 8, 51, 56, 54, 60,
+ 51, 61, 62, 60, 8, 50, 55, 61, 62, 54,
+ 60, 29, 60, 42, 60, 91, 92, 56, 56, 61,
+ 62, 61, 62, 56, 53, 15, 60, 8, 7, 61,
+ 62, 61, 62, 29, 61, 62, 29, 25, 8, 27,
+ 7, -1, 15, 29, 34, 8, 36, 25, 61, 27,
+ 38, 12, -1, 25, 33, 27, 60, 75, 12, 36,
+ 38, 34, 89, 36, 29, 7, 38, 29, 86, -1,
+ 25, 12, 27, 25, 25, 27, 27, 7, 15, 75,
+ 61, 62, 75, 38, 61, 62, 38, 38, -1, 75,
+ 86, 61, 62, 86, 61, 62, 57, 34, 61, 62,
+ 86, -1, 63, 57, 15, 61, 62, 15, -1, 63,
+ 75, 18, 19, 75, -1, 94, 57, 18, 19, 61,
+ 62, 86, 63, 34, 86, 36, 34, 47, 36, 18,
+ 19, 61, 62, 15, -1, 18, 19, 93, 45, 46,
+ 15, 61, 62, -1, 45, 46, -1, -1, -1, -1,
+ -1, 33, 34, -1, 36, -1, 45, 46, 33, 34,
+ -1, 36, 45, 46, -1, 23, 24, -1, -1, 25,
+ -1, 27, -1, 93, 32, 23, 24, 35, 29, 37,
+ -1, -1, 38, 31, 32, -1, -1, 35, 29, 37,
+ 23, 24, 98, 99, 100, 101, 102, 103, 31, 32,
+ 23, 24, 35, 29, 37, -1, -1, -1, 31, 32,
+ 23, 24, 35, -1, 37, 66, 67, 68, 31, 32,
+ 23, 24, 35, -1, 37, 66, 67, 68, 31, 32,
+ -1, -1, 35, -1, 37, 29, -1, -1, 29, -1,
+ 66, 67, 68, 94, 95, 96, 29, -1, -1, 29,
+ 23, 24, 29, 94, 95, 96, -1, -1, 29, 32,
+ -1, -1, 35, -1, 37, 36, -1, -1, 94, 95,
+ 96, 29, 66, 67, 68, 66, 67, 68, 36, -1,
+ -1, -1, -1, 66, 67, 68, 66, 67, 68, 66,
+ 67, 68, 29, -1, -1, 66, 67, 68, -1, 36,
+ 94, 95, 96, 94, 95, 96, -1, -1, 66, 67,
+ 68, 94, 95, 96, 94, 95, 96, 94, 95, 96,
+ -1, -1, -1, 94, 95, 96, -1, -1, 29, 66,
+ 67, 68, -1, 29, -1, -1, 94, 95, 96, -1,
+ -1, 29, -1, -1, -1, -1, -1, -1, -1, 29,
+ -1, -1, -1, -1, -1, -1, -1, 94, 95, 96,
+ 61, 62, -1, -1, -1, 66, 67, 68, -1, -1,
+ 66, 67, 68, 61, 62, -1, -1, -1, 66, 67,
+ 68, 61, 62, -1, -1, -1, 66, 67, 68, -1,
-1, -1, -1, 94, 95, 96, -1, -1, 94, 95,
- 96, 94, 95, 96, -1, -1, 94, 95, 96, 94,
- 95, 96, -1, -1, -1, -1, -1, -1, 29, 61,
- 62, -1, -1, -1, 66, 67, 68, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 96, -1, -1, -1, -1, -1, 94, 95, 96, -1,
+ 29, -1, -1, -1, 94, 95, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 61, 62, 94, 95, 96, 66, 67, 68, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 94, 95, 96, -1, -1, -1, -1,
- -1, -1, -1, 12, 13, 3, -1, -1, -1, -1,
- -1, -1, -1, 22, -1, 13, -1, -1, -1, 17,
- 29, -1, -1, -1, 33, 34, -1, 36, 26, -1,
- 28, -1, -1, -1, 43, -1, -1, -1, 47, -1,
- -1, 39, -1, 41, 42, -1, -1, -1, -1, -1,
- -1, 49, -1, -1, 52, 53, 65, 66, 67, 68,
- 58, 70, -1, -1, -1, -1, 64, -1, -1, -1,
- -1, -1, 81, 82, 83, -1, -1, -1, 87, -1,
- -1, -1, 80, -1, -1, 94, 95, 96, -1, -1,
- -1, -1, -1, -1, -1, 12, 13, -1, -1, -1,
- -1, -1, -1, -1, -1, 22, -1, -1, 3, -1,
- -1, -1, 29, -1, -1, -1, 33, 34, 13, 36,
- -1, -1, 17, -1, -1, -1, 43, -1, -1, -1,
- 47, 26, -1, 28, -1, -1, 31, -1, -1, -1,
- -1, -1, -1, -1, 39, -1, 41, 42, 65, 66,
- 67, 68, -1, 70, 49, -1, -1, 52, 53, -1,
- -1, -1, -1, 58, 81, 82, 83, -1, -1, 64,
- 87, -1, -1, -1, -1, -1, -1, 94, 95, 96,
- -1, -1, -1, -1, -1, 80, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 61, 62, 3, -1, -1, 66, 67, 68,
+ -1, -1, -1, -1, 13, -1, -1, -1, 17, -1,
+ -1, -1, -1, -1, -1, -1, -1, 26, -1, 28,
+ -1, -1, 31, -1, -1, 94, 95, 96, -1, -1,
+ 39, -1, 41, 42, -1, 12, 13, 3, -1, -1,
+ 49, -1, -1, 52, 53, 22, -1, 13, -1, 58,
+ -1, 17, 29, -1, -1, 64, 33, 34, -1, 36,
+ 26, -1, 28, -1, -1, -1, 43, -1, -1, -1,
+ 47, 80, -1, 39, -1, 41, 42, -1, -1, -1,
+ -1, -1, -1, 49, -1, -1, 52, 53, 65, 66,
+ 67, 68, 58, 70, -1, -1, -1, -1, 64, -1,
+ -1, -1, -1, -1, 81, 82, 83, -1, -1, -1,
+ 87, -1, -1, -1, 80, -1, -1, 94, 95, 96,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 12, 13, -1, -1, -1, -1, -1, -1, -1,
- -1, 22, -1, -1, -1, -1, -1, -1, 29, -1,
- -1, -1, 33, 34, -1, 36, -1, -1, -1, -1,
- -1, -1, 43, -1, -1, -1, 47, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 65, 66, 67, 68, -1, 70,
+ 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
+ 22, -1, -1, -1, -1, -1, -1, 29, -1, -1,
+ -1, 33, 34, -1, 36, -1, -1, -1, -1, -1,
+ -1, 43, -1, -1, -1, 47, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 81, 82, 83, -1, -1, -1, 87, -1, -1, -1,
- -1, -1, -1, 94, 95, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 12, 13, -1, -1, -1,
- -1, -1, -1, -1, -1, 22, -1, -1, -1, -1,
- -1, -1, 29, -1, -1, -1, 33, 34, -1, 36,
- -1, -1, -1, -1, -1, -1, 43, -1, -1, -1,
- 47, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 65, 66,
- 67, 68, -1, 70, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 81, 82, 83, -1, -1, -1,
- 87, -1, -1, -1, -1, -1, -1, 94, 95, 96,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 10,
- -1, 12, 13, -1, -1, -1, -1, -1, -1, -1,
- -1, 22, -1, -1, -1, -1, -1, -1, 29, -1,
- -1, -1, 33, 34, -1, 36, -1, -1, -1, -1,
- -1, -1, 43, -1, -1, -1, 47, -1, -1, -1,
+ -1, -1, -1, 65, 66, 67, 68, -1, 70, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 81,
+ 82, 83, -1, -1, -1, 87, -1, -1, -1, -1,
+ -1, -1, 94, 95, 96, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 12, 13, -1, -1, -1, -1,
+ -1, -1, -1, -1, 22, -1, -1, -1, -1, -1,
+ -1, 29, -1, -1, -1, 33, 34, -1, 36, -1,
+ -1, -1, -1, -1, -1, 43, -1, -1, -1, 47,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 65, 66, 67, 68, -1, 70,
- -1, -1, -1, -1, 75, -1, -1, -1, -1, -1,
- 81, 82, 83, 84, -1, -1, 87, -1, -1, -1,
- -1, -1, -1, 94, 95, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 10, -1, 12, 13, -1,
- -1, -1, -1, -1, -1, -1, -1, 22, -1, -1,
- -1, -1, -1, -1, 29, -1, -1, -1, 33, 34,
- -1, 36, -1, -1, -1, -1, -1, -1, 43, -1,
- -1, -1, 47, -1, -1, -1, -1, -1, -1, -1,
- 55, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 65, 66, 67, 68, -1, 70, -1, -1, -1, -1,
- 75, -1, -1, -1, -1, -1, 81, 82, 83, 84,
- -1, -1, 87, -1, -1, -1, -1, -1, -1, 94,
- 95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 10, -1, 12, 13, -1, -1, -1, -1, -1,
- -1, -1, -1, 22, -1, -1, -1, -1, -1, -1,
- 29, -1, -1, -1, 33, 34, -1, 36, -1, -1,
- -1, -1, -1, -1, 43, -1, -1, -1, 47, -1,
- -1, -1, -1, -1, -1, -1, 55, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 65, 66, 67, 68,
- -1, 70, -1, -1, -1, -1, 75, -1, -1, -1,
- -1, -1, 81, 82, 83, 84, -1, -1, 87, -1,
- -1, -1, -1, -1, -1, 94, 95, 96, -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, 65, 66, 67,
+ 68, -1, 70, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 81, 82, 83, -1, -1, -1, 87,
+ -1, -1, -1, -1, -1, -1, 94, 95, 96, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 10, -1,
+ 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
+ 22, -1, -1, -1, -1, -1, -1, 29, -1, -1,
+ -1, 33, 34, -1, 36, -1, -1, -1, -1, -1,
+ -1, 43, -1, -1, -1, 47, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 65, 66, 67, 68, -1, 70, -1, 72, -1,
- 74, -1, 76, -1, -1, -1, -1, 81, 82, 83,
- -1, -1, -1, 87, -1, -1, -1, -1, -1, -1,
- 94, 95, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 7, -1, -1, -1, 11, 12, 13, -1,
+ -1, -1, -1, 65, 66, 67, 68, -1, 70, -1,
+ -1, -1, -1, 75, -1, -1, -1, -1, -1, 81,
+ 82, 83, 84, -1, -1, 87, -1, -1, -1, -1,
+ -1, -1, 94, 95, 96, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 10, -1, 12, 13, -1, -1,
+ -1, -1, -1, -1, -1, -1, 22, -1, -1, -1,
+ -1, -1, -1, 29, -1, -1, -1, 33, 34, -1,
+ 36, -1, -1, -1, -1, -1, -1, 43, -1, -1,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, 55,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 65,
+ 66, 67, 68, -1, 70, -1, -1, -1, -1, 75,
+ -1, -1, -1, -1, -1, 81, 82, 83, 84, -1,
+ -1, 87, -1, -1, -1, -1, -1, -1, 94, 95,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 10, -1, 12, 13, -1, -1, -1, -1, -1, -1,
+ -1, -1, 22, -1, -1, -1, -1, -1, -1, 29,
+ -1, -1, -1, 33, 34, -1, 36, -1, -1, -1,
+ -1, -1, -1, 43, -1, -1, -1, 47, -1, -1,
+ -1, -1, -1, -1, -1, 55, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 65, 66, 67, 68, -1,
+ 70, -1, -1, -1, -1, 75, -1, -1, -1, -1,
+ -1, 81, 82, 83, 84, -1, -1, 87, -1, -1,
+ -1, -1, -1, -1, 94, 95, 96, -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,
@@ -879,101 +844,100 @@ const short QQmlJSGrammar::action_check [] = {
-1, 76, -1, -1, -1, -1, 81, 82, 83, -1,
-1, -1, 87, -1, -1, -1, -1, -1, -1, 94,
95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 11, 12, 13, -1, -1, -1, -1, -1, -1,
- -1, -1, 22, -1, -1, -1, -1, -1, -1, 29,
- -1, -1, -1, 33, 34, -1, 36, -1, -1, -1,
- 40, -1, 42, 43, 44, -1, -1, 47, -1, -1,
- -1, 51, -1, 53, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 65, 66, 67, 68, -1,
- 70, -1, 72, -1, 74, 75, 76, -1, -1, -1,
- -1, 81, 82, 83, -1, -1, -1, 87, -1, -1,
- -1, -1, -1, -1, 94, 95, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 8, -1, -1, 11,
- 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
- 22, -1, -1, -1, -1, -1, -1, 29, -1, -1,
- -1, 33, 34, -1, 36, -1, -1, -1, 40, -1,
- 42, 43, 44, -1, -1, 47, -1, -1, -1, 51,
- -1, 53, -1, -1, 56, -1, -1, -1, -1, -1,
- -1, -1, -1, 65, 66, 67, 68, -1, 70, -1,
- 72, -1, 74, -1, 76, -1, -1, -1, -1, 81,
- 82, 83, -1, -1, -1, 87, -1, -1, -1, -1,
- -1, -1, 94, 95, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 8, -1, -1, 11, 12, 13,
- -1, -1, -1, -1, -1, -1, -1, -1, 22, -1,
- -1, -1, -1, -1, -1, 29, -1, -1, -1, 33,
- 34, -1, 36, -1, -1, -1, 40, -1, 42, 43,
- 44, -1, -1, 47, -1, -1, -1, 51, -1, 53,
- -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
- -1, 65, 66, 67, 68, -1, 70, -1, 72, -1,
- 74, -1, 76, -1, -1, -1, -1, 81, 82, 83,
- -1, -1, -1, 87, -1, -1, -1, -1, -1, -1,
- 94, 95, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 8, -1, -1, 11, 12, 13, -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,
- 56, -1, -1, -1, -1, -1, -1, -1, -1, 65,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 65,
66, 67, 68, -1, 70, -1, 72, -1, 74, -1,
76, -1, -1, -1, -1, 81, 82, 83, -1, -1,
-1, 87, -1, -1, -1, -1, -1, -1, 94, 95,
96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 8, -1, -1, 11, 12, 13, -1, -1, -1, -1,
- -1, -1, -1, -1, 22, -1, -1, -1, -1, -1,
- -1, 29, -1, -1, -1, 33, 34, -1, 36, -1,
- -1, -1, 40, -1, 42, 43, 44, -1, -1, 47,
- -1, -1, -1, 51, -1, 53, -1, -1, 56, -1,
- -1, -1, -1, -1, -1, -1, -1, 65, 66, 67,
- 68, -1, 70, -1, 72, -1, 74, -1, 76, -1,
- -1, -1, -1, 81, 82, 83, -1, -1, -1, 87,
- -1, -1, -1, -1, -1, -1, 94, 95, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 11, 12,
+ 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
+ -1, 22, -1, -1, -1, -1, -1, -1, 29, -1,
+ -1, -1, 33, 34, -1, 36, -1, -1, -1, 40,
+ -1, 42, 43, 44, -1, -1, 47, -1, -1, -1,
+ 51, -1, 53, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 65, 66, 67, 68, -1, 70,
+ -1, 72, -1, 74, 75, 76, -1, -1, -1, -1,
+ 81, 82, 83, -1, -1, -1, 87, -1, -1, -1,
+ -1, -1, -1, 94, 95, 96, -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, 30, -1, -1,
+ -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, 61, -1,
- -1, -1, 65, 66, 67, 68, 69, 70, -1, 72,
- 73, 74, -1, 76, -1, 78, -1, -1, 81, 82,
+ 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
+ -1, -1, 65, 66, 67, 68, -1, 70, -1, 72,
+ -1, 74, -1, 76, -1, -1, -1, -1, 81, 82,
83, -1, -1, -1, 87, -1, -1, -1, -1, -1,
-1, 94, 95, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 11, 12, 13, -1, -1, -1, -1,
- -1, -1, -1, -1, 22, -1, -1, -1, -1, -1,
- -1, 29, 30, -1, -1, 33, 34, -1, 36, -1,
- -1, -1, 40, -1, 42, 43, 44, -1, -1, 47,
- -1, -1, -1, 51, -1, 53, -1, -1, -1, -1,
- -1, -1, -1, 61, -1, -1, -1, 65, 66, 67,
- 68, 69, 70, -1, 72, 73, 74, -1, 76, -1,
- 78, -1, -1, 81, 82, 83, -1, -1, -1, 87,
- -1, -1, -1, -1, -1, -1, 94, 95, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 5,
- 6, -1, -1, 9, 10, 11, -1, -1, 14, -1,
- 16, -1, -1, -1, 20, 21, 22, -1, -1, -1,
- -1, -1, -1, 29, 30, 31, 32, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 43, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
- 66, 67, 68, 69, 70, 71, -1, 73, 74, 75,
- 76, 77, 78, -1, -1, 81, 82, 83, 84, 85,
- 86, -1, -1, -1, -1, -1, -1, -1, 94, 95,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 5, 6, -1, -1, 9, 10, 11, -1, -1,
- 14, -1, 16, -1, -1, -1, 20, 21, 22, -1,
- -1, -1, -1, -1, -1, 29, 30, 31, 32, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 43,
- -1, -1, -1, 47, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
- -1, 65, 66, 67, 68, 69, 70, 71, -1, 73,
- 74, 75, 76, 77, 78, -1, -1, 81, 82, 83,
- 84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 8, -1, -1, 11, 12, 13, -1,
+ -1, -1, -1, -1, -1, -1, -1, 22, -1, -1,
+ -1, -1, -1, -1, 29, -1, -1, -1, 33, 34,
+ -1, 36, -1, -1, -1, 40, -1, 42, 43, 44,
+ -1, -1, 47, -1, -1, -1, 51, -1, 53, -1,
+ -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
+ 65, 66, 67, 68, -1, 70, -1, 72, -1, 74,
+ -1, 76, -1, -1, -1, -1, 81, 82, 83, -1,
+ -1, -1, 87, -1, -1, -1, -1, -1, -1, 94,
+ 95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 8, -1, -1, 11, 12, 13, -1, -1, -1,
+ -1, -1, -1, -1, -1, 22, -1, -1, -1, -1,
+ -1, -1, 29, -1, -1, -1, 33, 34, -1, 36,
+ -1, -1, -1, 40, -1, 42, 43, 44, -1, -1,
+ 47, -1, -1, -1, 51, -1, 53, -1, -1, 56,
+ -1, -1, -1, -1, -1, -1, -1, -1, 65, 66,
+ 67, 68, -1, 70, -1, 72, -1, 74, -1, 76,
+ -1, -1, -1, -1, 81, 82, 83, -1, -1, -1,
+ 87, -1, -1, -1, -1, -1, -1, 94, 95, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 8,
+ -1, -1, 11, 12, 13, -1, -1, -1, -1, -1,
+ -1, -1, -1, 22, -1, -1, -1, -1, -1, -1,
+ 29, -1, -1, -1, 33, 34, -1, 36, -1, -1,
+ -1, 40, -1, 42, 43, 44, -1, -1, 47, -1,
+ -1, -1, 51, -1, 53, -1, -1, 56, -1, -1,
+ -1, -1, -1, -1, -1, -1, 65, 66, 67, 68,
+ -1, 70, -1, 72, -1, 74, -1, 76, -1, -1,
+ -1, -1, 81, 82, 83, -1, -1, -1, 87, -1,
+ -1, -1, -1, -1, -1, 94, 95, 96, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 11, 12, 13,
+ -1, -1, -1, -1, -1, -1, -1, -1, 22, -1,
+ -1, -1, -1, -1, -1, 29, 30, -1, -1, 33,
+ 34, -1, 36, -1, -1, -1, 40, -1, 42, 43,
+ 44, -1, -1, 47, -1, -1, -1, 51, -1, 53,
+ -1, -1, -1, -1, -1, -1, -1, 61, -1, -1,
+ -1, 65, 66, 67, 68, 69, 70, -1, 72, 73,
+ 74, -1, 76, -1, 78, -1, -1, 81, 82, 83,
+ -1, -1, -1, 87, -1, -1, -1, -1, -1, -1,
+ 94, 95, 96, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 11, 12, 13, -1, -1, -1, -1, -1,
+ -1, -1, -1, 22, -1, -1, -1, -1, -1, -1,
+ 29, 30, -1, -1, 33, 34, -1, 36, -1, -1,
+ -1, 40, -1, 42, 43, 44, -1, -1, 47, -1,
+ -1, -1, 51, -1, 53, -1, -1, -1, -1, -1,
+ -1, -1, 61, -1, -1, -1, 65, 66, 67, 68,
+ 69, 70, -1, 72, 73, 74, -1, 76, -1, 78,
+ -1, -1, 81, 82, 83, -1, -1, -1, 87, -1,
+ -1, -1, -1, -1, -1, 94, 95, 96, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 11, 12, 13,
+ -1, -1, -1, -1, -1, -1, -1, -1, 22, -1,
+ -1, -1, -1, -1, -1, 29, 30, -1, -1, 33,
+ 34, -1, 36, -1, -1, -1, 40, -1, 42, 43,
+ 44, -1, -1, 47, -1, -1, -1, 51, -1, 53,
+ -1, -1, -1, -1, -1, -1, -1, 61, -1, -1,
+ -1, 65, 66, 67, 68, 69, 70, -1, 72, 73,
+ 74, -1, 76, -1, 78, -1, -1, 81, 82, 83,
+ -1, -1, -1, 87, -1, -1, -1, -1, -1, -1,
94, 95, 96, -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, 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, 71,
+ -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
-1, 73, 74, 75, 76, 77, 78, -1, -1, 81,
82, 83, 84, 85, 86, -1, -1, -1, -1, -1,
-1, -1, 94, 95, 96, -1, -1, -1, -1, -1,
@@ -982,104 +946,126 @@ const short QQmlJSGrammar::action_check [] = {
20, 21, 22, -1, -1, -1, -1, -1, -1, 29,
30, 31, 32, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 43, -1, -1, -1, 47, -1, -1,
- -1, -1, -1, -1, -1, 55, -1, -1, -1, 59,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, 65, 66, 67, 68, 69,
70, 71, -1, 73, 74, 75, 76, 77, 78, -1,
-1, 81, 82, 83, 84, 85, 86, -1, -1, -1,
-1, -1, -1, -1, 94, 95, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, -1, -1, -1,
- -1, 9, -1, 11, 12, 13, 14, -1, -1, -1,
- -1, -1, -1, 21, 22, -1, -1, -1, -1, -1,
- -1, 29, 30, -1, -1, 33, 34, -1, 36, -1,
- -1, -1, 40, -1, 42, 43, 44, -1, -1, 47,
- -1, -1, -1, 51, -1, 53, -1, -1, -1, -1,
- -1, 59, -1, 61, -1, -1, -1, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 78, -1, -1, 81, 82, 83, 84, 85, -1, 87,
+ -1, -1, -1, -1, -1, -1, 4, 5, 6, -1,
+ -1, 9, 10, 11, -1, -1, 14, -1, 16, -1,
+ -1, -1, 20, 21, 22, -1, -1, -1, -1, -1,
+ -1, 29, 30, 31, 32, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 43, -1, -1, -1, 47,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, -1, -1, -1, 65, 66, 67,
+ 68, 69, 70, 71, -1, 73, 74, 75, 76, 77,
+ 78, -1, -1, 81, 82, 83, 84, 85, 86, -1,
-1, -1, -1, -1, -1, -1, 94, 95, 96, -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,
+ -1, -1, -1, -1, -1, -1, -1, -1, 4, 5,
+ 6, -1, -1, 9, 10, 11, -1, -1, 14, -1,
+ 16, -1, -1, -1, 20, 21, 22, -1, -1, -1,
+ -1, -1, -1, 29, 30, 31, 32, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 43, -1, -1,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, 55,
+ -1, -1, -1, 59, -1, -1, -1, -1, -1, 65,
+ 66, 67, 68, 69, 70, 71, -1, 73, 74, 75,
76, 77, 78, -1, -1, 81, 82, 83, 84, 85,
- -1, 87, -1, -1, -1, -1, -1, -1, 94, 95,
+ 86, -1, -1, -1, -1, -1, -1, -1, 94, 95,
96, -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,
+ 4, -1, -1, -1, -1, 9, -1, 11, 12, 13,
+ 14, -1, -1, -1, -1, -1, -1, 21, 22, -1,
+ -1, -1, -1, -1, -1, 29, 30, -1, -1, 33,
34, -1, 36, -1, -1, -1, 40, -1, 42, 43,
44, -1, -1, 47, -1, -1, -1, 51, -1, 53,
-1, -1, -1, -1, -1, 59, -1, 61, -1, -1,
-1, 65, 66, 67, 68, 69, 70, 71, 72, 73,
74, 75, 76, 77, 78, -1, -1, 81, 82, 83,
- 84, 85, 86, 87, -1, -1, -1, -1, -1, -1,
+ 84, 85, -1, 87, -1, -1, -1, -1, -1, -1,
94, 95, 96, -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,
+ -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, 55, -1, -1, -1, 59, -1, 61,
+ -1, 53, -1, -1, -1, -1, -1, 59, -1, 61,
-1, -1, -1, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, -1, -1, 81,
- 82, 83, 84, 85, 86, 87, -1, -1, -1, -1,
+ 82, 83, 84, 85, -1, 87, -1, -1, -1, -1,
-1, -1, 94, 95, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1,
+ -1, -1, -1, -1, 4, 5, 6, -1, -1, 9,
+ 10, 11, 12, 13, 14, -1, 16, -1, -1, -1,
+ 20, 21, 22, -1, -1, -1, -1, -1, -1, 29,
+ 30, 31, 32, 33, 34, -1, 36, -1, -1, -1,
+ 40, -1, 42, 43, 44, -1, -1, 47, -1, -1,
+ -1, 51, -1, 53, -1, -1, -1, -1, -1, 59,
+ -1, 61, -1, -1, -1, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, -1,
+ -1, 81, 82, 83, 84, 85, 86, 87, -1, -1,
+ -1, -1, -1, -1, 94, 95, 96, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 4, 5, 6, -1,
+ -1, 9, 10, 11, 12, 13, 14, -1, 16, -1,
+ -1, -1, 20, 21, 22, -1, -1, -1, -1, -1,
+ -1, 29, 30, 31, 32, 33, 34, -1, 36, -1,
+ -1, -1, 40, -1, 42, 43, 44, -1, -1, 47,
+ -1, -1, -1, 51, -1, 53, -1, 55, -1, -1,
+ -1, 59, -1, 61, -1, -1, -1, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, -1, -1, 81, 82, 83, 84, 85, 86, 87,
+ -1, -1, -1, -1, -1, -1, 94, 95, 96, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
- 42, 3, 18, 25, 18, 3, 18, 3, 18, 22,
- 18, 3, 18, 22, 32, 32, 42, 18, 18, 18,
- 3, 32, 25, 18, 18, 32, 3, 18, 32, 105,
- 18, 18, 25, 100, 3, 3, 3, 18, 3, 25,
- 18, 3, 18, 18, 18, 42, 3, 3, 103, 9,
- 3, 14, 42, 42, 18, 25, 14, 42, 42, 18,
- 42, 3, 42, 18, 18, 3, 18, 3, 18, 14,
- 42, 22, 18, 2, 4, 18, 42, 18, 2, 11,
- 12, 54, -1, 54, 2, 56, 59, 18, 18, 18,
- 4, 14, 14, 54, 18, 56, 19, 14, 77, 14,
- 18, 23, 2, 46, 18, 54, 54, 54, 2, 2,
- 59, 59, 59, 18, 54, 54, 3, 56, 18, 59,
- 54, 54, 56, 56, 18, 18, 54, 54, 54, 56,
- 56, 59, 18, 54, 51, 56, 51, 2, 54, 2,
- 56, 54, 54, 56, 56, 54, 54, 56, 38, 2,
- 58, 54, 42, 18, 57, 18, 3, 54, 2, 45,
- 18, 92, 54, 54, 2, 18, 3, 18, 109, 66,
- 42, 54, 64, 56, 18, 18, 18, 2, 50, 70,
- 18, 54, 42, 4, 54, 43, 56, 18, 14, 94,
- 50, 78, 2, 18, 45, 68, 18, 18, 54, 18,
- 56, 3, 54, 46, 46, 54, 54, 59, 18, 54,
- 2, 60, 60, 44, 54, 60, 56, 2, 14, 14,
- 3, 54, 44, 19, 19, 51, 18, 60, 47, 2,
- 54, 78, 18, 18, 54, -1, 56, 54, 62, 56,
- 54, 54, 18, 18, 58, 18, 59, 54, 54, 54,
- 57, 54, 58, 54, 59, 54, 59, 54, 59, 45,
- 59, 54, 59, 54, 2, 2, 59, -1, 59, 45,
- 61, -1, 47, 48, 2, -1, 78, 54, -1, 76,
- 18, 18, 59, 76, 54, -1, 54, 54, 54, 59,
- 18, 59, 59, 59, -1, 78, -1, -1, 54, 76,
- 54, 69, -1, 59, 71, 59, 76, 61, 54, 54,
- 76, 67, 54, 59, 59, 61, 5, 59, 54, 61,
- 65, 14, 5, 59, -1, 14, 19, 63, 21, -1,
- -1, 14, -1, -1, 23, -1, -1, -1, -1, -1,
- 23, -1, -1, -1, -1, -1, 35, 36, -1, 42,
- 88, 88, 35, 36, 25, 26, 27, 28, 29, 30,
- 31, 24, 25, 26, 27, 28, 29, 30, 31, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 14, 14, -1, -1, -1, -1, -1,
- -1, -1, 23, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, -1, -1, 35, 36, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 32, 22, 18, 9, 18, 42, 18, 14, 32, 3,
+ 18, 3, 3, 18, 18, 32, 18, 32, 3, 22,
+ 3, 18, 3, 18, 25, 18, 22, 14, 18, 18,
+ 14, 42, 18, 32, 22, 77, 3, 100, 3, 3,
+ 3, 103, 42, 18, 42, 18, 3, 3, 25, 25,
+ 3, 105, 18, 25, 3, 3, 18, 18, 3, 18,
+ 42, 3, 42, 42, 42, 25, 18, 18, 42, 2,
+ -1, 18, 18, 42, 18, 18, 14, 18, 14, 18,
+ 2, 4, 2, 18, 42, 18, 54, 14, 56, 18,
+ -1, 4, -1, 18, -1, 18, 18, 18, 18, 54,
+ 54, 56, 56, 44, 54, 18, 56, 18, 11, 12,
+ 45, -1, -1, 51, 54, 51, 56, 54, 42, 56,
+ 54, 46, 54, 54, 51, 46, 50, 59, 59, 18,
+ 42, -1, -1, -1, 45, 54, 70, 54, 50, 54,
+ 59, 14, 59, 2, 59, 54, 19, 56, 54, 54,
+ 54, 56, 14, 59, 43, 54, 54, 56, 56, 18,
+ 2, 23, 2, 54, 68, 56, 14, 54, 54, 2,
+ 54, 19, 3, 60, 60, 59, 18, 54, 18, 18,
+ 109, 18, 59, 54, 54, 18, 54, 54, 59, 59,
+ 54, 59, 59, 54, 58, 38, 54, 58, 18, 42,
+ 58, 2, 54, 2, 18, 54, 45, 2, 45, 2,
+ 4, 3, 18, 18, 66, 64, 3, 18, 54, 18,
+ 56, 2, 54, 18, 18, 18, 46, 54, 60, 56,
+ 3, 3, 54, 47, 2, 57, 54, 18, 56, 54,
+ 2, 56, 54, 54, 56, 2, 57, 54, 2, 18,
+ 18, 54, 54, 56, -1, 62, 18, 54, 60, 56,
+ -1, 18, 14, 54, 18, 54, 2, 19, 59, -1,
+ 59, 54, 54, -1, 63, 44, 59, 59, -1, 54,
+ 2, -1, 18, 65, 59, 76, 78, 92, 94, 54,
+ 54, 78, 18, 76, 59, 59, 18, 61, 54, 54,
+ -1, 76, 67, 59, 59, 78, 78, 54, 54, -1,
+ 54, 54, 59, 59, 69, 59, 59, 61, 61, 14,
+ 76, 47, 48, -1, 71, -1, 54, 14, 23, 5,
+ 76, 59, 19, 61, 21, 5, -1, -1, 14, -1,
+ 35, 36, -1, -1, 14, -1, -1, 23, -1, -1,
+ -1, -1, 88, 23, -1, 42, -1, -1, -1, 35,
+ 36, -1, -1, -1, -1, 35, 36, 25, 26, 27,
+ 28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
+ -1, 14, -1, -1, -1, -1, -1, -1, -1, 2,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 14,
+ -1, -1, -1, -1, -1, 18, -1, -1, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 88, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 14, -1, -1, -1, -1, -1, -1, -1, -1, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 14, -1,
+ -1, -1, -1, -1, -1, -1, -1, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1087,6 +1073,6 @@ const short QQmlJSGrammar::action_check [] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1};
+ -1, -1, -1, -1, -1};
QT_END_NAMESPACE
diff --git a/src/qml/parser/qqmljsgrammar_p.h b/src/qml/parser/qqmljsgrammar_p.h
index 6b3d1c8013..7a369be194 100644
--- a/src/qml/parser/qqmljsgrammar_p.h
+++ b/src/qml/parser/qqmljsgrammar_p.h
@@ -161,15 +161,15 @@ public:
T_XOR = 79,
T_XOR_EQ = 80,
- ACCEPT_STATE = 663,
- RULE_COUNT = 357,
- STATE_COUNT = 664,
+ ACCEPT_STATE = 665,
+ RULE_COUNT = 358,
+ STATE_COUNT = 666,
TERMINAL_COUNT = 106,
NON_TERMINAL_COUNT = 111,
- GOTO_INDEX_OFFSET = 664,
- GOTO_INFO_OFFSET = 3104,
- GOTO_CHECK_OFFSET = 3104
+ GOTO_INDEX_OFFSET = 666,
+ GOTO_INFO_OFFSET = 3018,
+ GOTO_CHECK_OFFSET = 3018
};
static const char *const spell [];
diff --git a/src/qml/parser/qqmljsparser.cpp b/src/qml/parser/qqmljsparser.cpp
index 262043b3b8..762e60c827 100644
--- a/src/qml/parser/qqmljsparser.cpp
+++ b/src/qml/parser/qqmljsparser.cpp
@@ -567,56 +567,78 @@ case 69: {
} break;
case 70: {
- sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);
+ AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(3), stringRef(4));
+ node->isReadonlyMember = true;
+ node->readonlyToken = loc(1);
+ node->propertyToken = loc(2);
+ node->typeToken = loc(3);
+ node->identifierToken = loc(4);
+ node->semicolonToken = loc(5); // insert a fake ';' before ':'
+
+ AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(4));
+ propertyName->identifierToken = loc(4);
+ propertyName->next = 0;
+
+ AST::UiObjectBinding *binding = new (pool) AST::UiObjectBinding(
+ propertyName, sym(6).UiQualifiedId, sym(7).UiObjectInitializer);
+ binding->colonToken = loc(5);
+
+ node->binding = binding;
+
+ sym(1).Node = node;
} break;
case 71: {
sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);
} break;
-case 79: {
+case 72: {
+ sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);
+} break;
+
+case 80: {
AST::ThisExpression *node = new (pool) AST::ThisExpression();
node->thisToken = loc(1);
sym(1).Node = node;
} break;
-case 80: {
+case 81: {
AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1));
node->identifierToken = loc(1);
sym(1).Node = node;
} break;
-case 81: {
+case 82: {
AST::NullExpression *node = new (pool) AST::NullExpression();
node->nullToken = loc(1);
sym(1).Node = node;
} break;
-case 82: {
+case 83: {
AST::TrueLiteral *node = new (pool) AST::TrueLiteral();
node->trueToken = loc(1);
sym(1).Node = node;
} break;
-case 83: {
+case 84: {
AST::FalseLiteral *node = new (pool) AST::FalseLiteral();
node->falseToken = loc(1);
sym(1).Node = node;
} break;
-case 84: {
+case 85: {
AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval);
node->literalToken = loc(1);
sym(1).Node = node;
} break;
-case 85:
-case 86: {
+case 86:
+case 87: {
AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1));
node->literalToken = loc(1);
sym(1).Node = node;
} break;
-case 87: {
+case 88: {
bool rx = lexer->scanRegExp(Lexer::NoPrefix);
if (!rx) {
diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
@@ -632,7 +654,7 @@ case 87: {
sym(1).Node = node;
} break;
-case 88: {
+case 89: {
bool rx = lexer->scanRegExp(Lexer::EqualPrefix);
if (!rx) {
diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
@@ -648,28 +670,28 @@ case 88: {
sym(1).Node = node;
} break;
-case 89: {
+case 90: {
AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral((AST::Elision *) 0);
node->lbracketToken = loc(1);
node->rbracketToken = loc(2);
sym(1).Node = node;
} break;
-case 90: {
+case 91: {
AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).Elision->finish());
node->lbracketToken = loc(1);
node->rbracketToken = loc(3);
sym(1).Node = node;
} break;
-case 91: {
+case 92: {
AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish ());
node->lbracketToken = loc(1);
node->rbracketToken = loc(3);
sym(1).Node = node;
} break;
-case 92: {
+case 93: {
AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (),
(AST::Elision *) 0);
node->lbracketToken = loc(1);
@@ -678,7 +700,7 @@ case 92: {
sym(1).Node = node;
} break;
-case 93: {
+case 94: {
AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (),
sym(4).Elision->finish());
node->lbracketToken = loc(1);
@@ -687,7 +709,7 @@ case 93: {
sym(1).Node = node;
} break;
-case 94: {
+case 95: {
AST::ObjectLiteral *node = 0;
if (sym(2).Node)
node = new (pool) AST::ObjectLiteral(
@@ -699,7 +721,7 @@ case 94: {
sym(1).Node = node;
} break;
-case 95: {
+case 96: {
AST::ObjectLiteral *node = new (pool) AST::ObjectLiteral(
sym(2).PropertyAssignmentList->finish ());
node->lbraceToken = loc(1);
@@ -707,14 +729,14 @@ case 95: {
sym(1).Node = node;
} break;
-case 96: {
+case 97: {
AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression);
node->lparenToken = loc(1);
node->rparenToken = loc(3);
sym(1).Node = node;
} break;
-case 97: {
+case 98: {
if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) {
diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken,
QLatin1String("Ignored annotation")));
@@ -734,48 +756,48 @@ case 97: {
}
} break;
-case 98: {
+case 99: {
sym(1).Node = new (pool) AST::ElementList((AST::Elision *) 0, sym(1).Expression);
} break;
-case 99: {
+case 100: {
sym(1).Node = new (pool) AST::ElementList(sym(1).Elision->finish(), sym(2).Expression);
} break;
-case 100: {
+case 101: {
AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList,
(AST::Elision *) 0, sym(3).Expression);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 101: {
+case 102: {
AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList, sym(3).Elision->finish(),
sym(4).Expression);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 102: {
+case 103: {
AST::Elision *node = new (pool) AST::Elision();
node->commaToken = loc(1);
sym(1).Node = node;
} break;
-case 103: {
+case 104: {
AST::Elision *node = new (pool) AST::Elision(sym(1).Elision);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 104: {
+case 105: {
AST::PropertyNameAndValue *node = new (pool) AST::PropertyNameAndValue(
sym(1).PropertyName, sym(3).Expression);
node->colonToken = loc(2);
sym(1).Node = node;
} break;
-case 105: {
+case 106: {
AST::PropertyGetterSetter *node = new (pool) AST::PropertyGetterSetter(
sym(2).PropertyName, sym(6).FunctionBody);
node->getSetToken = loc(1);
@@ -786,7 +808,7 @@ case 105: {
sym(1).Node = node;
} break;
-case 106: {
+case 107: {
AST::PropertyGetterSetter *node = new (pool) AST::PropertyGetterSetter(
sym(2).PropertyName, sym(4).FormalParameterList, sym(7).FunctionBody);
node->getSetToken = loc(1);
@@ -797,56 +819,56 @@ case 106: {
sym(1).Node = node;
} break;
-case 107: {
+case 108: {
sym(1).Node = new (pool) AST::PropertyAssignmentList(sym(1).PropertyAssignment);
} break;
-case 108: {
+case 109: {
AST::PropertyAssignmentList *node = new (pool) AST::PropertyAssignmentList(
sym(1).PropertyAssignmentList, sym(3).PropertyAssignment);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 109: {
+case 110: {
AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));
node->propertyNameToken = loc(1);
sym(1).Node = node;
} break;
-case 110: {
+case 111: {
AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1));
node->propertyNameToken = loc(1);
sym(1).Node = node;
} break;
-case 111: {
+case 112: {
AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval);
node->propertyNameToken = loc(1);
sym(1).Node = node;
} break;
-case 112: {
+case 113: {
AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));
node->propertyNameToken = loc(1);
sym(1).Node = node;
} break;
-case 148: {
+case 149: {
AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);
node->lbracketToken = loc(2);
node->rbracketToken = loc(4);
sym(1).Node = node;
} break;
-case 149: {
+case 150: {
AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));
node->dotToken = loc(2);
node->identifierToken = loc(3);
sym(1).Node = node;
} break;
-case 150: {
+case 151: {
AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList);
node->newToken = loc(1);
node->lparenToken = loc(3);
@@ -854,384 +876,384 @@ case 150: {
sym(1).Node = node;
} break;
-case 152: {
+case 153: {
AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression);
node->newToken = loc(1);
sym(1).Node = node;
} break;
-case 153: {
+case 154: {
AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);
node->lparenToken = loc(2);
node->rparenToken = loc(4);
sym(1).Node = node;
} break;
-case 154: {
+case 155: {
AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);
node->lparenToken = loc(2);
node->rparenToken = loc(4);
sym(1).Node = node;
} break;
-case 155: {
+case 156: {
AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);
node->lbracketToken = loc(2);
node->rbracketToken = loc(4);
sym(1).Node = node;
} break;
-case 156: {
+case 157: {
AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));
node->dotToken = loc(2);
node->identifierToken = loc(3);
sym(1).Node = node;
} break;
-case 157: {
+case 158: {
sym(1).Node = 0;
} break;
-case 158: {
+case 159: {
sym(1).Node = sym(1).ArgumentList->finish();
} break;
-case 159: {
+case 160: {
sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression);
} break;
-case 160: {
+case 161: {
AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 164: {
+case 165: {
AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression);
node->incrementToken = loc(2);
sym(1).Node = node;
} break;
-case 165: {
+case 166: {
AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression);
node->decrementToken = loc(2);
sym(1).Node = node;
} break;
-case 167: {
+case 168: {
AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression);
node->deleteToken = loc(1);
sym(1).Node = node;
} break;
-case 168: {
+case 169: {
AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression);
node->voidToken = loc(1);
sym(1).Node = node;
} break;
-case 169: {
+case 170: {
AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression);
node->typeofToken = loc(1);
sym(1).Node = node;
} break;
-case 170: {
+case 171: {
AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression);
node->incrementToken = loc(1);
sym(1).Node = node;
} break;
-case 171: {
+case 172: {
AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression);
node->decrementToken = loc(1);
sym(1).Node = node;
} break;
-case 172: {
+case 173: {
AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression);
node->plusToken = loc(1);
sym(1).Node = node;
} break;
-case 173: {
+case 174: {
AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression);
node->minusToken = loc(1);
sym(1).Node = node;
} break;
-case 174: {
+case 175: {
AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression);
node->tildeToken = loc(1);
sym(1).Node = node;
} break;
-case 175: {
+case 176: {
AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression);
node->notToken = loc(1);
sym(1).Node = node;
} break;
-case 177: {
+case 178: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Mul, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 178: {
+case 179: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Div, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 179: {
+case 180: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Mod, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 181: {
+case 182: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Add, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 182: {
+case 183: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Sub, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 184: {
+case 185: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::LShift, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 185: {
+case 186: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::RShift, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 186: {
+case 187: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::URShift, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 188: {
+case 189: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Lt, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 189: {
+case 190: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Gt, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 190: {
+case 191: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Le, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 191: {
+case 192: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Ge, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 192: {
+case 193: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::InstanceOf, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 193: {
+case 194: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::In, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 195: {
+case 196: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Lt, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 196: {
+case 197: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Gt, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 197: {
+case 198: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Le, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 198: {
+case 199: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Ge, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 199: {
+case 200: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::InstanceOf, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 201: {
+case 202: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Equal, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 202: {
+case 203: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::NotEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 203: {
+case 204: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::StrictEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 204: {
+case 205: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::StrictNotEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 206: {
+case 207: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Equal, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 207: {
+case 208: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::NotEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 208: {
+case 209: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::StrictEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 209: {
+case 210: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::StrictNotEqual, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 211: {
+case 212: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitAnd, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 213: {
+case 214: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitAnd, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 215: {
+case 216: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitXor, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 217: {
+case 218: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitXor, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 219: {
+case 220: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitOr, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 221: {
+case 222: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::BitOr, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 223: {
+case 224: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::And, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 225: {
+case 226: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::And, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 227: {
+case 228: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Or, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 229: {
+case 230: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
QSOperator::Or, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 231: {
+case 232: {
AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression,
sym(3).Expression, sym(5).Expression);
node->questionToken = loc(2);
@@ -1239,7 +1261,7 @@ case 231: {
sym(1).Node = node;
} break;
-case 233: {
+case 234: {
AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression,
sym(3).Expression, sym(5).Expression);
node->questionToken = loc(2);
@@ -1247,112 +1269,112 @@ case 233: {
sym(1).Node = node;
} break;
-case 235: {
+case 236: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
sym(2).ival, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 237: {
+case 238: {
AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
sym(2).ival, sym(3).Expression);
node->operatorToken = loc(2);
sym(1).Node = node;
} break;
-case 238: {
+case 239: {
sym(1).ival = QSOperator::Assign;
} break;
-case 239: {
+case 240: {
sym(1).ival = QSOperator::InplaceMul;
} break;
-case 240: {
+case 241: {
sym(1).ival = QSOperator::InplaceDiv;
} break;
-case 241: {
+case 242: {
sym(1).ival = QSOperator::InplaceMod;
} break;
-case 242: {
+case 243: {
sym(1).ival = QSOperator::InplaceAdd;
} break;
-case 243: {
+case 244: {
sym(1).ival = QSOperator::InplaceSub;
} break;
-case 244: {
+case 245: {
sym(1).ival = QSOperator::InplaceLeftShift;
} break;
-case 245: {
+case 246: {
sym(1).ival = QSOperator::InplaceRightShift;
} break;
-case 246: {
+case 247: {
sym(1).ival = QSOperator::InplaceURightShift;
} break;
-case 247: {
+case 248: {
sym(1).ival = QSOperator::InplaceAnd;
} break;
-case 248: {
+case 249: {
sym(1).ival = QSOperator::InplaceXor;
} break;
-case 249: {
+case 250: {
sym(1).ival = QSOperator::InplaceOr;
} break;
-case 251: {
+case 252: {
AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 252: {
+case 253: {
sym(1).Node = 0;
} break;
-case 255: {
+case 256: {
AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 256: {
+case 257: {
sym(1).Node = 0;
} break;
-case 273: {
+case 274: {
AST::Block *node = new (pool) AST::Block(sym(2).StatementList);
node->lbraceToken = loc(1);
node->rbraceToken = loc(3);
sym(1).Node = node;
} break;
-case 274: {
+case 275: {
sym(1).Node = new (pool) AST::StatementList(sym(1).Statement);
} break;
-case 275: {
+case 276: {
sym(1).Node = new (pool) AST::StatementList(sym(1).StatementList, sym(2).Statement);
} break;
-case 276: {
+case 277: {
sym(1).Node = 0;
} break;
-case 277: {
+case 278: {
sym(1).Node = sym(1).StatementList->finish ();
} break;
-case 279: {
+case 280: {
AST::VariableStatement *node = new (pool) AST::VariableStatement(
sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
node->declarationKindToken = loc(1);
@@ -1360,76 +1382,76 @@ case 279: {
sym(1).Node = node;
} break;
-case 280: {
+case 281: {
sym(1).ival = T_CONST;
} break;
-case 281: {
+case 282: {
sym(1).ival = T_VAR;
} break;
-case 282: {
+case 283: {
sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration);
} break;
-case 283: {
+case 284: {
AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList(
sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
node->commaToken = loc(2);
sym(1).Node = node;
} break;
-case 284: {
+case 285: {
sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration);
} break;
-case 285: {
+case 286: {
sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
} break;
-case 286: {
+case 287: {
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
node->identifierToken = loc(1);
sym(1).Node = node;
} break;
-case 287: {
+case 288: {
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
node->identifierToken = loc(1);
sym(1).Node = node;
} break;
-case 288: {
+case 289: {
// ### TODO: AST for initializer
sym(1) = sym(2);
} break;
-case 289: {
+case 290: {
sym(1).Node = 0;
} break;
-case 291: {
+case 292: {
// ### TODO: AST for initializer
sym(1) = sym(2);
} break;
-case 292: {
+case 293: {
sym(1).Node = 0;
} break;
-case 294: {
+case 295: {
AST::EmptyStatement *node = new (pool) AST::EmptyStatement();
node->semicolonToken = loc(1);
sym(1).Node = node;
} break;
-case 296: {
+case 297: {
AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression);
node->semicolonToken = loc(2);
sym(1).Node = node;
} break;
-case 297: {
+case 298: {
AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement);
node->ifToken = loc(1);
node->lparenToken = loc(2);
@@ -1438,7 +1460,7 @@ case 297: {
sym(1).Node = node;
} break;
-case 298: {
+case 299: {
AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement);
node->ifToken = loc(1);
node->lparenToken = loc(2);
@@ -1446,7 +1468,7 @@ case 298: {
sym(1).Node = node;
} break;
-case 301: {
+case 302: {
AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression);
node->doToken = loc(1);
node->whileToken = loc(3);
@@ -1456,7 +1478,7 @@ case 301: {
sym(1).Node = node;
} break;
-case 302: {
+case 303: {
AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement);
node->whileToken = loc(1);
node->lparenToken = loc(2);
@@ -1464,7 +1486,7 @@ case 302: {
sym(1).Node = node;
} break;
-case 303: {
+case 304: {
AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression,
sym(5).Expression, sym(7).Expression, sym(9).Statement);
node->forToken = loc(1);
@@ -1475,7 +1497,7 @@ case 303: {
sym(1).Node = node;
} break;
-case 304: {
+case 305: {
AST::LocalForStatement *node = new (pool) AST::LocalForStatement(
sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression,
sym(8).Expression, sym(10).Statement);
@@ -1488,7 +1510,7 @@ case 304: {
sym(1).Node = node;
} break;
-case 305: {
+case 306: {
AST:: ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).Expression,
sym(5).Expression, sym(7).Statement);
node->forToken = loc(1);
@@ -1498,7 +1520,7 @@ case 305: {
sym(1).Node = node;
} break;
-case 306: {
+case 307: {
AST::LocalForEachStatement *node = new (pool) AST::LocalForEachStatement(
sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
node->forToken = loc(1);
@@ -1509,14 +1531,14 @@ case 306: {
sym(1).Node = node;
} break;
-case 308: {
+case 309: {
AST::ContinueStatement *node = new (pool) AST::ContinueStatement();
node->continueToken = loc(1);
node->semicolonToken = loc(2);
sym(1).Node = node;
} break;
-case 310: {
+case 311: {
AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2));
node->continueToken = loc(1);
node->identifierToken = loc(2);
@@ -1524,14 +1546,14 @@ case 310: {
sym(1).Node = node;
} break;
-case 312: {
+case 313: {
AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringRef());
node->breakToken = loc(1);
node->semicolonToken = loc(2);
sym(1).Node = node;
} break;
-case 314: {
+case 315: {
AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2));
node->breakToken = loc(1);
node->identifierToken = loc(2);
@@ -1539,14 +1561,14 @@ case 314: {
sym(1).Node = node;
} break;
-case 316: {
+case 317: {
AST::ReturnStatement *node = new (pool) AST::ReturnStatement(sym(2).Expression);
node->returnToken = loc(1);
node->semicolonToken = loc(3);
sym(1).Node = node;
} break;
-case 317: {
+case 318: {
AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement);
node->withToken = loc(1);
node->lparenToken = loc(2);
@@ -1554,7 +1576,7 @@ case 317: {
sym(1).Node = node;
} break;
-case 318: {
+case 319: {
AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock);
node->switchToken = loc(1);
node->lparenToken = loc(2);
@@ -1562,83 +1584,83 @@ case 318: {
sym(1).Node = node;
} break;
-case 319: {
+case 320: {
AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses);
node->lbraceToken = loc(1);
node->rbraceToken = loc(3);
sym(1).Node = node;
} break;
-case 320: {
+case 321: {
AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
node->lbraceToken = loc(1);
node->rbraceToken = loc(5);
sym(1).Node = node;
} break;
-case 321: {
+case 322: {
sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause);
} break;
-case 322: {
+case 323: {
sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause);
} break;
-case 323: {
+case 324: {
sym(1).Node = 0;
} break;
-case 324: {
+case 325: {
sym(1).Node = sym(1).CaseClauses->finish ();
} break;
-case 325: {
+case 326: {
AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList);
node->caseToken = loc(1);
node->colonToken = loc(3);
sym(1).Node = node;
} break;
-case 326: {
+case 327: {
AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList);
node->defaultToken = loc(1);
node->colonToken = loc(2);
sym(1).Node = node;
} break;
-case 327: {
+case 328: {
AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement);
node->identifierToken = loc(1);
node->colonToken = loc(2);
sym(1).Node = node;
} break;
-case 329: {
+case 330: {
AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression);
node->throwToken = loc(1);
node->semicolonToken = loc(3);
sym(1).Node = node;
} break;
-case 330: {
+case 331: {
AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch);
node->tryToken = loc(1);
sym(1).Node = node;
} break;
-case 331: {
+case 332: {
AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally);
node->tryToken = loc(1);
sym(1).Node = node;
} break;
-case 332: {
+case 333: {
AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally);
node->tryToken = loc(1);
sym(1).Node = node;
} break;
-case 333: {
+case 334: {
AST::Catch *node = new (pool) AST::Catch(stringRef(3), sym(5).Block);
node->catchToken = loc(1);
node->lparenToken = loc(2);
@@ -1647,20 +1669,20 @@ case 333: {
sym(1).Node = node;
} break;
-case 334: {
+case 335: {
AST::Finally *node = new (pool) AST::Finally(sym(2).Block);
node->finallyToken = loc(1);
sym(1).Node = node;
} break;
-case 336: {
+case 337: {
AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement();
node->debuggerToken = loc(1);
node->semicolonToken = loc(2);
sym(1).Node = node;
} break;
-case 338: {
+case 339: {
AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody);
node->functionToken = loc(1);
node->identifierToken = loc(2);
@@ -1671,7 +1693,7 @@ case 338: {
sym(1).Node = node;
} break;
-case 339: {
+case 340: {
AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody);
node->functionToken = loc(1);
if (! stringRef(2).isNull())
@@ -1683,7 +1705,7 @@ case 339: {
sym(1).Node = node;
} break;
-case 340: {
+case 341: {
AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(3).FormalParameterList, sym(6).FunctionBody);
node->functionToken = loc(1);
node->lparenToken = loc(2);
@@ -1693,56 +1715,56 @@ case 340: {
sym(1).Node = node;
} break;
-case 341: {
+case 342: {
AST::FormalParameterList *node = new (pool) AST::FormalParameterList(stringRef(1));
node->identifierToken = loc(1);
sym(1).Node = node;
} break;
-case 342: {
+case 343: {
AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, stringRef(3));
node->commaToken = loc(2);
node->identifierToken = loc(3);
sym(1).Node = node;
} break;
-case 343: {
+case 344: {
sym(1).Node = 0;
} break;
-case 344: {
+case 345: {
sym(1).Node = sym(1).FormalParameterList->finish ();
} break;
-case 345: {
+case 346: {
sym(1).Node = 0;
} break;
-case 347: {
+case 348: {
sym(1).Node = new (pool) AST::FunctionBody(sym(1).SourceElements->finish ());
} break;
-case 349: {
+case 350: {
sym(1).Node = new (pool) AST::Program(sym(1).SourceElements->finish ());
} break;
-case 350: {
+case 351: {
sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElement);
} break;
-case 351: {
+case 352: {
sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElements, sym(2).SourceElement);
} break;
-case 352: {
+case 353: {
sym(1).Node = new (pool) AST::StatementSourceElement(sym(1).Statement);
} break;
-case 353: {
+case 354: {
sym(1).Node = new (pool) AST::FunctionSourceElement(sym(1).FunctionDeclaration);
} break;
-case 354: {
+case 355: {
sym(1).Node = 0;
} break;
diff --git a/src/qml/parser/qqmljsparser_p.h b/src/qml/parser/qqmljsparser_p.h
index b0abf06b25..cf9f641fbc 100644
--- a/src/qml/parser/qqmljsparser_p.h
+++ b/src/qml/parser/qqmljsparser_p.h
@@ -240,9 +240,9 @@ protected:
-#define J_SCRIPT_REGEXPLITERAL_RULE1 87
+#define J_SCRIPT_REGEXPLITERAL_RULE1 88
-#define J_SCRIPT_REGEXPLITERAL_RULE2 88
+#define J_SCRIPT_REGEXPLITERAL_RULE2 89
QT_QML_END_NAMESPACE
diff --git a/src/qml/qml/ftw/qqmlrefcount_p.h b/src/qml/qml/ftw/qqmlrefcount_p.h
index 27f609bf39..3f1d252862 100644
--- a/src/qml/qml/ftw/qqmlrefcount_p.h
+++ b/src/qml/qml/ftw/qqmlrefcount_p.h
@@ -47,11 +47,12 @@
#include <QtCore/qglobal.h>
#include <QtCore/qatomic.h>
+#include <private/qtqmlglobal_p.h>
QT_BEGIN_NAMESPACE
-class QQmlRefCount
+class Q_QML_PRIVATE_EXPORT QQmlRefCount
{
public:
inline QQmlRefCount();
diff --git a/src/qml/qml/qqmlapplicationengine.cpp b/src/qml/qml/qqmlapplicationengine.cpp
index 9ccaee7cd7..240c01233b 100644
--- a/src/qml/qml/qqmlapplicationengine.cpp
+++ b/src/qml/qml/qqmlapplicationengine.cpp
@@ -65,8 +65,7 @@ void QQmlApplicationEnginePrivate::init()
q->connect(q, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
#ifndef QT_NO_TRANSLATION
QTranslator* qtTranslator = new QTranslator;
- QLocale locale;
- if (qtTranslator->load(locale, QLatin1String("qt"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
+ if (qtTranslator->load(QLatin1String("qt_") + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
QCoreApplication::installTranslator(qtTranslator);
translators << qtTranslator;
#endif
@@ -83,8 +82,7 @@ void QQmlApplicationEnginePrivate::loadTranslations(const QUrl &rootFile)
QFileInfo fi(rootFile.toLocalFile());
QTranslator *translator = new QTranslator;
- QLocale locale;
- if (translator->load(locale, QLatin1String("qml"), QLatin1String("_"), fi.path() + QLatin1String("/i18n"))) {
+ if (translator->load(QLatin1String("qml_") + QLocale::system().name(), fi.path() + QLatin1String("/i18n"))) {
QCoreApplication::installTranslator(translator);
translators << translator;
} else {
diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp
index 8b6bc81935..6033395629 100644
--- a/src/qml/qml/qqmlbinding.cpp
+++ b/src/qml/qml/qqmlbinding.cpp
@@ -93,17 +93,10 @@ QQmlBinding::QQmlBinding(const QQmlScriptString &script, QObject *obj, QQmlConte
QQmlContextData *ctxtdata = QQmlContextData::get(scriptPrivate->context);
QQmlEnginePrivate *engine = QQmlEnginePrivate::get(scriptPrivate->context->engine());
- if (engine && ctxtdata && !ctxtdata->url.isEmpty()) {
- QQmlTypeData *typeData = engine->typeLoader.getType(ctxtdata->url);
- Q_ASSERT(typeData);
-
- if (QQmlCompiledData *cdata = typeData->compiledData()) {
- url = cdata->fileName();
- if (scriptPrivate->bindingId != QQmlBinding::Invalid)
- runtimeFunction = cdata->compilationUnit->runtimeFunctions.at(scriptPrivate->bindingId);
- }
-
- typeData->release();
+ if (engine && ctxtdata && !ctxtdata->url.isEmpty() && ctxtdata->typeCompilationUnit) {
+ url = ctxtdata->url.toString();
+ if (scriptPrivate->bindingId != QQmlBinding::Invalid)
+ runtimeFunction = ctxtdata->typeCompilationUnit->runtimeFunctions.at(scriptPrivate->bindingId);
}
setNotifyOnValueChanged(true);
diff --git a/src/qml/qml/qqmlcompileddata.cpp b/src/qml/qml/qqmlcompileddata.cpp
index eca8070b3f..22838786b6 100644
--- a/src/qml/qml/qqmlcompileddata.cpp
+++ b/src/qml/qml/qqmlcompileddata.cpp
@@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE
QQmlCompiledData::QQmlCompiledData(QQmlEngine *engine)
: engine(engine), importCache(0), metaTypeId(-1), listMetaTypeId(-1), isRegisteredWithEngine(false),
- rootPropertyCache(0), compilationUnit(0), totalBindingsCount(0), totalParserStatusCount(0)
+ rootPropertyCache(0), totalBindingsCount(0), totalParserStatusCount(0)
{
Q_ASSERT(engine);
}
@@ -92,9 +92,6 @@ QQmlCompiledData::~QQmlCompiledData()
if (rootPropertyCache)
rootPropertyCache->release();
-
- if (compilationUnit)
- compilationUnit->deref();
}
void QQmlCompiledData::clear()
diff --git a/src/qml/qml/qqmlcompiler_p.h b/src/qml/qml/qqmlcompiler_p.h
index 11646fc6b8..5e76533739 100644
--- a/src/qml/qml/qqmlcompiler_p.h
+++ b/src/qml/qml/qqmlcompiler_p.h
@@ -123,7 +123,7 @@ public:
QVector<QQmlPropertyCache *> propertyCaches;
QList<QQmlScriptData *> scripts;
- QV4::CompiledData::CompilationUnit *compilationUnit;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit;
// index in first hash is component index, hash inside maps from object index in that scope to integer id
QHash<int, QHash<int, int> > objectIndexToIdPerComponent;
QHash<int, int> objectIndexToIdForRoot;
diff --git a/src/qml/qml/qqmlcontext_p.h b/src/qml/qml/qqmlcontext_p.h
index d3f283357a..233ea4d34a 100644
--- a/src/qml/qml/qqmlcontext_p.h
+++ b/src/qml/qml/qqmlcontext_p.h
@@ -141,6 +141,9 @@ public:
// VME data that is constructing this context if any
void *activeVMEData;
+ // Compilation unit for contexts that belong to a compiled type.
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> typeCompilationUnit;
+
// Property name cache
QV4::IdentifierHash<int> propertyNames;
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 2b69661c4b..a187c76042 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -1023,7 +1023,7 @@ QQmlAbstractUrlInterceptor *QQmlEngine::urlInterceptor() const
void QQmlEngine::setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)
{
Q_D(QQmlEngine);
- QMutexLocker locker(&d->mutex);
+ QMutexLocker locker(&d->networkAccessManagerMutex);
d->networkAccessManagerFactory = factory;
}
@@ -1050,7 +1050,7 @@ void QQmlEnginePrivate::registerFinalizeCallback(QObject *obj, int index)
QNetworkAccessManager *QQmlEnginePrivate::createNetworkAccessManager(QObject *parent) const
{
- QMutexLocker locker(&mutex);
+ QMutexLocker locker(&networkAccessManagerMutex);
QNetworkAccessManager *nam;
if (networkAccessManagerFactory) {
nam = networkAccessManagerFactory->create(parent);
@@ -2305,8 +2305,12 @@ static inline QString shellNormalizeFileName(const QString &name)
return name;
#endif
TCHAR buffer[MAX_PATH];
- if (!SHGetPathFromIDList(file, buffer))
+ bool gotPath = SHGetPathFromIDList(file, buffer);
+ ILFree(file);
+
+ if (!gotPath)
return name;
+
QString canonicalName = QString::fromWCharArray(buffer);
// Upper case drive letter
if (canonicalName.size() > 2 && canonicalName.at(1) == QLatin1Char(':'))
diff --git a/src/qml/qml/qqmlengine_p.h b/src/qml/qml/qqmlengine_p.h
index 3a47e059ea..f19bfc84b3 100644
--- a/src/qml/qml/qqmlengine_p.h
+++ b/src/qml/qml/qqmlengine_p.h
@@ -260,6 +260,7 @@ public:
static bool qml_debugging_enabled;
+ mutable QMutex networkAccessManagerMutex;
mutable QMutex mutex;
private:
diff --git a/src/qml/qml/qqmlexpression.cpp b/src/qml/qml/qqmlexpression.cpp
index 22e74135b5..947b55f15d 100644
--- a/src/qml/qml/qqmlexpression.cpp
+++ b/src/qml/qml/qqmlexpression.cpp
@@ -148,20 +148,13 @@ QQmlExpression::QQmlExpression(const QQmlScriptString &script, QQmlContext *ctxt
if (scriptPrivate->context) {
QQmlContextData *ctxtdata = QQmlContextData::get(scriptPrivate->context);
QQmlEnginePrivate *engine = QQmlEnginePrivate::get(scriptPrivate->context->engine());
- if (engine && ctxtdata && !ctxtdata->url.isEmpty()) {
- QQmlTypeData *typeData = engine->typeLoader.getType(ctxtdata->url);
- Q_ASSERT(typeData);
+ if (engine && ctxtdata && !ctxtdata->url.isEmpty() && ctxtdata->typeCompilationUnit) {
+ d->url = ctxtdata->url.toString();
+ d->line = scriptPrivate->lineNumber;
+ d->column = scriptPrivate->columnNumber;
- if (QQmlCompiledData *cdata = typeData->compiledData()) {
- d->url = cdata->fileName();
- d->line = scriptPrivate->lineNumber;
- d->column = scriptPrivate->columnNumber;
-
- if (scriptPrivate->bindingId != QQmlBinding::Invalid)
- runtimeFunction = cdata->compilationUnit->runtimeFunctions.at(scriptPrivate->bindingId);
- }
-
- typeData->release();
+ if (scriptPrivate->bindingId != QQmlBinding::Invalid)
+ runtimeFunction = ctxtdata->typeCompilationUnit->runtimeFunctions.at(scriptPrivate->bindingId);
}
}
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index a827e96ab1..42cac66fbd 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -180,6 +180,7 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI
context->urlString = compiledData->fileName();
context->imports = compiledData->importCache;
context->imports->addref();
+ context->typeCompilationUnit = compiledData->compilationUnit;
context->setParent(parentContext);
if (!sharedState->rootContext) {
@@ -753,7 +754,7 @@ bool QQmlObjectCreator::setPropertyBinding(QQmlPropertyData *property, const QV4
// ### resolve this at compile time
if (property && property->propType == qMetaTypeId<QQmlScriptString>()) {
QQmlScriptString ss(binding->valueAsScriptString(qmlUnit), context->asQQmlContext(), _scopeObject);
- ss.d.data()->bindingId = binding->value.compiledScriptIndex;
+ ss.d.data()->bindingId = binding->type == QV4::CompiledData::Binding::Type_Script ? binding->value.compiledScriptIndex : QQmlBinding::Invalid;
ss.d.data()->lineNumber = binding->location.line;
ss.d.data()->columnNumber = binding->location.column;
ss.d.data()->isStringLiteral = binding->type == QV4::CompiledData::Binding::Type_String;
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp
index 09b735ae9e..2a888b7a1e 100644
--- a/src/qml/qml/qqmlproperty.cpp
+++ b/src/qml/qml/qqmlproperty.cpp
@@ -1611,15 +1611,14 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object,
QQmlMetaObject QQmlPropertyPrivate::rawMetaObjectForType(QQmlEnginePrivate *engine, int userType)
{
- if (engine) {
+ QMetaType metaType(userType);
+ if ((metaType.flags() & QMetaType::PointerToQObject) && metaType.metaObject())
+ return metaType.metaObject();
+ if (engine)
return engine->rawMetaObjectForType(userType);
- }
QQmlType *type = QQmlMetaType::qmlType(userType);
if (type)
return QQmlMetaObject(type->baseMetaObject());
- QMetaType metaType(userType);
- if ((metaType.flags() & QMetaType::PointerToQObject) && metaType.metaObject())
- return metaType.metaObject();
return QQmlMetaObject((QObject*)0);
}
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 0e2d4d027a..1b222fe1a3 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2541,7 +2541,6 @@ void QQmlTypeData::scriptImported(QQmlScriptBlob *blob, const QV4::CompiledData:
QQmlScriptData::QQmlScriptData()
: importCache(0)
, m_loaded(false)
- , m_precompiledScript(0)
, m_program(0)
{
}
@@ -2549,10 +2548,6 @@ QQmlScriptData::QQmlScriptData()
QQmlScriptData::~QQmlScriptData()
{
delete m_program;
- if (m_precompiledScript) {
- m_precompiledScript->deref();
- m_precompiledScript = 0;
- }
}
void QQmlScriptData::initialize(QQmlEngine *engine)
@@ -2713,13 +2708,10 @@ void QQmlScriptBlob::dataReceived(const Data &data)
}
QList<QQmlError> errors;
- QV4::CompiledData::CompilationUnit *unit = QV4::Script::precompile(&irUnit.jsModule, &irUnit.jsGenerator, v4, finalUrl(), source, &errors);
- if (unit)
- unit->ref();
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> unit = QV4::Script::precompile(&irUnit.jsModule, &irUnit.jsGenerator, v4, finalUrl(), source, &errors);
+ // No need to addref on unit, it's initial refcount is 1
source.clear();
if (!errors.isEmpty()) {
- if (unit)
- unit->deref();
setError(errors);
return;
}
@@ -2732,7 +2724,6 @@ void QQmlScriptBlob::dataReceived(const Data &data)
unit->data = unitData;
initializeFromCompilationUnit(unit);
- unit->deref();
}
void QQmlScriptBlob::initializeFromCachedUnit(const QQmlPrivate::CachedQmlUnit *unit)
@@ -2805,8 +2796,6 @@ void QQmlScriptBlob::initializeFromCompilationUnit(QV4::CompiledData::Compilatio
m_scriptData->url = finalUrl();
m_scriptData->urlString = finalUrlString();
m_scriptData->m_precompiledScript = unit;
- if (m_scriptData->m_precompiledScript)
- m_scriptData->m_precompiledScript->ref();
m_importCache.setBaseUrl(finalUrl(), finalUrlString());
diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h
index 9f98e4fd40..3b5aa1ec7a 100644
--- a/src/qml/qml/qqmltypeloader_p.h
+++ b/src/qml/qml/qqmltypeloader_p.h
@@ -513,7 +513,7 @@ private:
void initialize(QQmlEngine *);
bool m_loaded;
- QV4::CompiledData::CompilationUnit *m_precompiledScript;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> m_precompiledScript;
QV4::Script *m_program;
QV4::PersistentValue m_value;
};