diff options
author | 2023-02-11 22:20:25 -0600 | |
---|---|---|
committer | 2023-02-11 20:20:25 -0800 | |
commit | 9eba1e0e3fbd9ba80f7cac4a74c860e35335d86e (patch) | |
tree | 80143fe8f450c62e1a7802fabb78a4ee1f35285e | |
parent | 675529bd0cc7f7753b1d33cf0f14d945bd850654 (diff) | |
download | bun-9eba1e0e3fbd9ba80f7cac4a74c860e35335d86e.tar.gz bun-9eba1e0e3fbd9ba80f7cac4a74c860e35335d86e.tar.zst bun-9eba1e0e3fbd9ba80f7cac4a74c860e35335d86e.zip |
[WIP] feat(napi): add `napi-fatal-exception` (#2054)
* feat(napi): add `napi-fatal-exception`
* fix(napi): fatal_exception - add symbol to list, don't optimize away
-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 |