aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/napi.cpp15
-rw-r--r--src/napi/napi.zig1
-rw-r--r--src/symbols.txt1
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