@@ -31,6 +31,7 @@ struct uv_loop_s; // Forward declaration.
31
31
typedef napi_value (NAPI_CDECL* napi_addon_register_func)(napi_env env,
32
32
napi_value exports);
33
33
34
+ // Used by deprecated registration method napi_module_register.
34
35
typedef struct napi_module {
35
36
int nm_version;
36
37
unsigned int nm_flags;
@@ -43,70 +44,15 @@ typedef struct napi_module {
43
44
44
45
#define NAPI_MODULE_VERSION 1
45
46
46
- #if defined(_MSC_VER )
47
- #if defined(__cplusplus )
48
- #define NAPI_C_CTOR (fn ) \
49
- static void NAPI_CDECL fn(void); \
50
- namespace { \
51
- struct fn##_ { \
52
- fn##_() { fn(); } \
53
- } fn##_v_; \
54
- } \
55
- static void NAPI_CDECL fn(void)
56
- #else // !defined(__cplusplus)
57
- #pragma section(".CRT$XCU", read)
58
- // The NAPI_C_CTOR macro defines a function fn that is called during CRT
59
- // initialization.
60
- // C does not support dynamic initialization of static variables and this code
61
- // simulates C++ behavior. Exporting the function pointer prevents it from being
62
- // optimized. See for details:
63
- // https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-initialization?view=msvc-170
64
- #define NAPI_C_CTOR (fn ) \
65
- static void NAPI_CDECL fn(void); \
66
- __declspec(dllexport, allocate(".CRT$XCU")) void(NAPI_CDECL * fn##_)(void) = \
67
- fn; \
68
- static void NAPI_CDECL fn(void)
69
- #endif // defined(__cplusplus)
70
- #else
71
- #define NAPI_C_CTOR (fn ) \
72
- static void fn(void) __attribute__((constructor)); \
73
- static void fn(void)
74
- #endif
75
-
76
- #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
77
- EXTERN_C_START \
78
- static napi_module _module = { \
79
- NAPI_MODULE_VERSION, \
80
- flags, \
81
- __FILE__, \
82
- regfunc, \
83
- #modname, \
84
- priv, \
85
- {0}, \
86
- }; \
87
- NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
88
- EXTERN_C_END
89
-
90
47
#define NAPI_MODULE_INITIALIZER_X (base, version ) \
91
48
NAPI_MODULE_INITIALIZER_X_HELPER (base, version)
92
49
#define NAPI_MODULE_INITIALIZER_X_HELPER (base, version ) base##version
93
50
94
51
#ifdef __wasm32__
95
- #define NAPI_WASM_INITIALIZER \
96
- NAPI_MODULE_INITIALIZER_X(napi_register_wasm_v, NAPI_MODULE_VERSION)
97
- #define NAPI_MODULE (modname , regfunc ) \
98
- EXTERN_C_START \
99
- NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
100
- napi_value exports) { \
101
- return regfunc(env, exports); \
102
- } \
103
- EXTERN_C_END
52
+ #define NAPI_MODULE_INITIALIZER_BASE napi_register_wasm_v
104
53
#else
105
- #define NAPI_MODULE (modname , regfunc ) \
106
- NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage)
107
- #endif
108
-
109
54
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
55
+ #endif
110
56
111
57
#define NAPI_MODULE_INITIALIZER \
112
58
NAPI_MODULE_INITIALIZER_X (NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
@@ -116,12 +62,24 @@ typedef struct napi_module {
116
62
NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER (napi_env env, \
117
63
napi_value exports); \
118
64
EXTERN_C_END \
119
- NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \
120
65
napi_value NAPI_MODULE_INITIALIZER (napi_env env, napi_value exports)
121
66
67
+ #define NAPI_MODULE (modname, regfunc ) \
68
+ NAPI_MODULE_INIT () { return regfunc (env, exports); }
69
+
70
+ // Deprecated. Use NAPI_MODULE.
71
+ #define NAPI_MODULE_X (modname, regfunc, priv, flags ) \
72
+ NAPI_MODULE (modname, regfunc)
73
+
122
74
EXTERN_C_START
123
75
124
- NAPI_EXTERN void NAPI_CDECL napi_module_register (napi_module * mod );
76
+ // Deprecated. Replaced by symbol-based registration defined by NAPI_MODULE
77
+ // and NAPI_MODULE_INIT macros.
78
+ #if defined(__cplusplus) && __cplusplus >= 201402L
79
+ [[deprecated]]
80
+ #endif
81
+ NAPI_EXTERN void NAPI_CDECL
82
+ napi_module_register (napi_module* mod);
125
83
126
84
NAPI_EXTERN NAPI_NO_RETURN void NAPI_CDECL
127
85
napi_fatal_error (const char * location,
0 commit comments