From 68b55cd855249964fbb9b9d74d1303cae9993904 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Sat, 19 Nov 2022 01:18:58 -0800 Subject: 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 --- src/bun.js/bindings/napi.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/bun.js/bindings/napi.cpp') 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(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(finalize_cb); + globalObject->napiInstanceDataFinalizerHint = finalize_hint; + + return napi_ok; +} \ No newline at end of file -- cgit v1.2.3