Skip to content

Commit 1ad6eda

Browse files
committed
fix compilation error with duplicate Finalizer identifier
1 parent 13118f7 commit 1ad6eda

File tree

3 files changed

+54
-36
lines changed

3 files changed

+54
-36
lines changed

doc/basic_env.md

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ its `Remove()` method.
117117
### PostFinalizer
118118
119119
```cpp
120-
template <typename Finalizer>
121-
inline void PostFinalizer(Finalizer finalizeCallback) const;
120+
using FinalizerWithoutData = void (*)(Env);
121+
122+
inline void PostFinalizer(FinalizerWithoutData finalizeCallback) const;
122123
```
123124

124125
- `[in] finalizeCallback`: The function to queue for execution outside of the GC
@@ -128,28 +129,34 @@ inline void PostFinalizer(Finalizer finalizeCallback) const;
128129
### PostFinalizer
129130

130131
```cpp
131-
template <typename Finalizer, typename T>
132-
inline void PostFinalizer(Finalizer finalizeCallback, T* data) const;
132+
template <typename T>
133+
using Finalizer = void (*)(Napi::Env, T*);
134+
135+
template <typename DataType>
136+
inline void PostFinalizer(Finalizer<DataType> finalizeCallback, DataType* data) const;
133137
```
134138
135139
- `[in] finalizeCallback`: The function to queue for execution outside of the GC
136-
finalization, implementing `operator()(Napi::Env, T*)`. See [Finalization]()
140+
finalization, implementing `operator()(Napi::Env, DataType*)`. See [Finalization]()
137141
for more details.
138-
- `[in] data`: The data to associate with the object.
142+
- `[in] data`: The data value passed to the `finalizeCallback` function.
139143
140144
### PostFinalizer
141145
142146
```cpp
143-
template <typename Finalizer, typename T, typename Hint>
144-
inline void PostFinalizer(Finalizer finalizeCallback,
145-
T* data,
147+
template <typename DataType, typename HintType>
148+
using FinalizerWithHint = void (*)(Napi::Env, DataType*, HintType*);
149+
150+
template <typename DataType, typename HintType>
151+
inline void PostFinalizer(FinalizerWithHint<DataType, HintType> finalizeCallback,
152+
DataType* data,
146153
Hint* finalizeHint) const;
147154
```
148155

149156
- `[in] finalizeCallback`: The function to queue for execution outside of the GC
150-
finalization, implementing `operator()(Napi::Env, T*, Hint*)`. See
157+
finalization, implementing `operator()(Napi::Env, DataType*, HintType*)`. See
151158
[Finalization]() for more details.
152-
- `[in] data`: The data to associate with the object.
159+
- `[in] data`: The data value passed to the `finalizeCallback` function.
153160
- `[in] finalizeHint`: The hint value passed to the `finalizeCallback` function.
154161

155162
### AddCleanupHook

napi-inl.h

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6789,16 +6789,16 @@ bool Env::CleanupHook<Hook, Arg>::IsEmpty() const {
67896789
#endif // NAPI_VERSION > 2
67906790

67916791
#ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
6792-
template <typename Finalizer>
6793-
inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback) const {
6792+
inline void BasicEnv::PostFinalizer(
6793+
FinalizerWithoutData finalizeCallback) const {
67946794
using T = void*;
6795-
details::FinalizeData<T, Finalizer>* finalizeData =
6796-
new details::FinalizeData<T, Finalizer>(
6795+
details::FinalizeData<T, FinalizerWithoutData>* finalizeData =
6796+
new details::FinalizeData<T, FinalizerWithoutData>(
67976797
{std::move(finalizeCallback), nullptr});
67986798

67996799
napi_status status = node_api_post_finalizer(
68006800
_env,
6801-
details::FinalizeData<T, Finalizer>::WrapperGCWithoutData,
6801+
details::FinalizeData<T, FinalizerWithoutData>::WrapperGCWithoutData,
68026802
static_cast<void*>(nullptr),
68036803
finalizeData);
68046804
if (status != napi_ok) {
@@ -6808,31 +6808,40 @@ inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback) const {
68086808
}
68096809
}
68106810

6811-
template <typename Finalizer, typename T>
6812-
inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback, T* data) const {
6813-
details::FinalizeData<T, Finalizer>* finalizeData =
6814-
new details::FinalizeData<T, Finalizer>(
6811+
template <typename DataType>
6812+
inline void BasicEnv::PostFinalizer(Finalizer<DataType> finalizeCallback,
6813+
DataType* data) const {
6814+
details::FinalizeData<DataType, Finalizer<DataType>>* finalizeData =
6815+
new details::FinalizeData<DataType, Finalizer<DataType>>(
68156816
{std::move(finalizeCallback), nullptr});
68166817

68176818
napi_status status = node_api_post_finalizer(
6818-
_env, details::FinalizeData<T, Finalizer>::WrapperGC, data, finalizeData);
6819+
_env,
6820+
details::FinalizeData<DataType, Finalizer<DataType>>::WrapperGC,
6821+
data,
6822+
finalizeData);
68196823
if (status != napi_ok) {
68206824
delete finalizeData;
68216825
NAPI_FATAL_IF_FAILED(
68226826
status, "BasicEnv::PostFinalizer", "invalid arguments");
68236827
}
68246828
}
68256829

6826-
template <typename Finalizer, typename T, typename Hint>
6827-
inline void BasicEnv::PostFinalizer(Finalizer finalizeCallback,
6828-
T* data,
6829-
Hint* finalizeHint) const {
6830-
details::FinalizeData<T, Finalizer, Hint>* finalizeData =
6831-
new details::FinalizeData<T, Finalizer, Hint>(
6830+
template <typename DataType, typename HintType>
6831+
inline void BasicEnv::PostFinalizer(
6832+
FinalizerWithHint<DataType, HintType> finalizeCallback,
6833+
DataType* data,
6834+
HintType* finalizeHint) const {
6835+
details::FinalizeData<DataType,
6836+
FinalizerWithHint<DataType, HintType>,
6837+
HintType>* finalizeData = new details::
6838+
FinalizeData<DataType, FinalizerWithHint<DataType, HintType>, HintType>(
68326839
{std::move(finalizeCallback), finalizeHint});
68336840
napi_status status = node_api_post_finalizer(
68346841
_env,
6835-
details::FinalizeData<T, Finalizer, Hint>::WrapperGCWithHint,
6842+
details::FinalizeData<DataType,
6843+
FinalizerWithHint<DataType, HintType>,
6844+
HintType>::WrapperGCWithHint,
68366845
data,
68376846
finalizeData);
68386847
if (status != napi_ok) {

napi.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -395,16 +395,18 @@ class BasicEnv {
395395
#endif // NAPI_VERSION > 8
396396

397397
#ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
398-
template <typename Finalizer>
399-
inline void PostFinalizer(Finalizer finalizeCallback) const;
398+
using FinalizerWithoutData = void (*)(Env);
399+
inline void PostFinalizer(FinalizerWithoutData finalizeCallback) const;
400400

401-
template <typename Finalizer, typename T>
402-
inline void PostFinalizer(Finalizer finalizeCallback, T* data) const;
401+
template <typename DataType>
402+
inline void PostFinalizer(Finalizer<DataType> finalizeCallback,
403+
DataType* data) const;
403404

404-
template <typename Finalizer, typename T, typename Hint>
405-
inline void PostFinalizer(Finalizer finalizeCallback,
406-
T* data,
407-
Hint* finalizeHint) const;
405+
template <typename DataType, typename HintType>
406+
inline void PostFinalizer(
407+
FinalizerWithHint<DataType, HintType> finalizeCallback,
408+
DataType* data,
409+
HintType* finalizeHint) const;
408410
#endif // NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
409411

410412
friend class Env;

0 commit comments

Comments
 (0)