diff options
author | 2022-11-19 01:18:58 -0800 | |
---|---|---|
committer | 2022-11-19 01:18:58 -0800 | |
commit | 68b55cd855249964fbb9b9d74d1303cae9993904 (patch) | |
tree | 682044fe4404736e6e6dd970390f1ac07fe942d3 /src/bun.js/bindings/napi.cpp | |
parent | 43b4e1b67bad69ac4da193ea2ac603b1a985839e (diff) | |
download | bun-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.cpp | 28 |
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 |