aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/memory/qv4writebarrier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/memory/qv4writebarrier.cpp')
-rw-r--r--src/qml/memory/qv4writebarrier.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/qml/memory/qv4writebarrier.cpp b/src/qml/memory/qv4writebarrier.cpp
new file mode 100644
index 0000000000..d7e56212ca
--- /dev/null
+++ b/src/qml/memory/qv4writebarrier.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+#include <private/qv4value_p.h>
+#include <private/qv4mm_p.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace {
+ void markHeapBase(QV4::MarkStack* markStack, QV4::Heap::Base *base){
+ if (!base)
+ return;
+ base->mark(markStack);
+ }
+}
+namespace QV4 {
+
+void WriteBarrier::write_slowpath(EngineBase *engine, Heap::Base *base, ReturnedValue *slot, ReturnedValue value)
+{
+ Q_UNUSED(base);
+ Q_UNUSED(slot);
+ MarkStack * markStack = engine->memoryManager->markStack();
+ if constexpr (isInsertionBarrier)
+ markHeapBase(markStack, Value::fromReturnedValue(value).heapObject());
+}
+
+void WriteBarrier::write_slowpath(EngineBase *engine, Heap::Base *base, Heap::Base **slot, Heap::Base *value)
+{
+ Q_UNUSED(base);
+ Q_UNUSED(slot);
+ MarkStack * markStack = engine->memoryManager->markStack();
+ if constexpr (isInsertionBarrier)
+ markHeapBase(markStack, value);
+}
+
+}
+QT_END_NAMESPACE