diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | examples/quick/quick.pro | 2 | ||||
-rw-r--r-- | src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp | 2 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 2 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 2 | ||||
-rw-r--r-- | src/qml/doc/src/cppintegration/data.qdoc | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 11 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 5 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4numberobject.cpp | 4 | ||||
-rw-r--r-- | src/qml/types/qqmlobjectmodel.cpp | 6 | ||||
-rw-r--r-- | src/quick/doc/snippets/qml/texteditor.qml | 1 | ||||
-rw-r--r-- | src/quick/items/qquickloader.cpp | 1 | ||||
-rw-r--r-- | tests/auto/qml/qqmlobjectmodel/tst_qqmlobjectmodel.cpp | 10 |
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); |