|
20 | 20 |
|
21 | 21 | #include "js_native_api_types.h" |
22 | 22 | #include "napi_runtime.h" |
| 23 | +#include "napi_state.h" |
23 | 24 |
|
24 | 25 | #ifdef USE_PRIMJS_NAPI |
25 | 26 | #include "primjs_napi_defines.h" |
26 | 27 | #endif |
27 | 28 |
|
| 29 | +#define CHECK_ENV(env) \ |
| 30 | + do { \ |
| 31 | + if ((env) == nullptr) { \ |
| 32 | + return napi_set_last_error(nullptr, napi_invalid_arg); \ |
| 33 | + } \ |
| 34 | + } while (0) |
| 35 | + |
| 36 | +#define RETURN_STATUS_IF_FALSE(env, condition, status) \ |
| 37 | + do { \ |
| 38 | + if (!(condition)) { \ |
| 39 | + return napi_set_last_error((env), (status)); \ |
| 40 | + } \ |
| 41 | + } while (0) |
| 42 | + |
| 43 | +#define CHECK_ARG(env, arg) \ |
| 44 | + RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg) |
28 | 45 | EXTERN_C_START |
29 | 46 |
|
30 | 47 | napi_status napi_get_version_primjs(napi_env env, uint32_t* result) { |
@@ -549,16 +566,20 @@ napi_status napi_add_finalizer_primjs(napi_env env, napi_value js_object, |
549 | 566 | finalize_hint, result); |
550 | 567 | } |
551 | 568 |
|
552 | | -napi_status napi_set_instance_data_primjs(napi_env env, uint64_t key, |
553 | | - void* data, napi_finalize finalize_cb, |
| 569 | +static const uint64_t kNapiAdapterInstanceDataKey = |
| 570 | + reinterpret_cast<uint64_t>(&kNapiAdapterInstanceDataKey); |
| 571 | +napi_status napi_set_instance_data_primjs(napi_env env, void* data, |
| 572 | + napi_finalize finalize_cb, |
554 | 573 | void* finalize_hint) { |
555 | | - return env->napi_set_instance_data(env, key, data, finalize_cb, |
556 | | - finalize_hint); |
| 574 | + CHECK_ENV(env); |
| 575 | + return env->napi_set_instance_data_spec_compliant( |
| 576 | + env, kNapiAdapterInstanceDataKey, data, finalize_cb, finalize_hint); |
557 | 577 | } |
558 | 578 |
|
559 | | -napi_status napi_get_instance_data_primjs(napi_env env, uint64_t key, |
560 | | - void** data) { |
561 | | - return env->napi_get_instance_data(env, key, data); |
| 579 | +napi_status napi_get_instance_data_primjs(napi_env env, void** data) { |
| 580 | + CHECK_ENV(env); |
| 581 | + CHECK_ARG(env, data); |
| 582 | + return env->napi_get_instance_data(env, kNapiAdapterInstanceDataKey, data); |
562 | 583 | } |
563 | 584 |
|
564 | 585 | napi_status napi_get_last_error_info_primjs( |
|
0 commit comments