Skip to content

Commit

Permalink
napi: Reference and external improvements (nodejs#99)
Browse files Browse the repository at this point in the history
 - 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
  • Loading branch information
jasongin committed Feb 14, 2017
1 parent a641768 commit 2328992
Show file tree
Hide file tree
Showing 11 changed files with 291 additions and 198 deletions.
38 changes: 19 additions & 19 deletions src/node_api_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ namespace Napi {
HandleScope scope(env);
napi_value obj;
napi_create_object(env, &obj);
napi_create_persistent(env, obj, &handle);
napi_create_reference(env, obj, 1, &handle);
}

explicit Callback(napi_value fn) {
Expand All @@ -147,7 +147,7 @@ namespace Napi {
HandleScope scope(env);
napi_value obj;
napi_create_object(env, &obj);
napi_create_persistent(env, obj, &handle);
napi_create_reference(env, obj, 1, &handle);
SetFunction(fn);
}

Expand All @@ -158,7 +158,7 @@ namespace Napi {

napi_env env;
napi_get_current_env(&env);
napi_release_persistent(env, handle);
napi_delete_reference(env, handle);
}

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

napi_value ha;
napi_get_persistent_value(env, handle, &ha);
napi_get_reference_value(env, handle, &ha);
napi_value hb;
napi_get_persistent_value(env, other.handle, &hb);
napi_get_reference_value(env, other.handle, &hb);

napi_value a;
napi_get_element(env, ha, kCallbackIndex, &a);
Expand Down Expand Up @@ -206,7 +206,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, handle, &h);
napi_get_reference_value(env, handle, &h);
napi_set_element(env, h, kCallbackIndex, fn);
}

Expand All @@ -215,7 +215,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, handle, &h);
napi_get_reference_value(env, handle, &h);
napi_value fn;
napi_get_element(env, h, kCallbackIndex, &fn);
return scope.Escape(fn);
Expand All @@ -226,7 +226,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, handle, &h);
napi_get_reference_value(env, handle, &h);
napi_value fn;
napi_get_element(env, h, kCallbackIndex, &fn);
napi_valuetype valuetype;
Expand All @@ -252,7 +252,7 @@ namespace Napi {

private:
NAPI_DISALLOW_ASSIGN_COPY_MOVE(Callback)
napi_persistent handle;
napi_ref handle;
static const uint32_t kCallbackIndex = 0;

napi_value Call_(napi_value target,
Expand All @@ -263,7 +263,7 @@ namespace Napi {
napi_get_current_env(&env);

napi_value h;
napi_get_persistent_value(env, handle, &h);
napi_get_reference_value(env, handle, &h);
napi_value fn;
napi_get_element(env, h, kCallbackIndex, &fn);

Expand Down Expand Up @@ -293,7 +293,7 @@ namespace Napi {
HandleScope scope;
napi_value obj;
napi_create_object(env, &obj);
napi_create_persistent(env, obj, &persistentHandle);
napi_create_reference(env, obj, 1, &persistentHandle);
}

virtual ~AsyncWorker() {
Expand All @@ -302,7 +302,7 @@ namespace Napi {
if (persistentHandle != NULL) {
napi_env env;
napi_get_current_env(&env);
napi_release_persistent(env, persistentHandle);
napi_delete_reference(env, persistentHandle);
persistentHandle = NULL;
}
delete callback;
Expand Down Expand Up @@ -330,7 +330,7 @@ namespace Napi {
napi_propertyname pnKey;
napi_property_name(env, key, &pnKey);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_set_property(env, h, pnKey, value);
}

Expand All @@ -340,7 +340,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_set_property(env, h, key, value);
}

Expand All @@ -350,7 +350,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_set_element(env, h, index, value);
}

Expand All @@ -361,7 +361,7 @@ namespace Napi {
napi_propertyname pnKey;
napi_property_name(env, key, &pnKey);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_value v;
napi_get_property(env, h, pnKey, &v);
return scope.Escape(v);
Expand All @@ -373,7 +373,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_value v;
napi_get_property(env, h, key, &v);
return scope.Escape(v);
Expand All @@ -384,7 +384,7 @@ namespace Napi {
napi_env env;
napi_get_current_env(&env);
napi_value h;
napi_get_persistent_value(env, persistentHandle, &h);
napi_get_reference_value(env, persistentHandle, &h);
napi_value v;
napi_get_element(env, h, index, &v);
return scope.Escape(v);
Expand Down Expand Up @@ -414,7 +414,7 @@ namespace Napi {
}

protected:
napi_persistent persistentHandle;
napi_ref persistentHandle;
Callback *callback;

virtual void HandleOKCallback() {
Expand Down
Loading

0 comments on commit 2328992

Please sign in to comment.