diff --git a/src/bun.js/ModuleLoader.zig b/src/bun.js/ModuleLoader.zig index 2cee58c7eb..2df719a5df 100644 --- a/src/bun.js/ModuleLoader.zig +++ b/src/bun.js/ModuleLoader.zig @@ -2142,11 +2142,8 @@ pub const RuntimeTranspilerStore = struct { }; } - pub fn runFromJSThread(this: *RuntimeTranspilerStore) void { + pub fn runFromJSThread(this: *RuntimeTranspilerStore, event_loop: *JSC.EventLoop, global: *JSC.JSGlobalObject, vm: *JSC.VirtualMachine) void { var batch = this.queue.popBatch(); - var vm: *VirtualMachine = @fieldParentPtr("transpiler_store", this); - const event_loop = vm.eventLoop(); - const global = vm.global; const jsc_vm = vm.jsc; var iter = batch.iterator(); if (iter.next()) |job| { diff --git a/src/bun.js/bindings/ModuleLoader.cpp b/src/bun.js/bindings/ModuleLoader.cpp index d72dc75a82..f350514f28 100644 --- a/src/bun.js/bindings/ModuleLoader.cpp +++ b/src/bun.js/bindings/ModuleLoader.cpp @@ -1152,22 +1152,18 @@ BUN_DEFINE_HOST_FUNCTION(jsFunctionOnLoadObjectResultResolve, (JSC::JSGlobalObje bool wasModuleMock = pendingModule->wasModuleMock; JSC::JSValue result = handleVirtualModuleResult(reinterpret_cast(globalObject), objectResult, &res, &specifier, &referrer, wasModuleMock); + if (!scope.exception() && !res.success) [[unlikely]] { + throwException(globalObject, scope, result); + } if (scope.exception()) [[unlikely]] { auto retValue = JSValue::encode(promise->rejectWithCaughtException(globalObject, scope)); pendingModule->internalField(2).set(vm, pendingModule, JSC::jsUndefined()); return retValue; } - if (res.success) { - scope.release(); - promise->resolve(globalObject, result); - pendingModule->internalField(2).set(vm, pendingModule, JSC::jsUndefined()); - return JSValue::encode(jsUndefined()); - } else { - throwException(globalObject, scope, result); - auto retValue = JSValue::encode(promise->rejectWithCaughtException(globalObject, scope)); - pendingModule->internalField(2).set(vm, pendingModule, JSC::jsUndefined()); - return retValue; - } + scope.release(); + promise->resolve(globalObject, result); + pendingModule->internalField(2).set(vm, pendingModule, JSC::jsUndefined()); + return JSValue::encode(jsUndefined()); } BUN_DEFINE_HOST_FUNCTION(jsFunctionOnLoadObjectResultReject, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) diff --git a/src/bun.js/event_loop/CppTask.zig b/src/bun.js/event_loop/CppTask.zig index daf2b5a7bd..a998ee3fe8 100644 --- a/src/bun.js/event_loop/CppTask.zig +++ b/src/bun.js/event_loop/CppTask.zig @@ -3,6 +3,7 @@ pub const CppTask = opaque { extern fn Bun__performTask(globalObject: *JSC.JSGlobalObject, task: *CppTask) void; pub fn run(this: *CppTask, global: *JSC.JSGlobalObject) void { JSC.markBinding(@src()); + // TODO: properly propagate exception upwards bun.jsc.fromJSHostCallGeneric(global, @src(), Bun__performTask, .{ global, this }) catch |err| { _ = global.reportUncaughtException(global.takeException(err).asException(global.vm()).?); }; diff --git a/src/bun.js/event_loop/JSCScheduler.zig b/src/bun.js/event_loop/JSCScheduler.zig index 09c4c72205..7db6d4747d 100644 --- a/src/bun.js/event_loop/JSCScheduler.zig +++ b/src/bun.js/event_loop/JSCScheduler.zig @@ -8,7 +8,7 @@ pub const JSCDeferredWorkTask = opaque { scope.init(globalThis, @src()); defer scope.deinit(); Bun__runDeferredWork(task); - scope.assertNoExceptionExceptTermination() catch return; + scope.assertNoExceptionExceptTermination() catch return; // TODO: properly propagate exception upwards } }; diff --git a/src/bun.js/event_loop/Task.zig b/src/bun.js/event_loop/Task.zig index 3e3733d0d8..750c743145 100644 --- a/src/bun.js/event_loop/Task.zig +++ b/src/bun.js/event_loop/Task.zig @@ -466,7 +466,7 @@ pub fn tickQueueWithCount(this: *EventLoop, virtual_machine: *VirtualMachine) u3 }, @field(Task.Tag, @typeName(RuntimeTranspilerStore)) => { var any: *RuntimeTranspilerStore = task.get(RuntimeTranspilerStore).?; - any.runFromJSThread(); + any.runFromJSThread(this, global, virtual_machine); }, @field(Task.Tag, @typeName(ServerAllConnectionsClosedTask)) => { var any: *ServerAllConnectionsClosedTask = task.get(ServerAllConnectionsClosedTask).?; diff --git a/src/bun.js/node/node_zlib_binding.zig b/src/bun.js/node/node_zlib_binding.zig index 5093700de8..f71ab2abe9 100644 --- a/src/bun.js/node/node_zlib_binding.zig +++ b/src/bun.js/node/node_zlib_binding.zig @@ -149,7 +149,7 @@ pub fn CompressionStream(comptime T: type) type { this_value.ensureStillAlive(); if (!(checkError(this, global, this_value) catch return global.reportActiveExceptionAsUnhandled(error.JSError))) { - return; + return; // TODO: properly propagate exception upwards } this.stream.updateWriteResult(&this.write_result.?[1], &this.write_result.?[0]);