diff --git a/doc/basic_env.md b/doc/basic_env.md index 25668ce33..bc8255478 100644 --- a/doc/basic_env.md +++ b/doc/basic_env.md @@ -117,8 +117,9 @@ its `Remove()` method. ### PostFinalizer ```cpp -template -inline void PostFinalizer(Finalizer finalizeCallback) const; +using FinalizerWithoutData = void (*)(Env); + +inline void PostFinalizer(FinalizerWithoutData finalizeCallback) const; ``` - `[in] finalizeCallback`: The function to queue for execution outside of the GC @@ -128,28 +129,34 @@ inline void PostFinalizer(Finalizer finalizeCallback) const; ### PostFinalizer ```cpp -template -inline void PostFinalizer(Finalizer finalizeCallback, T* data) const; +template +using Finalizer = void (*)(Napi::Env, T*); + +template +inline void PostFinalizer(Finalizer finalizeCallback, DataType* data) const; ``` - `[in] finalizeCallback`: The function to queue for execution outside of the GC - finalization, implementing `operator()(Napi::Env, T*)`. See [Finalization]() + finalization, implementing `operator()(Napi::Env, DataType*)`. See [Finalization]() for more details. -- `[in] data`: The data to associate with the object. +- `[in] data`: The data value passed to the `finalizeCallback` function. ### PostFinalizer ```cpp -template -inline void PostFinalizer(Finalizer finalizeCallback, - T* data, +template +using FinalizerWithHint = void (*)(Napi::Env, DataType*, HintType*); + +template +inline void PostFinalizer(FinalizerWithHint finalizeCallback, + DataType* data, Hint* finalizeHint) const; ``` - `[in] finalizeCallback`: The function to queue for execution outside of the GC - finalization, implementing `operator()(Napi::Env, T*, Hint*)`. See + finalization, implementing `operator()(Napi::Env, DataType*, HintType*)`. See [Finalization]() for more details. -- `[in] data`: The data to associate with the object. +- `[in] data`: The data value passed to the `finalizeCallback` function. - `[in] finalizeHint`: The hint value passed to the `finalizeCallback` function. ### AddCleanupHook diff --git a/napi-inl.h b/napi-inl.h index fdda4dbe6..5af32b390 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -6789,16 +6789,16 @@ bool Env::CleanupHook::IsEmpty() const { #endif // NAPI_VERSION > 2 #ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER -template -inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback) const { +inline void BasicEnv::PostFinalizer( + FinalizerWithoutData finalizeCallback) const { using T = void*; - details::FinalizeData* finalizeData = - new details::FinalizeData( + details::FinalizeData* finalizeData = + new details::FinalizeData( {std::move(finalizeCallback), nullptr}); napi_status status = node_api_post_finalizer( _env, - details::FinalizeData::WrapperGCWithoutData, + details::FinalizeData::WrapperGCWithoutData, static_cast(nullptr), finalizeData); if (status != napi_ok) { @@ -6808,14 +6808,18 @@ inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback) const { } } -template -inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback, T* data) const { - details::FinalizeData* finalizeData = - new details::FinalizeData( +template +inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback, + DataType* data) const { + details::FinalizeData>* finalizeData = + new details::FinalizeData>( {std::move(finalizeCallback), nullptr}); napi_status status = node_api_post_finalizer( - _env, details::FinalizeData::WrapperGC, data, finalizeData); + _env, + details::FinalizeData>::WrapperGC, + data, + finalizeData); if (status != napi_ok) { delete finalizeData; NAPI_FATAL_IF_FAILED( @@ -6823,16 +6827,21 @@ inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback, T* data) const { } } -template -inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback, - T* data, - Hint* finalizeHint) const { - details::FinalizeData* finalizeData = - new details::FinalizeData( +template +inline void BasicEnv::PostFinalizer( + FinalizerWithHint finalizeCallback, + DataType* data, + HintType* finalizeHint) const { + details::FinalizeData, + HintType>* finalizeData = new details:: + FinalizeData, HintType>( {std::move(finalizeCallback), finalizeHint}); napi_status status = node_api_post_finalizer( _env, - details::FinalizeData::WrapperGCWithHint, + details::FinalizeData, + HintType>::WrapperGCWithHint, data, finalizeData); if (status != napi_ok) { diff --git a/napi.h b/napi.h index e0d056376..d808e4b32 100644 --- a/napi.h +++ b/napi.h @@ -395,16 +395,18 @@ class BasicEnv { #endif // NAPI_VERSION > 8 #ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER - template - inline void PostFinalizer(Finalizer finalizeCallback) const; + using FinalizerWithoutData = void (*)(Env); + inline void PostFinalizer(FinalizerWithoutData finalizeCallback) const; - template - inline void PostFinalizer(Finalizer finalizeCallback, T* data) const; + template + inline void PostFinalizer(Finalizer finalizeCallback, + DataType* data) const; - template - inline void PostFinalizer(Finalizer finalizeCallback, - T* data, - Hint* finalizeHint) const; + template + inline void PostFinalizer( + FinalizerWithHint finalizeCallback, + DataType* data, + HintType* finalizeHint) const; #endif // NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER friend class Env;