Skip to content

Commit 802fd26

Browse files
authored
Reference and external improvements (#113)
- Add APIs for external values with data pointer & finalizer callback - Replace persistent and weak-ref types and APIs with unified counted-reference type and APIs - Update wrap/unwrap APIs to use reference type - Add finalize callback for external arraybuffer - Fix handling of data context for function callbacks
1 parent 280640d commit 802fd26

13 files changed

Lines changed: 347 additions & 178 deletions

File tree

src/node_api_helpers.h

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ namespace Napi {
138138
HandleScope scope(env);
139139
napi_value obj;
140140
napi_create_object(env, &obj);
141-
napi_create_persistent(env, obj, &handle);
141+
napi_create_reference(env, obj, 1, &handle);
142142
}
143143

144144
explicit Callback(napi_value fn) {
@@ -147,7 +147,7 @@ namespace Napi {
147147
HandleScope scope(env);
148148
napi_value obj;
149149
napi_create_object(env, &obj);
150-
napi_create_persistent(env, obj, &handle);
150+
napi_create_reference(env, obj, 1, &handle);
151151
SetFunction(fn);
152152
}
153153

@@ -158,7 +158,7 @@ namespace Napi {
158158

159159
napi_env env;
160160
napi_get_current_env(&env);
161-
napi_release_persistent(env, handle);
161+
napi_delete_reference(env, handle);
162162
}
163163

164164
bool operator==(const Callback &other) const {
@@ -167,9 +167,9 @@ namespace Napi {
167167
napi_get_current_env(&env);
168168

169169
napi_value ha;
170-
napi_get_persistent_value(env, handle, &ha);
170+
napi_get_reference_value(env, handle, &ha);
171171
napi_value hb;
172-
napi_get_persistent_value(env, other.handle, &hb);
172+
napi_get_reference_value(env, other.handle, &hb);
173173

174174
napi_value a;
175175
napi_get_element(env, ha, kCallbackIndex, &a);
@@ -206,7 +206,7 @@ namespace Napi {
206206
napi_env env;
207207
napi_get_current_env(&env);
208208
napi_value h;
209-
napi_get_persistent_value(env, handle, &h);
209+
napi_get_reference_value(env, handle, &h);
210210
napi_set_element(env, h, kCallbackIndex, fn);
211211
}
212212

@@ -215,7 +215,7 @@ namespace Napi {
215215
napi_env env;
216216
napi_get_current_env(&env);
217217
napi_value h;
218-
napi_get_persistent_value(env, handle, &h);
218+
napi_get_reference_value(env, handle, &h);
219219
napi_value fn;
220220
napi_get_element(env, h, kCallbackIndex, &fn);
221221
return scope.Escape(fn);
@@ -226,7 +226,7 @@ namespace Napi {
226226
napi_env env;
227227
napi_get_current_env(&env);
228228
napi_value h;
229-
napi_get_persistent_value(env, handle, &h);
229+
napi_get_reference_value(env, handle, &h);
230230
napi_value fn;
231231
napi_get_element(env, h, kCallbackIndex, &fn);
232232
napi_valuetype valuetype;
@@ -252,7 +252,7 @@ namespace Napi {
252252

253253
private:
254254
NAPI_DISALLOW_ASSIGN_COPY_MOVE(Callback)
255-
napi_persistent handle;
255+
napi_ref handle;
256256
static const uint32_t kCallbackIndex = 0;
257257

258258
napi_value Call_(napi_value target,
@@ -263,7 +263,7 @@ namespace Napi {
263263
napi_get_current_env(&env);
264264

265265
napi_value h;
266-
napi_get_persistent_value(env, handle, &h);
266+
napi_get_reference_value(env, handle, &h);
267267
napi_value fn;
268268
napi_get_element(env, h, kCallbackIndex, &fn);
269269

@@ -293,7 +293,7 @@ namespace Napi {
293293
HandleScope scope;
294294
napi_value obj;
295295
napi_create_object(env, &obj);
296-
napi_create_persistent(env, obj, &persistentHandle);
296+
napi_create_reference(env, obj, 1, &persistentHandle);
297297
}
298298

299299
virtual ~AsyncWorker() {
@@ -302,7 +302,7 @@ namespace Napi {
302302
if (persistentHandle != NULL) {
303303
napi_env env;
304304
napi_get_current_env(&env);
305-
napi_release_persistent(env, persistentHandle);
305+
napi_delete_reference(env, persistentHandle);
306306
persistentHandle = NULL;
307307
}
308308
delete callback;
@@ -330,7 +330,7 @@ namespace Napi {
330330
napi_propertyname pnKey;
331331
napi_property_name(env, key, &pnKey);
332332
napi_value h;
333-
napi_get_persistent_value(env, persistentHandle, &h);
333+
napi_get_reference_value(env, persistentHandle, &h);
334334
napi_set_property(env, h, pnKey, value);
335335
}
336336

@@ -340,7 +340,7 @@ namespace Napi {
340340
napi_env env;
341341
napi_get_current_env(&env);
342342
napi_value h;
343-
napi_get_persistent_value(env, persistentHandle, &h);
343+
napi_get_reference_value(env, persistentHandle, &h);
344344
napi_set_property(env, h, key, value);
345345
}
346346

@@ -350,7 +350,7 @@ namespace Napi {
350350
napi_env env;
351351
napi_get_current_env(&env);
352352
napi_value h;
353-
napi_get_persistent_value(env, persistentHandle, &h);
353+
napi_get_reference_value(env, persistentHandle, &h);
354354
napi_set_element(env, h, index, value);
355355
}
356356

@@ -361,7 +361,7 @@ namespace Napi {
361361
napi_propertyname pnKey;
362362
napi_property_name(env, key, &pnKey);
363363
napi_value h;
364-
napi_get_persistent_value(env, persistentHandle, &h);
364+
napi_get_reference_value(env, persistentHandle, &h);
365365
napi_value v;
366366
napi_get_property(env, h, pnKey, &v);
367367
return scope.Escape(v);
@@ -373,7 +373,7 @@ namespace Napi {
373373
napi_env env;
374374
napi_get_current_env(&env);
375375
napi_value h;
376-
napi_get_persistent_value(env, persistentHandle, &h);
376+
napi_get_reference_value(env, persistentHandle, &h);
377377
napi_value v;
378378
napi_get_property(env, h, key, &v);
379379
return scope.Escape(v);
@@ -384,7 +384,7 @@ namespace Napi {
384384
napi_env env;
385385
napi_get_current_env(&env);
386386
napi_value h;
387-
napi_get_persistent_value(env, persistentHandle, &h);
387+
napi_get_reference_value(env, persistentHandle, &h);
388388
napi_value v;
389389
napi_get_element(env, h, index, &v);
390390
return scope.Escape(v);
@@ -414,7 +414,7 @@ namespace Napi {
414414
}
415415

416416
protected:
417-
napi_persistent persistentHandle;
417+
napi_ref persistentHandle;
418418
Callback *callback;
419419

420420
virtual void HandleOKCallback() {

0 commit comments

Comments
 (0)