aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-01-07 16:19:53 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-07 16:19:53 +0100
commitc280d67864dbef12c490380c29e03d5b18c102f1 (patch)
treed144321f7dbe2911e2790459b61ef54a32b27d0b /src/qml
parenta65824f353300dedc8440c36a29d0fb6a2cb9662 (diff)
parent5d150f63e1a188414e4951c4b6e4c7c474d9b4e6 (diff)
Merge "Merge branch 'stable' into dev" into refs/staging/dev
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/animations/qabstractanimationjob.cpp2
-rw-r--r--src/qml/doc/qtqml.qdocconf29
-rw-r--r--src/qml/doc/src/cppintegration/extending-tutorial.qdoc106
-rw-r--r--src/qml/doc/src/external-resources.qdoc2
-rw-r--r--src/qml/qml/parser/qqmljskeywords_p.h50
-rw-r--r--src/qml/qml/qqmlboundsignal.cpp2
-rw-r--r--src/qml/qml/qqmlcompiler.cpp1
-rw-r--r--src/qml/qml/qqmlengine.cpp14
-rw-r--r--src/qml/qml/qqmlimport.cpp1
-rw-r--r--src/qml/qml/qqmlproperty.cpp1
-rw-r--r--src/qml/qml/qqmlpropertycache.cpp3
-rw-r--r--src/qml/qml/qqmlvme.cpp1
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp2
-rw-r--r--src/qml/qml/v4/qv4bindings.cpp2
-rw-r--r--src/qml/qml/v4/qv4compiler.cpp2
-rw-r--r--src/qml/qml/v4/qv4irbuilder.cpp2
-rw-r--r--src/qml/qml/v8/qjsengine.cpp1
-rw-r--r--src/qml/qml/v8/qjsvalue.h2
-rw-r--r--src/qml/qml/v8/qv8contextwrapper.cpp21
-rw-r--r--src/qml/qml/v8/qv8contextwrapper_p.h5
-rw-r--r--src/qml/qml/v8/qv8engine.cpp1
-rw-r--r--src/qml/qml/v8/qv8engine_p.h2
-rw-r--r--src/qml/qml/v8/qv8qobjectwrapper.cpp3
23 files changed, 125 insertions, 130 deletions
diff --git a/src/qml/animations/qabstractanimationjob.cpp b/src/qml/animations/qabstractanimationjob.cpp
index df8431e746..67b3391c0c 100644
--- a/src/qml/animations/qabstractanimationjob.cpp
+++ b/src/qml/animations/qabstractanimationjob.cpp
@@ -463,7 +463,7 @@ void QAbstractAnimationJob::setCurrentTime(int msecs)
// and has reached the end.
if ((m_direction == Forward && m_totalCurrentTime == totalDura)
|| (m_direction == Backward && m_totalCurrentTime == 0)) {
- stop();
+ RETURN_IF_DELETED(stop());
}
if (m_hasCurrentTimeChangeListeners)
diff --git a/src/qml/doc/qtqml.qdocconf b/src/qml/doc/qtqml.qdocconf
index 301b6be660..06c1c42a92 100644
--- a/src/qml/doc/qtqml.qdocconf
+++ b/src/qml/doc/qtqml.qdocconf
@@ -3,41 +3,38 @@ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
project = QtQml
description = Qt QML Reference Documentation
url = http://qt-project.org/doc/qt-5.0/qtqml
-version = 5.0.0
+version = 5.0.1
qhp.projects = QtQml
qhp.QtQml.file = qtqml.qhp
qhp.QtQml.namespace = org.qt-project.qtqml.500
-qhp.QtQml.virtualFolder = qdoc
-qhp.QtQml.indexTitle = Qt QML Reference Documentation
+qhp.QtQml.virtualFolder = qtqml
+qhp.QtQml.indexTitle = Qt QML
qhp.QtQml.indexRoot =
-qhp.QtQml.filterAttributes = qtqml 5.0.0 qtrefdoc
-qhp.QtQml.customFilters.Qt.name = QtQml 5.0.0
-qhp.QtQml.customFilters.Qt.filterAttributes = qtqml 5.0.0
-qhp.QtQml.subprojects = classes overviews examples
-qhp.QtQml.subprojects.classes.title = Classes
-qhp.QtQml.subprojects.classes.indexTitle = Qt QML's Classes
+qhp.QtQml.filterAttributes = qtqml 5.0.1 qtrefdoc
+qhp.QtQml.customFilters.Qt.name = QtQml 5.0.1
+qhp.QtQml.customFilters.Qt.filterAttributes = qtqml 5.0.1
+qhp.QtQml.subprojects = classes examples
+qhp.QtQml.subprojects.classes.title = C++ Classes
+qhp.QtQml.subprojects.classes.indexTitle = Qt QML Module C++ Classes
qhp.QtQml.subprojects.classes.selectors = class fake:headerfile
qhp.QtQml.subprojects.classes.sortPages = true
-qhp.QtQml.subprojects.overviews.title = Overviews
-qhp.QtQml.subprojects.overviews.indexTitle = All Overviews and HOWTOs
-qhp.QtQml.subprojects.overviews.selectors = fake:page,group,module
-qhp.QtQml.subprojects.examples.title = Qt QML Examples
-qhp.QtQml.subprojects.examples.indexTitle = Qt QML Examples
+qhp.QtQml.subprojects.examples.title = Examples
+qhp.QtQml.subprojects.examples.indexTitle = Qt Quick Code Samples
qhp.QtQml.subprojects.examples.selectors = fake:example
+
tagfile = ../../../doc/qtqml/qtqml.tags
-depends += qtcore qtxmlpatterns qtgui
+depends += qtcore qtxmlpatterns qtgui qtquick
headerdirs += ..
sourcedirs += ..
exampledirs += ../../../examples/qml \
- ../../.. \
../ \
snippets
diff --git a/src/qml/doc/src/cppintegration/extending-tutorial.qdoc b/src/qml/doc/src/cppintegration/extending-tutorial.qdoc
index d59a8cd827..8ed3aa8279 100644
--- a/src/qml/doc/src/cppintegration/extending-tutorial.qdoc
+++ b/src/qml/doc/src/cppintegration/extending-tutorial.qdoc
@@ -44,12 +44,12 @@ examples/quick/tutorials/extending directory.
Tutorial chapters:
\list 1
-\li \l{examples/tutorials/extending/chapter1-basics}{Creating a New Type}
-\li \l{examples/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals}
-\li \l{examples/tutorials/extending/chapter3-bindings}{Property Binding}
-\li \l{examples/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types}
-\li \l{examples/tutorials/extending/chapter5-listproperties}{Using List Property Types}
-\li \l{examples/tutorials/extending/chapter6-plugins}{Writing an Extension Plugin}
+\li \l{examples/quick/tutorials/extending/chapter1-basics}{Creating a New Type}
+\li \l{examples/quick/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals}
+\li \l{examples/quick/tutorials/extending/chapter3-bindings}{Property Binding}
+\li \l{examples/quick/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types}
+\li \l{examples/quick/tutorials/extending/chapter5-listproperties}{Using List Property Types}
+\li \l{examples/quick/tutorials/extending/chapter6-plugins}{Writing an Extension Plugin}
\li \l{qml-extending-tutorial7.html}{In Summary}
\endlist
@@ -64,7 +64,7 @@ and \l {qtqml-cppintegration-definetypes.html}{Defining QML Types from C++}.
/*!
\title Chapter 1: Creating a New Type
-\example examples/tutorials/extending/chapter1-basics
+\example examples/quick/tutorials/extending/chapter1-basics
A common task when extending QML is to provide a new QML type that supports some
custom functionality beyond what is provided by the built-in \l {Qt Quick QML Types}{QtQuick types}.
@@ -104,7 +104,7 @@ this new class must:
Here is our \c PieChart class, defined in \c piechart.h:
-\snippet examples/tutorials/extending/chapter1-basics/piechart.h 0
+\snippet examples/quick/tutorials/extending/chapter1-basics/piechart.h 0
The class inherits from QQuickPaintedItem because we want to override
QQuickPaintedItem::paint() in perform drawing operations with the QPainter API.
@@ -120,15 +120,15 @@ simply sets and returns the \c m_name and \c m_color values as appropriate, and
implements \c paint() to draw a simple pie chart. It also turns off the
QGraphicsItem::ItemHasNoContents flag to enable painting:
-\snippet examples/tutorials/extending/chapter1-basics/piechart.cpp 0
+\snippet examples/quick/tutorials/extending/chapter1-basics/piechart.cpp 0
\dots 0
-\snippet examples/tutorials/extending/chapter1-basics/piechart.cpp 1
+\snippet examples/quick/tutorials/extending/chapter1-basics/piechart.cpp 1
Now that we have defined the \c PieChart type, we will use it from QML. The \c app.qml
file creates a \c PieChart item and display the pie chart's details
using a standard QML \l Text item:
-\snippet examples/tutorials/extending/chapter1-basics/app.qml 0
+\snippet examples/quick/tutorials/extending/chapter1-basics/app.qml 0
Notice that although the color is specified as a string in QML, it is automatically
converted to a QColor object for the PieChart \c color property. Automatic conversions are
@@ -142,46 +142,46 @@ you don't register the type, \c app.qml won't be able to create a \c PieChart.
Here is the application \c main.cpp:
-\snippet examples/tutorials/extending/chapter1-basics/main.cpp 0
+\snippet examples/quick/tutorials/extending/chapter1-basics/main.cpp 0
This call to qmlRegisterType() registers the \c PieChart type as a type called "PieChart",
in a type namespace called "Charts", with a version of 1.0.
Lastly, we write a \c .pro project file that includes the files and the \c declarative library:
-\quotefile examples/tutorials/extending/chapter1-basics/chapter1-basics.pro
+\quotefile examples/quick/tutorials/extending/chapter1-basics/chapter1-basics.pro
Now we can build and run the application:
\image extending-tutorial-chapter1.png
-Try it yourself with the code in Qt's \c examples/tutorials/extending/chapter1-basics directory.
+Try it yourself with the code in Qt's \c examples/quick/tutorials/extending/chapter1-basics directory.
*/
/*!
\title Chapter 2: Connecting to C++ Methods and Signals
-\example examples/tutorials/extending/chapter2-methods
+\example examples/quick/tutorials/extending/chapter2-methods
Suppose we want \c PieChart to have a "clearChart()" method that erases the
chart and then emits a "chartCleared" signal. Our \c app.qml would be able
to call \c clearChart() and receive \c chartCleared() signals like this:
-\snippet examples/tutorials/extending/chapter2-methods/app.qml 0
+\snippet examples/quick/tutorials/extending/chapter2-methods/app.qml 0
\image extending-tutorial-chapter2.png
To do this, we add a \c clearChart() method and a \c chartCleared() signal
to our C++ class:
-\snippet examples/tutorials/extending/chapter2-methods/piechart.h 0
+\snippet examples/quick/tutorials/extending/chapter2-methods/piechart.h 0
\dots
-\snippet examples/tutorials/extending/chapter2-methods/piechart.h 1
+\snippet examples/quick/tutorials/extending/chapter2-methods/piechart.h 1
\dots
-\snippet examples/tutorials/extending/chapter2-methods/piechart.h 2
+\snippet examples/quick/tutorials/extending/chapter2-methods/piechart.h 2
\dots
-\snippet examples/tutorials/extending/chapter2-methods/piechart.h 3
+\snippet examples/quick/tutorials/extending/chapter2-methods/piechart.h 3
The use of Q_INVOKABLE makes the \c clearChart() method available to the
Qt Meta-Object system, and in turn, to QML. Note that it could have
@@ -191,7 +191,7 @@ slots are also callable from QML. Both of these approaches are valid.
The \c clearChart() method simply changes the color to Qt::transparent,
repaints the chart, then emits the \c chartCleared() signal:
-\snippet examples/tutorials/extending/chapter2-methods/piechart.cpp 0
+\snippet examples/quick/tutorials/extending/chapter2-methods/piechart.cpp 0
Now when we run the application and click the window, the pie chart
disappears, and the application outputs:
@@ -200,14 +200,14 @@ disappears, and the application outputs:
The chart has been cleared
\endcode
-Try out the example yourself with the updated code in Qt's \c examples/tutorials/extending/chapter2-methods directory.
+Try out the example yourself with the updated code in Qt's \c examples/quick/tutorials/extending/chapter2-methods directory.
*/
/*!
\title Chapter 3: Adding Property Bindings
-\example examples/tutorials/extending/chapter3-bindings
+\example examples/quick/tutorials/extending/chapter3-bindings
Property binding is a powerful feature of QML that allows values of different
elements to be synchronized automatically. It uses signals to notify and update
@@ -216,7 +216,7 @@ other elements' values when property values are changed.
Let's enable property bindings for the \c color property. That means
if we have code like this:
-\snippet examples/tutorials/extending/chapter3-bindings/app.qml 0
+\snippet examples/quick/tutorials/extending/chapter3-bindings/app.qml 0
\image extending-tutorial-chapter3.png
@@ -231,17 +231,17 @@ It's easy to enable property binding for the \c color property.
We add a \l{Qt's Property System}{NOTIFY} feature to its Q_PROPERTY() declaration to indicate that a "colorChanged" signal
is emitted whenever the value changes.
-\snippet examples/tutorials/extending/chapter3-bindings/piechart.h 0
+\snippet examples/quick/tutorials/extending/chapter3-bindings/piechart.h 0
\dots
-\snippet examples/tutorials/extending/chapter3-bindings/piechart.h 1
+\snippet examples/quick/tutorials/extending/chapter3-bindings/piechart.h 1
\dots
-\snippet examples/tutorials/extending/chapter3-bindings/piechart.h 2
+\snippet examples/quick/tutorials/extending/chapter3-bindings/piechart.h 2
\dots
-\snippet examples/tutorials/extending/chapter3-bindings/piechart.h 3
+\snippet examples/quick/tutorials/extending/chapter3-bindings/piechart.h 3
Then, we emit this signal in \c setPieSlice():
-\snippet examples/tutorials/extending/chapter3-bindings/piechart.cpp 0
+\snippet examples/quick/tutorials/extending/chapter3-bindings/piechart.cpp 0
It's important for \c setColor() to check that the color value has actually changed
before emitting \c colorChanged(). This ensures the signal is not emitted unnecessarily and
@@ -259,7 +259,7 @@ custom QML types may see unexpected behavior if bindings are not implemented.
/*!
\title Chapter 4: Using Custom Property Types
-\example examples/tutorials/extending/chapter4-customPropertyTypes
+\example examples/quick/tutorials/extending/chapter4-customPropertyTypes
The \c PieChart type currently has a string-type property and a color-type property.
It could have many other types of properties. For example, it could have an
@@ -299,43 +299,43 @@ For example, let's replace the use of the \c property with a type called
"PieSlice" that has a \c color property. Instead of assigning a color,
we assign an \c PieSlice value which itself contains a \c color:
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/app.qml 0
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/app.qml 0
Like \c PieChart, this new \c PieSlice type inherits from QQuickPaintedItem and declares
its properties with Q_PROPERTY():
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/pieslice.h 0
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/pieslice.h 0
To use it in \c PieChart, we modify the \c color property declaration
and associated method signatures:
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/piechart.h 0
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/piechart.h 0
\dots
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/piechart.h 1
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/piechart.h 1
\dots
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/piechart.h 2
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/piechart.h 2
\dots
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/piechart.h 3
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/piechart.h 3
There is one thing to be aware of when implementing \c setPieSlice(). The \c PieSlice
is a visual item, so it must be set as a child of the \c PieChart using
QQuickItem::setParentItem() so that the \c PieChart knows to paint this child
item when its contents are drawn:
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp 0
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp 0
Like the \c PieChart type, the \c PieSlice type has to be registered
using qmlRegisterType() to be used from QML. As with \c PieChart, we'll add the
type to the "Charts" type namespace, version 1.0:
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/main.cpp 0
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/main.cpp 0
\dots
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/main.cpp 1
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/main.cpp 1
\dots
-\snippet examples/tutorials/extending/chapter4-customPropertyTypes/main.cpp 2
+\snippet examples/quick/tutorials/extending/chapter4-customPropertyTypes/main.cpp 2
-Try it out with the code in Qt's \c examples/tutorials/extending/chapter4-customPropertyTypes directory.
+Try it out with the code in Qt's \c examples/quick/tutorials/extending/chapter4-customPropertyTypes directory.
*/
@@ -343,13 +343,13 @@ Try it out with the code in Qt's \c examples/tutorials/extending/chapter4-custom
/*!
\title Chapter 5: Using List Property Types
-\example examples/tutorials/extending/chapter5-listproperties
+\example examples/quick/tutorials/extending/chapter5-listproperties
Right now, a \c PieChart can only have one \c PieSlice. Ideally a chart would
have multiple slices, with different colors and sizes. To do this, we could
have a \c slices property that accepts a list of \c PieSlice items:
-\snippet examples/tutorials/extending/chapter5-listproperties/app.qml 0
+\snippet examples/quick/tutorials/extending/chapter5-listproperties/app.qml 0
\image extending-tutorial-chapter5.png
@@ -360,11 +360,11 @@ function with a \c slices() function that returns a list of slices, and add
an internal \c append_slice() function (discussed below). We also use a QList to
store the internal list of slices as \c m_slices:
-\snippet examples/tutorials/extending/chapter5-listproperties/piechart.h 0
+\snippet examples/quick/tutorials/extending/chapter5-listproperties/piechart.h 0
\dots
-\snippet examples/tutorials/extending/chapter5-listproperties/piechart.h 1
+\snippet examples/quick/tutorials/extending/chapter5-listproperties/piechart.h 1
\dots
-\snippet examples/tutorials/extending/chapter5-listproperties/piechart.h 2
+\snippet examples/quick/tutorials/extending/chapter5-listproperties/piechart.h 2
Although the \c slices property does not have an associated \c WRITE function,
it is still modifiable because of the way QQmlListProperty works.
@@ -373,7 +373,7 @@ return a QQmlListProperty value and indicate that the internal
\c PieChart::append_slice() function is to be called whenever a request is made from QML
to add items to the list:
-\snippet examples/tutorials/extending/chapter5-listproperties/piechart.cpp 0
+\snippet examples/quick/tutorials/extending/chapter5-listproperties/piechart.cpp 0
The \c append_slice() function simply sets the parent item as before,
and adds the new item to the \c m_slices list. As you can see, the append function for a
@@ -384,7 +384,7 @@ The \c PieSlice class has also been modified to include \c fromAngle and \c angl
properties and to draw the slice according to these values. This is a straightforward
modification if you have read the previous pages in this tutorial, so the code is not shown here.
-The complete code can be seen in the updated \c examples/tutorials/extending/chapter5-listproperties directory.
+The complete code can be seen in the updated \c examples/quick/tutorials/extending/chapter5-listproperties directory.
*/
@@ -392,7 +392,7 @@ The complete code can be seen in the updated \c examples/tutorials/extending/cha
/*!
\title Chapter 6: Writing an Extension Plugin
-\example examples/tutorials/extending/chapter6-plugins
+\example examples/quick/tutorials/extending/chapter6-plugins
Currently the \c PieChart and \c PieSlice types are used by \c app.qml,
which is displayed using a QQuickView in a C++ application. An alternative
@@ -407,22 +407,22 @@ and registers our QML types in the inherited \l{QQmlExtensionPlugin::}{registerT
Here is the \c ChartsPlugin definition in \c chartsplugin.h:
-\snippet examples/tutorials/extending/chapter6-plugins/chartsplugin.h 0
+\snippet examples/quick/tutorials/extending/chapter6-plugins/chartsplugin.h 0
And its implementation in \c chartsplugin.cpp:
-\snippet examples/tutorials/extending/chapter6-plugins/chartsplugin.cpp 0
+\snippet examples/quick/tutorials/extending/chapter6-plugins/chartsplugin.cpp 0
Then, we write a \c .pro project file that defines the project as a plugin library
and specifies with DESTDIR that library files should be built into a "lib" subdirectory:
-\quotefile examples/tutorials/extending/chapter6-plugins/chapter6-plugins.pro
+\quotefile examples/quick/tutorials/extending/chapter6-plugins/chapter6-plugins.pro
Finally, we add a \l{qtqml-modules-qmldir.html}{qmldir} file that is
parsed by the QML engine. In this file, we specify that a plugin named
"chapter6-plugin" (the name of the example project) can be found in the "lib" subdirectory:
-\quotefile examples/tutorials/extending/chapter6-plugins/Charts/qmldir
+\quotefile examples/quick/tutorials/extending/chapter6-plugins/Charts/qmldir
Now we have a plugin, and instead of having a main.cpp and an executable, we can build
the project and then load the QML file using the \l{Prototyping with qmlscene}{qmlscene tool},
diff --git a/src/qml/doc/src/external-resources.qdoc b/src/qml/doc/src/external-resources.qdoc
index f32f1d96c5..c9c661434f 100644
--- a/src/qml/doc/src/external-resources.qdoc
+++ b/src/qml/doc/src/external-resources.qdoc
@@ -28,7 +28,9 @@
/*!
\externalpage http://www.ecma-international.org/publications/standards/Ecma-262.htm
\title ECMA-262
+*/
+/*!
\externalpage http://www.w3schools.com/jsref/default.asp
\title W3Schools JavaScript Reference
*/
diff --git a/src/qml/qml/parser/qqmljskeywords_p.h b/src/qml/qml/parser/qqmljskeywords_p.h
index d06c996099..ae8adcc30f 100644
--- a/src/qml/qml/parser/qqmljskeywords_p.h
+++ b/src/qml/qml/parser/qqmljskeywords_p.h
@@ -104,7 +104,7 @@ static inline int classify3(const QChar *s, bool qmlMode) {
else if (s[0].unicode() == 'i') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 't') {
- return qmlMode ? Lexer::T_INT : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_INT) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -144,7 +144,7 @@ static inline int classify4(const QChar *s, bool qmlMode) {
if (s[1].unicode() == 'y') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'e') {
- return qmlMode ? Lexer::T_BYTE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_BYTE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -160,7 +160,7 @@ static inline int classify4(const QChar *s, bool qmlMode) {
else if (s[1].unicode() == 'h') {
if (s[2].unicode() == 'a') {
if (s[3].unicode() == 'r') {
- return qmlMode ? Lexer::T_CHAR : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_CHAR) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -185,7 +185,7 @@ static inline int classify4(const QChar *s, bool qmlMode) {
if (s[1].unicode() == 'o') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'o') {
- return qmlMode ? Lexer::T_GOTO : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_GOTO) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -194,7 +194,7 @@ static inline int classify4(const QChar *s, bool qmlMode) {
if (s[1].unicode() == 'o') {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'g') {
- return qmlMode ? Lexer::T_LONG : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_LONG) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -280,7 +280,7 @@ static inline int classify5(const QChar *s, bool qmlMode) {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 's') {
if (s[4].unicode() == 't') {
- return qmlMode ? Lexer::T_CONST : Lexer::T_RESERVED_WORD;
+ return qmlMode ? int(Lexer::T_CONST) : int(Lexer::T_RESERVED_WORD);
}
}
}
@@ -300,7 +300,7 @@ static inline int classify5(const QChar *s, bool qmlMode) {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'a') {
if (s[4].unicode() == 'l') {
- return qmlMode ? Lexer::T_FINAL : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_FINAL) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -309,7 +309,7 @@ static inline int classify5(const QChar *s, bool qmlMode) {
if (s[2].unicode() == 'o') {
if (s[3].unicode() == 'a') {
if (s[4].unicode() == 't') {
- return qmlMode ? Lexer::T_FLOAT : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_FLOAT) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -320,7 +320,7 @@ static inline int classify5(const QChar *s, bool qmlMode) {
if (s[2].unicode() == 'o') {
if (s[3].unicode() == 'r') {
if (s[4].unicode() == 't') {
- return qmlMode ? Lexer::T_SHORT : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_SHORT) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -329,7 +329,7 @@ static inline int classify5(const QChar *s, bool qmlMode) {
if (s[2].unicode() == 'p') {
if (s[3].unicode() == 'e') {
if (s[4].unicode() == 'r') {
- return qmlMode ? Lexer::T_SUPER : Lexer::T_RESERVED_WORD;
+ return qmlMode ? int(Lexer::T_SUPER) : int(Lexer::T_RESERVED_WORD);
}
}
}
@@ -378,7 +378,7 @@ static inline int classify6(const QChar *s, bool qmlMode) {
if (s[3].unicode() == 'b') {
if (s[4].unicode() == 'l') {
if (s[5].unicode() == 'e') {
- return qmlMode ? Lexer::T_DOUBLE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_DOUBLE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -404,7 +404,7 @@ static inline int classify6(const QChar *s, bool qmlMode) {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 'r') {
if (s[5].unicode() == 't') {
- return qmlMode ? Lexer::T_IMPORT : Lexer::T_RESERVED_WORD;
+ return qmlMode ? int(Lexer::T_IMPORT) : int(Lexer::T_RESERVED_WORD);
}
}
}
@@ -417,7 +417,7 @@ static inline int classify6(const QChar *s, bool qmlMode) {
if (s[3].unicode() == 'i') {
if (s[4].unicode() == 'v') {
if (s[5].unicode() == 'e') {
- return qmlMode ? Lexer::T_NATIVE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_NATIVE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -467,7 +467,7 @@ static inline int classify6(const QChar *s, bool qmlMode) {
if (s[3].unicode() == 't') {
if (s[4].unicode() == 'i') {
if (s[5].unicode() == 'c') {
- return qmlMode ? Lexer::T_STATIC : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_STATIC) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -491,7 +491,7 @@ static inline int classify6(const QChar *s, bool qmlMode) {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 'w') {
if (s[5].unicode() == 's') {
- return qmlMode ? Lexer::T_THROWS : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_THROWS) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -520,7 +520,7 @@ static inline int classify7(const QChar *s, bool qmlMode) {
if (s[4].unicode() == 'e') {
if (s[5].unicode() == 'a') {
if (s[6].unicode() == 'n') {
- return qmlMode ? Lexer::T_BOOLEAN : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_BOOLEAN) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -580,7 +580,7 @@ static inline int classify7(const QChar *s, bool qmlMode) {
if (s[4].unicode() == 'a') {
if (s[5].unicode() == 'g') {
if (s[6].unicode() == 'e') {
- return qmlMode ? Lexer::T_PACKAGE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_PACKAGE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -593,7 +593,7 @@ static inline int classify7(const QChar *s, bool qmlMode) {
if (s[4].unicode() == 'a') {
if (s[5].unicode() == 't') {
if (s[6].unicode() == 'e') {
- return qmlMode ? Lexer::T_PRIVATE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_PRIVATE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -613,7 +613,7 @@ static inline int classify8(const QChar *s, bool qmlMode) {
if (s[5].unicode() == 'a') {
if (s[6].unicode() == 'c') {
if (s[7].unicode() == 't') {
- return qmlMode ? Lexer::T_ABSTRACT : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_ABSTRACT) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -715,7 +715,7 @@ static inline int classify8(const QChar *s, bool qmlMode) {
if (s[5].unicode() == 'i') {
if (s[6].unicode() == 'l') {
if (s[7].unicode() == 'e') {
- return qmlMode ? Lexer::T_VOLATILE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_VOLATILE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -737,7 +737,7 @@ static inline int classify9(const QChar *s, bool qmlMode) {
if (s[6].unicode() == 'a') {
if (s[7].unicode() == 'c') {
if (s[8].unicode() == 'e') {
- return qmlMode ? Lexer::T_INTERFACE : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_INTERFACE) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -756,7 +756,7 @@ static inline int classify9(const QChar *s, bool qmlMode) {
if (s[6].unicode() == 't') {
if (s[7].unicode() == 'e') {
if (s[8].unicode() == 'd') {
- return qmlMode ? Lexer::T_PROTECTED : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_PROTECTED) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -775,7 +775,7 @@ static inline int classify9(const QChar *s, bool qmlMode) {
if (s[6].unicode() == 'e') {
if (s[7].unicode() == 'n') {
if (s[8].unicode() == 't') {
- return qmlMode ? Lexer::T_TRANSIENT : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_TRANSIENT) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -799,7 +799,7 @@ static inline int classify10(const QChar *s, bool qmlMode) {
if (s[7].unicode() == 'n') {
if (s[8].unicode() == 't') {
if (s[9].unicode() == 's') {
- return qmlMode ? Lexer::T_IMPLEMENTS : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_IMPLEMENTS) : int(Lexer::T_IDENTIFIER);
}
}
}
@@ -845,7 +845,7 @@ static inline int classify12(const QChar *s, bool qmlMode) {
if (s[9].unicode() == 'z') {
if (s[10].unicode() == 'e') {
if (s[11].unicode() == 'd') {
- return qmlMode ? Lexer::T_SYNCHRONIZED : Lexer::T_IDENTIFIER;
+ return qmlMode ? int(Lexer::T_SYNCHRONIZED) : int(Lexer::T_IDENTIFIER);
}
}
}
diff --git a/src/qml/qml/qqmlboundsignal.cpp b/src/qml/qml/qqmlboundsignal.cpp
index 234dee2918..276013e433 100644
--- a/src/qml/qml/qqmlboundsignal.cpp
+++ b/src/qml/qml/qqmlboundsignal.cpp
@@ -58,8 +58,6 @@
#include <QtCore/qstringbuilder.h>
#include <QtCore/qdebug.h>
-Q_DECLARE_METATYPE(QQmlV8Handle)
-
QT_BEGIN_NAMESPACE
static QQmlJavaScriptExpression::VTable QQmlBoundSignalExpression_jsvtable = {
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp
index 0b22228034..06a91e39b3 100644
--- a/src/qml/qml/qqmlcompiler.cpp
+++ b/src/qml/qml/qqmlcompiler.cpp
@@ -76,7 +76,6 @@ Q_DECLARE_METATYPE(QList<qreal>)
Q_DECLARE_METATYPE(QList<bool>)
Q_DECLARE_METATYPE(QList<QString>)
Q_DECLARE_METATYPE(QList<QUrl>)
-Q_DECLARE_METATYPE(QJSValue)
QT_BEGIN_NAMESPACE
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 2a46cdb12e..d7b6f706d6 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -675,13 +675,13 @@ void QQmlEnginePrivate::init()
firstTime = false;
}
- qRegisterMetaType<QVariant>("QVariant");
- qRegisterMetaType<QQmlScriptString>("QQmlScriptString");
- qRegisterMetaType<QJSValue>("QJSValue");
- qRegisterMetaType<QQmlComponent::Status>("QQmlComponent::Status");
- qRegisterMetaType<QList<QObject*> >("QList<QObject*>");
- qRegisterMetaType<QList<int> >("QList<int>");
- qRegisterMetaType<QQmlV8Handle>("QQmlV8Handle");
+ qRegisterMetaType<QVariant>();
+ qRegisterMetaType<QQmlScriptString>();
+ qRegisterMetaType<QJSValue>();
+ qRegisterMetaType<QQmlComponent::Status>();
+ qRegisterMetaType<QList<QObject*> >();
+ qRegisterMetaType<QList<int> >();
+ qRegisterMetaType<QQmlV8Handle>();
v8engine()->setEngine(q);
diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
index 7a2f4eaf34..adce26b76c 100644
--- a/src/qml/qml/qqmlimport.cpp
+++ b/src/qml/qml/qqmlimport.cpp
@@ -986,6 +986,7 @@ QQmlImportNamespace::Import *QQmlImportsPrivate::addImportToNamespace(QQmlImport
{
Q_ASSERT(nameSpace);
Q_ASSERT(errors);
+ Q_UNUSED(errors);
Q_ASSERT(url.isEmpty() || url.endsWith(Slash));
QQmlImportNamespace::Import *import = new QQmlImportNamespace::Import;
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp
index a2bd3742aa..62539b71e9 100644
--- a/src/qml/qml/qqmlproperty.cpp
+++ b/src/qml/qml/qqmlproperty.cpp
@@ -64,7 +64,6 @@
#include <math.h>
-Q_DECLARE_METATYPE(QJSValue)
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<qreal>)
Q_DECLARE_METATYPE(QList<bool>)
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp
index 8b023855ab..9922a82c3d 100644
--- a/src/qml/qml/qqmlpropertycache.cpp
+++ b/src/qml/qml/qqmlpropertycache.cpp
@@ -61,9 +61,6 @@
# pragma warning( disable : 4200 )
#endif
-Q_DECLARE_METATYPE(QJSValue)
-Q_DECLARE_METATYPE(QQmlV8Handle);
-
QT_BEGIN_NAMESPACE
#define Q_INT16_MAX 32767
diff --git a/src/qml/qml/qqmlvme.cpp b/src/qml/qml/qqmlvme.cpp
index da918c3c71..9db3ee5a4d 100644
--- a/src/qml/qml/qqmlvme.cpp
+++ b/src/qml/qml/qqmlvme.cpp
@@ -1244,6 +1244,7 @@ v8::Persistent<v8::Object> QQmlVME::run(QQmlContextData *parentCtxt, QQmlScriptD
script->initialize(parentCtxt->engine);
v8::Local<v8::Object> qmlglobal = v8engine->qmlScope(ctxt, 0);
+ v8engine->contextWrapper()->takeContextOwnership(qmlglobal);
if (!script->m_program.IsEmpty()) {
script->m_program->Run(qmlglobal);
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp
index 14d25b6a5e..8dc9943ddc 100644
--- a/src/qml/qml/qqmlvmemetaobject.cpp
+++ b/src/qml/qml/qqmlvmemetaobject.cpp
@@ -53,8 +53,6 @@
#include <private/qv8variantresource_p.h>
#include <private/qqmlglobal_p.h>
-Q_DECLARE_METATYPE(QJSValue);
-
QT_BEGIN_NAMESPACE
QQmlVMEVariantQObjectPtr::QQmlVMEVariantQObjectPtr(bool isVar)
diff --git a/src/qml/qml/v4/qv4bindings.cpp b/src/qml/qml/v4/qv4bindings.cpp
index 84bdbfda7a..48b2ad948a 100644
--- a/src/qml/qml/v4/qv4bindings.cpp
+++ b/src/qml/qml/v4/qv4bindings.cpp
@@ -68,8 +68,6 @@
#include <QtCore/qmath.h>
#include <math.h> // ::fmod
-Q_DECLARE_METATYPE(QJSValue)
-
#ifdef Q_CC_MSVC
// MSVC2010 warns about 'unreferenced formal parameter', even if it's used in p->~T()
# pragma warning( disable : 4100 )
diff --git a/src/qml/qml/v4/qv4compiler.cpp b/src/qml/qml/v4/qv4compiler.cpp
index 2b01acbddf..c12d59d420 100644
--- a/src/qml/qml/v4/qv4compiler.cpp
+++ b/src/qml/qml/v4/qv4compiler.cpp
@@ -50,8 +50,6 @@
#include <private/qqmlaccessors_p.h>
#include <private/qqmljsengine_p.h>
-Q_DECLARE_METATYPE(QJSValue)
-
QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(bindingsDump, QML_BINDINGS_DUMP)
diff --git a/src/qml/qml/v4/qv4irbuilder.cpp b/src/qml/qml/v4/qv4irbuilder.cpp
index bd875c185e..6e18091d6b 100644
--- a/src/qml/qml/v4/qv4irbuilder.cpp
+++ b/src/qml/qml/v4/qv4irbuilder.cpp
@@ -48,8 +48,6 @@
DEFINE_BOOL_CONFIG_OPTION(qmlVerboseCompiler, QML_VERBOSE_COMPILER)
-Q_DECLARE_METATYPE(QJSValue)
-
QT_BEGIN_NAMESPACE
using namespace QQmlJS;
diff --git a/src/qml/qml/v8/qjsengine.cpp b/src/qml/qml/v8/qjsengine.cpp
index 5bb6db16e0..9698ed5e8a 100644
--- a/src/qml/qml/v8/qjsengine.cpp
+++ b/src/qml/qml/v8/qjsengine.cpp
@@ -68,7 +68,6 @@
#define Q_D(blah)
#define Q_Q(blah)
-Q_DECLARE_METATYPE(QJSValue)
Q_DECLARE_METATYPE(QObjectList)
Q_DECLARE_METATYPE(QList<int>)
diff --git a/src/qml/qml/v8/qjsvalue.h b/src/qml/qml/v8/qjsvalue.h
index 9223e57ee4..d13be2b8cc 100644
--- a/src/qml/qml/v8/qjsvalue.h
+++ b/src/qml/qml/v8/qjsvalue.h
@@ -155,6 +155,8 @@ private:
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QJSValue)
+
QT_END_HEADER
#endif
diff --git a/src/qml/qml/v8/qv8contextwrapper.cpp b/src/qml/qml/v8/qv8contextwrapper.cpp
index 9f18afc5cb..bc64189cbd 100644
--- a/src/qml/qml/v8/qv8contextwrapper.cpp
+++ b/src/qml/qml/v8/qv8contextwrapper.cpp
@@ -55,7 +55,7 @@ class QV8ContextResource : public QV8ObjectResource
V8_RESOURCE_TYPE(ContextType);
public:
- QV8ContextResource(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject);
+ QV8ContextResource(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject, bool ownsContext = false);
~QV8ContextResource();
inline QQmlContextData *getContext() const;
@@ -64,7 +64,8 @@ public:
quint32 isSharedContext:1;
quint32 hasSubContexts:1;
quint32 readOnly:1;
- quint32 dummy:29;
+ quint32 ownsContext:1;
+ quint32 dummy:28;
// This is a pretty horrible hack, and an abuse of external strings. When we create a
// sub-context (a context created by a Qt.include() in an external javascript file),
@@ -86,15 +87,15 @@ private:
};
-QV8ContextResource::QV8ContextResource(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject)
-: QV8ObjectResource(engine), isSharedContext(false), hasSubContexts(false), readOnly(true),
- context(context), scopeObject(scopeObject)
+QV8ContextResource::QV8ContextResource(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject, bool ownsContext)
+: QV8ObjectResource(engine), isSharedContext(false), hasSubContexts(false), readOnly(true),
+ ownsContext(ownsContext), context(context), scopeObject(scopeObject)
{
}
QV8ContextResource::~QV8ContextResource()
{
- if (context && context->isJSContext)
+ if (context && ownsContext)
context->destroy();
}
@@ -186,7 +187,7 @@ v8::Local<v8::Object> QV8ContextWrapper::urlScope(const QUrl &url)
// XXX NewInstance() should be optimized
v8::Local<v8::Object> rv = m_urlConstructor->NewInstance();
- QV8ContextResource *r = new QV8ContextResource(m_engine, context, 0);
+ QV8ContextResource *r = new QV8ContextResource(m_engine, context, 0, true);
rv->SetExternalResource(r);
return rv;
}
@@ -226,6 +227,12 @@ QQmlContextData *QV8ContextWrapper::context(v8::Handle<v8::Value> value)
return r?r->getContext():0;
}
+void QV8ContextWrapper::takeContextOwnership(v8::Handle<v8::Object> qmlglobal)
+{
+ QV8ContextResource *r = v8_resource_cast<QV8ContextResource>(qmlglobal);
+ r->ownsContext = true;
+}
+
v8::Handle<v8::Value> QV8ContextWrapper::NullGetter(v8::Local<v8::String>,
const v8::AccessorInfo &)
{
diff --git a/src/qml/qml/v8/qv8contextwrapper_p.h b/src/qml/qml/v8/qv8contextwrapper_p.h
index 1e62ea6480..43eeee05d3 100644
--- a/src/qml/qml/v8/qv8contextwrapper_p.h
+++ b/src/qml/qml/v8/qv8contextwrapper_p.h
@@ -54,6 +54,7 @@
//
#include <QtCore/qglobal.h>
+#include <private/qtqmlglobal_p.h>
#include <private/qv8_p.h>
QT_BEGIN_NAMESPACE
@@ -62,7 +63,7 @@ class QUrl;
class QObject;
class QV8Engine;
class QQmlContextData;
-class QV8ContextWrapper
+class Q_QML_PRIVATE_EXPORT QV8ContextWrapper
{
public:
QV8ContextWrapper();
@@ -84,6 +85,8 @@ public:
inline v8::Handle<v8::Object> sharedContext() const;
+ void takeContextOwnership(v8::Handle<v8::Object> qmlglobal);
+
private:
static v8::Handle<v8::Value> NullGetter(v8::Local<v8::String> property,
const v8::AccessorInfo &info);
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp
index 1544b0717b..806e3690b3 100644
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -63,7 +63,6 @@
#include <QtCore/qjsonobject.h>
#include <QtCore/qjsonvalue.h>
-Q_DECLARE_METATYPE(QJSValue)
Q_DECLARE_METATYPE(QList<int>)
diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h
index 12b0f4b6a1..75e4344fee 100644
--- a/src/qml/qml/v8/qv8engine_p.h
+++ b/src/qml/qml/v8/qv8engine_p.h
@@ -642,4 +642,6 @@ QV8Engine::Deletable *QV8Engine::extensionData(int index) const
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QQmlV8Handle)
+
#endif // QQMLV8ENGINE_P_H
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp
index fa818388fe..eac8c93c08 100644
--- a/src/qml/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp
@@ -62,9 +62,6 @@
#include <QtCore/qtimer.h>
#include <QtCore/qatomic.h>
-Q_DECLARE_METATYPE(QJSValue);
-Q_DECLARE_METATYPE(QQmlV8Handle);
-
QT_BEGIN_NAMESPACE
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)