diff --git a/src/js_native_api.h b/src/js_native_api.h index e804d1d45d236519d248e3d40fa0a6c2a6d378ec..dd962e4159bb44baa31b4698aa0b898dac0b5021 100644 --- a/src/js_native_api.h +++ b/src/js_native_api.h @@ -292,6 +292,13 @@ NAPI_EXTERN napi_status napi_wrap(napi_env env, napi_finalize finalize_cb, void* finalize_hint, napi_ref* result); +NAPI_EXTERN napi_status napi_wrap_with_size(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result, + size_t native_binding_size); NAPI_EXTERN napi_status napi_unwrap(napi_env env, napi_value js_object, void** result); @@ -303,6 +310,13 @@ NAPI_EXTERN napi_status napi_create_external(napi_env env, napi_finalize finalize_cb, void* finalize_hint, napi_value* result); +NAPI_EXTERN napi_status napi_create_external_with_size(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result, + size_t native_binding_size); + NAPI_EXTERN napi_status napi_get_value_external(napi_env env, napi_value value, void** result); diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc index 12528799efa43ac5b32e553437b148c638c57ee5..7b86ebdb0ffc37cedbb3840711d4ca3fa4ef4288 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc @@ -2325,6 +2325,21 @@ napi_status napi_wrap(napi_env env, result); } +napi_status napi_wrap_with_size(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result, + size_t native_binding_size) { + return v8impl::Wrap(env, + js_object, + native_object, + finalize_cb, + finalize_hint, + result, + native_binding_size); +} napi_status napi_unwrap(napi_env env, napi_value obj, void** result) { return v8impl::Unwrap(env, obj, result, v8impl::KeepWrap); } @@ -2360,6 +2375,34 @@ napi_status napi_create_external(napi_env env, return napi_clear_last_error(env); } +napi_status napi_create_external_with_size(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result + size_t native_binding_size) { + NAPI_PREAMBLE(env); + CHECK_ARG(env, result); + + v8::Isolate* isolate = env->isolate; + + v8::Local external_value = v8::External::New(isolate, data, native_binding_size); + + // The Reference object will delete itself after invoking the finalizer + // callback. + v8impl::Reference::New(env, + external_value, + 0, + true, + finalize_cb, + data, + finalize_hint); + + *result = v8impl::JsValueFromV8LocalValue(external_value); + + return napi_clear_last_error(env); +} + NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, napi_value object, const napi_type_tag* type_tag) {