From 84d7234f24fc3fb29de1b4aea9d36260acf4f01f Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Mon, 26 Jul 2021 16:39:40 -0700 Subject: cool Former-commit-id: a7214ab61c42f1454a8e17c633085f12ed6bef5a --- src/javascript/jsc/bindings/ZigGlobalObject.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/javascript/jsc/bindings/ZigGlobalObject.cpp') diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp index e17e3aeba..c8a2cbcde 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp +++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp @@ -25,6 +25,7 @@ #include #include #include +#include "ZigConsoleClient.h" #include @@ -39,29 +40,31 @@ using SourceOrigin = JSC::SourceOrigin; namespace JSCastingHelpers = JSC::JSCastingHelpers; -JSC__JSGlobalObject* Zig__GlobalObject__create(JSC__VM* arg0) { +extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(JSC__VM* arg0, void* console_client) { + auto client = makeUnique(console_client); + // There are assertions that the apiLock is set while the JSGlobalObject is initialized. if (arg0 != nullptr) { - JSC::VM& vm = reinterpret_cast(arg0); - vm.apiLock().lock(); - Zig::GlobalObject* globalObject = Zig::GlobalObject::create(vm, Zig::GlobalObject::createStructure(vm, JSC::jsNull())); - vm.apiLock().unlock(); + Zig::GlobalObject* globalObject = Zig::GlobalObject::create(*arg0, Zig::GlobalObject::createStructure(*arg0, JSC::jsNull())); + JSC::JSLockHolder holder(globalObject); + globalObject->setConsoleClient(makeWeakPtr(*client)); + return static_cast(globalObject); } JSC::initialize(); - - JSC::VM& vm = JSC::VM::create(JSC::LargeHeap, nullptr); - vm.apiLock().lock(); + JSC::VM& vm = JSC::VM::create(JSC::LargeHeap).leakRef(); #if ENABLE(WEBASSEMBLY) JSC::Wasm::enableFastMemory(); #endif + JSC::JSLockHolder locker(vm); + auto globalObject = Zig::GlobalObject::create(vm, Zig::GlobalObject::createStructure(vm, JSC::jsNull())); + globalObject->setConsoleClient(makeWeakPtr(*client)); + - Zig::GlobalObject* globalObject = Zig::GlobalObject::create(vm, Zig::GlobalObject::createStructure(vm, JSC::jsNull())); - vm.apiLock().unlock(); - return static_cast(globalObject); + return globalObject; } namespace Zig { -- cgit v1.2.3