node-api: create reference only when needed

Optimize napi_create_external() to create the reference for calling
finalizer only if user actually provides a finalizer callback.

PR-URL: https://github.com/nodejs/node/pull/44827
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Gerhard Stöbich
2022-10-03 18:26:07 +02:00
committed by GitHub
parent f4815fcd76
commit ecd5de08b7

View File

@@ -2387,10 +2387,12 @@ napi_status NAPI_CDECL napi_create_external(napi_env env,
v8::Local<v8::Value> external_value = v8::External::New(isolate, data);
// The Reference object will delete itself after invoking the finalizer
// callback.
v8impl::Reference::New(
env, external_value, 0, true, finalize_cb, data, finalize_hint);
if (finalize_cb) {
// The Reference object will delete itself after invoking the finalizer
// callback.
v8impl::Reference::New(
env, external_value, 0, true, finalize_cb, data, finalize_hint);
}
*result = v8impl::JsValueFromV8LocalValue(external_value);