diff options
author | 2022-10-01 13:23:32 -0700 | |
---|---|---|
committer | 2022-10-01 13:23:32 -0700 | |
commit | bab317edd169b160712fcc2f6e56cb36dceec0f5 (patch) | |
tree | 64a77d3c4fd08be6452b38b2719b923fb9695ccc | |
parent | 1dac9248aded80aaa7ea213439f4fdb3c58777a4 (diff) | |
download | bun-bab317edd169b160712fcc2f6e56cb36dceec0f5.tar.gz bun-bab317edd169b160712fcc2f6e56cb36dceec0f5.tar.zst bun-bab317edd169b160712fcc2f6e56cb36dceec0f5.zip |
[napi] Implement `napi_remove_wrap`
-rw-r--r-- | src/bun.js/bindings/napi.cpp | 30 | ||||
-rw-r--r-- | src/symbols.dyn | 1 | ||||
-rw-r--r-- | src/symbols.txt | 1 |
3 files changed, 32 insertions, 0 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index 4acd52d8a..223808035 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -575,6 +575,36 @@ extern "C" napi_status napi_wrap(napi_env env, return napi_ok; } +extern "C" napi_status napi_remove_wrap(napi_env env, napi_value js_object, + void** result) +{ + JSValue value = toJS(js_object); + if (!value || value.isUndefinedOrNull()) { + return napi_object_expected; + } + + auto* globalObject = toJS(env); + auto& vm = globalObject->vm(); + auto* val = jsDynamicCast<NapiPrototype*>(value); + + if (!val) { + return napi_object_expected; + } + + if (!val->napiRef) { + // not sure if this should succeed or return an error + return napi_ok; + } + + *result = val->napiRef->data; + + auto* ref = val->napiRef; + val->napiRef = nullptr; + delete ref; + + return napi_ok; +} + extern "C" napi_status napi_unwrap(napi_env env, napi_value js_object, void** result) { diff --git a/src/symbols.dyn b/src/symbols.dyn index 0e02635bc..d81166623 100644 --- a/src/symbols.dyn +++ b/src/symbols.dyn @@ -125,4 +125,5 @@ _napi_unref_threadsafe_function; _napi_unwrap; _napi_wrap; + _napi_remove_wrap; };
\ No newline at end of file diff --git a/src/symbols.txt b/src/symbols.txt index 1a570556f..7367f1549 100644 --- a/src/symbols.txt +++ b/src/symbols.txt @@ -124,3 +124,4 @@ _napi_typeof _napi_unref_threadsafe_function _napi_unwrap _napi_wrap +_napi_remove_wrap |