aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/javascript/jsc/javascript.zig12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index 709201a68..eed427c57 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -662,20 +662,26 @@ pub const VirtualMachine = struct {
pub fn getAPIConstructors(globalObject: *JSGlobalObject) []const JSC.JSValue {
if (is_bindgen)
return &[_]JSC.JSValue{};
- if (!VirtualMachine.vm.has_loaded_constructors) {
+ const is_first = !VirtualMachine.vm.has_loaded_constructors;
+ if (is_first) {
VirtualMachine.vm.global = globalObject;
VirtualMachine.vm.has_loaded_constructors = true;
}
+ var slice = if (is_first)
+ @as([]JSC.JSValue, &JSC.VirtualMachine.vm.global_api_constructors)
+ else
+ VirtualMachine.vm.allocator.alloc(JSC.JSValue, GlobalConstructors.len) catch unreachable;
+
inline for (GlobalConstructors) |Class, i| {
var ref = Class.constructor(globalObject.ref()).?;
JSC.C.JSValueProtect(globalObject.ref(), ref);
- JSC.VirtualMachine.vm.global_api_constructors[i] = JSC.JSValue.fromRef(
+ slice[i] = JSC.JSValue.fromRef(
ref,
);
}
- return &JSC.VirtualMachine.vm.global_api_constructors;
+ return slice;
}
pub fn init(