aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp22
-rw-r--r--src/bun.js/javascript.zig10
-rw-r--r--src/bun.js/test/jest.zig1
3 files changed, 32 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index b3da8a98f..a4bd2c54a 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -217,6 +217,7 @@ extern "C" void JSCInitialize(const char* envp[], size_t envc, void (*onCrash)(c
JSC::Options::useResizableArrayBuffer() = true;
JSC::Options::showPrivateScriptsInStackTraces() = true;
JSC::Options::useSetMethods() = true;
+ JSC::Options::useCodeCache() = true;
if (LIKELY(envc > 0)) {
while (envc--) {
@@ -423,6 +424,26 @@ const JSC::ClassInfo GlobalObject::s_info = { "GlobalObject"_s, &Base::s_info, n
extern "C" JSClassRef* Zig__getAPIGlobals(size_t* count);
extern "C" const JSC__JSValue* Zig__getAPIConstructors(size_t* count, JSC__JSGlobalObject*);
+extern "C" Zig::GlobalObject* GlobalObject__createNewDefault(Zig::GlobalObject* currentDefault, Zig::GlobalObject* initialDefault)
+{
+ auto& vm = currentDefault->vm();
+ auto* prototype = JSC::JSGlobalObject::create(vm, initialDefault->globalObjectStructure());
+ Zig::GlobalObject* newDefault = Zig::GlobalObject::create(vm, Zig::GlobalObject::createStructure(vm, prototype, jsNull()));
+ newDefault->setConsole(newDefault);
+ size_t count = 0;
+ JSClassRef* globalObjectClass = Zig__getAPIGlobals(&count);
+
+ if (count > 0) {
+ newDefault->installAPIGlobals(globalObjectClass, count, vm);
+ }
+
+ if (initialDefault != currentDefault) {
+ gcUnprotect(currentDefault);
+ }
+
+ return newDefault;
+}
+
static JSGlobalObject* deriveShadowRealmGlobalObject(JSGlobalObject* globalObject)
{
auto& vm = globalObject->vm();
@@ -503,7 +524,6 @@ GlobalObject::~GlobalObject()
finalizer(toNapi(this), napiInstanceData, napiInstanceDataFinalizerHint);
}
- delete crypto;
scriptExecutionContext()->removeFromContextsMap();
}
diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig
index 4a1fcbcb1..4b95bc992 100644
--- a/src/bun.js/javascript.zig
+++ b/src/bun.js/javascript.zig
@@ -362,6 +362,7 @@ pub const VirtualMachine = struct {
preload: []const string = &[_][]const u8{},
unhandled_pending_rejection_to_capture: ?*JSC.JSValue = null,
standalone_module_graph: ?*bun.StandaloneModuleGraph = null,
+ initial_global_object: *JSC.JSGlobalObject,
hot_reload: bun.CLI.Command.HotReload = .none,
@@ -683,6 +684,7 @@ pub const VirtualMachine = struct {
const is_first = !VirtualMachine.get().has_loaded_constructors;
if (is_first) {
VirtualMachine.get().global = globalObject;
+ VirtualMachine.get().initial_global_object = globalObject;
VirtualMachine.get().has_loaded_constructors = true;
}
@@ -746,6 +748,7 @@ pub const VirtualMachine = struct {
vm.* = VirtualMachine{
.global = undefined,
+ .initial_global_object = undefined,
.allocator = allocator,
.entry_point = ServerEntryPoint{},
.event_listeners = EventListenerMixin.Map.init(allocator),
@@ -813,6 +816,12 @@ pub const VirtualMachine = struct {
return vm;
}
+ extern fn GlobalObject__createNewDefault(*JSGlobalObject, *JSGlobalObject) *JSGlobalObject;
+ pub fn resetDefaultGlobalObject(this: *VirtualMachine) void {
+ this.global = GlobalObject__createNewDefault(this.global, this.initial_global_object);
+ this.event_loop.global = this.global;
+ }
+
pub fn init(
allocator: std.mem.Allocator,
_args: Api.TransformOptions,
@@ -843,6 +852,7 @@ pub const VirtualMachine = struct {
vm.* = VirtualMachine{
.global = undefined,
+ .initial_global_object = undefined,
.allocator = allocator,
.entry_point = ServerEntryPoint{},
.event_listeners = EventListenerMixin.Map.init(allocator),
diff --git a/src/bun.js/test/jest.zig b/src/bun.js/test/jest.zig
index dcc7a8149..aed40f093 100644
--- a/src/bun.js/test/jest.zig
+++ b/src/bun.js/test/jest.zig
@@ -376,6 +376,7 @@ pub const TestRunner = struct {
test_timeout_timer: ?*bun.uws.Timer = null,
last_test_timeout_timer_duration: u32 = 0,
active_test_for_timeout: ?TestRunner.Test.ID = null,
+ isolate: bool = false,
global_callbacks: struct {
beforeAll: std.ArrayListUnmanaged(JSC.JSValue) = .{},