diff options
Diffstat (limited to 'src/qml/jsruntime/qv4setobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4setobject.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4setobject.cpp b/src/qml/jsruntime/qv4setobject.cpp index a7589a40db..de2c378558 100644 --- a/src/qml/jsruntime/qv4setobject.cpp +++ b/src/qml/jsruntime/qv4setobject.cpp @@ -14,14 +14,14 @@ DEFINE_OBJECT_VTABLE(SetCtor); DEFINE_OBJECT_VTABLE(WeakSetCtor); DEFINE_OBJECT_VTABLE(SetObject); -void Heap::WeakSetCtor::init(QV4::ExecutionContext *scope) +void Heap::WeakSetCtor::init(QV4::ExecutionEngine *engine) { - Heap::FunctionObject::init(scope, QStringLiteral("WeakSet")); + Heap::FunctionObject::init(engine, QStringLiteral("WeakSet")); } -void Heap::SetCtor::init(QV4::ExecutionContext *scope) +void Heap::SetCtor::init(QV4::ExecutionEngine *engine) { - Heap::FunctionObject::init(scope, QStringLiteral("Set")); + Heap::FunctionObject::init(engine, QStringLiteral("Set")); } ReturnedValue WeakSetCtor::construct(const FunctionObject *f, const Value *argv, int argc, const Value *newTarget, bool isWeak) @@ -104,6 +104,12 @@ ReturnedValue WeakSetPrototype::method_add(const FunctionObject *b, const Value (!argc || !argv[0].isObject())) return scope.engine->throwTypeError(); + QV4::WriteBarrier::markCustom(scope.engine, [&](QV4::MarkStack *ms) { + if (scope.engine->memoryManager->gcStateMachine->state <= GCState::FreeWeakSets) + return; + argv[0].heapObject()->mark(ms); + }); + that->d()->esTable->set(argv[0], Value::undefinedValue()); return that.asReturnedValue(); } @@ -192,6 +198,10 @@ ReturnedValue SetPrototype::method_add(const FunctionObject *b, const Value *thi if (!that || that->d()->isWeakSet) return scope.engine->throwTypeError(); + QV4::WriteBarrier::markCustom(scope.engine, [&](QV4::MarkStack *ms) { + argv[0].heapObject()->mark(ms); + }); + that->d()->esTable->set(argv[0], Value::undefinedValue()); return that.asReturnedValue(); } |