aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/napi.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-19 01:18:58 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-19 01:18:58 -0800
commit68b55cd855249964fbb9b9d74d1303cae9993904 (patch)
tree682044fe4404736e6e6dd970390f1ac07fe942d3 /src/bun.js/bindings/napi.cpp
parent43b4e1b67bad69ac4da193ea2ac603b1a985839e (diff)
downloadbun-68b55cd855249964fbb9b9d74d1303cae9993904.tar.gz
bun-68b55cd855249964fbb9b9d74d1303cae9993904.tar.zst
bun-68b55cd855249964fbb9b9d74d1303cae9993904.zip
Implement a singleton version of `napi_get_instance_data` and `napi_set_instance_data`
Still need to figure out how to do this without adding a layer of indirection to the global object as exposed to NAPI Addons This code is not tested
Diffstat (limited to 'src/bun.js/bindings/napi.cpp')
-rw-r--r--src/bun.js/bindings/napi.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp
index 649b8bf50..943f37688 100644
--- a/src/bun.js/bindings/napi.cpp
+++ b/src/bun.js/bindings/napi.cpp
@@ -1480,3 +1480,31 @@ extern "C" napi_status napi_get_value_external(napi_env env, napi_value value,
*result = jsCast<Bun::NapiExternal*>(object)->value();
return napi_ok;
}
+
+// TODO: make this per addon instead of globally shared for ALL addons
+extern "C" napi_status napi_get_instance_data(napi_env env,
+ void** data)
+{
+ Zig::GlobalObject* globalObject = toJS(env);
+ if (data == nullptr) {
+ return napi_invalid_arg;
+ }
+
+ *data = globalObject->napiInstanceData;
+ return napi_ok;
+}
+
+extern "C" napi_status napi_set_instance_data(napi_env env,
+ void* data,
+ napi_finalize finalize_cb,
+ void* finalize_hint)
+{
+ Zig::GlobalObject* globalObject = toJS(env);
+ if (data)
+ globalObject->napiInstanceData = data;
+
+ globalObject->napiInstanceDataFinalizer = reinterpret_cast<void*>(finalize_cb);
+ globalObject->napiInstanceDataFinalizerHint = finalize_hint;
+
+ return napi_ok;
+} \ No newline at end of file