aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--examples/quick/quick.pro2
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp2
-rw-r--r--src/qml/compiler/qv4compileddata.cpp2
-rw-r--r--src/qml/compiler/qv4compileddata_p.h2
-rw-r--r--src/qml/doc/src/cppintegration/data.qdoc2
-rw-r--r--src/qml/jsruntime/qv4engine.cpp11
-rw-r--r--src/qml/jsruntime/qv4engine_p.h5
-rw-r--r--src/qml/jsruntime/qv4numberobject.cpp4
-rw-r--r--src/qml/types/qqmlobjectmodel.cpp6
-rw-r--r--src/quick/doc/snippets/qml/texteditor.qml1
-rw-r--r--src/quick/items/qquickloader.cpp1
-rw-r--r--tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp10
13 files changed, 26 insertions, 24 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 8881d4bba8..ee30acfa46 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,4 +1,4 @@
load(qt_build_config)
CONFIG += warning_clean
-MODULE_VERSION = 5.9.2
+MODULE_VERSION = 5.9.3
diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro
index 445dfb0fab..7da255e903 100644
--- a/examples/quick/quick.pro
+++ b/examples/quick/quick.pro
@@ -36,7 +36,7 @@ qtConfig(opengl(es1|es2)?) {
# Widget dependent examples
qtHaveModule(widgets) {
SUBDIRS += embeddedinwidgets
- qtHaveModule(quickwidgets): SUBDIRS += quickwidgets
+ qtHaveModule(quickwidgets):qtConfig(opengl(es1|es2)?): SUBDIRS += quickwidgets
}
EXAMPLE_FILES = \
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp
index a624cf22a4..a58604526b 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp
@@ -274,7 +274,7 @@ GatherSourcesJob::GatherSourcesJob(QV4::ExecutionEngine *engine)
void GatherSourcesJob::run()
{
- for (QV4::CompiledData::CompilationUnit *unit : qAsConst(engine->compilationUnits)) {
+ for (QV4::CompiledData::CompilationUnit *unit : engine->compilationUnits) {
QString fileName = unit->fileName();
if (!fileName.isEmpty())
sources.append(fileName);
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp
index 34491a3a84..294eaa25f5 100644
--- a/src/qml/compiler/qv4compileddata.cpp
+++ b/src/qml/compiler/qv4compileddata.cpp
@@ -212,7 +212,7 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine)
void CompilationUnit::unlink()
{
if (engine)
- engine->compilationUnits.erase(engine->compilationUnits.find(this));
+ nextCompilationUnit.remove();
if (isRegisteredWithEngine) {
Q_ASSERT(data && propertyCaches.count() > 0 && propertyCaches.at(/*root object*/0));
diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h
index 84777b3533..440dc3e013 100644
--- a/src/qml/compiler/qv4compileddata_p.h
+++ b/src/qml/compiler/qv4compileddata_p.h
@@ -66,6 +66,7 @@
#ifndef V4_BOOTSTRAP
#include <private/qqmltypenamecache_p.h>
#include <private/qqmlpropertycache_p.h>
+#include "private/qintrusivelist_p.h"
#endif
QT_BEGIN_NAMESPACE
@@ -837,6 +838,7 @@ struct Q_QML_PRIVATE_EXPORT CompilationUnit : public CompilationUnitBase, public
virtual QV4::CompiledData::Unit *createUnitData(QmlIR::Document *irDocument);
#ifndef V4_BOOTSTRAP
+ QIntrusiveListNode nextCompilationUnit;
ExecutionEngine *engine;
QQmlEnginePrivate *qmlEngine; // only used in QML environment for composite types, not in plain QJSEngine case.
diff --git a/src/qml/doc/src/cppintegration/data.qdoc b/src/qml/doc/src/cppintegration/data.qdoc
index 723d6e4be1..c4e641331a 100644
--- a/src/qml/doc/src/cppintegration/data.qdoc
+++ b/src/qml/doc/src/cppintegration/data.qdoc
@@ -174,7 +174,6 @@ function, passing a QVariantList and a QVariantMap, which are automatically
converted to JavaScript array and object values, repectively:
\table
-\header
\row
\li QML
\li \snippet qml/qtbinding/variantlistmap/MyItem.qml 0
@@ -213,7 +212,6 @@ a \c Date object that is automatically converted into a QDateTime value when it
is received in C++:
\table
-\header
\row
\li QML
\li
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 54011e6bd2..917f6bffc5 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -478,10 +478,8 @@ ExecutionEngine::~ExecutionEngine()
delete identifierTable;
delete memoryManager;
- QSet<QV4::CompiledData::CompilationUnit*> remainingUnits;
- qSwap(compilationUnits, remainingUnits);
- for (QV4::CompiledData::CompilationUnit *unit : qAsConst(remainingUnits))
- unit->unlink();
+ while (!compilationUnits.isEmpty())
+ (*compilationUnits.begin())->unlink();
internalClasses[Class_Empty]->destroy();
delete classPool;
@@ -953,9 +951,8 @@ void ExecutionEngine::markObjects()
drainMarkStack(this, markBase);
- for (QSet<CompiledData::CompilationUnit*>::ConstIterator it = compilationUnits.constBegin(), end = compilationUnits.constEnd();
- it != end; ++it) {
- (*it)->markObjects(this);
+ for (auto compilationUnit: compilationUnits) {
+ compilationUnit->markObjects(this);
drainMarkStack(this, markBase);
}
}
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 688a58e345..fee06ebc58 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -59,6 +59,7 @@
#ifndef V4_BOOTSTRAP
# include <private/qv8engine_p.h>
+# include <private/qv4compileddata_p.h>
#endif
namespace WTF {
@@ -318,7 +319,9 @@ public:
String *id_buffer() const { return reinterpret_cast<String *>(jsStrings + String_buffer); }
String *id_lastIndex() const { return reinterpret_cast<String *>(jsStrings + String_lastIndex); }
- QSet<CompiledData::CompilationUnit*> compilationUnits;
+#ifndef V4_BOOTSTRAP
+ QIntrusiveList<CompiledData::CompilationUnit, &CompiledData::CompilationUnit::nextCompilationUnit> compilationUnits;
+#endif
quint32 m_engineId;
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp
index 09644c161d..255d0212c1 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -163,7 +163,9 @@ void NumberPrototype::method_isNaN(const BuiltinFunction *, Scope &scope, CallDa
}
double v = callData->args[0].toNumber();
- scope.result = Encode(std::isnan(v));
+ // cast to bool explicitly as std::isnan() may give us ::isnan(), which
+ // sometimes returns an int and we don't want the Encode(int) overload.
+ scope.result = Encode(bool(std::isnan(v)));
}
void NumberPrototype::method_toString(const BuiltinFunction *, Scope &scope, CallData *callData)
diff --git a/src/qml/types/qqmlobjectmodel.cpp b/src/qml/types/qqmlobjectmodel.cpp
index 64d0169f6b..dcd0360199 100644
--- a/src/qml/types/qqmlobjectmodel.cpp
+++ b/src/qml/types/qqmlobjectmodel.cpp
@@ -72,7 +72,7 @@ public:
int ref;
};
- QQmlObjectModelPrivate() : QObjectPrivate() {}
+ QQmlObjectModelPrivate() : QObjectPrivate(), moveId(0) {}
static void children_append(QQmlListProperty<QObject> *prop, QObject *item) {
int index = static_cast<QQmlObjectModelPrivate *>(prop->data)->children.count();
@@ -129,7 +129,7 @@ public:
}
QQmlChangeSet changeSet;
- changeSet.move(from, to, n, 0);
+ changeSet.move(from, to, n, ++moveId);
emit q->modelUpdated(changeSet, false);
emit q->childrenChanged();
}
@@ -166,7 +166,7 @@ public:
return -1;
}
-
+ uint moveId;
QList<Item> children;
};
diff --git a/src/quick/doc/snippets/qml/texteditor.qml b/src/quick/doc/snippets/qml/texteditor.qml
index 7da9086e10..9bf13fb27c 100644
--- a/src/quick/doc/snippets/qml/texteditor.qml
+++ b/src/quick/doc/snippets/qml/texteditor.qml
@@ -63,7 +63,6 @@ Flickable {
TextEdit {
id: edit
width: flick.width
- height: flick.height
focus: true
wrapMode: TextEdit.Wrap
onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp
index 9f27beb298..cd356a9eeb 100644
--- a/src/quick/items/qquickloader.cpp
+++ b/src/quick/items/qquickloader.cpp
@@ -852,6 +852,7 @@ qreal QQuickLoader::progress() const
\qmlproperty bool QtQuick::Loader::asynchronous
This property holds whether the component will be instantiated asynchronously.
+By default it is \c false.
When used in conjunction with the \l source property, loading and compilation
will also be performed in a background thread.
diff --git a/tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp b/tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp
index 6ac0412ae5..fb63d811a8 100644
--- a/tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp
+++ b/tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp
@@ -47,18 +47,18 @@ static bool compareItems(QQmlObjectModel *model, const QObjectList &items)
return true;
}
-static bool verifyChangeSet(const QQmlChangeSet &changeSet, int expectedInserts, int expectedRemoves, bool isMove)
+static bool verifyChangeSet(const QQmlChangeSet &changeSet, int expectedInserts, int expectedRemoves, bool isMove, int moveId = -1)
{
int actualRemoves = 0;
for (const QQmlChangeSet::Change &r : changeSet.removes()) {
- if (r.isMove() != isMove)
+ if (r.isMove() != isMove && (!isMove || moveId == r.moveId))
return false;
actualRemoves += r.count;
}
int actualInserts = 0;
for (const QQmlChangeSet::Change &i : changeSet.inserts()) {
- if (i.isMove() != isMove)
+ if (i.isMove() != isMove && (!isMove || moveId == i.moveId))
return false;
actualInserts += i.count;
}
@@ -129,7 +129,7 @@ void tst_QQmlObjectModel::changes()
QCOMPARE(countSpy.count(), countSignals);
QCOMPARE(childrenSpy.count(), ++childrenSignals);
QCOMPARE(modelUpdateSpy.count(), ++modelUpdateSignals);
- QVERIFY(verifyChangeSet(modelUpdateSpy.last().first().value<QQmlChangeSet>(), 1, 1, true));
+ QVERIFY(verifyChangeSet(modelUpdateSpy.last().first().value<QQmlChangeSet>(), 1, 1, true, 1));
// move(3, 2) -> [item0, item1, item2, item3]
model.move(3, 2); items.move(3, 2);
@@ -138,7 +138,7 @@ void tst_QQmlObjectModel::changes()
QCOMPARE(countSpy.count(), countSignals);
QCOMPARE(childrenSpy.count(), ++childrenSignals);
QCOMPARE(modelUpdateSpy.count(), ++modelUpdateSignals);
- QVERIFY(verifyChangeSet(modelUpdateSpy.last().first().value<QQmlChangeSet>(), 1, 1, true));
+ QVERIFY(verifyChangeSet(modelUpdateSpy.last().first().value<QQmlChangeSet>(), 1, 1, true, 2));
// remove(0) -> [item1, item2, item3]
model.remove(0); items.removeAt(0);