@@ -30,190 +30,61 @@ struct uv_loop_s; // Forward declaration.
30
30
31
31
typedef napi_value (NAPI_CDECL * napi_addon_register_func )(napi_env env ,
32
32
napi_value exports );
33
-
34
- #ifndef NAPI_EXPERIMENTAL
35
-
36
- typedef struct napi_module {
37
- int nm_version ;
38
- unsigned int nm_flags ;
39
- const char * nm_filename ;
40
- napi_addon_register_func nm_register_func ;
41
- const char * nm_modname ;
42
- void * nm_priv ;
43
- void * reserved [4 ];
44
- } napi_module ;
45
-
46
- #else
47
-
48
33
typedef int32_t (NAPI_CDECL * napi_addon_get_api_version_func )();
49
34
35
+ // Used by deprecated registration method napi_module_register.
50
36
typedef struct napi_module {
51
37
int nm_version ;
52
38
unsigned int nm_flags ;
53
39
const char * nm_filename ;
54
40
napi_addon_register_func nm_register_func ;
55
41
const char * nm_modname ;
56
42
void * nm_priv ;
57
- uintptr_t nm_api_version ;
58
- void * reserved [3 ];
43
+ void * reserved [4 ];
59
44
} napi_module ;
60
45
61
- #endif // NAPI_EXPERIMENTAL
62
-
63
46
#define NAPI_MODULE_VERSION 1
64
47
65
- #if defined(_MSC_VER )
66
- #if defined(__cplusplus )
67
- #define NAPI_C_CTOR (fn ) \
68
- static void NAPI_CDECL fn(void); \
69
- namespace { \
70
- struct fn##_ { \
71
- fn##_() { fn(); } \
72
- } fn##_v_; \
73
- } \
74
- static void NAPI_CDECL fn(void)
75
- #else // !defined(__cplusplus)
76
- #pragma section(".CRT$XCU", read)
77
- // The NAPI_C_CTOR macro defines a function fn that is called during CRT
78
- // initialization.
79
- // C does not support dynamic initialization of static variables and this code
80
- // simulates C++ behavior. Exporting the function pointer prevents it from being
81
- // optimized. See for details:
82
- // https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-initialization?view=msvc-170
83
- #define NAPI_C_CTOR (fn ) \
84
- static void NAPI_CDECL fn(void); \
85
- __declspec(dllexport, allocate(".CRT$XCU")) void(NAPI_CDECL * fn##_)(void) = \
86
- fn; \
87
- static void NAPI_CDECL fn(void)
88
- #endif // defined(__cplusplus)
89
- #else
90
- #define NAPI_C_CTOR (fn ) \
91
- static void fn(void) __attribute__((constructor)); \
92
- static void fn(void)
93
- #endif
94
-
95
- #ifndef NAPI_EXPERIMENTAL
96
-
97
- #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
98
- EXTERN_C_START \
99
- static napi_module _module = { \
100
- NAPI_MODULE_VERSION, \
101
- flags, \
102
- __FILE__, \
103
- regfunc, \
104
- #modname, \
105
- priv, \
106
- {0}, \
107
- }; \
108
- NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
109
- EXTERN_C_END
110
-
111
48
#define NAPI_MODULE_INITIALIZER_X (base , version ) \
112
49
NAPI_MODULE_INITIALIZER_X_HELPER(base, version)
113
50
#define NAPI_MODULE_INITIALIZER_X_HELPER (base , version ) base##version
114
51
115
52
#ifdef __wasm32__
116
- #define NAPI_WASM_INITIALIZER \
117
- NAPI_MODULE_INITIALIZER_X(napi_register_wasm_v, NAPI_MODULE_VERSION)
118
- #define NAPI_MODULE (modname , regfunc ) \
119
- EXTERN_C_START \
120
- NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
121
- napi_value exports) { \
122
- return regfunc(env, exports); \
123
- } \
124
- EXTERN_C_END
53
+ #define NAPI_MODULE_INITIALIZER_BASE napi_register_wasm_v
125
54
#else
126
- #define NAPI_MODULE (modname , regfunc ) \
127
- NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage)
128
- #endif
129
-
130
55
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
56
+ #endif
131
57
132
- #define NAPI_MODULE_INITIALIZER \
133
- NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
134
-
135
- #define NAPI_MODULE_INIT () \
136
- EXTERN_C_START \
137
- NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
138
- napi_value exports); \
139
- EXTERN_C_END \
140
- NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \
141
- napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
142
-
143
- #else
144
-
145
- #define NAPI_MODULE_XV (modname , regfunc , api_version , priv , flags ) \
146
- EXTERN_C_START \
147
- static napi_module _module = { \
148
- NAPI_MODULE_VERSION, \
149
- flags, \
150
- __FILE__, \
151
- regfunc, \
152
- #modname, \
153
- priv, \
154
- (uintptr_t)api_version, \
155
- {0}, \
156
- }; \
157
- NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
158
- EXTERN_C_END
159
-
160
- #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
161
- NAPI_MODULE_XV(modname, regfunc, NAPI_VERSION, priv, flags)
162
-
163
- // Not used. For backward compatibility only.
164
- #define NAPI_MODULE_INITIALIZER_X (base , version ) \
165
- NAPI_MODULE_INITIALIZER_X_HELPER(base, version)
166
- #define NAPI_MODULE_INITIALIZER_X_HELPER (base , version ) base##version
167
-
168
- #define NAPI_CONCAT_HELPER (text1 , text2 ) text1##text2
169
- #define NAPI_CONCAT (text1 , text2 ) NAPI_CONCAT_HELPER(text1, text2)
170
-
171
- #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
172
58
#define NAPI_MODULE_GET_API_VERSION_BASE napi_module_get_api_version_v
173
59
174
60
#define NAPI_MODULE_INITIALIZER \
175
- NAPI_CONCAT (NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
61
+ NAPI_MODULE_INITIALIZER_X (NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
176
62
177
63
#define NAPI_MODULE_GET_API_VERSION \
178
- NAPI_CONCAT(NAPI_MODULE_GET_API_VERSION_BASE, NAPI_MODULE_VERSION)
64
+ NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_GET_API_VERSION_BASE, \
65
+ NAPI_MODULE_VERSION)
179
66
180
67
#define NAPI_MODULE_INIT () \
181
68
EXTERN_C_START \
182
- NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
183
- napi_value exports); \
184
69
NAPI_MODULE_EXPORT int32_t NAPI_MODULE_GET_API_VERSION() { \
185
70
return NAPI_VERSION; \
186
71
} \
72
+ NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
73
+ napi_value exports); \
187
74
EXTERN_C_END \
188
75
napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
189
76
190
- #ifdef __wasm32__
191
-
192
- #define NAPI_WASM_INITIALIZER \
193
- NAPI_CONCAT(napi_register_wasm_v, NAPI_MODULE_VERSION)
194
- #define NAPI_WASM_GET_API_VERSION \
195
- NAPI_CONCAT(napi_wasm_get_api_version_v, NAPI_MODULE_VERSION)
196
- #define NAPI_MODULE (modname , regfunc ) \
197
- EXTERN_C_START \
198
- NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
199
- napi_value exports) { \
200
- return regfunc(env, exports); \
201
- } \
202
- NAPI_MODULE_EXPORT int32_t NAPI_WASM_GET_API_VERSION() { \
203
- return NAPI_VERSION; \
204
- } \
205
- EXTERN_C_END
206
- #else
207
-
208
77
#define NAPI_MODULE (modname , regfunc ) \
209
78
NAPI_MODULE_INIT() { return regfunc(env, exports); }
210
79
211
- #endif // __wasm32__
212
-
213
- #endif // NAPI_EXPERIMENTAL
80
+ // Deprecated. Use NAPI_MODULE.
81
+ #define NAPI_MODULE_X ( modname , regfunc , priv , flags ) \
82
+ NAPI_MODULE(modname, regfunc)
214
83
215
84
EXTERN_C_START
216
85
86
+ // Deprecated. Replaced by symbol-based registration defined by NAPI_MODULE
87
+ // and NAPI_MODULE_INIT macros.
217
88
NAPI_EXTERN void NAPI_CDECL napi_module_register (napi_module * mod );
218
89
219
90
NAPI_EXTERN NAPI_NO_RETURN void NAPI_CDECL
0 commit comments