@@ -119,13 +119,15 @@ class Reference {
119119 int initialRefcount,
120120 bool deleteSelf,
121121 napi_finalize finalizeCallback = nullptr ,
122- void * finalizeData = nullptr )
123- : _isolate(isolate),
122+ void * finalizeData = nullptr ,
123+ void * finalizeHint = nullptr )
124+ : _isolate(isolate),
124125 _persistent (isolate, value),
125126 _refcount(initialRefcount),
126127 _deleteSelf(deleteSelf),
127128 _finalizeCallback(finalizeCallback),
128- _finalizeData(finalizeData) {
129+ _finalizeData(finalizeData),
130+ _finalizeHint(finalizeHint) {
129131 if (initialRefcount == 0 ) {
130132 if (_finalizeCallback != nullptr || _deleteSelf) {
131133 _persistent.SetWeak (
@@ -187,7 +189,8 @@ class Reference {
187189 bool deleteSelf = reference->_deleteSelf ;
188190
189191 if (reference->_finalizeCallback != nullptr ) {
190- reference->_finalizeCallback (reference->_finalizeData );
192+ reference->_finalizeCallback (reference->_finalizeData ,
193+ reference->_finalizeHint );
191194 }
192195
193196 if (deleteSelf) {
@@ -201,6 +204,7 @@ class Reference {
201204 bool _deleteSelf;
202205 napi_finalize _finalizeCallback;
203206 void * _finalizeData;
207+ void * _finalizeHint;
204208};
205209
206210class TryCatch : public v8 ::TryCatch {
@@ -1782,6 +1786,7 @@ napi_status napi_wrap(napi_env e,
17821786 napi_value jsObject,
17831787 void * nativeObj,
17841788 napi_finalize finalize_cb,
1789+ void * finalize_hint,
17851790 napi_ref* result) {
17861791 NAPI_PREAMBLE (e);
17871792 CHECK_ARG (jsObject);
@@ -1800,7 +1805,13 @@ napi_status napi_wrap(napi_env e,
18001805 // Create a separate self-deleting reference for the finalizer callback.
18011806 // This ensures the finalizer is not dependent on the lifetime of the
18021807 // 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);
18041815 }
18051816
18061817 if (result != nullptr ) {
@@ -1810,7 +1821,7 @@ napi_status napi_wrap(napi_env e,
18101821 // deleted via
18111822 // napi_delete_reference() when it is no longer needed.
18121823 v8impl::Reference* reference =
1813- new v8impl::Reference (isolate, obj, 0 , false , nullptr , nullptr );
1824+ new v8impl::Reference (isolate, obj, 0 , false );
18141825 *result = reinterpret_cast <napi_ref>(reference);
18151826 }
18161827
@@ -1838,6 +1849,7 @@ napi_status napi_unwrap(napi_env e, napi_value jsObject, void** result) {
18381849napi_status napi_create_external (napi_env e,
18391850 void * data,
18401851 napi_finalize finalize_cb,
1852+ void * finalize_hint,
18411853 napi_value* result) {
18421854 NAPI_PREAMBLE (e);
18431855 CHECK_ARG (result);
@@ -1848,7 +1860,13 @@ napi_status napi_create_external(napi_env e,
18481860
18491861 // The Reference object will delete itself after invoking the finalizer
18501862 // 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);
18521870
18531871 *result = v8impl::JsValueFromV8LocalValue (externalValue);
18541872
@@ -2177,6 +2195,7 @@ napi_status napi_create_external_buffer(napi_env e,
21772195 size_t size,
21782196 void * data,
21792197 napi_finalize finalize_cb,
2198+ void * finalize_hint,
21802199 napi_value* result) {
21812200 NAPI_PREAMBLE (e);
21822201 CHECK_ARG (result);
@@ -2185,7 +2204,7 @@ napi_status napi_create_external_buffer(napi_env e,
21852204 static_cast <char *>(data),
21862205 size,
21872206 (node::Buffer::FreeCallback)finalize_cb,
2188- nullptr );
2207+ finalize_hint );
21892208
21902209 CHECK_MAYBE_EMPTY (maybe, napi_generic_failure);
21912210
@@ -2271,6 +2290,7 @@ napi_status napi_create_external_arraybuffer(napi_env e,
22712290 void * external_data,
22722291 size_t byte_length,
22732292 napi_finalize finalize_cb,
2293+ void * finalize_hint,
22742294 napi_value* result) {
22752295 NAPI_PREAMBLE (e);
22762296 CHECK_ARG (result);
@@ -2282,7 +2302,13 @@ napi_status napi_create_external_arraybuffer(napi_env e,
22822302 if (finalize_cb != nullptr ) {
22832303 // Create a self-deleting weak reference that invokes the finalizer
22842304 // 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);
22862312 }
22872313
22882314 *result = v8impl::JsValueFromV8LocalValue (buffer);
0 commit comments