diff options
author | Fabian Kosmale <[email protected]> | 2024-02-09 21:35:09 +0100 |
---|---|---|
committer | Fabian Kosmale <[email protected]> | 2024-03-05 14:06:28 +0100 |
commit | 241b8693d69c73b1177235830049d470aa056aa1 (patch) | |
tree | b6b6eeea3e04bc0d2db73a0dd0f16ba79533f5a5 /src/qml/jsruntime/qv4function_p.h | |
parent | b0d753ee3a76aaf57a7dafc79f951da2013b3025 (diff) |
Prepare for white allocation during gc(3/9): Function
Function(Data) keeps references to two heap-items; use the newly
introduced wrapper classes to ensure writes always go through the
WriteBarrier.
Provide a "mark" function in ExecutableCompilationUnit so that the
wrapper can actually pick it up - the existing function there was called
markObjects. We don't rename the existing function to keep the diff
minimal.
Provide a mark function in Function for the same reason.
Task-number: QTBUG-121910
Change-Id: Ib56eb2f3f2315036ce43273c9ebc629d10458e9a
Reviewed-by: Olivier De Cannière <[email protected]>
Reviewed-by: Ulf Hermann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4function_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4function_p.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4function_p.h b/src/qml/jsruntime/qv4function_p.h index 6cefae8fa8..3c9617f359 100644 --- a/src/qml/jsruntime/qv4function_p.h +++ b/src/qml/jsruntime/qv4function_p.h @@ -32,15 +32,13 @@ namespace QV4 { struct Q_QML_EXPORT FunctionData { - CompilationUnitRuntimeData *compilationUnit; + WriteBarrier::HeapObjectWrapper<CompilationUnitRuntimeData, 1> compilationUnit; // Intentionally require an ExecutableCompilationUnit but save only a pointer to // CompilationUnitBase. This is so that we can take advantage of the standard layout // of CompilationUnitBase in the JIT. Furthermore we can safely static_cast to // ExecutableCompilationUnit where we need it. - FunctionData(ExecutableCompilationUnit *compilationUnit) - : compilationUnit(compilationUnit) - {} + FunctionData(EngineBase *engine, ExecutableCompilationUnit *compilationUnit_); }; // Make sure this class can be accessed through offsetof (done by the assemblers): Q_STATIC_ASSERT(std::is_standard_layout< FunctionData >::value); @@ -62,7 +60,7 @@ public: QV4::ExecutableCompilationUnit *executableCompilationUnit() const { // This is safe: We require an ExecutableCompilationUnit in the ctor. - return static_cast<QV4::ExecutableCompilationUnit *>(compilationUnit); + return static_cast<QV4::ExecutableCompilationUnit *>(compilationUnit.get()); } QV4::Heap::String *runtimeString(uint i) const @@ -86,7 +84,7 @@ public: }; // first nArguments names in internalClass are the actual arguments - Heap::InternalClass *internalClass; + QV4::WriteBarrier::Pointer<Heap::InternalClass> internalClass; int interpreterCallCount = 0; quint16 nFormals; enum Kind : quint8 { JsUntyped, JsTyped, AotCompiled, Eval }; @@ -98,6 +96,8 @@ public: const QQmlPrivate::AOTCompiledFunction *aotFunction); void destroy(); + void mark(QV4::MarkStack *ms); + // used when dynamically assigning signal handlers (QQmlConnection) void updateInternalClass(ExecutionEngine *engine, const QList<QByteArray> ¶meters); |