Skip to content

Commit c25d7a1

Browse files
committed
define callback scope (nodejs/node-addon-api#1283)
1 parent 6975494 commit c25d7a1

File tree

5 files changed

+24
-2
lines changed

5 files changed

+24
-2
lines changed

packages/emnapi/include/napi-inl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4651,7 +4651,7 @@ inline Value EscapableHandleScope::Escape(napi_value escapee) {
46514651
return Value(_env, result);
46524652
}
46534653

4654-
#if (NAPI_VERSION > 2 && !defined(__wasm__))
4654+
#if (NAPI_VERSION > 2)
46554655
////////////////////////////////////////////////////////////////////////////////
46564656
// CallbackScope class
46574657
////////////////////////////////////////////////////////////////////////////////

packages/emnapi/include/napi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2405,7 +2405,7 @@ class EscapableHandleScope {
24052405
napi_escapable_handle_scope _scope;
24062406
};
24072407

2408-
#if (NAPI_VERSION > 2 && !defined(__wasm__))
2408+
#if (NAPI_VERSION > 2)
24092409
class CallbackScope {
24102410
public:
24112411
CallbackScope(napi_env env, napi_callback_scope scope);

packages/emnapi/include/node_api.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,15 @@ napi_add_env_cleanup_hook(napi_env env, napi_cleanup_hook fun, void* arg);
150150
NAPI_EXTERN napi_status
151151
napi_remove_env_cleanup_hook(napi_env env, napi_cleanup_hook fun, void* arg);
152152

153+
NAPI_EXTERN napi_status
154+
napi_open_callback_scope(napi_env env,
155+
napi_value resource_object,
156+
napi_async_context context,
157+
napi_callback_scope* result);
158+
159+
NAPI_EXTERN napi_status
160+
napi_close_callback_scope(napi_env env, napi_callback_scope scope);
161+
153162
#endif // NAPI_VERSION >= 3
154163

155164
#if NAPI_VERSION >= 4

packages/emnapi/include/node_api_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "js_native_api_types.h"
55

6+
typedef struct napi_callback_scope__* napi_callback_scope;
67
typedef struct napi_async_context__* napi_async_context;
78
typedef struct napi_async_work__* napi_async_work;
89

packages/emnapi/src/node.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ function __emnapi_async_destroy_js (async_context: Pointer<int64_t>): napi_statu
125125
return napi_status.napi_ok
126126
}
127127

128+
// https://github.com/nodejs/node-addon-api/pull/1283
129+
130+
function napi_open_callback_scope (env: napi_env, ignored: napi_value, async_context_handle: number, result: number): napi_status {
131+
throw new Error('napi_open_callback_scope has not been implemented yet')
132+
}
133+
134+
function napi_close_callback_scope (env: napi_env, scope: number): napi_status {
135+
throw new Error('napi_close_callback_scope has not been implemented yet')
136+
}
137+
128138
// @ts-expect-error
129139
function napi_make_callback (env: napi_env, async_context: Pointer<int64_t>, recv: napi_value, func: napi_value, argc: size_t, argv: Pointer<napi_value>, result: Pointer<napi_value>): napi_status {
130140
let i = 0
@@ -186,4 +196,6 @@ emnapiImplementInternal('_emnapi_node_make_callback', 'ipppppddp', __emnapi_node
186196
emnapiImplementInternal('_emnapi_async_init_js', 'ippp', __emnapi_async_init_js)
187197
emnapiImplementInternal('_emnapi_async_destroy_js', 'ip', __emnapi_async_destroy_js)
188198

199+
emnapiImplement('napi_open_callback_scope', 'ipppp', napi_open_callback_scope)
200+
emnapiImplement('napi_close_callback_scope', 'ipp', napi_close_callback_scope)
189201
emnapiImplement('napi_make_callback', 'ippppppp', napi_make_callback)

0 commit comments

Comments
 (0)