Skip to content

Commit adc4664

Browse files
s/pure/nogc/g
1 parent d59d264 commit adc4664

File tree

19 files changed

+133
-132
lines changed

19 files changed

+133
-132
lines changed

src/js_native_api.h

+14-14
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
EXTERN_C_START
5151

5252
NAPI_EXTERN napi_status NAPI_CDECL napi_get_last_error_info(
53-
node_api_pure_env env, const napi_extended_error_info** result);
53+
node_api_nogc_env env, const napi_extended_error_info** result);
5454

5555
// Getters for defined singletons
5656
NAPI_EXTERN napi_status NAPI_CDECL napi_get_undefined(napi_env env,
@@ -97,15 +97,15 @@ NAPI_EXTERN napi_status NAPI_CDECL
9797
node_api_create_external_string_latin1(napi_env env,
9898
char* str,
9999
size_t length,
100-
node_api_pure_finalize finalize_callback,
100+
node_api_nogc_finalize finalize_callback,
101101
void* finalize_hint,
102102
napi_value* result,
103103
bool* copied);
104104
NAPI_EXTERN napi_status NAPI_CDECL
105105
node_api_create_external_string_utf16(napi_env env,
106106
char16_t* str,
107107
size_t length,
108-
node_api_pure_finalize finalize_callback,
108+
node_api_nogc_finalize finalize_callback,
109109
void* finalize_hint,
110110
napi_value* result,
111111
bool* copied);
@@ -289,7 +289,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env,
289289

290290
// Gets all callback info in a single call. (Ugly, but faster.)
291291
NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info(
292-
node_api_pure_env env, // [in] NAPI environment handle
292+
node_api_nogc_env env, // [in] Node-API environment handle
293293
napi_callback_info cbinfo, // [in] Opaque callback-info handle
294294
size_t* argc, // [in-out] Specifies the size of the provided argv array
295295
// and receives the actual count of args.
@@ -313,7 +313,7 @@ napi_define_class(napi_env env,
313313
NAPI_EXTERN napi_status NAPI_CDECL napi_wrap(napi_env env,
314314
napi_value js_object,
315315
void* native_object,
316-
node_api_pure_finalize finalize_cb,
316+
node_api_nogc_finalize finalize_cb,
317317
void* finalize_hint,
318318
napi_ref* result);
319319
NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env,
@@ -325,7 +325,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
325325
NAPI_EXTERN napi_status NAPI_CDECL
326326
napi_create_external(napi_env env,
327327
void* data,
328-
node_api_pure_finalize finalize_cb,
328+
node_api_nogc_finalize finalize_cb,
329329
void* finalize_hint,
330330
napi_value* result);
331331
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env,
@@ -424,7 +424,7 @@ NAPI_EXTERN napi_status NAPI_CDECL
424424
napi_create_external_arraybuffer(napi_env env,
425425
void* external_data,
426426
size_t byte_length,
427-
node_api_pure_finalize finalize_cb,
427+
node_api_nogc_finalize finalize_cb,
428428
void* finalize_hint,
429429
napi_value* result);
430430
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
@@ -466,7 +466,7 @@ napi_get_dataview_info(napi_env env,
466466
size_t* byte_offset);
467467

468468
// version management
469-
NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_pure_env env,
469+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_nogc_env env,
470470
uint32_t* result);
471471

472472
// Promises
@@ -490,7 +490,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
490490

491491
// Memory management
492492
NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
493-
node_api_pure_env env, int64_t change_in_bytes, int64_t* adjusted_value);
493+
node_api_nogc_env env, int64_t change_in_bytes, int64_t* adjusted_value);
494494

495495
#if NAPI_VERSION >= 5
496496

@@ -512,7 +512,7 @@ NAPI_EXTERN napi_status NAPI_CDECL
512512
napi_add_finalizer(napi_env env,
513513
napi_value js_object,
514514
void* finalize_data,
515-
node_api_pure_finalize finalize_cb,
515+
node_api_nogc_finalize finalize_cb,
516516
void* finalize_hint,
517517
napi_ref* result);
518518

@@ -521,7 +521,7 @@ napi_add_finalizer(napi_env env,
521521
#ifdef NAPI_EXPERIMENTAL
522522

523523
NAPI_EXTERN napi_status NAPI_CDECL
524-
node_api_post_finalizer(node_api_pure_env env,
524+
node_api_post_finalizer(node_api_nogc_env env,
525525
napi_finalize finalize_cb,
526526
void* finalize_data,
527527
void* finalize_hint);
@@ -566,12 +566,12 @@ napi_get_all_property_names(napi_env env,
566566

567567
// Instance data
568568
NAPI_EXTERN napi_status NAPI_CDECL
569-
napi_set_instance_data(node_api_pure_env env,
569+
napi_set_instance_data(node_api_nogc_env env,
570570
void* data,
571-
node_api_pure_finalize finalize_cb,
571+
node_api_nogc_finalize finalize_cb,
572572
void* finalize_hint);
573573

574-
NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(node_api_pure_env env,
574+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(node_api_nogc_env env,
575575
void** data);
576576
#endif // NAPI_VERSION >= 6
577577

src/js_native_api_types.h

+26-25
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,31 @@ typedef uint16_t char16_t;
2323
// typedef undefined structs instead of void* for compile time type safety
2424
typedef struct napi_env__* napi_env;
2525

26-
// We need to mark APIs which are "pure", meaning that they do not interact
27-
// with the JS engine, and can therefore be called synchronously from a
28-
// finalizer that itself runs synchronously during garbage collection. Such
29-
// "pure" APIs can receive either a `napi_env` or a `node_api_pure_env` as
30-
// their first parameter, because we should be able to also call them during
31-
// normal, non-garbage-collecting operations, whereas "non-pure" APIs can only
32-
// receive a `napi_env` as their first parameter, because we must not call them
33-
// during garbage collection. In lieu of inheritance, we use the properties of
34-
// the const qualifier to accomplish this, because both a const and a non-const
35-
// value can be passed to an API expecting a const value, but only a non-const
36-
// value can be passed to an API expecting a non-const value.
26+
// We need to mark APIs which can be called during garbage collection (GC),
27+
// meaning that they do not affect the state of the JS engine, and can
28+
// therefore be called synchronously from a finalizer that itself runs
29+
// synchronously during GC. Such APIs can receive either a `napi_env` or a
30+
// `node_api_nogc_env` as their first parameter, because we should be able to
31+
// also call them during normal, non-garbage-collecting operations, whereas
32+
// APIs that affect the state of the JS engine can only receive a `napi_env` as
33+
// their first parameter, because we must not call them during GC. In lieu of
34+
// inheritance, we use the properties of the const qualifier to accomplish
35+
// this, because both a const and a non-const value can be passed to an API
36+
// expecting a const value, but only a non-const value can be passed to an API
37+
// expecting a non-const value.
3738
//
3839
// In conjunction with appropriate CFLAGS to warn us if we're passing a const
39-
// (pure) environment into an API that expects a non-const (non-pure)
40-
// environment, and the definition of pure finalizer function pointer types
41-
// below, which receive a pure environment as their first parameter, and can
42-
// thus only call pure APIs (unless the user explicitly casts the environment),
43-
// we achieve the ability to ensure at compile time that we do not call non-
44-
// pure APIs from a synchronous (pure) finalizer.
45-
#if defined(NAPI_EXPERIMENTAL) && defined(NODE_API_EXPERIMENTAL_PURE_ENV)
46-
typedef const struct napi_env__* node_api_pure_env;
40+
// (nogc) environment into an API that expects a non-const environment, and the
41+
// definition of pure finalizer function pointer types below, which receive a
42+
// nogc environment as their first parameter, and can thus only call nogc APIs
43+
// (unless the user explicitly casts the environment), we achieve the ability
44+
// to ensure at compile time that we do not call APIs that affect the state of
45+
// the JS engine from a synchronous (nogc) finalizer.
46+
#if defined(NAPI_EXPERIMENTAL) && defined(NODE_API_EXPERIMENTAL_NOGC_ENV)
47+
typedef const struct napi_env__* node_api_nogc_env;
4748
#else
48-
typedef struct napi_env__* node_api_pure_env;
49-
#endif // NAPI_EXPERIMENTAL && NODE_API_EXPERIMENTAL_PURE_ENV
49+
typedef struct napi_env__* node_api_nogc_env;
50+
#endif // NAPI_EXPERIMENTAL && NODE_API_EXPERIMENTAL_NOGC_ENV
5051

5152
typedef struct napi_value__* napi_value;
5253
typedef struct napi_ref__* napi_ref;
@@ -141,13 +142,13 @@ typedef napi_value(NAPI_CDECL* napi_callback)(napi_env env,
141142
typedef void(NAPI_CDECL* napi_finalize)(napi_env env,
142143
void* finalize_data,
143144
void* finalize_hint);
144-
#if defined(NAPI_EXPERIMENTAL) && defined(NODE_API_EXPERIMENTAL_PURE_ENV)
145-
typedef void(NAPI_CDECL* node_api_pure_finalize)(node_api_pure_env env,
145+
#if defined(NAPI_EXPERIMENTAL) && defined(NODE_API_EXPERIMENTAL_NOGC_ENV)
146+
typedef void(NAPI_CDECL* node_api_nogc_finalize)(node_api_nogc_env env,
146147
void* finalize_data,
147148
void* finalize_hint);
148149
#else
149-
typedef napi_finalize node_api_pure_finalize;
150-
#endif // NAPI_EXPERIMENTAL && NODE_API_EXPERIMENTAL_PURE_ENV
150+
typedef napi_finalize node_api_nogc_finalize;
151+
#endif // NAPI_EXPERIMENTAL && NODE_API_EXPERIMENTAL_NOGC_ENV
151152

152153
typedef struct {
153154
// One of utf8name or name should be NULL.

src/js_native_api_v8.cc

+23-23
Original file line numberDiff line numberDiff line change
@@ -849,8 +849,8 @@ static const char* error_messages[] = {
849849
};
850850

851851
napi_status NAPI_CDECL napi_get_last_error_info(
852-
node_api_pure_env pure_env, const napi_extended_error_info** result) {
853-
napi_env env = const_cast<napi_env>(pure_env);
852+
node_api_nogc_env nogc_env, const napi_extended_error_info** result) {
853+
napi_env env = const_cast<napi_env>(nogc_env);
854854
CHECK_ENV(env);
855855
CHECK_ARG(env, result);
856856

@@ -1602,12 +1602,12 @@ napi_status NAPI_CDECL node_api_create_external_string_latin1(
16021602
napi_env env,
16031603
char* str,
16041604
size_t length,
1605-
node_api_pure_finalize pure_finalize_callback,
1605+
node_api_nogc_finalize nogc_finalize_callback,
16061606
void* finalize_hint,
16071607
napi_value* result,
16081608
bool* copied) {
16091609
napi_finalize finalize_callback =
1610-
reinterpret_cast<napi_finalize>(pure_finalize_callback);
1610+
reinterpret_cast<napi_finalize>(nogc_finalize_callback);
16111611
return v8impl::NewExternalString(
16121612
env,
16131613
str,
@@ -1631,12 +1631,12 @@ napi_status NAPI_CDECL node_api_create_external_string_utf16(
16311631
napi_env env,
16321632
char16_t* str,
16331633
size_t length,
1634-
node_api_pure_finalize pure_finalize_callback,
1634+
node_api_nogc_finalize nogc_finalize_callback,
16351635
void* finalize_hint,
16361636
napi_value* result,
16371637
bool* copied) {
16381638
napi_finalize finalize_callback =
1639-
reinterpret_cast<napi_finalize>(pure_finalize_callback);
1639+
reinterpret_cast<napi_finalize>(nogc_finalize_callback);
16401640
return v8impl::NewExternalString(
16411641
env,
16421642
str,
@@ -1993,7 +1993,7 @@ napi_status NAPI_CDECL napi_get_null(napi_env env, napi_value* result) {
19931993

19941994
// Gets all callback info in a single call. (Ugly, but faster.)
19951995
napi_status NAPI_CDECL napi_get_cb_info(
1996-
node_api_pure_env env, // [in] NAPI environment handle
1996+
node_api_nogc_env env, // [in] NAPI environment handle
19971997
napi_callback_info cbinfo, // [in] Opaque callback-info handle
19981998
size_t* argc, // [in-out] Specifies the size of the provided argv array
19991999
// and receives the actual count of args.
@@ -2533,10 +2533,10 @@ GEN_COERCE_FUNCTION(STRING, String, string)
25332533
napi_status NAPI_CDECL napi_wrap(napi_env env,
25342534
napi_value js_object,
25352535
void* native_object,
2536-
node_api_pure_finalize pure_finalize_cb,
2536+
node_api_nogc_finalize nogc_finalize_cb,
25372537
void* finalize_hint,
25382538
napi_ref* result) {
2539-
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(pure_finalize_cb);
2539+
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(nogc_finalize_cb);
25402540
return v8impl::Wrap(
25412541
env, js_object, native_object, finalize_cb, finalize_hint, result);
25422542
}
@@ -2556,10 +2556,10 @@ napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
25562556
napi_status NAPI_CDECL
25572557
napi_create_external(napi_env env,
25582558
void* data,
2559-
node_api_pure_finalize pure_finalize_cb,
2559+
node_api_nogc_finalize nogc_finalize_cb,
25602560
void* finalize_hint,
25612561
napi_value* result) {
2562-
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(pure_finalize_cb);
2562+
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(nogc_finalize_cb);
25632563
NAPI_PREAMBLE(env);
25642564
CHECK_ARG(env, result);
25652565

@@ -2992,7 +2992,7 @@ napi_status NAPI_CDECL
29922992
napi_create_external_arraybuffer(napi_env env,
29932993
void* external_data,
29942994
size_t byte_length,
2995-
node_api_pure_finalize finalize_cb,
2995+
node_api_nogc_finalize finalize_cb,
29962996
void* finalize_hint,
29972997
napi_value* result) {
29982998
// The API contract here is that the cleanup function runs on the JS thread,
@@ -3262,7 +3262,7 @@ napi_status NAPI_CDECL napi_get_dataview_info(napi_env env,
32623262
return napi_clear_last_error(env);
32633263
}
32643264

3265-
napi_status NAPI_CDECL napi_get_version(node_api_pure_env env,
3265+
napi_status NAPI_CDECL napi_get_version(node_api_nogc_env env,
32663266
uint32_t* result) {
32673267
CHECK_ENV(env);
32683268
CHECK_ARG(env, result);
@@ -3387,12 +3387,12 @@ napi_status NAPI_CDECL
33873387
napi_add_finalizer(napi_env env,
33883388
napi_value js_object,
33893389
void* finalize_data,
3390-
node_api_pure_finalize pure_finalize_cb,
3390+
node_api_nogc_finalize nogc_finalize_cb,
33913391
void* finalize_hint,
33923392
napi_ref* result) {
33933393
// Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
33943394
// JS exceptions.
3395-
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(pure_finalize_cb);
3395+
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(nogc_finalize_cb);
33963396
CHECK_ENV(env);
33973397
env->CheckGCAccess();
33983398
CHECK_ARG(env, js_object);
@@ -3417,11 +3417,11 @@ napi_add_finalizer(napi_env env,
34173417

34183418
#ifdef NAPI_EXPERIMENTAL
34193419

3420-
napi_status NAPI_CDECL node_api_post_finalizer(node_api_pure_env pure_env,
3420+
napi_status NAPI_CDECL node_api_post_finalizer(node_api_nogc_env nogc_env,
34213421
napi_finalize finalize_cb,
34223422
void* finalize_data,
34233423
void* finalize_hint) {
3424-
napi_env env = const_cast<napi_env>(pure_env);
3424+
napi_env env = const_cast<napi_env>(nogc_env);
34253425
CHECK_ENV(env);
34263426
env->EnqueueFinalizer(v8impl::TrackedFinalizer::New(
34273427
env, finalize_cb, finalize_data, finalize_hint));
@@ -3430,7 +3430,7 @@ napi_status NAPI_CDECL node_api_post_finalizer(node_api_pure_env pure_env,
34303430

34313431
#endif
34323432

3433-
napi_status NAPI_CDECL napi_adjust_external_memory(node_api_pure_env env,
3433+
napi_status NAPI_CDECL napi_adjust_external_memory(node_api_nogc_env env,
34343434
int64_t change_in_bytes,
34353435
int64_t* adjusted_value) {
34363436
CHECK_ENV(env);
@@ -3443,12 +3443,12 @@ napi_status NAPI_CDECL napi_adjust_external_memory(node_api_pure_env env,
34433443
}
34443444

34453445
napi_status NAPI_CDECL
3446-
napi_set_instance_data(node_api_pure_env pure_env,
3446+
napi_set_instance_data(node_api_nogc_env nogc_env,
34473447
void* data,
3448-
node_api_pure_finalize pure_finalize_cb,
3448+
node_api_nogc_finalize nogc_finalize_cb,
34493449
void* finalize_hint) {
3450-
napi_env env = const_cast<napi_env>(pure_env);
3451-
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(pure_finalize_cb);
3450+
napi_env env = const_cast<napi_env>(nogc_env);
3451+
napi_finalize finalize_cb = reinterpret_cast<napi_finalize>(nogc_finalize_cb);
34523452
CHECK_ENV(env);
34533453

34543454
v8impl::RefBase* old_data = static_cast<v8impl::RefBase*>(env->instance_data);
@@ -3464,7 +3464,7 @@ napi_set_instance_data(node_api_pure_env pure_env,
34643464
return napi_clear_last_error(env);
34653465
}
34663466

3467-
napi_status NAPI_CDECL napi_get_instance_data(node_api_pure_env env,
3467+
napi_status NAPI_CDECL napi_get_instance_data(node_api_nogc_env env,
34683468
void** data) {
34693469
CHECK_ENV(env);
34703470
CHECK_ARG(env, data);

src/js_native_api_v8.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "js_native_api_types.h"
55
#include "js_native_api_v8_internals.h"
66

7-
inline napi_status napi_clear_last_error(node_api_pure_env env);
7+
inline napi_status napi_clear_last_error(node_api_nogc_env env);
88

99
namespace v8impl {
1010

@@ -172,20 +172,20 @@ struct napi_env__ {
172172
virtual ~napi_env__() = default;
173173
};
174174

175-
inline napi_status napi_clear_last_error(node_api_pure_env pure_env) {
176-
napi_env env = const_cast<napi_env>(pure_env);
175+
inline napi_status napi_clear_last_error(node_api_nogc_env nogc_env) {
176+
napi_env env = const_cast<napi_env>(nogc_env);
177177
env->last_error.error_code = napi_ok;
178178
env->last_error.engine_error_code = 0;
179179
env->last_error.engine_reserved = nullptr;
180180
env->last_error.error_message = nullptr;
181181
return napi_ok;
182182
}
183183

184-
inline napi_status napi_set_last_error(node_api_pure_env pure_env,
184+
inline napi_status napi_set_last_error(node_api_nogc_env nogc_env,
185185
napi_status error_code,
186186
uint32_t engine_error_code = 0,
187187
void* engine_reserved = nullptr) {
188-
napi_env env = const_cast<napi_env>(pure_env);
188+
napi_env env = const_cast<napi_env>(nogc_env);
189189
env->last_error.error_code = error_code;
190190
env->last_error.engine_error_code = engine_error_code;
191191
env->last_error.engine_reserved = engine_reserved;

0 commit comments

Comments
 (0)