diff options
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit.cpp | 10 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit_p.h | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4executablecompilationunit.cpp b/src/qml/jsruntime/qv4executablecompilationunit.cpp index 79e2ec2a5d..9c7609ee8d 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit.cpp +++ b/src/qml/jsruntime/qv4executablecompilationunit.cpp @@ -283,7 +283,7 @@ void ExecutableCompilationUnit::unlink() Q_ASSERT(data && propertyCaches.count() > 0 && propertyCaches.at(/*root object*/0)); if (qmlEngine) qmlEngine->unregisterInternalCompositeType(this); - QQmlMetaType::unregisterInternalCompositeType(this); + QQmlMetaType::unregisterInternalCompositeType({metaTypeId, listMetaTypeId}); isRegisteredWithEngine = false; } @@ -383,13 +383,17 @@ IdentifierHash ExecutableCompilationUnit::createNamedObjectsPerComponent(int com return *namedObjectsPerComponentCache.insert(componentObjectIndex, namedObjectCache); } -void ExecutableCompilationUnit::finalizeCompositeType(QQmlEnginePrivate *qmlEngine) +void ExecutableCompilationUnit::finalizeCompositeType(QQmlEnginePrivate *qmlEngine, QQmlMetaType::CompositeMetaTypeIds typeIds) { this->qmlEngine = qmlEngine; // Add to type registry of composites if (propertyCaches.needsVMEMetaObject(/*root object*/0)) { - QQmlMetaType::registerInternalCompositeType(this); + // typeIds is only valid for types that have references to themselves. + if (!typeIds.isValid()) + typeIds = QQmlMetaType::registerInternalCompositeType(rootPropertyCache()->className()); + metaTypeId = typeIds.id; + listMetaTypeId = typeIds.listId; qmlEngine->registerInternalCompositeType(this); } else { const QV4::CompiledData::Object *obj = objectAt(/*root object*/0); diff --git a/src/qml/jsruntime/qv4executablecompilationunit_p.h b/src/qml/jsruntime/qv4executablecompilationunit_p.h index 6eef3b12c3..1272e7a2c3 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit_p.h +++ b/src/qml/jsruntime/qv4executablecompilationunit_p.h @@ -58,6 +58,7 @@ #include <private/qqmlpropertycachevector_p.h> #include <private/qqmltype_p.h> #include <private/qqmlnullablevalue_p.h> +#include <private/qqmlmetatype_p.h> QT_BEGIN_NAMESPACE @@ -142,7 +143,7 @@ public: QHash<int, IdentifierHash> namedObjectsPerComponentCache; inline IdentifierHash namedObjectsPerComponent(int componentObjectIndex); - void finalizeCompositeType(QQmlEnginePrivate *qmlEngine); + void finalizeCompositeType(QQmlEnginePrivate *qmlEngine, QQmlMetaType::CompositeMetaTypeIds typeIds); int totalBindingsCount = 0; // Number of bindings used in this type int totalParserStatusCount = 0; // Number of instantiated types that are QQmlParserStatus subclasses @@ -154,6 +155,8 @@ public: bool verifyChecksum(const CompiledData::DependentTypesHasher &dependencyHasher) const; + QQmlMetaType::CompositeMetaTypeIds typeIds() const { return {metaTypeId, listMetaTypeId}; } + int metaTypeId = -1; int listMetaTypeId = -1; bool isRegisteredWithEngine = false; |