sum_library.mjs (48655B)
1 // This code implements the `-sMODULARIZE` settings by taking the generated 2 // JS program code (INNER_JS_CODE) and wrapping it in a factory function. 3 4 // When targetting node and ES6 we use `await import ..` in the generated code 5 // so the outer function needs to be marked as async. 6 async function SumLibrary(moduleArg = {}) { 7 var moduleRtn; 8 9 // include: shell.js 10 // The Module object: Our interface to the outside world. We import 11 // and export values on it. There are various ways Module can be used: 12 // 1. Not defined. We create it here 13 // 2. A function parameter, function(moduleArg) => Promise<Module> 14 // 3. pre-run appended it, var Module = {}; ..generated code.. 15 // 4. External script tag defines var Module. 16 // We need to check if Module already exists (e.g. case 3 above). 17 // Substitution will be replaced with actual code on later stage of the build, 18 // this way Closure Compiler will not mangle it (e.g. case 4. above). 19 // Note that if you want to run closure, and also to use Module 20 // after the generated code, you will need to define var Module = {}; 21 // before the code. Then that object will be used in the code, and you 22 // can continue to use Module afterwards as well. 23 var Module = moduleArg; 24 25 // Determine the runtime environment we are in. You can customize this by 26 // setting the ENVIRONMENT setting at compile time (see settings.js). 27 28 // Attempt to auto-detect the environment 29 var ENVIRONMENT_IS_WEB = typeof window == 'object'; 30 var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; 31 // N.b. Electron.js environment is simultaneously a NODE-environment, but 32 // also a web environment. 33 var ENVIRONMENT_IS_NODE = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; 34 var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; 35 36 if (ENVIRONMENT_IS_NODE) { 37 // When building an ES module `require` is not normally available. 38 // We need to use `createRequire()` to construct the require()` function. 39 const { createRequire } = await import('module'); 40 /** @suppress{duplicate} */ 41 var require = createRequire(import.meta.url); 42 43 } 44 45 // --pre-jses are emitted after the Module integration code, so that they can 46 // refer to Module (if they choose; they can also define Module) 47 48 49 var arguments_ = []; 50 var thisProgram = './this.program'; 51 var quit_ = (status, toThrow) => { 52 throw toThrow; 53 }; 54 55 var _scriptName = import.meta.url; 56 57 // `/` should be present at the end if `scriptDirectory` is not empty 58 var scriptDirectory = ''; 59 function locateFile(path) { 60 if (Module['locateFile']) { 61 return Module['locateFile'](path, scriptDirectory); 62 } 63 return scriptDirectory + path; 64 } 65 66 // Hooks that are implemented differently in different runtime environments. 67 var readAsync, readBinary; 68 69 if (ENVIRONMENT_IS_NODE) { 70 const isNode = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; 71 if (!isNode) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); 72 73 var nodeVersion = process.versions.node; 74 var numericVersion = nodeVersion.split('.').slice(0, 3); 75 numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); 76 if (numericVersion < 160000) { 77 throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); 78 } 79 80 // These modules will usually be used on Node.js. Load them eagerly to avoid 81 // the complexity of lazy-loading. 82 var fs = require('fs'); 83 84 if (_scriptName.startsWith('file:')) { 85 scriptDirectory = require('path').dirname(require('url').fileURLToPath(_scriptName)) + '/'; 86 } 87 88 // include: node_shell_read.js 89 readBinary = (filename) => { 90 // We need to re-wrap `file://` strings to URLs. 91 filename = isFileURI(filename) ? new URL(filename) : filename; 92 var ret = fs.readFileSync(filename); 93 assert(Buffer.isBuffer(ret)); 94 return ret; 95 }; 96 97 readAsync = async (filename, binary = true) => { 98 // See the comment in the `readBinary` function. 99 filename = isFileURI(filename) ? new URL(filename) : filename; 100 var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); 101 assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); 102 return ret; 103 }; 104 // end include: node_shell_read.js 105 if (process.argv.length > 1) { 106 thisProgram = process.argv[1].replace(/\\/g, '/'); 107 } 108 109 arguments_ = process.argv.slice(2); 110 111 quit_ = (status, toThrow) => { 112 process.exitCode = status; 113 throw toThrow; 114 }; 115 116 } else 117 if (ENVIRONMENT_IS_SHELL) { 118 119 const isNode = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; 120 if (isNode || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); 121 122 } else 123 124 // Note that this includes Node.js workers when relevant (pthreads is enabled). 125 // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and 126 // ENVIRONMENT_IS_NODE. 127 if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { 128 try { 129 scriptDirectory = new URL('.', _scriptName).href; // includes trailing slash 130 } catch { 131 // Must be a `blob:` or `data:` URL (e.g. `blob:http://site.com/etc/etc`), we cannot 132 // infer anything from them. 133 } 134 135 if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); 136 137 { 138 // include: web_or_worker_shell_read.js 139 if (ENVIRONMENT_IS_WORKER) { 140 readBinary = (url) => { 141 var xhr = new XMLHttpRequest(); 142 xhr.open('GET', url, false); 143 xhr.responseType = 'arraybuffer'; 144 xhr.send(null); 145 return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); 146 }; 147 } 148 149 readAsync = async (url) => { 150 // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. 151 // See https://github.com/github/fetch/pull/92#issuecomment-140665932 152 // Cordova or Electron apps are typically loaded from a file:// url. 153 // So use XHR on webview if URL is a file URL. 154 if (isFileURI(url)) { 155 return new Promise((resolve, reject) => { 156 var xhr = new XMLHttpRequest(); 157 xhr.open('GET', url, true); 158 xhr.responseType = 'arraybuffer'; 159 xhr.onload = () => { 160 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 161 resolve(xhr.response); 162 return; 163 } 164 reject(xhr.status); 165 }; 166 xhr.onerror = reject; 167 xhr.send(null); 168 }); 169 } 170 var response = await fetch(url, { credentials: 'same-origin' }); 171 if (response.ok) { 172 return response.arrayBuffer(); 173 } 174 throw new Error(response.status + ' : ' + response.url); 175 }; 176 // end include: web_or_worker_shell_read.js 177 } 178 } else 179 { 180 throw new Error('environment detection error'); 181 } 182 183 var out = console.log.bind(console); 184 var err = console.error.bind(console); 185 186 var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; 187 var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; 188 var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; 189 var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; 190 var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; 191 var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; 192 var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; 193 194 var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; 195 196 // perform assertions in shell.js after we set up out() and err(), as otherwise 197 // if an assertion fails it cannot print the message 198 199 assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); 200 201 // end include: shell.js 202 203 // include: preamble.js 204 // === Preamble library stuff === 205 206 // Documentation for the public APIs defined in this file must be updated in: 207 // site/source/docs/api_reference/preamble.js.rst 208 // A prebuilt local version of the documentation is available at: 209 // site/build/text/docs/api_reference/preamble.js.txt 210 // You can also build docs locally as HTML or other formats in site/ 211 // An online HTML version (which may be of a different version of Emscripten) 212 // is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html 213 214 var wasmBinary; 215 216 if (typeof WebAssembly != 'object') { 217 err('no native wasm support detected'); 218 } 219 220 // Wasm globals 221 222 //======================================== 223 // Runtime essentials 224 //======================================== 225 226 // whether we are quitting the application. no code should run after this. 227 // set in exit() and abort() 228 var ABORT = false; 229 230 // set by exit() and abort(). Passed to 'onExit' handler. 231 // NOTE: This is also used as the process return code code in shell environments 232 // but only when noExitRuntime is false. 233 var EXITSTATUS; 234 235 // In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we 236 // don't define it at all in release modes. This matches the behaviour of 237 // MINIMAL_RUNTIME. 238 // TODO(sbc): Make this the default even without STRICT enabled. 239 /** @type {function(*, string=)} */ 240 function assert(condition, text) { 241 if (!condition) { 242 abort('Assertion failed' + (text ? ': ' + text : '')); 243 } 244 } 245 246 // We used to include malloc/free by default in the past. Show a helpful error in 247 // builds with assertions. 248 function _malloc() { 249 abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); 250 } 251 function _free() { 252 // Show a helpful error since we used to include free by default in the past. 253 abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); 254 } 255 256 /** 257 * Indicates whether filename is delivered via file protocol (as opposed to http/https) 258 * @noinline 259 */ 260 var isFileURI = (filename) => filename.startsWith('file://'); 261 262 // include: runtime_common.js 263 // include: runtime_stack_check.js 264 // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. 265 function writeStackCookie() { 266 var max = _emscripten_stack_get_end(); 267 assert((max & 3) == 0); 268 // If the stack ends at address zero we write our cookies 4 bytes into the 269 // stack. This prevents interference with SAFE_HEAP and ASAN which also 270 // monitor writes to address zero. 271 if (max == 0) { 272 max += 4; 273 } 274 // The stack grow downwards towards _emscripten_stack_get_end. 275 // We write cookies to the final two words in the stack and detect if they are 276 // ever overwritten. 277 HEAPU32[((max)>>2)] = 0x02135467; 278 HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; 279 // Also test the global address 0 for integrity. 280 HEAPU32[((0)>>2)] = 1668509029; 281 } 282 283 function checkStackCookie() { 284 if (ABORT) return; 285 var max = _emscripten_stack_get_end(); 286 // See writeStackCookie(). 287 if (max == 0) { 288 max += 4; 289 } 290 var cookie1 = HEAPU32[((max)>>2)]; 291 var cookie2 = HEAPU32[(((max)+(4))>>2)]; 292 if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { 293 abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); 294 } 295 // Also test the global address 0 for integrity. 296 if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { 297 abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); 298 } 299 } 300 // end include: runtime_stack_check.js 301 // include: runtime_exceptions.js 302 // end include: runtime_exceptions.js 303 // include: runtime_debug.js 304 var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times 305 306 // Used by XXXXX_DEBUG settings to output debug messages. 307 function dbg(...args) { 308 if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; 309 // TODO(sbc): Make this configurable somehow. Its not always convenient for 310 // logging to show up as warnings. 311 console.warn(...args); 312 } 313 314 // Endianness check 315 (() => { 316 var h16 = new Int16Array(1); 317 var h8 = new Int8Array(h16.buffer); 318 h16[0] = 0x6373; 319 if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; 320 })(); 321 322 function consumedModuleProp(prop) { 323 if (!Object.getOwnPropertyDescriptor(Module, prop)) { 324 Object.defineProperty(Module, prop, { 325 configurable: true, 326 set() { 327 abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); 328 329 } 330 }); 331 } 332 } 333 334 function makeInvalidEarlyAccess(name) { 335 return () => assert(false, `call to '${name}' via reference taken before Wasm module initialization`); 336 337 } 338 339 function ignoredModuleProp(prop) { 340 if (Object.getOwnPropertyDescriptor(Module, prop)) { 341 abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); 342 } 343 } 344 345 // forcing the filesystem exports a few things by default 346 function isExportedByForceFilesystem(name) { 347 return name === 'FS_createPath' || 348 name === 'FS_createDataFile' || 349 name === 'FS_createPreloadedFile' || 350 name === 'FS_unlink' || 351 name === 'addRunDependency' || 352 // The old FS has some functionality that WasmFS lacks. 353 name === 'FS_createLazyFile' || 354 name === 'FS_createDevice' || 355 name === 'removeRunDependency'; 356 } 357 358 /** 359 * Intercept access to a global symbol. This enables us to give informative 360 * warnings/errors when folks attempt to use symbols they did not include in 361 * their build, or no symbols that no longer exist. 362 */ 363 function hookGlobalSymbolAccess(sym, func) { 364 if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { 365 Object.defineProperty(globalThis, sym, { 366 configurable: true, 367 get() { 368 func(); 369 return undefined; 370 } 371 }); 372 } 373 } 374 375 function missingGlobal(sym, msg) { 376 hookGlobalSymbolAccess(sym, () => { 377 warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); 378 }); 379 } 380 381 missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); 382 missingGlobal('asm', 'Please use wasmExports instead'); 383 384 function missingLibrarySymbol(sym) { 385 hookGlobalSymbolAccess(sym, () => { 386 // Can't `abort()` here because it would break code that does runtime 387 // checks. e.g. `if (typeof SDL === 'undefined')`. 388 var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; 389 // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in 390 // library.js, which means $name for a JS name with no prefix, or name 391 // for a JS name like _name. 392 var librarySymbol = sym; 393 if (!librarySymbol.startsWith('_')) { 394 librarySymbol = '$' + sym; 395 } 396 msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; 397 if (isExportedByForceFilesystem(sym)) { 398 msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; 399 } 400 warnOnce(msg); 401 }); 402 403 // Any symbol that is not included from the JS library is also (by definition) 404 // not exported on the Module object. 405 unexportedRuntimeSymbol(sym); 406 } 407 408 function unexportedRuntimeSymbol(sym) { 409 if (!Object.getOwnPropertyDescriptor(Module, sym)) { 410 Object.defineProperty(Module, sym, { 411 configurable: true, 412 get() { 413 var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; 414 if (isExportedByForceFilesystem(sym)) { 415 msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; 416 } 417 abort(msg); 418 } 419 }); 420 } 421 } 422 423 // end include: runtime_debug.js 424 var readyPromiseResolve, readyPromiseReject; 425 426 // Memory management 427 428 var wasmMemory; 429 430 var 431 /** @type {!Int8Array} */ 432 HEAP8, 433 /** @type {!Uint8Array} */ 434 HEAPU8, 435 /** @type {!Int16Array} */ 436 HEAP16, 437 /** @type {!Uint16Array} */ 438 HEAPU16, 439 /** @type {!Int32Array} */ 440 HEAP32, 441 /** @type {!Uint32Array} */ 442 HEAPU32, 443 /** @type {!Float32Array} */ 444 HEAPF32, 445 /** @type {!Float64Array} */ 446 HEAPF64; 447 448 // BigInt64Array type is not correctly defined in closure 449 var 450 /** not-@type {!BigInt64Array} */ 451 HEAP64, 452 /* BigUint64Array type is not correctly defined in closure 453 /** not-@type {!BigUint64Array} */ 454 HEAPU64; 455 456 var runtimeInitialized = false; 457 458 459 460 function updateMemoryViews() { 461 var b = wasmMemory.buffer; 462 HEAP8 = new Int8Array(b); 463 HEAP16 = new Int16Array(b); 464 HEAPU8 = new Uint8Array(b); 465 HEAPU16 = new Uint16Array(b); 466 HEAP32 = new Int32Array(b); 467 HEAPU32 = new Uint32Array(b); 468 HEAPF32 = new Float32Array(b); 469 HEAPF64 = new Float64Array(b); 470 HEAP64 = new BigInt64Array(b); 471 HEAPU64 = new BigUint64Array(b); 472 } 473 474 // include: memoryprofiler.js 475 // end include: memoryprofiler.js 476 // end include: runtime_common.js 477 assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, 478 'JS engine does not provide full typed array support'); 479 480 function preRun() { 481 if (Module['preRun']) { 482 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; 483 while (Module['preRun'].length) { 484 addOnPreRun(Module['preRun'].shift()); 485 } 486 } 487 consumedModuleProp('preRun'); 488 // Begin ATPRERUNS hooks 489 callRuntimeCallbacks(onPreRuns); 490 // End ATPRERUNS hooks 491 } 492 493 function initRuntime() { 494 assert(!runtimeInitialized); 495 runtimeInitialized = true; 496 497 checkStackCookie(); 498 499 // No ATINITS hooks 500 501 wasmExports['__wasm_call_ctors'](); 502 503 // No ATPOSTCTORS hooks 504 } 505 506 function postRun() { 507 checkStackCookie(); 508 // PThreads reuse the runtime from the main thread. 509 510 if (Module['postRun']) { 511 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; 512 while (Module['postRun'].length) { 513 addOnPostRun(Module['postRun'].shift()); 514 } 515 } 516 consumedModuleProp('postRun'); 517 518 // Begin ATPOSTRUNS hooks 519 callRuntimeCallbacks(onPostRuns); 520 // End ATPOSTRUNS hooks 521 } 522 523 // A counter of dependencies for calling run(). If we need to 524 // do asynchronous work before running, increment this and 525 // decrement it. Incrementing must happen in a place like 526 // Module.preRun (used by emcc to add file preloading). 527 // Note that you can add dependencies in preRun, even though 528 // it happens right before run - run will be postponed until 529 // the dependencies are met. 530 var runDependencies = 0; 531 var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled 532 var runDependencyTracking = {}; 533 var runDependencyWatcher = null; 534 535 function addRunDependency(id) { 536 runDependencies++; 537 538 Module['monitorRunDependencies']?.(runDependencies); 539 540 if (id) { 541 assert(!runDependencyTracking[id]); 542 runDependencyTracking[id] = 1; 543 if (runDependencyWatcher === null && typeof setInterval != 'undefined') { 544 // Check for missing dependencies every few seconds 545 runDependencyWatcher = setInterval(() => { 546 if (ABORT) { 547 clearInterval(runDependencyWatcher); 548 runDependencyWatcher = null; 549 return; 550 } 551 var shown = false; 552 for (var dep in runDependencyTracking) { 553 if (!shown) { 554 shown = true; 555 err('still waiting on run dependencies:'); 556 } 557 err(`dependency: ${dep}`); 558 } 559 if (shown) { 560 err('(end of list)'); 561 } 562 }, 10000); 563 } 564 } else { 565 err('warning: run dependency added without ID'); 566 } 567 } 568 569 function removeRunDependency(id) { 570 runDependencies--; 571 572 Module['monitorRunDependencies']?.(runDependencies); 573 574 if (id) { 575 assert(runDependencyTracking[id]); 576 delete runDependencyTracking[id]; 577 } else { 578 err('warning: run dependency removed without ID'); 579 } 580 if (runDependencies == 0) { 581 if (runDependencyWatcher !== null) { 582 clearInterval(runDependencyWatcher); 583 runDependencyWatcher = null; 584 } 585 if (dependenciesFulfilled) { 586 var callback = dependenciesFulfilled; 587 dependenciesFulfilled = null; 588 callback(); // can add another dependenciesFulfilled 589 } 590 } 591 } 592 593 /** @param {string|number=} what */ 594 function abort(what) { 595 Module['onAbort']?.(what); 596 597 what = 'Aborted(' + what + ')'; 598 // TODO(sbc): Should we remove printing and leave it up to whoever 599 // catches the exception? 600 err(what); 601 602 ABORT = true; 603 604 // Use a wasm runtime error, because a JS error might be seen as a foreign 605 // exception, which means we'd run destructors on it. We need the error to 606 // simply make the program stop. 607 // FIXME This approach does not work in Wasm EH because it currently does not assume 608 // all RuntimeErrors are from traps; it decides whether a RuntimeError is from 609 // a trap or not based on a hidden field within the object. So at the moment 610 // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that 611 // allows this in the wasm spec. 612 613 // Suppress closure compiler warning here. Closure compiler's builtin extern 614 // definition for WebAssembly.RuntimeError claims it takes no arguments even 615 // though it can. 616 // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. 617 /** @suppress {checkTypes} */ 618 var e = new WebAssembly.RuntimeError(what); 619 620 readyPromiseReject?.(e); 621 // Throw the error whether or not MODULARIZE is set because abort is used 622 // in code paths apart from instantiation where an exception is expected 623 // to be thrown when abort is called. 624 throw e; 625 } 626 627 // show errors on likely calls to FS when it was not included 628 var FS = { 629 error() { 630 abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); 631 }, 632 init() { FS.error() }, 633 createDataFile() { FS.error() }, 634 createPreloadedFile() { FS.error() }, 635 createLazyFile() { FS.error() }, 636 open() { FS.error() }, 637 mkdev() { FS.error() }, 638 registerDevice() { FS.error() }, 639 analyzePath() { FS.error() }, 640 641 ErrnoError() { FS.error() }, 642 }; 643 644 645 function createExportWrapper(name, nargs) { 646 return (...args) => { 647 assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); 648 var f = wasmExports[name]; 649 assert(f, `exported native function \`${name}\` not found`); 650 // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. 651 assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); 652 return f(...args); 653 }; 654 } 655 656 var wasmBinaryFile; 657 658 function findWasmBinary() { 659 if (Module['locateFile']) { 660 return locateFile('sum_library.wasm'); 661 } 662 // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too. 663 return new URL('sum_library.wasm', import.meta.url).href; 664 } 665 666 function getBinarySync(file) { 667 if (file == wasmBinaryFile && wasmBinary) { 668 return new Uint8Array(wasmBinary); 669 } 670 if (readBinary) { 671 return readBinary(file); 672 } 673 throw 'both async and sync fetching of the wasm failed'; 674 } 675 676 async function getWasmBinary(binaryFile) { 677 // If we don't have the binary yet, load it asynchronously using readAsync. 678 if (!wasmBinary) { 679 // Fetch the binary using readAsync 680 try { 681 var response = await readAsync(binaryFile); 682 return new Uint8Array(response); 683 } catch { 684 // Fall back to getBinarySync below; 685 } 686 } 687 688 // Otherwise, getBinarySync should be able to get it synchronously 689 return getBinarySync(binaryFile); 690 } 691 692 async function instantiateArrayBuffer(binaryFile, imports) { 693 try { 694 var binary = await getWasmBinary(binaryFile); 695 var instance = await WebAssembly.instantiate(binary, imports); 696 return instance; 697 } catch (reason) { 698 err(`failed to asynchronously prepare wasm: ${reason}`); 699 700 // Warn on some common problems. 701 if (isFileURI(wasmBinaryFile)) { 702 err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); 703 } 704 abort(reason); 705 } 706 } 707 708 async function instantiateAsync(binary, binaryFile, imports) { 709 if (!binary && typeof WebAssembly.instantiateStreaming == 'function' 710 // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. 711 && !isFileURI(binaryFile) 712 // Avoid instantiateStreaming() on Node.js environment for now, as while 713 // Node.js v18.1.0 implements it, it does not have a full fetch() 714 // implementation yet. 715 // 716 // Reference: 717 // https://github.com/emscripten-core/emscripten/pull/16917 718 && !ENVIRONMENT_IS_NODE 719 ) { 720 try { 721 var response = fetch(binaryFile, { credentials: 'same-origin' }); 722 var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); 723 return instantiationResult; 724 } catch (reason) { 725 // We expect the most common failure cause to be a bad MIME type for the binary, 726 // in which case falling back to ArrayBuffer instantiation should work. 727 err(`wasm streaming compile failed: ${reason}`); 728 err('falling back to ArrayBuffer instantiation'); 729 // fall back of instantiateArrayBuffer below 730 }; 731 } 732 return instantiateArrayBuffer(binaryFile, imports); 733 } 734 735 function getWasmImports() { 736 // prepare imports 737 return { 738 'env': wasmImports, 739 'wasi_snapshot_preview1': wasmImports, 740 } 741 } 742 743 // Create the wasm instance. 744 // Receives the wasm imports, returns the exports. 745 async function createWasm() { 746 // Load the wasm module and create an instance of using native support in the JS engine. 747 // handle a generated wasm instance, receiving its exports and 748 // performing other necessary setup 749 /** @param {WebAssembly.Module=} module*/ 750 function receiveInstance(instance, module) { 751 wasmExports = instance.exports; 752 753 754 755 wasmMemory = wasmExports['memory']; 756 757 assert(wasmMemory, 'memory not found in wasm exports'); 758 updateMemoryViews(); 759 760 assignWasmExports(wasmExports); 761 removeRunDependency('wasm-instantiate'); 762 return wasmExports; 763 } 764 // wait for the pthread pool (if any) 765 addRunDependency('wasm-instantiate'); 766 767 // Prefer streaming instantiation if available. 768 // Async compilation can be confusing when an error on the page overwrites Module 769 // (for example, if the order of elements is wrong, and the one defining Module is 770 // later), so we save Module and check it later. 771 var trueModule = Module; 772 function receiveInstantiationResult(result) { 773 // 'result' is a ResultObject object which has both the module and instance. 774 // receiveInstance() will swap in the exports (to Module.asm) so they can be called 775 assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); 776 trueModule = null; 777 // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. 778 // When the regression is fixed, can restore the above PTHREADS-enabled path. 779 return receiveInstance(result['instance']); 780 } 781 782 var info = getWasmImports(); 783 784 // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback 785 // to manually instantiate the Wasm module themselves. This allows pages to 786 // run the instantiation parallel to any other async startup actions they are 787 // performing. 788 // Also pthreads and wasm workers initialize the wasm instance through this 789 // path. 790 if (Module['instantiateWasm']) { 791 return new Promise((resolve, reject) => { 792 try { 793 Module['instantiateWasm'](info, (mod, inst) => { 794 resolve(receiveInstance(mod, inst)); 795 }); 796 } catch(e) { 797 err(`Module.instantiateWasm callback failed with error: ${e}`); 798 reject(e); 799 } 800 }); 801 } 802 803 wasmBinaryFile ??= findWasmBinary(); 804 var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); 805 var exports = receiveInstantiationResult(result); 806 return exports; 807 } 808 809 // end include: preamble.js 810 811 // Begin JS library code 812 813 814 class ExitStatus { 815 name = 'ExitStatus'; 816 constructor(status) { 817 this.message = `Program terminated with exit(${status})`; 818 this.status = status; 819 } 820 } 821 822 var callRuntimeCallbacks = (callbacks) => { 823 while (callbacks.length > 0) { 824 // Pass the module as the first argument. 825 callbacks.shift()(Module); 826 } 827 }; 828 var onPostRuns = []; 829 var addOnPostRun = (cb) => onPostRuns.push(cb); 830 831 var onPreRuns = []; 832 var addOnPreRun = (cb) => onPreRuns.push(cb); 833 834 835 836 /** 837 * @param {number} ptr 838 * @param {string} type 839 */ 840 function getValue(ptr, type = 'i8') { 841 if (type.endsWith('*')) type = '*'; 842 switch (type) { 843 case 'i1': return HEAP8[ptr]; 844 case 'i8': return HEAP8[ptr]; 845 case 'i16': return HEAP16[((ptr)>>1)]; 846 case 'i32': return HEAP32[((ptr)>>2)]; 847 case 'i64': return HEAP64[((ptr)>>3)]; 848 case 'float': return HEAPF32[((ptr)>>2)]; 849 case 'double': return HEAPF64[((ptr)>>3)]; 850 case '*': return HEAPU32[((ptr)>>2)]; 851 default: abort(`invalid type for getValue: ${type}`); 852 } 853 } 854 855 var noExitRuntime = true; 856 857 var ptrToString = (ptr) => { 858 assert(typeof ptr === 'number'); 859 // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. 860 ptr >>>= 0; 861 return '0x' + ptr.toString(16).padStart(8, '0'); 862 }; 863 864 865 /** 866 * @param {number} ptr 867 * @param {number} value 868 * @param {string} type 869 */ 870 function setValue(ptr, value, type = 'i8') { 871 if (type.endsWith('*')) type = '*'; 872 switch (type) { 873 case 'i1': HEAP8[ptr] = value; break; 874 case 'i8': HEAP8[ptr] = value; break; 875 case 'i16': HEAP16[((ptr)>>1)] = value; break; 876 case 'i32': HEAP32[((ptr)>>2)] = value; break; 877 case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; 878 case 'float': HEAPF32[((ptr)>>2)] = value; break; 879 case 'double': HEAPF64[((ptr)>>3)] = value; break; 880 case '*': HEAPU32[((ptr)>>2)] = value; break; 881 default: abort(`invalid type for setValue: ${type}`); 882 } 883 } 884 885 var stackRestore = (val) => __emscripten_stack_restore(val); 886 887 var stackSave = () => _emscripten_stack_get_current(); 888 889 var warnOnce = (text) => { 890 warnOnce.shown ||= {}; 891 if (!warnOnce.shown[text]) { 892 warnOnce.shown[text] = 1; 893 if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; 894 err(text); 895 } 896 }; 897 // End JS library code 898 899 // include: postlibrary.js 900 // This file is included after the automatically-generated JS library code 901 // but before the wasm module is created. 902 903 { 904 905 // Begin ATMODULES hooks 906 if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; 907 if (Module['print']) out = Module['print']; 908 if (Module['printErr']) err = Module['printErr']; 909 if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; 910 911 Module['FS_createDataFile'] = FS.createDataFile; 912 Module['FS_createPreloadedFile'] = FS.createPreloadedFile; 913 914 // End ATMODULES hooks 915 916 checkIncomingModuleAPI(); 917 918 if (Module['arguments']) arguments_ = Module['arguments']; 919 if (Module['thisProgram']) thisProgram = Module['thisProgram']; 920 921 // Assertions on removed incoming Module JS APIs. 922 assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); 923 assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); 924 assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); 925 assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); 926 assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); 927 assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); 928 assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); 929 assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); 930 assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); 931 assert(typeof Module['ENVIRONMENT'] == 'undefined', 'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); 932 assert(typeof Module['STACK_SIZE'] == 'undefined', 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') 933 // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY 934 assert(typeof Module['wasmMemory'] == 'undefined', 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); 935 assert(typeof Module['INITIAL_MEMORY'] == 'undefined', 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); 936 937 } 938 939 // Begin runtime exports 940 var missingLibrarySymbols = [ 941 'writeI53ToI64', 942 'writeI53ToI64Clamped', 943 'writeI53ToI64Signaling', 944 'writeI53ToU64Clamped', 945 'writeI53ToU64Signaling', 946 'readI53FromI64', 947 'readI53FromU64', 948 'convertI32PairToI53', 949 'convertI32PairToI53Checked', 950 'convertU32PairToI53', 951 'bigintToI53Checked', 952 'stackAlloc', 953 'getTempRet0', 954 'setTempRet0', 955 'zeroMemory', 956 'exitJS', 957 'getHeapMax', 958 'abortOnCannotGrowMemory', 959 'growMemory', 960 'withStackSave', 961 'strError', 962 'inetPton4', 963 'inetNtop4', 964 'inetPton6', 965 'inetNtop6', 966 'readSockaddr', 967 'writeSockaddr', 968 'readEmAsmArgs', 969 'jstoi_q', 970 'getExecutableName', 971 'autoResumeAudioContext', 972 'getDynCaller', 973 'dynCall', 974 'handleException', 975 'keepRuntimeAlive', 976 'runtimeKeepalivePush', 977 'runtimeKeepalivePop', 978 'callUserCallback', 979 'maybeExit', 980 'asmjsMangle', 981 'asyncLoad', 982 'alignMemory', 983 'mmapAlloc', 984 'HandleAllocator', 985 'getNativeTypeSize', 986 'getUniqueRunDependency', 987 'addOnInit', 988 'addOnPostCtor', 989 'addOnPreMain', 990 'addOnExit', 991 'STACK_SIZE', 992 'STACK_ALIGN', 993 'POINTER_SIZE', 994 'ASSERTIONS', 995 'ccall', 996 'cwrap', 997 'convertJsFunctionToWasm', 998 'getEmptyTableSlot', 999 'updateTableMap', 1000 'getFunctionAddress', 1001 'addFunction', 1002 'removeFunction', 1003 'UTF8ArrayToString', 1004 'UTF8ToString', 1005 'stringToUTF8Array', 1006 'stringToUTF8', 1007 'lengthBytesUTF8', 1008 'intArrayFromString', 1009 'intArrayToString', 1010 'AsciiToString', 1011 'stringToAscii', 1012 'UTF16ToString', 1013 'stringToUTF16', 1014 'lengthBytesUTF16', 1015 'UTF32ToString', 1016 'stringToUTF32', 1017 'lengthBytesUTF32', 1018 'stringToNewUTF8', 1019 'stringToUTF8OnStack', 1020 'writeArrayToMemory', 1021 'registerKeyEventCallback', 1022 'maybeCStringToJsString', 1023 'findEventTarget', 1024 'getBoundingClientRect', 1025 'fillMouseEventData', 1026 'registerMouseEventCallback', 1027 'registerWheelEventCallback', 1028 'registerUiEventCallback', 1029 'registerFocusEventCallback', 1030 'fillDeviceOrientationEventData', 1031 'registerDeviceOrientationEventCallback', 1032 'fillDeviceMotionEventData', 1033 'registerDeviceMotionEventCallback', 1034 'screenOrientation', 1035 'fillOrientationChangeEventData', 1036 'registerOrientationChangeEventCallback', 1037 'fillFullscreenChangeEventData', 1038 'registerFullscreenChangeEventCallback', 1039 'JSEvents_requestFullscreen', 1040 'JSEvents_resizeCanvasForFullscreen', 1041 'registerRestoreOldStyle', 1042 'hideEverythingExceptGivenElement', 1043 'restoreHiddenElements', 1044 'setLetterbox', 1045 'softFullscreenResizeWebGLRenderTarget', 1046 'doRequestFullscreen', 1047 'fillPointerlockChangeEventData', 1048 'registerPointerlockChangeEventCallback', 1049 'registerPointerlockErrorEventCallback', 1050 'requestPointerLock', 1051 'fillVisibilityChangeEventData', 1052 'registerVisibilityChangeEventCallback', 1053 'registerTouchEventCallback', 1054 'fillGamepadEventData', 1055 'registerGamepadEventCallback', 1056 'registerBeforeUnloadEventCallback', 1057 'fillBatteryEventData', 1058 'registerBatteryEventCallback', 1059 'setCanvasElementSize', 1060 'getCanvasElementSize', 1061 'jsStackTrace', 1062 'getCallstack', 1063 'convertPCtoSourceLocation', 1064 'getEnvStrings', 1065 'checkWasiClock', 1066 'flush_NO_FILESYSTEM', 1067 'wasiRightsToMuslOFlags', 1068 'wasiOFlagsToMuslOFlags', 1069 'initRandomFill', 1070 'randomFill', 1071 'safeSetTimeout', 1072 'setImmediateWrapped', 1073 'safeRequestAnimationFrame', 1074 'clearImmediateWrapped', 1075 'registerPostMainLoop', 1076 'registerPreMainLoop', 1077 'getPromise', 1078 'makePromise', 1079 'idsToPromises', 1080 'makePromiseCallback', 1081 'ExceptionInfo', 1082 'findMatchingCatch', 1083 'Browser_asyncPrepareDataCounter', 1084 'isLeapYear', 1085 'ydayFromDate', 1086 'arraySum', 1087 'addDays', 1088 'getSocketFromFD', 1089 'getSocketAddress', 1090 'FS_createPreloadedFile', 1091 'FS_modeStringToFlags', 1092 'FS_getMode', 1093 'FS_stdin_getChar', 1094 'FS_mkdirTree', 1095 '_setNetworkCallback', 1096 'heapObjectForWebGLType', 1097 'toTypedArrayIndex', 1098 'webgl_enable_ANGLE_instanced_arrays', 1099 'webgl_enable_OES_vertex_array_object', 1100 'webgl_enable_WEBGL_draw_buffers', 1101 'webgl_enable_WEBGL_multi_draw', 1102 'webgl_enable_EXT_polygon_offset_clamp', 1103 'webgl_enable_EXT_clip_control', 1104 'webgl_enable_WEBGL_polygon_mode', 1105 'emscriptenWebGLGet', 1106 'computeUnpackAlignedImageSize', 1107 'colorChannelsInGlTextureFormat', 1108 'emscriptenWebGLGetTexPixelData', 1109 'emscriptenWebGLGetUniform', 1110 'webglGetUniformLocation', 1111 'webglPrepareUniformLocationsBeforeFirstUse', 1112 'webglGetLeftBracePos', 1113 'emscriptenWebGLGetVertexAttrib', 1114 '__glGetActiveAttribOrUniform', 1115 'writeGLArray', 1116 'registerWebGlEventCallback', 1117 'runAndAbortIfError', 1118 'ALLOC_NORMAL', 1119 'ALLOC_STACK', 1120 'allocate', 1121 'writeStringToMemory', 1122 'writeAsciiToMemory', 1123 'demangle', 1124 'stackTrace', 1125 ]; 1126 missingLibrarySymbols.forEach(missingLibrarySymbol) 1127 1128 var unexportedSymbols = [ 1129 'run', 1130 'addRunDependency', 1131 'removeRunDependency', 1132 'out', 1133 'err', 1134 'callMain', 1135 'abort', 1136 'wasmMemory', 1137 'wasmExports', 1138 'HEAPF32', 1139 'HEAPF64', 1140 'HEAP8', 1141 'HEAPU8', 1142 'HEAP16', 1143 'HEAPU16', 1144 'HEAP32', 1145 'HEAPU32', 1146 'HEAP64', 1147 'HEAPU64', 1148 'writeStackCookie', 1149 'checkStackCookie', 1150 'INT53_MAX', 1151 'INT53_MIN', 1152 'stackSave', 1153 'stackRestore', 1154 'ptrToString', 1155 'ENV', 1156 'ERRNO_CODES', 1157 'DNS', 1158 'Protocols', 1159 'Sockets', 1160 'timers', 1161 'warnOnce', 1162 'readEmAsmArgsArray', 1163 'wasmTable', 1164 'noExitRuntime', 1165 'addOnPreRun', 1166 'addOnPostRun', 1167 'freeTableIndexes', 1168 'functionsInTableMap', 1169 'setValue', 1170 'getValue', 1171 'PATH', 1172 'PATH_FS', 1173 'UTF8Decoder', 1174 'UTF16Decoder', 1175 'JSEvents', 1176 'specialHTMLTargets', 1177 'findCanvasEventTarget', 1178 'currentFullscreenStrategy', 1179 'restoreOldWindowedStyle', 1180 'UNWIND_CACHE', 1181 'ExitStatus', 1182 'emSetImmediate', 1183 'emClearImmediate_deps', 1184 'emClearImmediate', 1185 'promiseMap', 1186 'uncaughtExceptionCount', 1187 'exceptionLast', 1188 'exceptionCaught', 1189 'Browser', 1190 'requestFullscreen', 1191 'requestFullScreen', 1192 'setCanvasSize', 1193 'getUserMedia', 1194 'createContext', 1195 'getPreloadedImageData__data', 1196 'wget', 1197 'MONTH_DAYS_REGULAR', 1198 'MONTH_DAYS_LEAP', 1199 'MONTH_DAYS_REGULAR_CUMULATIVE', 1200 'MONTH_DAYS_LEAP_CUMULATIVE', 1201 'SYSCALLS', 1202 'preloadPlugins', 1203 'FS_stdin_getChar_buffer', 1204 'FS_unlink', 1205 'FS_createPath', 1206 'FS_createDevice', 1207 'FS_readFile', 1208 'FS', 1209 'FS_root', 1210 'FS_mounts', 1211 'FS_devices', 1212 'FS_streams', 1213 'FS_nextInode', 1214 'FS_nameTable', 1215 'FS_currentPath', 1216 'FS_initialized', 1217 'FS_ignorePermissions', 1218 'FS_filesystems', 1219 'FS_syncFSRequests', 1220 'FS_readFiles', 1221 'FS_lookupPath', 1222 'FS_getPath', 1223 'FS_hashName', 1224 'FS_hashAddNode', 1225 'FS_hashRemoveNode', 1226 'FS_lookupNode', 1227 'FS_createNode', 1228 'FS_destroyNode', 1229 'FS_isRoot', 1230 'FS_isMountpoint', 1231 'FS_isFile', 1232 'FS_isDir', 1233 'FS_isLink', 1234 'FS_isChrdev', 1235 'FS_isBlkdev', 1236 'FS_isFIFO', 1237 'FS_isSocket', 1238 'FS_flagsToPermissionString', 1239 'FS_nodePermissions', 1240 'FS_mayLookup', 1241 'FS_mayCreate', 1242 'FS_mayDelete', 1243 'FS_mayOpen', 1244 'FS_checkOpExists', 1245 'FS_nextfd', 1246 'FS_getStreamChecked', 1247 'FS_getStream', 1248 'FS_createStream', 1249 'FS_closeStream', 1250 'FS_dupStream', 1251 'FS_doSetAttr', 1252 'FS_chrdev_stream_ops', 1253 'FS_major', 1254 'FS_minor', 1255 'FS_makedev', 1256 'FS_registerDevice', 1257 'FS_getDevice', 1258 'FS_getMounts', 1259 'FS_syncfs', 1260 'FS_mount', 1261 'FS_unmount', 1262 'FS_lookup', 1263 'FS_mknod', 1264 'FS_statfs', 1265 'FS_statfsStream', 1266 'FS_statfsNode', 1267 'FS_create', 1268 'FS_mkdir', 1269 'FS_mkdev', 1270 'FS_symlink', 1271 'FS_rename', 1272 'FS_rmdir', 1273 'FS_readdir', 1274 'FS_readlink', 1275 'FS_stat', 1276 'FS_fstat', 1277 'FS_lstat', 1278 'FS_doChmod', 1279 'FS_chmod', 1280 'FS_lchmod', 1281 'FS_fchmod', 1282 'FS_doChown', 1283 'FS_chown', 1284 'FS_lchown', 1285 'FS_fchown', 1286 'FS_doTruncate', 1287 'FS_truncate', 1288 'FS_ftruncate', 1289 'FS_utime', 1290 'FS_open', 1291 'FS_close', 1292 'FS_isClosed', 1293 'FS_llseek', 1294 'FS_read', 1295 'FS_write', 1296 'FS_mmap', 1297 'FS_msync', 1298 'FS_ioctl', 1299 'FS_writeFile', 1300 'FS_cwd', 1301 'FS_chdir', 1302 'FS_createDefaultDirectories', 1303 'FS_createDefaultDevices', 1304 'FS_createSpecialDirectories', 1305 'FS_createStandardStreams', 1306 'FS_staticInit', 1307 'FS_init', 1308 'FS_quit', 1309 'FS_findObject', 1310 'FS_analyzePath', 1311 'FS_createFile', 1312 'FS_createDataFile', 1313 'FS_forceLoadFile', 1314 'FS_createLazyFile', 1315 'FS_absolutePath', 1316 'FS_createFolder', 1317 'FS_createLink', 1318 'FS_joinPath', 1319 'FS_mmapAlloc', 1320 'FS_standardizePath', 1321 'MEMFS', 1322 'TTY', 1323 'PIPEFS', 1324 'SOCKFS', 1325 'tempFixedLengthArray', 1326 'miniTempWebGLFloatBuffers', 1327 'miniTempWebGLIntBuffers', 1328 'GL', 1329 'AL', 1330 'GLUT', 1331 'EGL', 1332 'GLEW', 1333 'IDBStore', 1334 'SDL', 1335 'SDL_gfx', 1336 'allocateUTF8', 1337 'allocateUTF8OnStack', 1338 'print', 1339 'printErr', 1340 'jstoi_s', 1341 ]; 1342 unexportedSymbols.forEach(unexportedRuntimeSymbol); 1343 1344 // End runtime exports 1345 // Begin JS library exports 1346 // End JS library exports 1347 1348 // end include: postlibrary.js 1349 1350 function checkIncomingModuleAPI() { 1351 ignoredModuleProp('fetchSettings'); 1352 } 1353 1354 // Imports from the Wasm binary. 1355 var _sum = Module['_sum'] = makeInvalidEarlyAccess('_sum'); 1356 var _fflush = makeInvalidEarlyAccess('_fflush'); 1357 var _emscripten_stack_init = makeInvalidEarlyAccess('_emscripten_stack_init'); 1358 var _emscripten_stack_get_free = makeInvalidEarlyAccess('_emscripten_stack_get_free'); 1359 var _emscripten_stack_get_base = makeInvalidEarlyAccess('_emscripten_stack_get_base'); 1360 var _emscripten_stack_get_end = makeInvalidEarlyAccess('_emscripten_stack_get_end'); 1361 var __emscripten_stack_restore = makeInvalidEarlyAccess('__emscripten_stack_restore'); 1362 var __emscripten_stack_alloc = makeInvalidEarlyAccess('__emscripten_stack_alloc'); 1363 var _emscripten_stack_get_current = makeInvalidEarlyAccess('_emscripten_stack_get_current'); 1364 1365 function assignWasmExports(wasmExports) { 1366 Module['_sum'] = _sum = createExportWrapper('sum', 2); 1367 _fflush = createExportWrapper('fflush', 1); 1368 _emscripten_stack_init = wasmExports['emscripten_stack_init']; 1369 _emscripten_stack_get_free = wasmExports['emscripten_stack_get_free']; 1370 _emscripten_stack_get_base = wasmExports['emscripten_stack_get_base']; 1371 _emscripten_stack_get_end = wasmExports['emscripten_stack_get_end']; 1372 __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; 1373 __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; 1374 _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; 1375 } 1376 var wasmImports = { 1377 1378 }; 1379 var wasmExports = await createWasm(); 1380 1381 1382 // include: postamble.js 1383 // === Auto-generated postamble setup entry stuff === 1384 1385 var calledRun; 1386 1387 function stackCheckInit() { 1388 // This is normally called automatically during __wasm_call_ctors but need to 1389 // get these values before even running any of the ctors so we call it redundantly 1390 // here. 1391 _emscripten_stack_init(); 1392 // TODO(sbc): Move writeStackCookie to native to to avoid this. 1393 writeStackCookie(); 1394 } 1395 1396 function run() { 1397 1398 if (runDependencies > 0) { 1399 dependenciesFulfilled = run; 1400 return; 1401 } 1402 1403 stackCheckInit(); 1404 1405 preRun(); 1406 1407 // a preRun added a dependency, run will be called later 1408 if (runDependencies > 0) { 1409 dependenciesFulfilled = run; 1410 return; 1411 } 1412 1413 function doRun() { 1414 // run may have just been called through dependencies being fulfilled just in this very frame, 1415 // or while the async setStatus time below was happening 1416 assert(!calledRun); 1417 calledRun = true; 1418 Module['calledRun'] = true; 1419 1420 if (ABORT) return; 1421 1422 initRuntime(); 1423 1424 readyPromiseResolve?.(Module); 1425 Module['onRuntimeInitialized']?.(); 1426 consumedModuleProp('onRuntimeInitialized'); 1427 1428 assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); 1429 1430 postRun(); 1431 } 1432 1433 if (Module['setStatus']) { 1434 Module['setStatus']('Running...'); 1435 setTimeout(() => { 1436 setTimeout(() => Module['setStatus'](''), 1); 1437 doRun(); 1438 }, 1); 1439 } else 1440 { 1441 doRun(); 1442 } 1443 checkStackCookie(); 1444 } 1445 1446 function checkUnflushedContent() { 1447 // Compiler settings do not allow exiting the runtime, so flushing 1448 // the streams is not possible. but in ASSERTIONS mode we check 1449 // if there was something to flush, and if so tell the user they 1450 // should request that the runtime be exitable. 1451 // Normally we would not even include flush() at all, but in ASSERTIONS 1452 // builds we do so just for this check, and here we see if there is any 1453 // content to flush, that is, we check if there would have been 1454 // something a non-ASSERTIONS build would have not seen. 1455 // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 1456 // mode (which has its own special function for this; otherwise, all 1457 // the code is inside libc) 1458 var oldOut = out; 1459 var oldErr = err; 1460 var has = false; 1461 out = err = (x) => { 1462 has = true; 1463 } 1464 try { // it doesn't matter if it fails 1465 _fflush(0); 1466 } catch(e) {} 1467 out = oldOut; 1468 err = oldErr; 1469 if (has) { 1470 warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); 1471 warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); 1472 } 1473 } 1474 1475 function preInit() { 1476 if (Module['preInit']) { 1477 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; 1478 while (Module['preInit'].length > 0) { 1479 Module['preInit'].shift()(); 1480 } 1481 } 1482 consumedModuleProp('preInit'); 1483 } 1484 1485 preInit(); 1486 run(); 1487 1488 // end include: postamble.js 1489 1490 // include: postamble_modularize.js 1491 // In MODULARIZE mode we wrap the generated code in a factory function 1492 // and return either the Module itself, or a promise of the module. 1493 // 1494 // We assign to the `moduleRtn` global here and configure closure to see 1495 // this as and extern so it won't get minified. 1496 1497 if (runtimeInitialized) { 1498 moduleRtn = Module; 1499 } else { 1500 // Set up the promise that indicates the Module is initialized 1501 moduleRtn = new Promise((resolve, reject) => { 1502 readyPromiseResolve = resolve; 1503 readyPromiseReject = reject; 1504 }); 1505 } 1506 1507 // Assertion for attempting to access module properties on the incoming 1508 // moduleArg. In the past we used this object as the prototype of the module 1509 // and assigned properties to it, but now we return a distinct object. This 1510 // keeps the instance private until it is ready (i.e the promise has been 1511 // resolved). 1512 for (const prop of Object.keys(Module)) { 1513 if (!(prop in moduleArg)) { 1514 Object.defineProperty(moduleArg, prop, { 1515 configurable: true, 1516 get() { 1517 abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`) 1518 } 1519 }); 1520 } 1521 } 1522 // end include: postamble_modularize.js 1523 1524 1525 1526 return moduleRtn; 1527 } 1528 1529 // Export using a UMD style export, or ES6 exports if selected 1530 export default SumLibrary; 1531