diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-08-12 10:03:53 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-08-12 10:04:33 +0200 |
commit | 61f72d32b4fddc6e87f21d0243d9f0a32ca61987 (patch) | |
tree | b166541b885e33666bc3dffbde937b5dc0e93bc5 /src/qml | |
parent | 430853836f9c17154ef3ee4cac6b03b90ee493a9 (diff) | |
parent | 01c6af3fc940378e8eee41a9fb8273420ef5a7e1 (diff) |
Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
src/qml/jsruntime/qv4include.cpp
src/quick/items/qquickrendercontrol.cpp
src/quick/items/qquickrendercontrol_p.h
src/quickwidgets/qquickwidget.cpp
Change-Id: Ib2dc0051a38cd283a37a7665eb4a76f6f7ec8b15
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/compiler/qqmltypecompiler.cpp | 14 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4include.cpp | 24 | ||||
-rw-r--r-- | src/qml/qml/qqmlcomponent.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/qqmlincubator.cpp | 7 |
4 files changed, 31 insertions, 23 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp index b8ada7ceaf..a4130cb45f 100644 --- a/src/qml/compiler/qqmltypecompiler.cpp +++ b/src/qml/compiler/qqmltypecompiler.cpp @@ -536,12 +536,14 @@ bool QQmlPropertyCacheCreator::buildMetaObjectRecursively(int objectIndex, int r Q_ASSERT(baseTypeCache); } - if (needVMEMetaObject) { - if (!createMetaObject(objectIndex, obj, baseTypeCache)) - return false; - } else if (baseTypeCache) { - propertyCaches[objectIndex] = baseTypeCache; - baseTypeCache->addref(); + if (baseTypeCache) { + if (needVMEMetaObject) { + if (!createMetaObject(objectIndex, obj, baseTypeCache)) + return false; + } else { + propertyCaches[objectIndex] = baseTypeCache; + baseTypeCache->addref(); + } } if (propertyCaches.at(objectIndex)) { diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index b9576e1bee..ece0cfa8b3 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -209,20 +209,28 @@ QV4::ReturnedValue QV4Include::method_include(QV4::CallContext *ctx) result = i->result(); } else { + QScopedPointer<QV4::Script> script; - QFile f(localFile); + if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(url)) { + QV4::CompiledData::CompilationUnit *jsUnit = cachedUnit->createCompilationUnit(); + script.reset(new QV4::Script(scope.engine, qmlcontextobject, jsUnit)); + } else { + QFile f(localFile); - if (f.open(QIODevice::ReadOnly)) { - QByteArray data = f.readAll(); - QString code = QString::fromUtf8(data); - QmlIR::Document::removeScriptPragmas(code); + if (f.open(QIODevice::ReadOnly)) { + QByteArray data = f.readAll(); + QString code = QString::fromUtf8(data); + QmlIR::Document::removeScriptPragmas(code); - QV4::Script script(scope.engine, qmlcontextobject, code, url.toString()); + script.reset(new QV4::Script(scope.engine, qmlcontextobject, code, url.toString())); + } + } + if (!script.isNull()) { QV4::ExecutionContext *ctx = scope.engine->currentContext(); - script.parse(); + script->parse(); if (!scope.engine->hasException) - script.run(); + script->run(); if (scope.engine->hasException) { QV4::ScopedValue ex(scope, ctx->catchException()); result = resultValue(scope.engine, Exception); diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index e087785901..84ceefccba 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -265,7 +265,7 @@ V8_DEFINE_EXTENSION(QQmlComponentExtension, componentExtension); /*! \qmlattachedsignal Component::completed() - Emitted after component "startup" has completed. This can be used to + Emitted after the object has been instantiated. This can be used to execute script code at startup, once the full QML environment has been established. @@ -286,14 +286,13 @@ V8_DEFINE_EXTENSION(QQmlComponentExtension, componentExtension); /*! \qmlattachedsignal Component::destruction() - Emitted as the component begins destruction. This can be used to undo + Emitted as the object begins destruction. This can be used to undo work done in response to the \l {completed}{completed()} signal, or other imperative code in your application. The corresponding handler is \c onDestruction. It can be declared on - any object. However, it applies to the destruction of the component as - a whole, and not the destruction of the specific object. The order of - running the \c onDestruction handlers is undefined. + any object. The order of running the \c onDestruction handlers is + undefined. \qml Rectangle { diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp index 0665a4ac1a..c342d8b080 100644 --- a/src/qml/qml/qqmlincubator.cpp +++ b/src/qml/qml/qqmlincubator.cpp @@ -292,10 +292,7 @@ void QQmlIncubatorPrivate::incubate(QQmlInstantiationInterrupt &i) QQmlEngine *engine = compiledData->engine; QQmlEnginePrivate *enginePriv = QQmlEnginePrivate::get(engine); - bool guardOk = vmeGuard.isOK(); - vmeGuard.clear(); - - if (!guardOk) { + if (!vmeGuard.isOK()) { QQmlError error; error.setUrl(compiledData->url()); error.setDescription(QQmlComponent::tr("Object destroyed during incubation")); @@ -305,6 +302,8 @@ void QQmlIncubatorPrivate::incubate(QQmlInstantiationInterrupt &i) goto finishIncubate; } + vmeGuard.clear(); + if (progress == QQmlIncubatorPrivate::Execute) { enginePriv->referenceScarceResources(); QObject *tresult = 0; |