@@ -31,22 +31,22 @@ namespace details {
31
31
// Node.js releases. Only necessary when they are used in napi.h and napi-inl.h.
32
32
constexpr int napi_no_external_buffers_allowed = 22 ;
33
33
34
+ template <typename FreeType>
35
+ inline void default_finalizer (napi_env /* env*/ , void * data, void * /* hint*/ ) {
36
+ delete static_cast <FreeType*>(data);
37
+ }
38
+
34
39
// Attach a data item to an object and delete it when the object gets
35
40
// garbage-collected.
36
41
// TODO: Replace this code with `napi_add_finalizer()` whenever it becomes
37
42
// available on all supported versions of Node.js.
38
- template <typename FreeType>
43
+ template <typename FreeType,
44
+ napi_finalize finalizer = default_finalizer<FreeType>>
39
45
inline napi_status AttachData (napi_env env,
40
46
napi_value obj,
41
47
FreeType* data,
42
- napi_finalize finalizer = nullptr ,
43
48
void * hint = nullptr ) {
44
49
napi_status status;
45
- if (finalizer == nullptr ) {
46
- finalizer = [](napi_env /* env*/ , void * data, void * /* hint*/ ) {
47
- delete static_cast <FreeType*>(data);
48
- };
49
- }
50
50
#if (NAPI_VERSION < 5)
51
51
napi_value symbol, external;
52
52
status = napi_create_symbol (env, nullptr , &symbol);
@@ -1636,11 +1636,8 @@ inline void Object::AddFinalizer(Finalizer finalizeCallback, T* data) const {
1636
1636
new details::FinalizeData<T, Finalizer>(
1637
1637
{std::move (finalizeCallback), nullptr });
1638
1638
napi_status status =
1639
- details::AttachData (_env,
1640
- *this ,
1641
- data,
1642
- details::FinalizeData<T, Finalizer>::Wrapper,
1643
- finalizeData);
1639
+ details::AttachData<T, details::FinalizeData<T, Finalizer>::Wrapper>(
1640
+ _env, *this , data, finalizeData);
1644
1641
if (status != napi_ok) {
1645
1642
delete finalizeData;
1646
1643
NAPI_THROW_IF_FAILED_VOID (_env, status);
@@ -1654,12 +1651,9 @@ inline void Object::AddFinalizer(Finalizer finalizeCallback,
1654
1651
details::FinalizeData<T, Finalizer, Hint>* finalizeData =
1655
1652
new details::FinalizeData<T, Finalizer, Hint>(
1656
1653
{std::move (finalizeCallback), finalizeHint});
1657
- napi_status status = details::AttachData (
1658
- _env,
1659
- *this ,
1660
- data,
1661
- details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint,
1662
- finalizeData);
1654
+ napi_status status = details::
1655
+ AttachData<T, details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint>(
1656
+ _env, *this , data, finalizeData);
1663
1657
if (status != napi_ok) {
1664
1658
delete finalizeData;
1665
1659
NAPI_THROW_IF_FAILED_VOID (_env, status);
0 commit comments