diff options
author | 2023-01-23 15:08:27 -0800 | |
---|---|---|
committer | 2023-01-23 15:09:18 -0800 | |
commit | aa456805ddc9fd44152d73888ecb8733b60f34b9 (patch) | |
tree | a171dc0871fa39ecfbc5444e4173a77ff2453a1d /src | |
parent | efd33c398f2bf16ef865b5b04df4d40b13ed24a4 (diff) | |
download | bun-aa456805ddc9fd44152d73888ecb8733b60f34b9.tar.gz bun-aa456805ddc9fd44152d73888ecb8733b60f34b9.tar.zst bun-aa456805ddc9fd44152d73888ecb8733b60f34b9.zip |
[napi] Handle missing description in `napi_create_symbol`
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/napi.cpp | 31 | ||||
-rw-r--r-- | src/napi/napi.zig | 7 |
2 files changed, 32 insertions, 6 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index 24541755f..db70ad1ca 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -1602,6 +1602,37 @@ extern "C" napi_status napi_create_bigint_words(napi_env env, return napi_ok; } +extern "C" napi_status napi_create_symbol(napi_env env, napi_value description, + napi_value* result) +{ + Zig::GlobalObject* globalObject = toJS(env); + JSC::VM& vm = globalObject->vm(); + + if (UNLIKELY(result == nullptr || globalObject == nullptr)) { + return napi_invalid_arg; + } + + JSC::JSValue descriptionValue = toJS(description); + if (descriptionValue && !descriptionValue.isUndefinedOrNull()) { + if (!descriptionValue.isString()) { + return napi_string_expected; + } + + JSC::JSString* descriptionString = descriptionValue.toStringOrNull(globalObject); + if (UNLIKELY(!descriptionString)) { + return napi_generic_failure; + } + + if (descriptionString->length() > 0) { + *result = toNapi(JSC::Symbol::createWithDescription(vm, descriptionString->value(globalObject))); + return napi_ok; + } + } + + *result = toNapi(JSC::Symbol::create(vm)); + return napi_ok; +} + extern "C" napi_status napi_call_function(napi_env env, napi_value recv_napi, napi_value func_napi, size_t argc, const napi_value* argv, diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 208858bd8..d300cb181 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -270,12 +270,7 @@ pub export fn napi_create_string_utf16(env: napi_env, str: [*]const char16_t, le result.* = JSC.ZigString.from16(str, len).toValueGC(env); return .ok; } -pub export fn napi_create_symbol(env: napi_env, description: napi_value, result: *napi_value) napi_status { - var string_ref = JSC.C.JSValueToStringCopy(env.ref(), description.asObjectRef(), null); - defer JSC.C.JSStringRelease(string_ref); - result.* = JSValue.c(JSC.C.JSValueMakeSymbol(env.ref(), string_ref)); - return .ok; -} +pub extern fn napi_create_symbol(env: napi_env, description: napi_value, result: *napi_value) napi_status; pub export fn napi_create_error(env: napi_env, code: napi_value, msg: napi_value, result: *napi_value) napi_status { const system_error = JSC.SystemError{ .code = if (!code.isEmptyOrUndefinedOrNull()) code.getZigString(env) else ZigString.Empty, |