diff options
Diffstat (limited to 'src/qml/qml/qqmltypecompiler_p.h')
-rw-r--r-- | src/qml/qml/qqmltypecompiler_p.h | 75 |
1 files changed, 19 insertions, 56 deletions
diff --git a/src/qml/qml/qqmltypecompiler_p.h b/src/qml/qml/qqmltypecompiler_p.h index 02edbb0c08..6d9e5a77ca 100644 --- a/src/qml/qml/qqmltypecompiler_p.h +++ b/src/qml/qml/qqmltypecompiler_p.h @@ -46,20 +46,24 @@ public: QQmlTypeCompiler(QQmlEnginePrivate *engine, QQmlTypeData *typeData, QmlIR::Document *document, - const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache, - QV4::ResolvedTypeReferenceMap *resolvedTypeCache, + QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache, const QV4::CompiledData::DependentTypesHasher &dependencyHasher); // --- interface used by QQmlPropertyCacheCreator typedef QmlIR::Object CompiledObject; + typedef QmlIR::Binding CompiledBinding; using ListPropertyAssignBehavior = QmlIR::Pragma::ListPropertyAssignBehaviorValue; + // Deliberate choice of map over hash here to ensure stable generated output. + using IdToObjectMap = QMap<int, int>; + const QmlIR::Object *objectAt(int index) const { return document->objects.at(index); } + QmlIR::Object *objectAt(int index) { return document->objects.at(index); } int objectCount() const { return document->objects.size(); } QString stringAt(int idx) const; QmlIR::PoolList<QmlIR::Function>::Iterator objectFunctionsBegin(const QmlIR::Object *object) const { return object->functionsBegin(); } QmlIR::PoolList<QmlIR::Function>::Iterator objectFunctionsEnd(const QmlIR::Object *object) const { return object->functionsEnd(); } - QV4::ResolvedTypeReferenceMap *resolvedTypes = nullptr; + QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypes = nullptr; ListPropertyAssignBehavior listPropertyAssignBehavior() const { for (const QmlIR::Pragma *pragma: document->pragmas) { @@ -70,7 +74,7 @@ public: } // --- - QQmlRefPointer<QV4::ExecutableCompilationUnit> compile(); + QQmlRefPointer<QV4::CompiledData::CompilationUnit> compile(); QList<QQmlError> compilationErrors() const { return errors; } void recordError(const QV4::CompiledData::Location &location, const QString &description); @@ -86,11 +90,8 @@ public: QQmlEnginePrivate *enginePrivate() const { return engine; } const QQmlImports *imports() const; QVector<QmlIR::Object *> *qmlObjects() const; - void setPropertyCaches(QQmlPropertyCacheVector &&caches); + QQmlPropertyCacheVector *propertyCaches(); const QQmlPropertyCacheVector *propertyCaches() const; - QQmlPropertyCacheVector &&takePropertyCaches(); - void setComponentRoots(const QVector<quint32> &roots) { m_componentRoots = roots; } - const QVector<quint32> &componentRoots() const { return m_componentRoots; } QQmlJS::MemoryPool *memoryPool(); QStringView newStringRef(const QString &string); const QV4::Compiler::StringTableGenerator *stringPool() const; @@ -106,7 +107,16 @@ public: return resolvedTypes->value(id); } - CompositeMetaTypeIds typeIdsForComponent(int objectId = 0) const; + QV4::ResolvedTypeReference *resolvedType(QMetaType type) const + { + for (QV4::ResolvedTypeReference *ref : std::as_const(*resolvedTypes)) { + if (ref->type().typeId() == type) + return ref; + } + return nullptr; + } + + QQmlType qmlTypeForComponent(const QString &inlineComponentName = QString()) const; private: QList<QQmlError> errors; @@ -117,10 +127,8 @@ private: QHash<int, QQmlCustomParser*> customParsers; // index in first hash is component index, vector inside contains object indices of objects with id property - QVector<quint32> m_componentRoots; QQmlPropertyCacheVector m_propertyCaches; - QQmlRefPointer<QQmlTypeNameCache> typeNameCache; QQmlTypeData *typeData; }; @@ -132,16 +140,9 @@ struct QQmlCompilePass protected: void recordError(const QV4::CompiledData::Location &location, const QString &description) const { compiler->recordError(location, description); } - void recordError(const QQmlError &error) - { compiler->recordError(error); } QV4::ResolvedTypeReference *resolvedType(int id) const { return compiler->resolvedType(id); } - bool containsResolvedType(int id) const - { return compiler->resolvedTypes->contains(id); } - QV4::ResolvedTypeReferenceMap::iterator insertResolvedType( - int id, QV4::ResolvedTypeReference *value) - { return compiler->resolvedTypes->insert(id, value); } QQmlTypeCompiler *compiler; }; @@ -235,44 +236,6 @@ private: const QQmlPropertyCacheVector * const propertyCaches; }; -class QQmlComponentAndAliasResolver : public QQmlCompilePass -{ - Q_DECLARE_TR_FUNCTIONS(QQmlAnonymousComponentResolver) -public: - QQmlComponentAndAliasResolver(QQmlTypeCompiler *typeCompiler); - - bool resolve(int root = 0); - -protected: - void findAndRegisterImplicitComponents( - const QmlIR::Object *obj, const QQmlPropertyCache::ConstPtr &propertyCache); - bool collectIdsAndAliases(int objectIndex); - bool resolveAliases(int componentIndex); - void propertyDataForAlias(QmlIR::Alias *alias, int *type, quint32 *propertyFlags); - - enum AliasResolutionResult { - NoAliasResolved, - SomeAliasesResolved, - AllAliasesResolved - }; - - AliasResolutionResult resolveAliasesInObject(int objectIndex, QQmlError *error); - - QQmlEnginePrivate *enginePrivate; - QQmlJS::MemoryPool *pool; - - QVector<QmlIR::Object*> *qmlObjects; - - // indices of the objects that are actually Component {} - QVector<quint32> componentRoots; - - // Deliberate choice of map over hash here to ensure stable generated output. - QMap<int, int> _idToObjectIndex; - QVector<int> _objectsWithAliases; - - QQmlPropertyCacheVector propertyCaches; -}; - class QQmlDeferredAndCustomParserBindingScanner : public QQmlCompilePass { Q_DECLARE_TR_FUNCTIONS(QQmlDeferredAndCustomParserBindingScanner) |