aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-23 15:08:27 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-23 15:09:18 -0800
commitaa456805ddc9fd44152d73888ecb8733b60f34b9 (patch)
treea171dc0871fa39ecfbc5444e4173a77ff2453a1d /src
parentefd33c398f2bf16ef865b5b04df4d40b13ed24a4 (diff)
downloadbun-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.cpp31
-rw-r--r--src/napi/napi.zig7
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,