1- import { wasmMemory } from 'emscripten:runtime'
21import { emnapiCtx , emnapiEnv } from 'emnapi:shared'
32import { from64 , makeSetValue } from 'emscripten:parse-tools'
43import { $emnapiSetValueI64 as emnapiSetValueI64 } from '../util'
54import { $CHECK_ENV } from '../macro'
65
76/* eslint-disable @stylistic/indent */
8- declare function _emscripten_resize_heap ( requested : number ) : boolean
97
108/**
11- * @__deps emscripten_resize_heap
129 * @__sig ipjp
1310 */
1411export function napi_adjust_external_memory (
@@ -20,38 +17,28 @@ export function napi_adjust_external_memory (
2017 $CHECK_ENV ! ( env )
2118 const envObject = emnapiEnv
2219
23- let change_in_bytes : number
20+ let change_in_bytes : bigint
2421
2522// #if WASM_BIGINT
2623 if ( ! high ) return envObject . setLastError ( napi_status . napi_invalid_arg )
27- change_in_bytes = Number ( low )
24+ change_in_bytes = BigInt ( low )
2825// #else
2926 if ( ! adjusted_value ) return envObject . setLastError ( napi_status . napi_invalid_arg )
30- change_in_bytes = ( low >>> 0 ) + ( high * Math . pow ( 2 , 32 ) )
27+ change_in_bytes = BigInt ( low >>> 0 ) + ( BigInt ( high ) << BigInt ( 32 ) )
3128// #endif
3229
33- if ( change_in_bytes < 0 ) {
34- return envObject . setLastError ( napi_status . napi_invalid_arg )
35- }
36-
37- if ( change_in_bytes > 0 ) {
38- const old_size = wasmMemory . buffer . byteLength
39- const new_size = old_size + change_in_bytes
40- if ( ! _emscripten_resize_heap ( new_size ) ) {
41- return envObject . setLastError ( napi_status . napi_generic_failure )
42- }
43- }
30+ const adjusted_memory = emnapiCtx . adjustAmountOfExternalAllocatedMemory ( change_in_bytes )
4431
4532// #if WASM_BIGINT
4633 from64 ( 'high' )
4734 if ( emnapiCtx . features . BigInt ) {
48- makeSetValue ( 'high' , 0 , 'wasmMemory.buffer.byteLength ' , 'i64' )
35+ makeSetValue ( 'high' , 0 , 'adjusted_memory ' , 'i64' )
4936 } else {
50- emnapiSetValueI64 ( high , wasmMemory . buffer . byteLength )
37+ emnapiSetValueI64 ( high , Number ( adjusted_memory ) )
5138 }
5239// #else
5340 from64 ( 'adjusted_value' )
54- makeSetValue ( 'adjusted_value' , 0 , 'wasmMemory.buffer.byteLength ' , 'i64' )
41+ makeSetValue ( 'adjusted_value' , 0 , 'adjusted_memory ' , 'i64' )
5542// #endif
5643
5744 return envObject . clearLastError ( )
0 commit comments