Skip to content

Commit

Permalink
[napi] Handle missing description in napi_create_symbol
Browse files Browse the repository at this point in the history
  • Loading branch information
Jarred-Sumner committed Jan 23, 2023
1 parent efd33c3 commit aa45680
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
31 changes: 31 additions & 0 deletions src/bun.js/bindings/napi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
7 changes: 1 addition & 6 deletions src/napi/napi.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit aa45680

Please sign in to comment.