From 427ef4dd05720d64b23bb86938bfd785cdd41e67 Mon Sep 17 00:00:00 2001 From: Kevin Eady <8634912+KevinEady@users.noreply.github.com> Date: Wed, 4 Sep 2024 23:14:58 +0200 Subject: [PATCH 1/2] fix: call base basic finalizer if none defined --- napi-inl.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/napi-inl.h b/napi-inl.h index a66f2cbcf..1dca224bb 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -5023,6 +5023,11 @@ inline void ObjectWrap::FinalizeCallback(node_api_nogc_env env, #endif instance->Finalize(Napi::BasicEnv(env)); + } else { + // The child class may override Finalize but _not_ with a BasicEnv. Calling + // via `instance->Finalize()` would then give a compile error. Explicitly + // use the ObjectWrap's Finalize, which has BasicEnv override. + instance->ObjectWrap::Finalize(Napi::BasicEnv(env)); } // If class overrides the (extended) finalizer, either schedule it or From 72655c68adb7baca2b411906ec76943fa00dd68c Mon Sep 17 00:00:00 2001 From: Kevin Eady <8634912+KevinEady@users.noreply.github.com> Date: Thu, 5 Sep 2024 00:02:06 +0200 Subject: [PATCH 2/2] discard `env` value --- napi-inl.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/napi-inl.h b/napi-inl.h index 1dca224bb..c0f711b68 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -5011,6 +5011,10 @@ template inline void ObjectWrap::FinalizeCallback(node_api_nogc_env env, void* data, void* /*hint*/) { + // If the child class does not override _any_ Finalize() method, `env` will be + // unused because of the constexpr guards. Explicitly reference it here to + // bypass compiler warnings. + (void)env; T* instance = static_cast(data); // Prevent ~ObjectWrap from calling napi_remove_wrap @@ -5023,11 +5027,6 @@ inline void ObjectWrap::FinalizeCallback(node_api_nogc_env env, #endif instance->Finalize(Napi::BasicEnv(env)); - } else { - // The child class may override Finalize but _not_ with a BasicEnv. Calling - // via `instance->Finalize()` would then give a compile error. Explicitly - // use the ObjectWrap's Finalize, which has BasicEnv override. - instance->ObjectWrap::Finalize(Napi::BasicEnv(env)); } // If class overrides the (extended) finalizer, either schedule it or