Skip to content

Commit

Permalink
NAPI_MODULE to use napi_module_register_by_symbol
Browse files Browse the repository at this point in the history
  • Loading branch information
vmoroz committed Dec 3, 2022
1 parent a99ecb0 commit 87acd9b
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 55 deletions.
2 changes: 1 addition & 1 deletion src/js_native_api_v8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2496,7 +2496,7 @@ napi_status NAPI_CDECL napi_create_reference(napi_env env,
CHECK_ARG(env, result);

v8::Local<v8::Value> v8_value = v8impl::V8LocalValueFromJsValue(value);
if (env->node_api_version > 8) {
if (env->node_api_version <= 8) {
if (!(v8_value->IsObject() || v8_value->IsFunction() ||
v8_value->IsSymbol())) {
return napi_set_last_error(env, napi_invalid_arg);
Expand Down
11 changes: 6 additions & 5 deletions src/node_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -603,11 +603,12 @@ static void napi_module_register_cb(v8::Local<v8::Object> exports,
static_cast<const napi_module*>(priv)->nm_api_version_func);
}

void napi_module_register_by_symbol(v8::Local<v8::Object> exports,
v8::Local<v8::Value> module,
v8::Local<v8::Context> context,
napi_addon_register_func init,
napi_addon_api_version_func get_api_version) {
void napi_module_register_by_symbol(
v8::Local<v8::Object> exports,
v8::Local<v8::Value> module,
v8::Local<v8::Context> context,
napi_addon_register_func init,
napi_addon_api_version_func get_api_version) {
node::Environment* node_env = node::Environment::GetCurrent(context);
std::string module_filename = "";
if (init == nullptr) {
Expand Down
49 changes: 25 additions & 24 deletions src/node_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ struct uv_loop_s; // Forward declaration.
typedef napi_value(NAPI_CDECL* napi_addon_register_func)(napi_env env,
napi_value exports);

typedef napi_value(NAPI_CDECL* napi_addon_api_version_func)();
typedef int32_t(NAPI_CDECL* napi_addon_api_version_func)();

typedef struct napi_module {
int nm_version;
Expand Down Expand Up @@ -88,19 +88,20 @@ typedef struct napi_module {
apiversionfunc, \
{0}, \
}; \
NAPI_C_CTOR(_register_##modname) { \
napi_module_register(&_module); \
} \
NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
EXTERN_C_END

#define NAPI_MODULE_INITIALIZER_X(base, version) \
NAPI_MODULE_INITIALIZER_X_HELPER(base, version)
#define NAPI_MODULE_INITIALIZER_X_HELPER(base, version) base##version
#define NAPI_CONCAT_HELPER(text1, text2) text1##text2
#define NAPI_CONCAT(text1, text2) NAPI_CONCAT_HELPER(text1, text2)

#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
#define NAPI_MODULE_API_VERSION_BASE napi_module_api_version_v

#define NAPI_MODULE_INITIALIZER \
NAPI_CONCAT(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)

#define NAPI_MODULE_API_VERSION \
NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_API_VERSION_BASE, NAPI_MODULE_VERSION)
NAPI_CONCAT(NAPI_MODULE_API_VERSION_BASE, NAPI_MODULE_VERSION)

#define NAPI_MODULE_X(modname, regfunc, priv, flags) \
EXTERN_C_START \
Expand All @@ -110,11 +111,21 @@ typedef struct napi_module {
EXTERN_C_END \
NAPI_MODULE_XV(modname, regfunc, NAPI_MODULE_API_VERSION, priv, flags)

#define NAPI_MODULE_INIT() \
EXTERN_C_START \
NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
napi_value exports); \
NAPI_MODULE_EXPORT int32_t NAPI_MODULE_API_VERSION() { \
return NAPI_VERSION; \
} \
EXTERN_C_END \
napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)

#ifdef __wasm32__
#define NAPI_WASM_INITIALIZER \
NAPI_MODULE_INITIALIZER_X(napi_register_wasm_v, NAPI_MODULE_VERSION)
NAPI_CONCAT(napi_register_wasm_v, NAPI_MODULE_VERSION)
#define NAPI_WASM_API_VERSION \
NAPI_MODULE_INITIALIZER_X(napi_wasm_api_version_v, NAPI_MODULE_VERSION)
NAPI_CONCAT(napi_wasm_api_version_v, NAPI_MODULE_VERSION)
#define NAPI_MODULE(modname, regfunc) \
EXTERN_C_START \
NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
Expand All @@ -127,21 +138,11 @@ typedef struct napi_module {
EXTERN_C_END
#else
#define NAPI_MODULE(modname, regfunc) \
NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage)
#endif

#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v

#define NAPI_MODULE_INITIALIZER \
NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
NAPI_MODULE_INIT() { \
return regfunc(env, exports); \
}

#define NAPI_MODULE_INIT() \
EXTERN_C_START \
NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
napi_value exports); \
EXTERN_C_END \
NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \
napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
#endif

EXTERN_C_START

Expand Down
2 changes: 1 addition & 1 deletion src/node_binding.cc
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) {
module,
context,
napi_callback,
GetNapiAddonApiVersionCallback());
GetNapiAddonApiVersionCallback(dlib));
return true;
} else {
mp = dlib->GetSavedModuleFromGlobalHandleMap();
Expand Down
10 changes: 6 additions & 4 deletions src/node_binding.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ static_assert(static_cast<int>(NM_F_LINKED) ==
nullptr}; \
void _register_##modname() { node_module_register(&_module); }

void napi_module_register_by_symbol(v8::Local<v8::Object> exports,
v8::Local<v8::Value> module,
v8::Local<v8::Context> context,
napi_addon_register_func init);
void napi_module_register_by_symbol(
v8::Local<v8::Object> exports,
v8::Local<v8::Value> module,
v8::Local<v8::Context> context,
napi_addon_register_func init,
napi_addon_api_version_func get_api_version);

namespace node {

Expand Down
2 changes: 1 addition & 1 deletion test/cctest/test_js_native_api_v8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ TEST_F(JsNativeApiV8Test, Reference) {
Local<Object> module_obj = Object::New(isolate_);
Local<Object> exports_obj = Object::New(isolate_);
napi_module_register_by_symbol(
exports_obj, module_obj, env->context(), init);
exports_obj, module_obj, env->context(), init, nullptr);
ASSERT_NE(addon_env, nullptr);
node_napi_env internal_env = reinterpret_cast<node_napi_env>(addon_env);
EXPECT_EQ(internal_env->node_env(), env);
Expand Down
3 changes: 2 additions & 1 deletion test/cctest/test_node_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ TEST_F(NodeApiTest, CreateNodeApiEnv) {
};
Local<Object> module_obj = Object::New(isolate_);
Local<Object> exports_obj = Object::New(isolate_);
napi_module_register_by_symbol(exports_obj, module_obj, env->context(), init);
napi_module_register_by_symbol(
exports_obj, module_obj, env->context(), init, nullptr);
ASSERT_NE(addon_env, nullptr);
node_napi_env internal_env = reinterpret_cast<node_napi_env>(addon_env);
EXPECT_EQ(internal_env->node_env(), env);
Expand Down
8 changes: 0 additions & 8 deletions test/node-api/test_null_init/binding.gyp

This file was deleted.

7 changes: 0 additions & 7 deletions test/node-api/test_null_init/test.js

This file was deleted.

3 changes: 0 additions & 3 deletions test/node-api/test_null_init/test_null_init.c

This file was deleted.

0 comments on commit 87acd9b

Please sign in to comment.