@@ -31,7 +31,7 @@ struct uv_loop_s; // Forward declaration.
3131typedef napi_value (NAPI_CDECL * napi_addon_register_func )(napi_env env ,
3232 napi_value exports );
3333
34- typedef int32_t ( NAPI_CDECL * napi_addon_api_version_func )();
34+ #ifndef NAPI_EXPERIMENTAL
3535
3636typedef struct napi_module {
3737 int nm_version ;
@@ -40,10 +40,26 @@ typedef struct napi_module {
4040 napi_addon_register_func nm_register_func ;
4141 const char * nm_modname ;
4242 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 ;
4458 void * reserved [3 ];
4559} napi_module ;
4660
61+ #endif // NAPI_EXPERIMENTAL
62+
4763#define NAPI_MODULE_VERSION 1
4864
4965#if defined(_MSC_VER )
@@ -76,7 +92,57 @@ typedef struct napi_module {
7692 static void fn(void)
7793#endif
7894
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 ) \
80146 EXTERN_C_START \
81147 static napi_module _module = { \
82148 NAPI_MODULE_VERSION, \
@@ -85,64 +151,63 @@ typedef struct napi_module {
85151 regfunc, \
86152 #modname, \
87153 priv, \
88- apiversionfunc, \
154+ (uintptr_t)api_version, \
89155 {0}, \
90156 }; \
91157 NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
92158 EXTERN_C_END
93159
160+ #define NAPI_MODULE_X (modname , regfunc , priv , flags ) \
161+ NAPI_MODULE_XV(modname, regfunc, NAPI_VERSION, priv, flags)
162+
94163#define NAPI_CONCAT_HELPER (text1 , text2 ) text1##text2
95164#define NAPI_CONCAT (text1 , text2 ) NAPI_CONCAT_HELPER(text1, text2)
96165
97166#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
99168
100169#define NAPI_MODULE_INITIALIZER \
101170 NAPI_CONCAT(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
102171
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)
113174
114175#define NAPI_MODULE_INIT () \
115176 EXTERN_C_START \
116177 NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
117178 napi_value exports); \
118- NAPI_MODULE_EXPORT int32_t NAPI_MODULE_API_VERSION () { \
179+ NAPI_MODULE_EXPORT int32_t NAPI_MODULE_GET_API_VERSION () { \
119180 return NAPI_VERSION; \
120181 } \
121182 EXTERN_C_END \
122183 napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
123184
124185#ifdef __wasm32__
186+
125187#define NAPI_WASM_INITIALIZER \
126188 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)
129191#define NAPI_MODULE (modname , regfunc ) \
130192 EXTERN_C_START \
131193 NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \
132194 napi_value exports) { \
133195 return regfunc(env, exports); \
134196 } \
135- NAPI_MODULE_EXPORT int32_t NAPI_WASM_API_VERSION () { \
197+ NAPI_MODULE_EXPORT int32_t NAPI_WASM_GET_API_VERSION () { \
136198 return NAPI_VERSION; \
137199 } \
138200 EXTERN_C_END
139201#else
202+
140203#define NAPI_MODULE (modname , regfunc ) \
141204 NAPI_MODULE_INIT() { \
142205 return regfunc(env, exports); \
143206 }
144207
145- #endif
208+ #endif // __wasm32__
209+
210+ #endif // NAPI_EXPERIMENTAL
146211
147212EXTERN_C_START
148213
0 commit comments