aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-08-12 10:03:53 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-08-12 10:04:33 +0200
commit61f72d32b4fddc6e87f21d0243d9f0a32ca61987 (patch)
treeb166541b885e33666bc3dffbde937b5dc0e93bc5 /src/qml
parent430853836f9c17154ef3ee4cac6b03b90ee493a9 (diff)
parent01c6af3fc940378e8eee41a9fb8273420ef5a7e1 (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.cpp14
-rw-r--r--src/qml/jsruntime/qv4include.cpp24
-rw-r--r--src/qml/qml/qqmlcomponent.cpp9
-rw-r--r--src/qml/qml/qqmlincubator.cpp7
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;