diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.cpp | 21 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.h | 2 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/exports.zig | 7 |
3 files changed, 29 insertions, 1 deletions
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp index 3ab654dda..352669b1d 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp +++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp @@ -229,6 +229,25 @@ namespace Zig { const JSC::ClassInfo GlobalObject::s_info = { "GlobalObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(GlobalObject) }; +extern "C" JSClassRef* Zig__getAPIGlobals(size_t* count); + +static JSGlobalObject* deriveShadowRealmGlobalObject(JSGlobalObject* globalObject) +{ + auto& vm = globalObject->vm(); + Zig::GlobalObject* shadow = Zig::GlobalObject::create(vm, Zig::GlobalObject::createStructure(vm, JSC::jsNull())); + shadow->setConsole(shadow); + size_t count = 0; + JSClassRef* globalObjectClass; + globalObjectClass = Zig__getAPIGlobals(&count); + + shadow->setConsole(shadow); + if (count > 0) { + shadow->installAPIGlobals(globalObjectClass, count); + } + + return shadow; +} + const JSC::GlobalObjectMethodTable GlobalObject::s_globalObjectMethodTable = { &supportsRichSourceInfo, &shouldInterruptScript, @@ -247,6 +266,8 @@ const JSC::GlobalObjectMethodTable GlobalObject::s_globalObjectMethodTable = { nullptr, // defaultLanguage nullptr, // compileStreaming nullptr, // instantiateStreaming + nullptr, + &Zig::deriveShadowRealmGlobalObject }; void GlobalObject::reportUncaughtExceptionAtEventLoop(JSGlobalObject* globalObject, diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.h b/src/javascript/jsc/bindings/ZigGlobalObject.h index edc250ecb..e2464b99e 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.h +++ b/src/javascript/jsc/bindings/ZigGlobalObject.h @@ -48,7 +48,7 @@ public: } static void reportUncaughtExceptionAtEventLoop(JSGlobalObject*, JSC::Exception*); - + static JSGlobalObject* deriveShadowRealmGlobalObject(JSGlobalObject* globalObject); static void queueMicrotaskToEventLoop(JSC::JSGlobalObject& global, Ref<JSC::Microtask>&& task); static JSC::JSInternalPromise* moduleLoaderImportModule(JSGlobalObject*, JSC::JSModuleLoader*, JSC::JSString* moduleNameValue, diff --git a/src/javascript/jsc/bindings/exports.zig b/src/javascript/jsc/bindings/exports.zig index 6179ad203..a7d281299 100644 --- a/src/javascript/jsc/bindings/exports.zig +++ b/src/javascript/jsc/bindings/exports.zig @@ -241,6 +241,12 @@ export fn ZigString__free_global(ptr: [*]const u8, len: usize) void { default_allocator.free(str); } +export fn Zig__getAPIGlobals(count: *usize) [*]JSC.C.JSClassRef { + var globals = JSC.VirtualMachine.getAPIGlobals(); + count.* = globals.len; + return globals.ptr; +} + pub const JSErrorCode = enum(u8) { Error = 0, EvalError = 1, @@ -1855,6 +1861,7 @@ comptime { if (!is_bindgen) { _ = Process.getTitle; _ = Process.setTitle; + _ = Zig__getAPIGlobals; std.testing.refAllDecls(NodeReadableStream); std.testing.refAllDecls(Bun.Timer); std.testing.refAllDecls(NodeWritableStream); |