Skip to content

Commit 33b5107

Browse files
JckXiamhdawson
authored andcommitted
src: make napi_create_reference accept symbol
PR-URL: #39926 Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 861c3e0 commit 33b5107

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

src/js_native_api_v8.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -2460,9 +2460,9 @@ napi_status napi_create_reference(napi_env env,
24602460
CHECK_ARG(env, result);
24612461

24622462
v8::Local<v8::Value> v8_value = v8impl::V8LocalValueFromJsValue(value);
2463-
2464-
if (!(v8_value->IsObject() || v8_value->IsFunction())) {
2465-
return napi_set_last_error(env, napi_object_expected);
2463+
if (!(v8_value->IsObject() || v8_value->IsFunction() ||
2464+
v8_value->IsSymbol())) {
2465+
return napi_set_last_error(env, napi_invalid_arg);
24662466
}
24672467

24682468
v8impl::Reference* reference =

test/js-native-api/test_reference/test.js

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ assert.strictEqual(test_reference.finalizeCount, 0);
1414
// Run each test function in sequence,
1515
// with an async delay and GC call between each.
1616
async function runTests() {
17+
(() => {
18+
const symbol = test_reference.createSymbol('testSym');
19+
test_reference.createReference(symbol, 0);
20+
assert.strictEqual(test_reference.referenceValue, symbol);
21+
})();
22+
test_reference.deleteReference();
23+
1724
(() => {
1825
const value = test_reference.createExternal();
1926
assert.strictEqual(test_reference.finalizeCount, 0);

test/js-native-api/test_reference/test_reference.c

+15
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ static napi_value CreateExternal(napi_env env, napi_callback_info info) {
3535
return result;
3636
}
3737

38+
static napi_value CreateSymbol(napi_env env, napi_callback_info info) {
39+
40+
size_t argc = 1;
41+
napi_value args[1];
42+
43+
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL,NULL));
44+
NODE_API_ASSERT(env, argc == 1, "Expect one argument only (symbol description)");
45+
46+
napi_value result_symbol;
47+
48+
NODE_API_CALL(env, napi_create_symbol(env, args[0], &result_symbol));
49+
return result_symbol;
50+
}
51+
3852
static napi_value
3953
CreateExternalWithFinalize(napi_env env, napi_callback_info info) {
4054
napi_value result;
@@ -175,6 +189,7 @@ napi_value Init(napi_env env, napi_value exports) {
175189
CreateExternalWithFinalize),
176190
DECLARE_NODE_API_PROPERTY("checkExternal", CheckExternal),
177191
DECLARE_NODE_API_PROPERTY("createReference", CreateReference),
192+
DECLARE_NODE_API_PROPERTY("createSymbol", CreateSymbol),
178193
DECLARE_NODE_API_PROPERTY("deleteReference", DeleteReference),
179194
DECLARE_NODE_API_PROPERTY("incrementRefcount", IncrementRefcount),
180195
DECLARE_NODE_API_PROPERTY("decrementRefcount", DecrementRefcount),

0 commit comments

Comments
 (0)