@@ -31,7 +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
- typedef int32_t ( NAPI_CDECL * napi_addon_api_version_func )();
34
+ #ifndef NAPI_EXPERIMENTAL
35
35
36
36
typedef struct napi_module {
37
37
int nm_version ;
@@ -40,10 +40,26 @@ typedef struct napi_module {
40
40
napi_addon_register_func nm_register_func ;
41
41
const char * nm_modname ;
42
42
void * nm_priv ;
43
- napi_addon_api_version_func nm_api_version_func ;
43
+ void * reserved [4 ];
44
+ } napi_module ;
45
+
46
+ #else
47
+
48
+ typedef int32_t (NAPI_CDECL * napi_addon_get_api_version_func )();
49
+
50
+ typedef struct napi_module {
51
+ int nm_version ;
52
+ unsigned int nm_flags ;
53
+ const char * nm_filename ;
54
+ napi_addon_register_func nm_register_func ;
55
+ const char * nm_modname ;
56
+ void * nm_priv ;
57
+ uintptr_t nm_api_version ;
44
58
void * reserved [3 ];
45
59
} napi_module ;
46
60
61
+ #endif // NAPI_EXPERIMENTAL
62
+
47
63
#define NAPI_MODULE_VERSION 1
48
64
49
65
#if defined(_MSC_VER )
@@ -76,7 +92,57 @@ typedef struct napi_module {
76
92
static void fn(void)
77
93
#endif
78
94
79
- #define NAPI_MODULE_XV (modname , regfunc , apiversionfunc , priv , flags ) \
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
+ #define NAPI_MODULE_INITIALIZER_X (base , version ) \
112
+ NAPI_MODULE_INITIALIZER_X_HELPER(base, version)
113
+ #define NAPI_MODULE_INITIALIZER_X_HELPER (base , version ) base##version
114
+
115
+ #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
125
+ #else
126
+ #define NAPI_MODULE (modname , regfunc ) \
127
+ NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage)
128
+ #endif
129
+
130
+ #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
131
+
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 ) \
80
146
EXTERN_C_START \
81
147
static napi_module _module = { \
82
148
NAPI_MODULE_VERSION, \
@@ -85,64 +151,63 @@ typedef struct napi_module {
85
151
regfunc, \
86
152
#modname, \
87
153
priv, \
88
- apiversionfunc, \
154
+ (uintptr_t)api_version, \
89
155
{0}, \
90
156
}; \
91
157
NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
92
158
EXTERN_C_END
93
159
160
+ #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
161
+ NAPI_MODULE_XV(modname, regfunc, NAPI_VERSION, priv, flags)
162
+
94
163
#define NAPI_CONCAT_HELPER (text1 , text2 ) text1##text2
95
164
#define NAPI_CONCAT (text1 , text2 ) NAPI_CONCAT_HELPER(text1, text2)
96
165
97
166
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
98
- #define NAPI_MODULE_API_VERSION_BASE napi_module_api_version_v
167
+ #define NAPI_MODULE_GET_API_VERSION_BASE napi_module_get_api_version_v
99
168
100
169
#define NAPI_MODULE_INITIALIZER \
101
170
NAPI_CONCAT(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
102
171
103
- #define NAPI_MODULE_API_VERSION \
104
- NAPI_CONCAT(NAPI_MODULE_API_VERSION_BASE, NAPI_MODULE_VERSION)
105
-
106
- #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
107
- EXTERN_C_START \
108
- NAPI_MODULE_EXPORT int32_t NAPI_MODULE_API_VERSION() { \
109
- return NAPI_VERSION; \
110
- } \
111
- EXTERN_C_END \
112
- NAPI_MODULE_XV(modname, regfunc, NAPI_MODULE_API_VERSION, priv, flags)
172
+ #define NAPI_MODULE_GET_API_VERSION \
173
+ NAPI_CONCAT(NAPI_MODULE_GET_API_VERSION_BASE, NAPI_MODULE_VERSION)
113
174
114
175
#define NAPI_MODULE_INIT () \
115
176
EXTERN_C_START \
116
177
NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
117
178
napi_value exports); \
118
- NAPI_MODULE_EXPORT int32_t NAPI_MODULE_API_VERSION () { \
179
+ NAPI_MODULE_EXPORT int32_t NAPI_MODULE_GET_API_VERSION () { \
119
180
return NAPI_VERSION; \
120
181
} \
121
182
EXTERN_C_END \
122
183
napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
123
184
124
185
#ifdef __wasm32__
186
+
125
187
#define NAPI_WASM_INITIALIZER \
126
188
NAPI_CONCAT(napi_register_wasm_v, NAPI_MODULE_VERSION)
127
- #define NAPI_WASM_API_VERSION \
128
- NAPI_CONCAT(napi_wasm_api_version_v , NAPI_MODULE_VERSION)
189
+ #define NAPI_WASM_GET_API_VERSION \
190
+ NAPI_CONCAT(napi_wasm_get_api_version_v , NAPI_MODULE_VERSION)
129
191
#define NAPI_MODULE (modname , regfunc ) \
130
192
EXTERN_C_START \
131
193
NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
132
194
napi_value exports) { \
133
195
return regfunc(env, exports); \
134
196
} \
135
- NAPI_MODULE_EXPORT int32_t NAPI_WASM_API_VERSION () { \
197
+ NAPI_MODULE_EXPORT int32_t NAPI_WASM_GET_API_VERSION () { \
136
198
return NAPI_VERSION; \
137
199
} \
138
200
EXTERN_C_END
139
201
#else
202
+
140
203
#define NAPI_MODULE (modname , regfunc ) \
141
204
NAPI_MODULE_INIT() { \
142
205
return regfunc(env, exports); \
143
206
}
144
207
145
- #endif
208
+ #endif // __wasm32__
209
+
210
+ #endif // NAPI_EXPERIMENTAL
146
211
147
212
EXTERN_C_START
148
213
0 commit comments