diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-09-10 13:18:39 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-09-11 09:53:45 +0200 |
commit | 8fab54a5495226b8c06d7708357a23e83444abc0 (patch) | |
tree | 957b507e0c0ef791e4df6de250a9a7e158b148a8 /src | |
parent | 4be5278c1e871b48ab66fc0c27443798e97220b6 (diff) |
Fix failing assertion when compiling self-referencing QML singleton
When a QML singleton file accesses itself, we would hit incomplete
type data.
Task-number: QTBUG-41220
Change-Id: Id0bd5fd71cf9be21f7e4ad8527fa8724a718d702
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 34db06ca4c..d22116fc83 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1805,13 +1805,14 @@ static QV4::IR::Type resolveQmlType(QQmlEnginePrivate *qmlEngine, QV4::IR::Membe } if (type->isCompositeSingleton()) { - QQmlTypeData *tdata = qmlEngine->typeLoader.getType(type->singletonInstanceInfo()->url); + QQmlRefPointer<QQmlTypeData> tdata = qmlEngine->typeLoader.getType(type->singletonInstanceInfo()->url); Q_ASSERT(tdata); - Q_ASSERT(tdata->isComplete()); - initMetaObjectResolver(resolver, qmlEngine->propertyCacheForType(tdata->compiledData()->metaTypeId)); - tdata->release(); - resolver->flags |= AllPropertiesAreFinal; - return resolver->resolveMember(qmlEngine, resolver, member); + // When a singleton tries to reference itself, it may not be complete yet. + if (tdata->isComplete()) { + initMetaObjectResolver(resolver, qmlEngine->propertyCacheForType(tdata->compiledData()->metaTypeId)); + resolver->flags |= AllPropertiesAreFinal; + return resolver->resolveMember(qmlEngine, resolver, member); + } } else if (type->isSingleton()) { const QMetaObject *singletonMeta = type->singletonInstanceInfo()->instanceMetaObject; if (singletonMeta) { // QJSValue-based singletons cannot be accelerated |