@@ -46,6 +46,8 @@ export var wasmTable: WebAssembly.Table
4646
4747export var _malloc : ( size : number | bigint ) => void_p
4848export var _free : ( ptr : void_p ) => void
49+ export var _emnapi_create_env : ( ) => void_p
50+ export var _emnapi_delete_env : ( ptr : void_p ) => void
4951
5052export function abort ( msg ?: string ) : never {
5153 if ( typeof WebAssembly . RuntimeError === 'function' ) {
@@ -66,6 +68,22 @@ export function setWasmTableEntry (index: number, func: Function | null): void {
6668 wasmTable . set ( index , func )
6769}
6870
71+ function setLastError ( env : napi_env , error_code : napi_status , engine_error_code : uint32_t , engine_reserved : number ) {
72+ from64 ( 'env' )
73+ ; ( env as number ) -= 8
74+ from64 ( 'engine_reserved' )
75+ // #if MEMORY64
76+ makeSetValue ( 'env' , NapiEnvOffset64 . last_error_error_code , 'error_code' , 'i32' )
77+ makeSetValue ( 'env' , NapiEnvOffset64 . last_error_engine_error_code , 'engine_error_code' , 'u32' )
78+ makeSetValue ( 'env' , NapiEnvOffset64 . last_error_engine_reserved , 'engine_reserved' , '*' )
79+ // #else
80+ makeSetValue ( 'env' , NapiEnvOffset32 . last_error_error_code , 'error_code' , 'i32' )
81+ makeSetValue ( 'env' , NapiEnvOffset32 . last_error_engine_error_code , 'engine_error_code' , 'u32' )
82+ makeSetValue ( 'env' , NapiEnvOffset32 . last_error_engine_reserved , 'engine_reserved' , '*' )
83+ // #endif
84+ return error_code
85+ }
86+
6987export var napiModule : INapiModule = {
7088 imports : {
7189 env : { } ,
@@ -104,6 +122,8 @@ export var napiModule: INapiModule = {
104122 if ( typeof exports . free !== 'function' ) throw new TypeError ( 'free is not exported' )
105123 _malloc = exports . malloc as ( size : number | bigint ) => void_p
106124 _free = exports . free as ( ptr : void_p ) => void
125+ _emnapi_create_env = exports . emnapi_create_env as ( ) => void_p
126+ _emnapi_delete_env = exports . emnapi_delete_env as ( ptr : void_p ) => void
107127
108128 if ( ! napiModule . childThread ) {
109129 // main thread only
@@ -144,64 +164,28 @@ export var napiModule: INapiModule = {
144164 }
145165
146166 const envObject = napiModule . envObject || ( ( ) => {
147- let struct_napi_env__ : SNapiEnv
148- // #if MEMORY64
149- struct_napi_env__ = {
150- __size__ : 56 ,
151- reserved : 0 ,
152- sentinel : 8 ,
153- js_vtable : 16 ,
154- module_vtable : 24 ,
155- last_error : {
156- __size__ : 24 ,
157- error_message : 32 ,
158- engine_reserved : 40 ,
159- engine_error_code : 48 ,
160- error_code : 52
161- }
162- }
163- // #else
164- struct_napi_env__ = {
165- __size__ : 40 ,
166- reserved : 0 ,
167- sentinel : 8 ,
168- js_vtable : 16 ,
169- module_vtable : 20 ,
170- last_error : {
171- __size__ : 16 ,
172- error_message : 24 ,
173- engine_reserved : 28 ,
174- engine_error_code : 32 ,
175- error_code : 36
176- }
177- }
178- // #endif
179-
180- let address = _malloc ( to64 ( 'struct_napi_env__.__size__' ) ) as number
181- const errorCodeOffset = struct_napi_env__ . last_error . error_code
182- const engineErrorCodeOffset = struct_napi_env__ . last_error . engine_error_code
183- const engineReservedOffset = struct_napi_env__ . last_error . engine_reserved
167+ let address = _emnapi_create_env ( ) as number
184168 from64 ( 'address' )
185169 const envObject = napiModule . envObject = emnapiEnv = emnapiCtx . createEnv (
186170 napiModule . filename ,
187171 moduleApiVersion ,
188172 {
189173 address,
190- free : ( ptr ) => {
191- _free ( to64 ( 'ptr' ) )
192- } ,
193- setLastError ( env , error_code , engine_error_code , engine_reserved ) {
194- from64 ( 'engine_reserved' )
195- makeSetValue ( 'env' , 'errorCodeOffset' , 'error_code' , 'i32' )
196- makeSetValue ( 'env' , 'engineErrorCodeOffset' , 'engine_error_code' , 'u32' )
197- makeSetValue ( 'env' , 'engineReservedOffset' , 'engine_reserved' , '*' )
174+ deleteEnv : ( ptr ) => {
175+ _emnapi_delete_env ( ( to64 ( 'ptr' ) as number ) - ( to64 ( '8' ) as number ) )
198176 } ,
177+ setLastError,
199178 makeDynCall_vppp : ( cb : Ptr ) => makeDynCall ( 'vppp' , 'cb' ) ,
200179 makeDynCall_vp : ( cb : Ptr ) => makeDynCall ( 'vp' , 'cb' ) ,
201180 abort,
202181 } ,
203182 emnapiNodeBinding
204183 )
184+ // #if MEMORY64
185+ makeSetValue ( 'address - 8' , NapiEnvOffset64 . id , 'envObject.id' , 'u32' )
186+ // #else
187+ makeSetValue ( 'address - 8' , NapiEnvOffset32 . id , 'envObject.id' , 'u32' )
188+ // #endif
205189 return envObject
206190 } ) ( )
207191
0 commit comments