| /** |
| * @license |
| * Copyright 2019 The Emscripten Authors |
| * SPDX-License-Identifier: MIT |
| */ |
| |
| // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined) |
| #if !IMPORTED_MEMORY |
| #error "this file should not be included when IMPORTED_MEMORY is set" |
| #endif |
| |
| // check for full engine support (use string 'subarray' to avoid closure compiler confusion) |
| |
| function initMemory() { |
| #if WASM_ESM_INTEGRATION && PTHREADS |
| if (ENVIRONMENT_IS_PTHREAD) { |
| wasmMemory = globalThis.wasmMemory; |
| assert(wasmMemory); |
| updateMemoryViews(); |
| } |
| #endif |
| |
| {{{ runIfWorkerThread('return') }}} |
| |
| #if expectToReceiveOnModule('wasmMemory') |
| if (Module['wasmMemory']) { |
| wasmMemory = Module['wasmMemory']; |
| } else |
| #endif |
| { |
| var INITIAL_MEMORY = {{{ makeModuleReceiveExpr('INITIAL_MEMORY', INITIAL_MEMORY) }}}; |
| |
| #if ASSERTIONS |
| assert(INITIAL_MEMORY >= {{{ STACK_SIZE }}}, `INITIAL_MEMORY should be larger than STACK_SIZE, was ${INITIAL_MEMORY}! (STACK_SIZE={{{ STACK_SIZE }}})`); |
| #endif |
| /** @suppress {checkTypes} */ |
| wasmMemory = new WebAssembly.Memory({ |
| 'initial': {{{ toIndexType(`INITIAL_MEMORY / ${WASM_PAGE_SIZE}`) }}}, |
| #if ALLOW_MEMORY_GROWTH |
| // In theory we should not need to emit the maximum if we want "unlimited" |
| // or 4GB of memory, but VMs error on that atm, see |
| // https://github.com/emscripten-core/emscripten/issues/14130 |
| // And in the pthreads case we definitely need to emit a maximum. So |
| // always emit one. |
| 'maximum': {{{ toIndexType(MAXIMUM_MEMORY / WASM_PAGE_SIZE) }}}, |
| #else |
| 'maximum': {{{ toIndexType(`INITIAL_MEMORY / ${WASM_PAGE_SIZE}`) }}}, |
| #endif // ALLOW_MEMORY_GROWTH |
| #if SHARED_MEMORY |
| 'shared': true, |
| #endif |
| #if MEMORY64 == 1 |
| 'address': 'i64', |
| #endif |
| }); |
| } |
| |
| updateMemoryViews(); |
| } |
| |
| #if WASM_ESM_INTEGRATION || MINIMAL_RUNTIME |
| initMemory(); |
| #endif |