diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-12-20 15:47:43 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-01-08 22:30:11 +0100 |
commit | 933f80f345cb04df6ecafe9c76f262553a5a198c (patch) | |
tree | 336ab12536d67c5e6f38b7428cc9d940a75eca0d /src/qml/jsruntime/qv4executablecompilationunit_p.h | |
parent | 796dd2ab8c7b0e85f2469df9b79f65ca62719c8b (diff) |
QtQml: Move engine-specific data out of base compilation unit
We want to re-use the base compilation unit for different engines. To do
that, we cannot have data in there that belongs to a specific engine.
Pick-to: 6.7
Task-number: QTBUG-120189
Change-Id: I8e43e7ec6c1cd33249dc4ed15fec16babc6d06fb
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4executablecompilationunit_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit_p.h | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4executablecompilationunit_p.h b/src/qml/jsruntime/qv4executablecompilationunit_p.h index 4cd1ce204e..6b29760d35 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit_p.h +++ b/src/qml/jsruntime/qv4executablecompilationunit_p.h @@ -65,8 +65,34 @@ struct ResolvedTypeReferenceMap: public QHash<int, ResolvedTypeReference*> bool addToHash(QCryptographicHash *hash, QHash<quintptr, QByteArray> *checksums) const; }; +struct CompilationUnitRuntimeData +{ + Heap::String **runtimeStrings = nullptr; // Array + + // pointers either to data->constants() or little-endian memory copy. + // We keep this member twice so that the JIT can access it via standard layout. + const StaticValue *constants = nullptr; + + QV4::StaticValue *runtimeRegularExpressions = nullptr; + Heap::InternalClass **runtimeClasses = nullptr; + const StaticValue **imports = nullptr; + + QV4::Lookup *runtimeLookups = nullptr; + QVector<QV4::Function *> runtimeFunctions; + QVector<QV4::Heap::InternalClass *> runtimeBlocks; + mutable QVector<QV4::Heap::Object *> templateObjects; +}; + +static_assert(std::is_standard_layout_v<CompilationUnitRuntimeData>); +static_assert(offsetof(CompilationUnitRuntimeData, runtimeStrings) == 0); +static_assert(offsetof(CompilationUnitRuntimeData, constants) == sizeof(QV4::Heap::String **)); +static_assert(offsetof(CompilationUnitRuntimeData, runtimeRegularExpressions) == offsetof(CompilationUnitRuntimeData, constants) + sizeof(const StaticValue *)); +static_assert(offsetof(CompilationUnitRuntimeData, runtimeClasses) == offsetof(CompilationUnitRuntimeData, runtimeRegularExpressions) + sizeof(const StaticValue *)); +static_assert(offsetof(CompilationUnitRuntimeData, imports) == offsetof(CompilationUnitRuntimeData, runtimeClasses) + sizeof(const StaticValue *)); + class Q_QML_PRIVATE_EXPORT ExecutableCompilationUnit final : public CompiledData::CompilationUnit, + public CompilationUnitRuntimeData, public QQmlRefCounted<ExecutableCompilationUnit> { Q_DISABLE_COPY_MOVE(ExecutableCompilationUnit) @@ -113,10 +139,6 @@ public: return m_finalUrl; } - QV4::Lookup *runtimeLookups = nullptr; - QVector<QV4::Function *> runtimeFunctions; - QVector<QV4::Heap::InternalClass *> runtimeBlocks; - mutable QVector<QV4::Heap::Object *> templateObjects; mutable QQmlNullableValue<QUrl> m_url; mutable QQmlNullableValue<QUrl> m_finalUrl; @@ -322,11 +344,17 @@ public: static bool verifyHeader(const CompiledData::Unit *unit, QDateTime expectedSourceTimeStamp, QString *errorString); + + Heap::Module *module() const { return m_module; } + void setModule(Heap::Module *module) { m_module = module; } + protected: quint32 totalStringCount() const { return data->stringTableSize; } private: + Heap::Module *m_module = nullptr; + struct ResolveSetEntry { ResolveSetEntry() {} |