diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/napi.cpp | 15 | ||||
-rw-r--r-- | src/napi/napi.zig | 1 | ||||
-rw-r--r-- | src/symbols.txt | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index d42ee9da1..574224939 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -967,6 +967,21 @@ extern "C" napi_status napi_get_and_clear_last_exception(napi_env env, return napi_ok; } +extern "C" napi_status napi_fatal_exception(napi_env env, + napi_value err) +{ + auto globalObject = toJS(env); + JSC::JSValue value = JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(err)); + JSC::JSObject* obj = value.getObject(); + if (UNLIKELY(obj == nullptr || !obj->isErrorInstance())) { + return napi_invalid_arg; + } + + Bun__reportUnhandledError(globalObject, JSValue::encode(value)); + + return napi_ok; +} + extern "C" napi_status napi_throw(napi_env env, napi_value error) { auto globalObject = toJS(env); diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 046ad36af..73a633025 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -1505,6 +1505,7 @@ pub fn fixDeadCodeElimination() void { std.mem.doNotOptimizeAway(&napi_get_value_bigint_int64); std.mem.doNotOptimizeAway(&napi_get_value_bigint_uint64); std.mem.doNotOptimizeAway(&napi_fatal_error); + std.mem.doNotOptimizeAway(&napi_fatal_exception); std.mem.doNotOptimizeAway(&napi_create_buffer); std.mem.doNotOptimizeAway(&napi_create_external_buffer); std.mem.doNotOptimizeAway(&napi_create_buffer_copy); diff --git a/src/symbols.txt b/src/symbols.txt index 4ba7d7ef9..72f24291d 100644 --- a/src/symbols.txt +++ b/src/symbols.txt @@ -54,6 +54,7 @@ _napi_delete_reference _napi_detach_arraybuffer _napi_escape_handle _napi_fatal_error +_napi_fatal_exception _napi_get_all_property_names _napi_get_and_clear_last_exception _napi_get_array_length |