@@ -119,13 +119,15 @@ class Reference {
119
119
int initialRefcount,
120
120
bool deleteSelf,
121
121
napi_finalize finalizeCallback = nullptr ,
122
- void * finalizeData = nullptr )
123
- : _isolate(isolate),
122
+ void * finalizeData = nullptr ,
123
+ void * finalizeHint = nullptr )
124
+ : _isolate(isolate),
124
125
_persistent (isolate, value),
125
126
_refcount(initialRefcount),
126
127
_deleteSelf(deleteSelf),
127
128
_finalizeCallback(finalizeCallback),
128
- _finalizeData(finalizeData) {
129
+ _finalizeData(finalizeData),
130
+ _finalizeHint(finalizeHint) {
129
131
if (initialRefcount == 0 ) {
130
132
if (_finalizeCallback != nullptr || _deleteSelf) {
131
133
_persistent.SetWeak (
@@ -187,7 +189,8 @@ class Reference {
187
189
bool deleteSelf = reference->_deleteSelf ;
188
190
189
191
if (reference->_finalizeCallback != nullptr ) {
190
- reference->_finalizeCallback (reference->_finalizeData );
192
+ reference->_finalizeCallback (reference->_finalizeData ,
193
+ reference->_finalizeHint );
191
194
}
192
195
193
196
if (deleteSelf) {
@@ -201,6 +204,7 @@ class Reference {
201
204
bool _deleteSelf;
202
205
napi_finalize _finalizeCallback;
203
206
void * _finalizeData;
207
+ void * _finalizeHint;
204
208
};
205
209
206
210
class TryCatch : public v8 ::TryCatch {
@@ -1782,6 +1786,7 @@ napi_status napi_wrap(napi_env e,
1782
1786
napi_value jsObject,
1783
1787
void * nativeObj,
1784
1788
napi_finalize finalize_cb,
1789
+ void * finalize_hint,
1785
1790
napi_ref* result) {
1786
1791
NAPI_PREAMBLE (e);
1787
1792
CHECK_ARG (jsObject);
@@ -1800,7 +1805,13 @@ napi_status napi_wrap(napi_env e,
1800
1805
// Create a separate self-deleting reference for the finalizer callback.
1801
1806
// This ensures the finalizer is not dependent on the lifetime of the
1802
1807
// returned reference.
1803
- new v8impl::Reference (isolate, obj, 0 , true , finalize_cb, nativeObj);
1808
+ new v8impl::Reference (isolate,
1809
+ obj,
1810
+ 0 ,
1811
+ true ,
1812
+ finalize_cb,
1813
+ nativeObj,
1814
+ finalize_hint);
1804
1815
}
1805
1816
1806
1817
if (result != nullptr ) {
@@ -1810,7 +1821,7 @@ napi_status napi_wrap(napi_env e,
1810
1821
// deleted via
1811
1822
// napi_delete_reference() when it is no longer needed.
1812
1823
v8impl::Reference* reference =
1813
- new v8impl::Reference (isolate, obj, 0 , false , nullptr , nullptr );
1824
+ new v8impl::Reference (isolate, obj, 0 , false );
1814
1825
*result = reinterpret_cast <napi_ref>(reference);
1815
1826
}
1816
1827
@@ -1838,6 +1849,7 @@ napi_status napi_unwrap(napi_env e, napi_value jsObject, void** result) {
1838
1849
napi_status napi_create_external (napi_env e,
1839
1850
void * data,
1840
1851
napi_finalize finalize_cb,
1852
+ void * finalize_hint,
1841
1853
napi_value* result) {
1842
1854
NAPI_PREAMBLE (e);
1843
1855
CHECK_ARG (result);
@@ -1848,7 +1860,13 @@ napi_status napi_create_external(napi_env e,
1848
1860
1849
1861
// The Reference object will delete itself after invoking the finalizer
1850
1862
// callback.
1851
- new v8impl::Reference (isolate, externalValue, 0 , true , finalize_cb, data);
1863
+ new v8impl::Reference (isolate,
1864
+ externalValue,
1865
+ 0 ,
1866
+ true ,
1867
+ finalize_cb,
1868
+ data,
1869
+ finalize_hint);
1852
1870
1853
1871
*result = v8impl::JsValueFromV8LocalValue (externalValue);
1854
1872
@@ -2177,6 +2195,7 @@ napi_status napi_create_external_buffer(napi_env e,
2177
2195
size_t size,
2178
2196
void * data,
2179
2197
napi_finalize finalize_cb,
2198
+ void * finalize_hint,
2180
2199
napi_value* result) {
2181
2200
NAPI_PREAMBLE (e);
2182
2201
CHECK_ARG (result);
@@ -2185,7 +2204,7 @@ napi_status napi_create_external_buffer(napi_env e,
2185
2204
static_cast <char *>(data),
2186
2205
size,
2187
2206
(node::Buffer::FreeCallback)finalize_cb,
2188
- nullptr );
2207
+ finalize_hint );
2189
2208
2190
2209
CHECK_MAYBE_EMPTY (maybe, napi_generic_failure);
2191
2210
@@ -2271,6 +2290,7 @@ napi_status napi_create_external_arraybuffer(napi_env e,
2271
2290
void * external_data,
2272
2291
size_t byte_length,
2273
2292
napi_finalize finalize_cb,
2293
+ void * finalize_hint,
2274
2294
napi_value* result) {
2275
2295
NAPI_PREAMBLE (e);
2276
2296
CHECK_ARG (result);
@@ -2282,7 +2302,13 @@ napi_status napi_create_external_arraybuffer(napi_env e,
2282
2302
if (finalize_cb != nullptr ) {
2283
2303
// Create a self-deleting weak reference that invokes the finalizer
2284
2304
// callback.
2285
- new v8impl::Reference (isolate, buffer, 0 , true , finalize_cb, external_data);
2305
+ new v8impl::Reference (isolate,
2306
+ buffer,
2307
+ 0 ,
2308
+ true ,
2309
+ finalize_cb,
2310
+ external_data,
2311
+ finalize_hint);
2286
2312
}
2287
2313
2288
2314
*result = v8impl::JsValueFromV8LocalValue (buffer);
0 commit comments