Skip to content

Commit f74fe2a

Browse files
JckXiarichardlau
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 fc328f1 commit f74fe2a

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
@@ -2454,9 +2454,9 @@ napi_status napi_create_reference(napi_env env,
24542454
CHECK_ARG(env, result);
24552455

24562456
v8::Local<v8::Value> v8_value = v8impl::V8LocalValueFromJsValue(value);
2457-
2458-
if (!(v8_value->IsObject() || v8_value->IsFunction())) {
2459-
return napi_set_last_error(env, napi_object_expected);
2457+
if (!(v8_value->IsObject() || v8_value->IsFunction() ||
2458+
v8_value->IsSymbol())) {
2459+
return napi_set_last_error(env, napi_invalid_arg);
24602460
}
24612461

24622462
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+
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL,NULL));
44+
NAPI_ASSERT(env, argc == 1, "Expect one argument only (symbol description)");
45+
46+
napi_value result_symbol;
47+
48+
NAPI_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;
@@ -178,6 +192,7 @@ napi_value Init(napi_env env, napi_value exports) {
178192
CreateExternalWithFinalize),
179193
DECLARE_NAPI_PROPERTY("checkExternal", CheckExternal),
180194
DECLARE_NAPI_PROPERTY("createReference", CreateReference),
195+
DECLARE_NAPI_PROPERTY("createSymbol", CreateSymbol),
181196
DECLARE_NAPI_PROPERTY("deleteReference", DeleteReference),
182197
DECLARE_NAPI_PROPERTY("incrementRefcount", IncrementRefcount),
183198
DECLARE_NAPI_PROPERTY("decrementRefcount", DecrementRefcount),

0 commit comments

Comments
 (0)