From f74fe2a59cabeda9cac2f6c19e6157cfe2e674d3 Mon Sep 17 00:00:00 2001 From: JckXia Date: Sat, 28 Aug 2021 20:59:16 -0400 Subject: [PATCH] src: make napi_create_reference accept symbol PR-URL: https://github.com/nodejs/node/pull/39926 Reviewed-By: Michael Dawson Reviewed-By: James M Snell --- src/js_native_api_v8.cc | 6 +++--- test/js-native-api/test_reference/test.js | 7 +++++++ .../js-native-api/test_reference/test_reference.c | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc index e71c2222232e1b..12528799efa43a 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc @@ -2454,9 +2454,9 @@ napi_status napi_create_reference(napi_env env, CHECK_ARG(env, result); v8::Local v8_value = v8impl::V8LocalValueFromJsValue(value); - - if (!(v8_value->IsObject() || v8_value->IsFunction())) { - return napi_set_last_error(env, napi_object_expected); + if (!(v8_value->IsObject() || v8_value->IsFunction() || + v8_value->IsSymbol())) { + return napi_set_last_error(env, napi_invalid_arg); } v8impl::Reference* reference = diff --git a/test/js-native-api/test_reference/test.js b/test/js-native-api/test_reference/test.js index 0c9d13075f2aa0..0dc9e553300060 100644 --- a/test/js-native-api/test_reference/test.js +++ b/test/js-native-api/test_reference/test.js @@ -14,6 +14,13 @@ assert.strictEqual(test_reference.finalizeCount, 0); // Run each test function in sequence, // with an async delay and GC call between each. async function runTests() { + (() => { + const symbol = test_reference.createSymbol('testSym'); + test_reference.createReference(symbol, 0); + assert.strictEqual(test_reference.referenceValue, symbol); + })(); + test_reference.deleteReference(); + (() => { const value = test_reference.createExternal(); assert.strictEqual(test_reference.finalizeCount, 0); diff --git a/test/js-native-api/test_reference/test_reference.c b/test/js-native-api/test_reference/test_reference.c index 05d5ae3eab8eb5..84f52bfc0de4bd 100644 --- a/test/js-native-api/test_reference/test_reference.c +++ b/test/js-native-api/test_reference/test_reference.c @@ -35,6 +35,20 @@ static napi_value CreateExternal(napi_env env, napi_callback_info info) { return result; } +static napi_value CreateSymbol(napi_env env, napi_callback_info info) { + + size_t argc = 1; + napi_value args[1]; + + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL,NULL)); + NAPI_ASSERT(env, argc == 1, "Expect one argument only (symbol description)"); + + napi_value result_symbol; + + NAPI_CALL(env, napi_create_symbol(env, args[0], &result_symbol)); + return result_symbol; +} + static napi_value CreateExternalWithFinalize(napi_env env, napi_callback_info info) { napi_value result; @@ -178,6 +192,7 @@ napi_value Init(napi_env env, napi_value exports) { CreateExternalWithFinalize), DECLARE_NAPI_PROPERTY("checkExternal", CheckExternal), DECLARE_NAPI_PROPERTY("createReference", CreateReference), + DECLARE_NAPI_PROPERTY("createSymbol", CreateSymbol), DECLARE_NAPI_PROPERTY("deleteReference", DeleteReference), DECLARE_NAPI_PROPERTY("incrementRefcount", IncrementRefcount), DECLARE_NAPI_PROPERTY("decrementRefcount", DecrementRefcount),