aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.cpp21
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.h2
-rw-r--r--src/javascript/jsc/bindings/exports.zig7
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);