diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-03-29 10:05:09 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-29 21:20:22 +0100 |
commit | ed9a71b85849a653a3cc710e59b885002fc6f506 (patch) | |
tree | 61ea8efcc39bca1e0d55f0b87e66164ef51d98b6 /src/qml/qml/qqmlmetatype.cpp | |
parent | 869a199da9ba173e2dea948ec132d089b2513128 (diff) |
Make it possible to supply compilation units from plugins
This also cleans up the script and type initialization in
the type loader, for example by getting rid of the m_irUnit
member for scripts.
Change-Id: I207afeb21c0bae9091d3c7b4cac2e80e9aae0ea3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 90d3ca3308..96894919a3 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -106,6 +106,7 @@ struct QQmlMetaTypeData QBitArray lists; QList<QQmlPrivate::AutoParentFunction> parentFunctions; + QQmlPrivate::QmlUnitCacheLookupFunction lookupCachedQmlUnit; QSet<QString> protectedNamespaces; @@ -142,6 +143,7 @@ static uint qHash(const QQmlMetaTypeData::VersionedUri &v) } QQmlMetaTypeData::QQmlMetaTypeData() + : lookupCachedQmlUnit(0) { } @@ -1344,6 +1346,15 @@ int registerCompositeType(const QQmlPrivate::RegisterCompositeType &type) return index; } +int registerQmlUnitCacheHook(const QQmlPrivate::RegisterQmlUnitCacheHook &hookRegistration) +{ + if (hookRegistration.version > 0) + qFatal("qmlRegisterType(): Cannot mix incompatible QML versions."); + QWriteLocker lock(metaTypeDataLock()); + QQmlMetaTypeData *data = metaTypeData(); + data->lookupCachedQmlUnit = hookRegistration.lookupCachedQmlUnit; + return 0; +} /* This method is "over generalized" to allow us to (potentially) register more types of things in @@ -1363,6 +1374,8 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data) return registerCompositeType(*reinterpret_cast<RegisterCompositeType *>(data)); } else if (type == CompositeSingletonRegistration) { return registerCompositeSingletonType(*reinterpret_cast<RegisterCompositeSingletonType *>(data)); + } else if (type == QmlUnitCacheHookRegistration) { + return registerQmlUnitCacheHook(*reinterpret_cast<RegisterQmlUnitCacheHook *>(data)); } return -1; } @@ -1887,4 +1900,13 @@ bool QQmlMetaType::QQuickAnchorLineCompare(const void *p1, const void *p2) return anchorLineCompareFunction(p1, p2); } +const QQmlPrivate::CachedQmlUnit *QQmlMetaType::findCachedCompilationUnit(const QUrl &uri) +{ + QReadLocker lock(metaTypeDataLock()); + QQmlMetaTypeData *data = metaTypeData(); + if (data->lookupCachedQmlUnit) + return data->lookupCachedQmlUnit(uri); + return 0; +} + QT_END_NAMESPACE |