@@ -84,6 +84,48 @@ Napi::Value IsExternalGcFinalizerCalled(const Napi::CallbackInfo& info) {
84
84
return Napi::Boolean::New (info.Env (), externalGcFinalizerCalled);
85
85
}
86
86
87
+ #ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
88
+ Napi::Value AddPostFinalizer (const Napi::CallbackInfo& info) {
89
+ auto env = info.Env ();
90
+
91
+ env.AddPostFinalizer (
92
+ [callback = Napi::Persistent (info[0 ].As <Napi::Function>())](
93
+ Napi::Env /* env*/ ) { callback.Call ({}); });
94
+
95
+ return env.Undefined ();
96
+ }
97
+
98
+ Napi::Value AddPostFinalizerWithData (const Napi::CallbackInfo& info) {
99
+ auto env = info.Env ();
100
+
101
+ env.AddPostFinalizer (
102
+ [callback = Napi::Persistent (info[0 ].As <Napi::Function>())](
103
+ Napi::Env /* env*/ , Napi::Reference<Napi::Value>* data) {
104
+ callback.Call ({data->Value ()});
105
+ delete data;
106
+ },
107
+ new Napi::Reference<Napi::Value>(Napi::Persistent (info[1 ])));
108
+ return env.Undefined ();
109
+ }
110
+
111
+ Napi::Value AddPostFinalizerWithDataAndHint (const Napi::CallbackInfo& info) {
112
+ auto env = info.Env ();
113
+
114
+ env.AddPostFinalizer (
115
+ [callback = Napi::Persistent (info[0 ].As <Napi::Function>())](
116
+ Napi::Env /* env*/ ,
117
+ Napi::Reference<Napi::Value>* data,
118
+ Napi::Reference<Napi::Value>* hint) {
119
+ callback.Call ({data->Value (), hint->Value ()});
120
+ delete data;
121
+ delete hint;
122
+ },
123
+ new Napi::Reference<Napi::Value>(Napi::Persistent (info[1 ])),
124
+ new Napi::Reference<Napi::Value>(Napi::Persistent (info[2 ])));
125
+ return env.Undefined ();
126
+ }
127
+ #endif
128
+
87
129
} // namespace
88
130
89
131
Napi::Object InitFinalizerOrder (Napi::Env env) {
@@ -95,5 +137,13 @@ Napi::Object InitFinalizerOrder(Napi::Env env) {
95
137
Napi::Function::New (env, IsExternalNogcFinalizerCalled);
96
138
exports[" isExternalGcFinalizerCalled" ] =
97
139
Napi::Function::New (env, IsExternalGcFinalizerCalled);
140
+
141
+ #ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
142
+ exports[" AddPostFinalizer" ] = Napi::Function::New (env, AddPostFinalizer);
143
+ exports[" AddPostFinalizerWithData" ] =
144
+ Napi::Function::New (env, AddPostFinalizerWithData);
145
+ exports[" AddPostFinalizerWithDataAndHint" ] =
146
+ Napi::Function::New (env, AddPostFinalizerWithDataAndHint);
147
+ #endif
98
148
return exports;
99
149
}
0 commit comments