From 8e491a220a89000f6a9ab1e8852e1d2d7033a3cd Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Tue, 23 Dec 2025 21:28:40 +1100 Subject: [PATCH] dingus --- favicon.ico | Bin 0 -> 180052 bytes index.html | 4 +- node_modules/.cache/wrangler/pages.json | 4 + .../.cache/wrangler/wrangler-account.json | 6 + node_modules/.mf/cf.json | 1 + playground/index.html | 87 + playground/playground.js | 5169 +++++++++++++++++ playground/playground.wasm | Bin 0 -> 466017 bytes 8 files changed, 5270 insertions(+), 1 deletion(-) create mode 100644 favicon.ico create mode 100644 node_modules/.cache/wrangler/pages.json create mode 100644 node_modules/.cache/wrangler/wrangler-account.json create mode 100644 node_modules/.mf/cf.json create mode 100644 playground/index.html create mode 100644 playground/playground.js create mode 100755 playground/playground.wasm diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..25578d681cbf64f0003bccb8485796b70ef5bbc5 GIT binary patch literal 180052 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 m + Solstice @@ -10,11 +11,12 @@
- + Solstice logo

Solstice

A programming language focused on ease of use.

+
diff --git a/node_modules/.cache/wrangler/pages.json b/node_modules/.cache/wrangler/pages.json new file mode 100644 index 0000000..aa9fb9e --- /dev/null +++ b/node_modules/.cache/wrangler/pages.json @@ -0,0 +1,4 @@ +{ + "account_id": "74bee0e1b8240f33b5876649abbfb3c3", + "project_name": "solstice" +} \ No newline at end of file diff --git a/node_modules/.cache/wrangler/wrangler-account.json b/node_modules/.cache/wrangler/wrangler-account.json new file mode 100644 index 0000000..bb60758 --- /dev/null +++ b/node_modules/.cache/wrangler/wrangler-account.json @@ -0,0 +1,6 @@ +{ + "account": { + "id": "74bee0e1b8240f33b5876649abbfb3c3", + "name": "Chookspace" + } +} \ No newline at end of file diff --git a/node_modules/.mf/cf.json b/node_modules/.mf/cf.json new file mode 100644 index 0000000..d34aa8a --- /dev/null +++ b/node_modules/.mf/cf.json @@ -0,0 +1 @@ +{"httpProtocol":"HTTP/1.1","clientAcceptEncoding":"gzip, deflate, br","requestPriority":"","edgeRequestKeepAliveStatus":1,"requestHeaderNames":{},"clientTcpRtt":15,"colo":"SYD","asn":1221,"asOrganization":"Telstra Limited","country":"AU","isEUCountry":false,"city":"Sydney","continent":"OC","region":"New South Wales","regionCode":"NSW","timezone":"Australia/Sydney","longitude":"151.20732","latitude":"-33.86785","postalCode":"1001","tlsVersion":"TLSv1.3","tlsCipher":"AEAD-AES256-GCM-SHA384","tlsClientRandom":"VnosRll56NurYMmPAR45l8rG4I2Nklvmcb+fGaOXVTI=","tlsClientCiphersSha1":"kXrN3VEKDdzz2cPKTQaKzpxVTxQ=","tlsClientExtensionsSha1":"1eY97BUYYO8vDaTfHQywB1pcNdM=","tlsClientExtensionsSha1Le":"u4wtEMFQBY18l3BzHAvORm+KGRw=","tlsExportedAuthenticator":{"clientHandshake":"1dfbe7451ef201532a216471f87886dfd3d290b649ac6787f187e7a296c886e53a496bd6b59c693b87f2d5b78c90e5b4","serverHandshake":"f7b332d2f13f55a5ccd91cff8554173516c5141b77e217c37b7a2b1ee552da7c6a7abbb66b27c722d1adbfd96266d778","clientFinished":"01042563ecd01453b385f6679691fe23b1ba391e1d3faa8accca1c80dad3e39e69f8ceb924a9640b7b527f1c2dbddab9","serverFinished":"38937607097ad8fc3847b2cf632b60444be3233468e24bceaaf05ea263c7ea5bb3e8c62fedc65ad96ce62ffd3db9937e"},"tlsClientHelloLength":"1603","tlsClientAuth":{"certPresented":"0","certVerified":"NONE","certRevoked":"0","certIssuerDN":"","certSubjectDN":"","certIssuerDNRFC2253":"","certSubjectDNRFC2253":"","certIssuerDNLegacy":"","certSubjectDNLegacy":"","certSerial":"","certIssuerSerial":"","certSKI":"","certIssuerSKI":"","certFingerprintSHA1":"","certFingerprintSHA256":"","certNotBefore":"","certNotAfter":""},"verifiedBotCategory":"","botManagement":{"corporateProxy":false,"verifiedBot":false,"jsDetection":{"passed":false},"staticResource":false,"detectionIds":{},"score":99}} \ No newline at end of file diff --git a/playground/index.html b/playground/index.html new file mode 100644 index 0000000..a23fb05 --- /dev/null +++ b/playground/index.html @@ -0,0 +1,87 @@ + + + + + + Solstice Playground + + + + + +
+

Solstice Playground

+ + + +
+ +
+ +

Output:

+
Output will appear here. Click "Run Code" to run!
+ + +
+ + diff --git a/playground/playground.js b/playground/playground.js new file mode 100644 index 0000000..a0bdd5b --- /dev/null +++ b/playground/playground.js @@ -0,0 +1,5169 @@ + +var createSolsticeModule = (() => { + var _scriptDir = import.meta.url; + + return ( +async function(moduleArg = {}) { + +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = moduleArg; + +// Set up the promise that indicates the Module is initialized +var readyPromiseResolve, readyPromiseReject; +Module['ready'] = new Promise((resolve, reject) => { + readyPromiseResolve = resolve; + readyPromiseReject = reject; +}); +["_memory","___indirect_function_table","_run_source","onRuntimeInitialized"].forEach((prop) => { + if (!Object.getOwnPropertyDescriptor(Module['ready'], prop)) { + Object.defineProperty(Module['ready'], prop, { + get: () => abort('You are getting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'), + set: () => abort('You are setting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'), + }); + } +}); + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = Object.assign({}, Module); + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var read_, + readAsync, + readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') 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?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // `require()` is no-op in an ESM module, use `createRequire()` to construct + // the require()` function. This is only necessary for multi-environment + // builds, `-sENVIRONMENT=node` emits a static import declaration instead. + // TODO: Swap all `require()`'s with `import()`'s? + const { createRequire } = await import('module'); + /** @suppress{duplicate} */ + var require = createRequire(import.meta.url); + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = nodePath.dirname(scriptDirectory) + '/'; + } else { + // EXPORT_ES6 + ENVIRONMENT_IS_NODE always requires use of import.meta.url, + // since there's no way getting the current absolute path of the module when + // support for that is not available. + scriptDirectory = require('url').fileURLToPath(new URL('./', import.meta.url)); // includes trailing slash + } + +// include: node_shell_read.js +read_ = (filename, binary) => { + // We need to re-wrap `file://` strings to URLs. Normalizing isn't + // necessary in that case, the path should already be absolute. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + return fs.readFileSync(filename, binary ? undefined : 'utf8'); +}; + +readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; +}; + +readAsync = (filename, onload, onerror, binary = true) => { + // See the comment in the `read_` function. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + fs.readFile(filename, binary ? undefined : 'utf8', (err, data) => { + if (err) onerror(err); + else onload(binary ? data.buffer : data); + }); +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + // MODULARIZE will export the module in the proper place outside, we don't need to export here + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') 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?)'); + + if (typeof read != 'undefined') { + read_ = read; + } + + readBinary = (f) => { + if (typeof readbuffer == 'function') { + return new Uint8Array(readbuffer(f)); + } + let data = read(f, 'binary'); + assert(typeof data == 'object'); + return data; + }; + + readAsync = (f, onload, onerror) => { + setTimeout(() => onload(readBinary(f))); + }; + + if (typeof clearTimeout == 'undefined') { + globalThis.clearTimeout = (id) => {}; + } + + if (typeof setTimeout == 'undefined') { + // spidermonkey lacks setTimeout but we use it above in readAsync. + globalThis.setTimeout = (f) => (typeof f == 'function') ? f() : abort(); + } + + if (typeof scriptArgs != 'undefined') { + arguments_ = scriptArgs; + } else if (typeof arguments != 'undefined') { + arguments_ = arguments; + } + + if (typeof quit == 'function') { + quit_ = (status, toThrow) => { + // Unlike node which has process.exitCode, d8 has no such mechanism. So we + // have no way to set the exit code and then let the program exit with + // that code when it naturally stops running (say, when all setTimeouts + // have completed). For that reason, we must call `quit` - the only way to + // set the exit code - but quit also halts immediately. To increase + // consistency with node (and the web) we schedule the actual quit call + // using a setTimeout to give the current stack and any exception handlers + // a chance to run. This enables features such as addOnPostRun (which + // expected to be able to run code after main returns). + setTimeout(() => { + if (!(toThrow instanceof ExitStatus)) { + let toLog = toThrow; + if (toThrow && typeof toThrow == 'object' && toThrow.stack) { + toLog = [toThrow, toThrow.stack]; + } + err(`exiting due to exception: ${toLog}`); + } + quit(status); + }); + throw toThrow; + }; + } + + if (typeof print != 'undefined') { + // Prefer to use print/printErr where they exist, as they usually work better. + if (typeof console == 'undefined') console = /** @type{!Console} */({}); + console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); + console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr != 'undefined' ? printErr : print); + } + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // When MODULARIZE, this JS may be executed later, after document.currentScript + // is gone, so we saved it, and we use it here instead of any other info. + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof importScripts == 'function')) 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?)'); + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { +// include: web_or_worker_shell_read.js +read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + } + + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + } + +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +if (Module['quit']) quit_ = Module['quit'];legacyModuleProp('quit', 'quit_'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed (modify read_ in JS)'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('read', 'read_'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// include: base64Utils.js +// Converts a string of base64 into a byte array (Uint8Array). +function intArrayFromBase64(s) { + if (typeof ENVIRONMENT_IS_NODE != 'undefined' && ENVIRONMENT_IS_NODE) { + var buf = Buffer.from(s, 'base64'); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.length); + } + + var decoded = atob(s); + var bytes = new Uint8Array(decoded.length); + for (var i = 0 ; i < decoded.length ; ++i) { + bytes[i] = decoded.charCodeAt(i); + } + return bytes; +} + +// If filename is a base64 data URI, parses and returns data (Buffer on node, +// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined. +function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); +} +// end include: base64Utils.js +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/** @type {!Float64Array} */ + HEAPF64; + +// include: runtime_shared.js +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); +} +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_assertions.js +// Endianness check +(function() { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +// end include: runtime_assertions.js +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the main() is called + +var runtimeInitialized = false; + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + +if (!Module['noFSInit'] && !FS.init.initialized) + FS.init(); +FS.ignorePermissions = false; + +TTY.init(); + callRuntimeCallbacks(__ATINIT__); +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnExit(cb) { +} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + +// include: runtime_math.js +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + +assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +// end include: runtime_math.js +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + EXITSTATUS = 1; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + readyPromiseReject(e); + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// include: memoryprofiler.js +// end include: memoryprofiler.js +// include: URIUtils.js +// Prefix of data URIs emitted by SINGLE_FILE and related options. +var dataURIPrefix = 'data:application/octet-stream;base64,'; + +/** + * Indicates whether filename is a base64 data URI. + * @noinline + */ +var isDataURI = (filename) => filename.startsWith(dataURIPrefix); + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); +// end include: URIUtils.js +function createExportWrapper(name) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + return f(...args); + }; +} + +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +var wasmBinaryFile; +if (Module['locateFile']) { + wasmBinaryFile = 'playground.wasm'; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } +} else { + // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too. + wasmBinaryFile = new URL('playground.wasm', import.meta.url).href; +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +function getBinaryPromise(binaryFile) { + // If we don't have the binary yet, try to load it asynchronously. + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. + if (!wasmBinary + && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == 'function' + && !isFileURI(binaryFile) + ) { + return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => { + if (!response['ok']) { + throw `failed to load wasm binary file at '${binaryFile}'`; + } + return response['arrayBuffer'](); + }).catch(() => getBinarySync(binaryFile)); + } + else if (readAsync) { + // fetch is not available or url is file => try XHR (readAsync uses XHR internally) + return new Promise((resolve, reject) => { + readAsync(binaryFile, (response) => resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))), reject) + }); + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return Promise.resolve().then(() => getBinarySync(binaryFile)); +} + +function instantiateArrayBuffer(binaryFile, imports, receiver) { + return getBinaryPromise(binaryFile).then((binary) => { + return WebAssembly.instantiate(binary, imports); + }).then(receiver, (reason) => { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + 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`); + } + abort(reason); + }); +} + +function instantiateAsync(binary, binaryFile, imports, callback) { + if (!binary && + typeof WebAssembly.instantiateStreaming == 'function' && + !isDataURI(binaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(binaryFile) && + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + !ENVIRONMENT_IS_NODE && + typeof fetch == 'function') { + return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => { + // Suppress closure warning here since the upstream definition for + // instantiateStreaming only allows Promise rather than + // an actual Response. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed. + /** @suppress {checkTypes} */ + var result = WebAssembly.instantiateStreaming(response, imports); + + return result.then( + callback, + function(reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + return instantiateArrayBuffer(binaryFile, imports, callback); + }); + }); + } + return instantiateArrayBuffer(binaryFile, imports, callback); +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +function createWasm() { + // prepare imports + var info = { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + }; + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + addOnInit(wasmExports['__wasm_call_ctors']); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // 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. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + receiveInstance(result['instance']); + } + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + + try { + return Module['instantiateWasm'](info, receiveInstance); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + // If instantiation fails, reject the module ready promise. + readyPromiseReject(e); + } + } + + // If instantiation fails, reject the module ready promise. + instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject); + return {}; // no exports yet; we'll fill them in later +} + +// Globals used by JS i64 conversions (see makeSetValue) +var tempDouble; +var tempI64; + +// include: runtime_debug.js +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +function missingGlobal(sym, msg) { + if (typeof globalThis !== 'undefined') { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + return undefined; + } + }); + } +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + if (typeof globalThis !== 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + 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`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + return undefined; + } + }); + } + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// === Body === +// end include: preamble.js + + + /** @constructor */ + function ExitStatus(status) { + this.name = 'ExitStatus'; + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': abort('to do getValue(i64) use WASM_BIGINT'); + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': abort('to do setValue(i64) use WASM_BIGINT'); + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + class ExceptionInfo { + // excPtr - Thrown object pointer to wrap. Metadata pointer is calculated from it. + constructor(excPtr) { + this.excPtr = excPtr; + this.ptr = excPtr - 24; + } + + set_type(type) { + HEAPU32[(((this.ptr)+(4))>>2)] = type; + } + + get_type() { + return HEAPU32[(((this.ptr)+(4))>>2)]; + } + + set_destructor(destructor) { + HEAPU32[(((this.ptr)+(8))>>2)] = destructor; + } + + get_destructor() { + return HEAPU32[(((this.ptr)+(8))>>2)]; + } + + set_caught(caught) { + caught = caught ? 1 : 0; + HEAP8[(this.ptr)+(12)] = caught; + } + + get_caught() { + return HEAP8[(this.ptr)+(12)] != 0; + } + + set_rethrown(rethrown) { + rethrown = rethrown ? 1 : 0; + HEAP8[(this.ptr)+(13)] = rethrown; + } + + get_rethrown() { + return HEAP8[(this.ptr)+(13)] != 0; + } + + // Initialize native structure fields. Should be called once after allocated. + init(type, destructor) { + this.set_adjusted_ptr(0); + this.set_type(type); + this.set_destructor(destructor); + } + + set_adjusted_ptr(adjustedPtr) { + HEAPU32[(((this.ptr)+(16))>>2)] = adjustedPtr; + } + + get_adjusted_ptr() { + return HEAPU32[(((this.ptr)+(16))>>2)]; + } + + // Get pointer which is expected to be received by catch clause in C++ code. It may be adjusted + // when the pointer is casted to some of the exception object base classes (e.g. when virtual + // inheritance is used). When a pointer is thrown this method should return the thrown pointer + // itself. + get_exception_ptr() { + // Work around a fastcomp bug, this code is still included for some reason in a build without + // exceptions support. + var isPointer = ___cxa_is_pointer_type(this.get_type()); + if (isPointer) { + return HEAPU32[((this.excPtr)>>2)]; + } + var adjusted = this.get_adjusted_ptr(); + if (adjusted !== 0) return adjusted; + return this.excPtr; + } + } + + var exceptionLast = 0; + + var uncaughtExceptionCount = 0; + var ___cxa_throw = (ptr, type, destructor) => { + var info = new ExceptionInfo(ptr); + // Initialize ExceptionInfo content after it was allocated in __cxa_allocate_exception. + info.init(type, destructor); + exceptionLast = ptr; + uncaughtExceptionCount++; + assert(false, 'Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.'); + }; + + var _abort = () => { + abort('native code called abort()'); + }; + + var _emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num); + + var getHeapMax = () => + // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate + // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side + // for any code that deals with heap sizes, which would require special + // casing all heap size related code to treat 0 specially. + 2147483648; + + var growMemory = (size) => { + var b = wasmMemory.buffer; + var pages = (size - b.byteLength + 65535) / 65536; + try { + // round size grow request up to wasm page size (fixed 64KB per spec) + wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size + updateMemoryViews(); + return 1 /*success*/; + } catch(e) { + err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`); + } + // implicit 0 return to save code size (caller will cast "undefined" into 0 + // anyhow) + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + // With multithreaded builds, races can happen (another thread might increase the size + // in between), so return a failure, and let the caller retry. + assert(requestedSize > oldSize); + + // Memory resize rules: + // 1. Always increase heap size to at least the requested size, rounded up + // to next page multiple. + // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap + // geometrically: increase the heap size according to + // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most + // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB). + // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap + // linearly: increase the heap size by at least + // MEMORY_GROWTH_LINEAR_STEP bytes. + // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by + // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest + // 4. If we were unable to allocate as much memory, it may be due to + // over-eager decision to excessively reserve due to (3) above. + // Hence if an allocation fails, cut down on the amount of excess + // growth, in an attempt to succeed to perform a smaller allocation. + + // A limit is set for how much we can grow. We should not exceed that + // (the wasm binary specifies it, so if we tried, we'd fail anyhow). + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`); + return false; + } + + var alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + + // Loop through potential heap size increases. If we attempt a too eager + // reservation that fails, cut down on the attempted size and reserve a + // smaller bump instead. (max 3 times, chosen somewhat arbitrarily) + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth + // but limit overreserving (default to capping at +96MB overgrowth at most) + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 ); + + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + + var replacement = growMemory(newSize); + if (replacement) { + + return true; + } + } + err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`); + return false; + }; + + var ENV = { + }; + + var getExecutableName = () => { + return thisProgram || './this.program'; + }; + var getEnvStrings = () => { + if (!getEnvStrings.strings) { + // Default values. + // Browser language detection #8751 + var lang = ((typeof navigator == 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8'; + var env = { + 'USER': 'web_user', + 'LOGNAME': 'web_user', + 'PATH': '/', + 'PWD': '/', + 'HOME': '/home/web_user', + 'LANG': lang, + '_': getExecutableName() + }; + // Apply the user-provided values, if any. + for (var x in ENV) { + // x is a key in ENV; if ENV[x] is undefined, that means it was + // explicitly set to be so. We allow user code to do that to + // force variables with default values to remain unset. + if (ENV[x] === undefined) delete env[x]; + else env[x] = ENV[x]; + } + var strings = []; + for (var x in env) { + strings.push(`${x}=${env[x]}`); + } + getEnvStrings.strings = strings; + } + return getEnvStrings.strings; + }; + + var stringToAscii = (str, buffer) => { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff)); + HEAP8[buffer++] = str.charCodeAt(i); + } + // Null-terminate the string + HEAP8[buffer] = 0; + }; + var _environ_get = (__environ, environ_buf) => { + var bufSize = 0; + getEnvStrings().forEach((string, i) => { + var ptr = environ_buf + bufSize; + HEAPU32[(((__environ)+(i*4))>>2)] = ptr; + stringToAscii(string, ptr); + bufSize += string.length + 1; + }); + return 0; + }; + + var _environ_sizes_get = (penviron_count, penviron_buf_size) => { + var strings = getEnvStrings(); + HEAPU32[((penviron_count)>>2)] = strings.length; + var bufSize = 0; + strings.forEach((string) => bufSize += string.length + 1); + HEAPU32[((penviron_buf_size)>>2)] = bufSize; + return 0; + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + readyPromiseReject(msg); + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.substr(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + }, + basename:(path) => { + // EMSCRIPTEN return '/'' for '/', not an empty string + if (path === '/') return '/'; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf('/'); + if (lastSlash === -1) return path; + return path.substr(lastSlash+1); + }, + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') { + // for modern web browsers + return (view) => crypto.getRandomValues(view); + } else + if (ENVIRONMENT_IS_NODE) { + // for nodejs with or without crypto support included + try { + var crypto_module = require('crypto'); + var randomFillSync = crypto_module['randomFillSync']; + if (randomFillSync) { + // nodejs with LTS crypto support + return (view) => crypto_module['randomFillSync'](view); + } + // very old nodejs with the original crypto API + var randomBytes = crypto_module['randomBytes']; + return (view) => ( + view.set(randomBytes(view.byteLength)), + // Return the original view to match modern native implementations. + view + ); + } catch (e) { + // nodejs doesn't have crypto support + } + } + // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 + abort('no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };'); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + return (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + } + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, + // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } else { + result = null; + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else if (typeof readline == 'function') { + // Command line. + result = readline(); + if (result !== null) { + result += '\n'; + } + } + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }, + }, + }; + + + var zeroMemory = (address, size) => { + HEAPU8.fill(0, address, address + size); + return address; + }; + + var alignMemory = (size, alignment) => { + assert(alignment, "alignment argument is required"); + return Math.ceil(size / alignment) * alignment; + }; + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw FS.genericErrors[44]; + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + // if we're overwriting a directory at new_name, make sure it's empty. + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now() + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + readdir(node) { + var entries = ['.', '..']; + for (var key of Object.keys(node.contents)) { + entries.push(key); + } + return entries; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + // If the buffer is located in main memory (HEAP), and if + // memory can grow, we can't hold on to references of the + // memory buffer, as they may get invalidated. That means we + // need to do copy its contents. + if (buffer.buffer === HEAP8.buffer) { + canOwn = false; + } + + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + allocate(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + HEAP8.set(contents, ptr); + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + /** @param {boolean=} noRunDep */ + var asyncLoad = (url, onload, onerror, noRunDep) => { + var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : ''; + readAsync(url, (arrayBuffer) => { + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, (event) => { + if (onerror) { + onerror(); + } else { + throw `Loading data file "${url}" failed.`; + } + }); + if (dep) addRunDependency(dep); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url, processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + var ERRNO_MESSAGES = { + 0:"Success", + 1:"Arg list too long", + 2:"Permission denied", + 3:"Address already in use", + 4:"Address not available", + 5:"Address family not supported by protocol family", + 6:"No more processes", + 7:"Socket already connected", + 8:"Bad file number", + 9:"Trying to read unreadable message", + 10:"Mount device busy", + 11:"Operation canceled", + 12:"No children", + 13:"Connection aborted", + 14:"Connection refused", + 15:"Connection reset by peer", + 16:"File locking deadlock error", + 17:"Destination address required", + 18:"Math arg out of domain of func", + 19:"Quota exceeded", + 20:"File exists", + 21:"Bad address", + 22:"File too large", + 23:"Host is unreachable", + 24:"Identifier removed", + 25:"Illegal byte sequence", + 26:"Connection already in progress", + 27:"Interrupted system call", + 28:"Invalid argument", + 29:"I/O error", + 30:"Socket is already connected", + 31:"Is a directory", + 32:"Too many symbolic links", + 33:"Too many open files", + 34:"Too many links", + 35:"Message too long", + 36:"Multihop attempted", + 37:"File or path name too long", + 38:"Network interface is not configured", + 39:"Connection reset by network", + 40:"Network is unreachable", + 41:"Too many open files in system", + 42:"No buffer space available", + 43:"No such device", + 44:"No such file or directory", + 45:"Exec format error", + 46:"No record locks available", + 47:"The link has been severed", + 48:"Not enough core", + 49:"No message of desired type", + 50:"Protocol not available", + 51:"No space left on device", + 52:"Function not implemented", + 53:"Socket is not connected", + 54:"Not a directory", + 55:"Directory not empty", + 56:"State not recoverable", + 57:"Socket operation on non-socket", + 59:"Not a typewriter", + 60:"No such device or address", + 61:"Value too large for defined data type", + 62:"Previous owner died", + 63:"Not super-user", + 64:"Broken pipe", + 65:"Protocol error", + 66:"Unknown protocol", + 67:"Protocol wrong type for socket", + 68:"Math result not representable", + 69:"Read only file system", + 70:"Illegal seek", + 71:"No such process", + 72:"Stale file handle", + 73:"Connection timed out", + 74:"Text file busy", + 75:"Cross-device link", + 100:"Device not a stream", + 101:"Bad font file fmt", + 102:"Invalid slot", + 103:"Invalid request code", + 104:"No anode", + 105:"Block device required", + 106:"Channel number out of range", + 107:"Level 3 halted", + 108:"Level 3 reset", + 109:"Link number out of range", + 110:"Protocol driver not attached", + 111:"No CSI structure available", + 112:"Level 2 halted", + 113:"Invalid exchange", + 114:"Invalid request descriptor", + 115:"Exchange full", + 116:"No data (for no delay io)", + 117:"Timer expired", + 118:"Out of streams resources", + 119:"Machine is not on the network", + 120:"Package not installed", + 121:"The object is remote", + 122:"Advertise error", + 123:"Srmount error", + 124:"Communication error on send", + 125:"Cross mount point (not really error)", + 126:"Given log. name not unique", + 127:"f.d. invalid for this operation", + 128:"Remote address changed", + 129:"Can access a needed shared lib", + 130:"Accessing a corrupted shared lib", + 131:".lib section in a.out corrupted", + 132:"Attempting to link in too many libs", + 133:"Attempting to exec a shared library", + 135:"Streams pipe error", + 136:"Too many users", + 137:"Socket type not supported", + 138:"Not supported", + 139:"Protocol family not supported", + 140:"Can't send after socket shutdown", + 141:"Too many references", + 142:"Host is down", + 148:"No medium (in tape drive)", + 156:"Level 2 not synchronized", + }; + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + ErrnoError:class extends Error { + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(ERRNO_MESSAGES[errno]); + // TODO(sbc): Use the inline member declaration syntax once we + // support it in acorn and closure. + this.name = 'ErrnoError'; + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + genericErrors:{ + }, + filesystems:null, + syncFSRequests:0, + FSStream:class { + constructor() { + // TODO(https://github.com/emscripten-core/emscripten/issues/21414): + // Use inline field declarations. + this.shared = {}; + } + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + this.readMode = 292/*292*/ | 73/*73*/; + this.writeMode = 146/*146*/; + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + path = PATH_FS.resolve(path); + + if (!path) return { path: '', node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + opts = Object.assign(defaults, opts) + + if (opts.recurse_count > 8) { // max recursive lookup of 8 + throw new FS.ErrnoError(32); + } + + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 }); + current = lookup.node; + + if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + throw new FS.ErrnoError(32); + } + } + } + } + + return { path: current_path, node: current }; + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write + (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(28); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + create(path, mode) { + mode = mode !== undefined ? mode : 438 /* 0666 */; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode) { + mode = mode !== undefined ? mode : 511 /* 0777 */; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue; + d += '/' + dirs[i]; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 438 /* 0666 */; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + return node.node_ops.readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + return node.node_ops.getattr(node); + }, + lstat(path) { + return FS.stat(path, true); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.chmod(stream.node, mode); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + // we ignore the uid / gid for now + }); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.chown(stream.node, uid, gid); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.truncate(stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + }, + open(path, flags, mode) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path == 'object') { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + // ignore + } + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else { + // node doesn't exist, try to create it + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + allocate(stream, offset, length) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + stream.stream_ops.allocate(stream, offset, length); + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomLeft = randomFill(randomBuffer).byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73); + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams() { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) + [44].forEach((code) => { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ''; + }); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.init.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + Module['stdin'] = input || Module['stdin']; + Module['stdout'] = output || Module['stdout']; + Module['stderr'] = error || Module['stderr']; + + FS.createStandardStreams(); + }, + quit() { + FS.init.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + // ignore EEXIST + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else if (read_) { + // Command-line. + try { + // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as + // read() will try to parse UTF8. + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.'); + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + constructor() { + this.lengthKnown = false; + this.chunks = []; // Loaded chunks. Index is the chunk number + } + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return PATH.join2(dir, path); + }, + doStat(func, path, buf) { + var stat = func(path); + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + (tempI64 = [stat.size>>>0,(tempDouble = stat.size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[(((buf)+(24))>>2)] = tempI64[0],HEAP32[(((buf)+(28))>>2)] = tempI64[1]); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + (tempI64 = [Math.floor(atime / 1000)>>>0,(tempDouble = Math.floor(atime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[(((buf)+(40))>>2)] = tempI64[0],HEAP32[(((buf)+(44))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000; + (tempI64 = [Math.floor(mtime / 1000)>>>0,(tempDouble = Math.floor(mtime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[(((buf)+(56))>>2)] = tempI64[0],HEAP32[(((buf)+(60))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000; + (tempI64 = [Math.floor(ctime / 1000)>>>0,(tempDouble = Math.floor(ctime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[(((buf)+(72))>>2)] = tempI64[0],HEAP32[(((buf)+(76))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000; + (tempI64 = [stat.ino>>>0,(tempDouble = stat.ino,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[(((buf)+(88))>>2)] = tempI64[0],HEAP32[(((buf)+(92))>>2)] = tempI64[1]); + return 0; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + varargs:undefined, + get() { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }, + getp() { return SYSCALLS.get() }, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + }; + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset !== 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var convertI32PairToI53Checked = (lo, hi) => { + assert(lo == (lo >>> 0) || lo == (lo|0)); // lo should either be a i32 or a u32 + assert(hi === (hi|0)); // hi should be a i32 + return ((hi + 0x200000) >>> 0 < 0x400001 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN; + }; + function _fd_seek(fd,offset_low, offset_high,whence,newOffset) { + var offset = convertI32PairToI53Checked(offset_low, offset_high); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + (tempI64 = [stream.position>>>0,(tempDouble = stream.position,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? (+(Math.floor((tempDouble)/4294967296.0)))>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)], HEAP32[((newOffset)>>2)] = tempI64[0],HEAP32[(((newOffset)+(4))>>2)] = tempI64[1]); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (typeof offset !== 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var arraySum = (array, index) => { + var sum = 0; + for (var i = 0; i <= index; sum += array[i++]) { + // no-op + } + return sum; + }; + + + var MONTH_DAYS_LEAP = [31,29,31,30,31,30,31,31,30,31,30,31]; + + var MONTH_DAYS_REGULAR = [31,28,31,30,31,30,31,31,30,31,30,31]; + var addDays = (date, days) => { + var newDate = new Date(date.getTime()); + while (days > 0) { + var leap = isLeapYear(newDate.getFullYear()); + var currentMonth = newDate.getMonth(); + var daysInCurrentMonth = (leap ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR)[currentMonth]; + + if (days > daysInCurrentMonth-newDate.getDate()) { + // we spill over to next month + days -= (daysInCurrentMonth-newDate.getDate()+1); + newDate.setDate(1); + if (currentMonth < 11) { + newDate.setMonth(currentMonth+1) + } else { + newDate.setMonth(0); + newDate.setFullYear(newDate.getFullYear()+1); + } + } else { + // we stay in current month + newDate.setDate(newDate.getDate()+days); + return newDate; + } + } + + return newDate; + }; + + + + + var writeArrayToMemory = (array, buffer) => { + assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') + HEAP8.set(array, buffer); + }; + + var _strftime = (s, maxsize, format, tm) => { + // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html + + var tm_zone = HEAPU32[(((tm)+(40))>>2)]; + + var date = { + tm_sec: HEAP32[((tm)>>2)], + tm_min: HEAP32[(((tm)+(4))>>2)], + tm_hour: HEAP32[(((tm)+(8))>>2)], + tm_mday: HEAP32[(((tm)+(12))>>2)], + tm_mon: HEAP32[(((tm)+(16))>>2)], + tm_year: HEAP32[(((tm)+(20))>>2)], + tm_wday: HEAP32[(((tm)+(24))>>2)], + tm_yday: HEAP32[(((tm)+(28))>>2)], + tm_isdst: HEAP32[(((tm)+(32))>>2)], + tm_gmtoff: HEAP32[(((tm)+(36))>>2)], + tm_zone: tm_zone ? UTF8ToString(tm_zone) : '' + }; + + + var pattern = UTF8ToString(format); + + // expand format + var EXPANSION_RULES_1 = { + '%c': '%a %b %d %H:%M:%S %Y', // Replaced by the locale's appropriate date and time representation - e.g., Mon Aug 3 14:02:01 2013 + '%D': '%m/%d/%y', // Equivalent to %m / %d / %y + '%F': '%Y-%m-%d', // Equivalent to %Y - %m - %d + '%h': '%b', // Equivalent to %b + '%r': '%I:%M:%S %p', // Replaced by the time in a.m. and p.m. notation + '%R': '%H:%M', // Replaced by the time in 24-hour notation + '%T': '%H:%M:%S', // Replaced by the time + '%x': '%m/%d/%y', // Replaced by the locale's appropriate date representation + '%X': '%H:%M:%S', // Replaced by the locale's appropriate time representation + // Modified Conversion Specifiers + '%Ec': '%c', // Replaced by the locale's alternative appropriate date and time representation. + '%EC': '%C', // Replaced by the name of the base year (period) in the locale's alternative representation. + '%Ex': '%m/%d/%y', // Replaced by the locale's alternative date representation. + '%EX': '%H:%M:%S', // Replaced by the locale's alternative time representation. + '%Ey': '%y', // Replaced by the offset from %EC (year only) in the locale's alternative representation. + '%EY': '%Y', // Replaced by the full alternative year representation. + '%Od': '%d', // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading zeros if there is any alternative symbol for zero; otherwise, with leading characters. + '%Oe': '%e', // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading characters. + '%OH': '%H', // Replaced by the hour (24-hour clock) using the locale's alternative numeric symbols. + '%OI': '%I', // Replaced by the hour (12-hour clock) using the locale's alternative numeric symbols. + '%Om': '%m', // Replaced by the month using the locale's alternative numeric symbols. + '%OM': '%M', // Replaced by the minutes using the locale's alternative numeric symbols. + '%OS': '%S', // Replaced by the seconds using the locale's alternative numeric symbols. + '%Ou': '%u', // Replaced by the weekday as a number in the locale's alternative representation (Monday=1). + '%OU': '%U', // Replaced by the week number of the year (Sunday as the first day of the week, rules corresponding to %U ) using the locale's alternative numeric symbols. + '%OV': '%V', // Replaced by the week number of the year (Monday as the first day of the week, rules corresponding to %V ) using the locale's alternative numeric symbols. + '%Ow': '%w', // Replaced by the number of the weekday (Sunday=0) using the locale's alternative numeric symbols. + '%OW': '%W', // Replaced by the week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols. + '%Oy': '%y', // Replaced by the year (offset from %C ) using the locale's alternative numeric symbols. + }; + for (var rule in EXPANSION_RULES_1) { + pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_1[rule]); + } + + var WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + + function leadingSomething(value, digits, character) { + var str = typeof value == 'number' ? value.toString() : (value || ''); + while (str.length < digits) { + str = character[0]+str; + } + return str; + } + + function leadingNulls(value, digits) { + return leadingSomething(value, digits, '0'); + } + + function compareByDay(date1, date2) { + function sgn(value) { + return value < 0 ? -1 : (value > 0 ? 1 : 0); + } + + var compare; + if ((compare = sgn(date1.getFullYear()-date2.getFullYear())) === 0) { + if ((compare = sgn(date1.getMonth()-date2.getMonth())) === 0) { + compare = sgn(date1.getDate()-date2.getDate()); + } + } + return compare; + } + + function getFirstWeekStartDate(janFourth) { + switch (janFourth.getDay()) { + case 0: // Sunday + return new Date(janFourth.getFullYear()-1, 11, 29); + case 1: // Monday + return janFourth; + case 2: // Tuesday + return new Date(janFourth.getFullYear(), 0, 3); + case 3: // Wednesday + return new Date(janFourth.getFullYear(), 0, 2); + case 4: // Thursday + return new Date(janFourth.getFullYear(), 0, 1); + case 5: // Friday + return new Date(janFourth.getFullYear()-1, 11, 31); + case 6: // Saturday + return new Date(janFourth.getFullYear()-1, 11, 30); + } + } + + function getWeekBasedYear(date) { + var thisDate = addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday); + + var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); + var janFourthNextYear = new Date(thisDate.getFullYear()+1, 0, 4); + + var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); + var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); + + if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { + // this date is after the start of the first week of this year + if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { + return thisDate.getFullYear()+1; + } + return thisDate.getFullYear(); + } + return thisDate.getFullYear()-1; + } + + var EXPANSION_RULES_2 = { + '%a': (date) => WEEKDAYS[date.tm_wday].substring(0,3) , + '%A': (date) => WEEKDAYS[date.tm_wday], + '%b': (date) => MONTHS[date.tm_mon].substring(0,3), + '%B': (date) => MONTHS[date.tm_mon], + '%C': (date) => { + var year = date.tm_year+1900; + return leadingNulls((year/100)|0,2); + }, + '%d': (date) => leadingNulls(date.tm_mday, 2), + '%e': (date) => leadingSomething(date.tm_mday, 2, ' '), + '%g': (date) => { + // %g, %G, and %V give values according to the ISO 8601:2000 standard week-based year. + // In this system, weeks begin on a Monday and week 1 of the year is the week that includes + // January 4th, which is also the week that includes the first Thursday of the year, and + // is also the first week that contains at least four days in the year. + // If the first Monday of January is the 2nd, 3rd, or 4th, the preceding days are part of + // the last week of the preceding year; thus, for Saturday 2nd January 1999, + // %G is replaced by 1998 and %V is replaced by 53. If December 29th, 30th, + // or 31st is a Monday, it and any following days are part of week 1 of the following year. + // Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and %V is replaced by 01. + + return getWeekBasedYear(date).toString().substring(2); + }, + '%G': getWeekBasedYear, + '%H': (date) => leadingNulls(date.tm_hour, 2), + '%I': (date) => { + var twelveHour = date.tm_hour; + if (twelveHour == 0) twelveHour = 12; + else if (twelveHour > 12) twelveHour -= 12; + return leadingNulls(twelveHour, 2); + }, + '%j': (date) => { + // Day of the year (001-366) + return leadingNulls(date.tm_mday + arraySum(isLeapYear(date.tm_year+1900) ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR, date.tm_mon-1), 3); + }, + '%m': (date) => leadingNulls(date.tm_mon+1, 2), + '%M': (date) => leadingNulls(date.tm_min, 2), + '%n': () => '\n', + '%p': (date) => { + if (date.tm_hour >= 0 && date.tm_hour < 12) { + return 'AM'; + } + return 'PM'; + }, + '%S': (date) => leadingNulls(date.tm_sec, 2), + '%t': () => '\t', + '%u': (date) => date.tm_wday || 7, + '%U': (date) => { + var days = date.tm_yday + 7 - date.tm_wday; + return leadingNulls(Math.floor(days / 7), 2); + }, + '%V': (date) => { + // Replaced by the week number of the year (Monday as the first day of the week) + // as a decimal number [01,53]. If the week containing 1 January has four + // or more days in the new year, then it is considered week 1. + // Otherwise, it is the last week of the previous year, and the next week is week 1. + // Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday] + var val = Math.floor((date.tm_yday + 7 - (date.tm_wday + 6) % 7 ) / 7); + // If 1 Jan is just 1-3 days past Monday, the previous week + // is also in this year. + if ((date.tm_wday + 371 - date.tm_yday - 2) % 7 <= 2) { + val++; + } + if (!val) { + val = 52; + // If 31 December of prev year a Thursday, or Friday of a + // leap year, then the prev year has 53 weeks. + var dec31 = (date.tm_wday + 7 - date.tm_yday - 1) % 7; + if (dec31 == 4 || (dec31 == 5 && isLeapYear(date.tm_year%400-1))) { + val++; + } + } else if (val == 53) { + // If 1 January is not a Thursday, and not a Wednesday of a + // leap year, then this year has only 52 weeks. + var jan1 = (date.tm_wday + 371 - date.tm_yday) % 7; + if (jan1 != 4 && (jan1 != 3 || !isLeapYear(date.tm_year))) + val = 1; + } + return leadingNulls(val, 2); + }, + '%w': (date) => date.tm_wday, + '%W': (date) => { + var days = date.tm_yday + 7 - ((date.tm_wday + 6) % 7); + return leadingNulls(Math.floor(days / 7), 2); + }, + '%y': (date) => { + // Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year] + return (date.tm_year+1900).toString().substring(2); + }, + // Replaced by the year as a decimal number (for example, 1997). [ tm_year] + '%Y': (date) => date.tm_year+1900, + '%z': (date) => { + // Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ). + // For example, "-0430" means 4 hours 30 minutes behind UTC (west of Greenwich). + var off = date.tm_gmtoff; + var ahead = off >= 0; + off = Math.abs(off) / 60; + // convert from minutes into hhmm format (which means 60 minutes = 100 units) + off = (off / 60)*100 + (off % 60); + return (ahead ? '+' : '-') + String("0000" + off).slice(-4); + }, + '%Z': (date) => date.tm_zone, + '%%': () => '%' + }; + + // Replace %% with a pair of NULLs (which cannot occur in a C string), then + // re-inject them after processing. + pattern = pattern.replace(/%%/g, '\0\0') + for (var rule in EXPANSION_RULES_2) { + if (pattern.includes(rule)) { + pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_2[rule](date)); + } + } + pattern = pattern.replace(/\0\0/g, '%') + + var bytes = intArrayFromString(pattern, false); + if (bytes.length > maxsize) { + return 0; + } + + writeArrayToMemory(bytes, s); + return bytes.length-1; + }; + var _strftime_l = (s, maxsize, format, tm, loc) => { + return _strftime(s, maxsize, format, tm); // no locale support yet + }; + + + var getCFunc = (ident) => { + var func = Module['_' + ident]; // closure exported function + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); + return func; + }; + + + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + + + + + /** + * @param {string|null=} returnType + * @param {Array=} argTypes + * @param {Arguments|Array=} args + * @param {Object=} opts + */ + var ccall = (ident, returnType, argTypes, args, opts) => { + // For fast lookup of conversion functions + var toC = { + 'string': (str) => { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + ret = stringToUTF8OnStack(str); + } + return ret; + }, + 'array': (arr) => { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + } + }; + + function convertReturnValue(ret) { + if (returnType === 'string') { + + return UTF8ToString(ret); + } + if (returnType === 'boolean') return Boolean(ret); + return ret; + } + + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func(...cArgs); + function onDone(ret) { + if (stack !== 0) stackRestore(stack); + return convertReturnValue(ret); + } + + ret = onDone(ret); + return ret; + }; + + + + /** + * @param {string=} returnType + * @param {Array=} argTypes + * @param {Object=} opts + */ + var cwrap = (ident, returnType, argTypes, opts) => { + return (...args) => ccall(ident, returnType, argTypes, args, opts); + }; + + + + var FS_unlink = (path) => FS.unlink(path); + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit();Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_unlink"] = FS.unlink;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createDevice"] = FS.createDevice;; +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __cxa_throw: ___cxa_throw, + /** @export */ + abort: _abort, + /** @export */ + emscripten_memcpy_js: _emscripten_memcpy_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + environ_get: _environ_get, + /** @export */ + environ_sizes_get: _environ_sizes_get, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write, + /** @export */ + strftime_l: _strftime_l +}; +var wasmExports = createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors'); +var _run_source = Module['_run_source'] = createExportWrapper('run_source'); +var _fflush = createExportWrapper('fflush'); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var stackSave = createExportWrapper('stackSave'); +var stackRestore = createExportWrapper('stackRestore'); +var stackAlloc = createExportWrapper('stackAlloc'); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); +var ___cxa_is_pointer_type = createExportWrapper('__cxa_is_pointer_type'); +var dynCall_iij = Module['dynCall_iij'] = createExportWrapper('dynCall_iij'); +var dynCall_jiji = Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji'); +var dynCall_viijii = Module['dynCall_viijii'] = createExportWrapper('dynCall_viijii'); +var dynCall_iiiiij = Module['dynCall_iiiiij'] = createExportWrapper('dynCall_iiiiij'); +var dynCall_iiiiijj = Module['dynCall_iiiiijj'] = createExportWrapper('dynCall_iiiiijj'); +var dynCall_iiiiiijj = Module['dynCall_iiiiiijj'] = createExportWrapper('dynCall_iiiiiijj'); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +Module['addRunDependency'] = addRunDependency; +Module['removeRunDependency'] = removeRunDependency; +Module['FS_createPath'] = FS.createPath; +Module['FS_createLazyFile'] = FS.createLazyFile; +Module['FS_createDevice'] = FS.createDevice; +Module['ccall'] = ccall; +Module['cwrap'] = cwrap; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_unlink'] = FS.unlink; +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertU32PairToI53', + 'ydayFromDate', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'getCallstack', + 'emscriptenLog', + 'convertPCtoSourceLocation', + 'readEmAsmArgs', + 'jstoi_q', + 'listenOnce', + 'autoResumeAudioContext', + 'dynCallLegacy', + 'getDynCaller', + 'dynCall', + 'handleException', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'HandleAllocator', + 'getNativeTypeSize', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'stackTrace', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'createDyncallWrapper', + 'safeSetTimeout', + 'setImmediateWrapped', + 'clearImmediateWrapped', + 'polyfillSetImmediate', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'setMainLoop', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'setErrNo', + 'demangle', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addOnPreRun', + 'addOnInit', + 'addOnPreMain', + 'addOnExit', + 'addOnPostRun', + 'FS_createFolder', + 'FS_createLink', + 'FS_readFile', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'stackAlloc', + 'stackSave', + 'stackRestore', + 'getTempRet0', + 'setTempRet0', + 'writeStackCookie', + 'checkStackCookie', + 'convertI32PairToI53Checked', + 'ptrToString', + 'zeroMemory', + 'exitJS', + 'getHeapMax', + 'growMemory', + 'ENV', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'arraySum', + 'addDays', + 'ERRNO_CODES', + 'ERRNO_MESSAGES', + 'DNS', + 'Protocols', + 'Sockets', + 'initRandomFill', + 'randomFill', + 'timers', + 'warnOnce', + 'UNWIND_CACHE', + 'readEmAsmArgsArray', + 'jstoi_s', + 'getExecutableName', + 'keepRuntimeAlive', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'getCFunc', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'stringToAscii', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'writeArrayToMemory', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'ExitStatus', + 'getEnvStrings', + 'doReadv', + 'doWritev', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'ExceptionInfo', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'SYSCALLS', + 'preloadPlugins', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +}; + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run() { + + if (runDependencies > 0) { + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + readyPromiseResolve(Module); + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach(function(name) { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + 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.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +run(); + +// end include: postamble.js + + + + return moduleArg.ready +} +); +})(); +export default createSolsticeModule; \ No newline at end of file diff --git a/playground/playground.wasm b/playground/playground.wasm new file mode 100755 index 0000000000000000000000000000000000000000..040f261469789f31dd48d5a6fecb783eaee7ac55 GIT binary patch literal 466017 zcmeFa378et)$e_(>Qr~reds<72Whp{wG|a2Bxnd4LlRFk5~F$TB<788VuD67a%hK! z)@Wj6RzxOI5mAsyaX>{yoKOL0L7ZnCaGvLR{C@vkb^0`kdGB{~?{n|>J&#S%eNNR{ zYp*@juBv~n|Js>@MjjqyGMQjuc8>#tQNgGK!%^w)%z@D;|2Y_ye9Rn}Wd~pUA4IG4 z)r({@2gV(rD@V$EGY8iAqls{J`Z;r8`4bxPs1x`p+dkpIOmG6_pD>C)-tr0FHU0Kp z9iJ4=@lglXmTk+o#N-JQ>?l)KPdI^ts@w6hcY;K{p%Xf*qvY%4)x%M^6OKCG|Kdn^ zyp(0)??@f5Lbcbskd^a%Q_Gy-J@;a{if3Nf*W~zeDcBp8_=|IVtm`Dr*M?4C^)aLV zIbOd`pwy%#)ME08wxUWX1;^{?sK2ut5!~hX-&Iot^&1g<^v$Z8`gTaVu~UnA<6Sz6 z_d4EucxRZ4h8}TDcIdIg+A~>wtQ#`q;A0OO(tg;8Bma_#wWl!j@R0|P7$Ie5ksUla>$>Dwr7HWAzD`!^+K{;JF`HADODhOk?x;Ue6VKy7;Unb0Cw%$e}{wsT9ew^ z(>3Nx=#`>46IAml&SZm#-$6A85Tkt5`GYU|+eN>sRTh$&Ao;~N|KsZ#(QZM|%a@t_ z3RNQ<{D(i~9ny}d7}_}NYs;=EQ>`*8Kk_rk;vGh7sj!?Y|9D;MCH-tfKllRWF@pT4 z=qhT4MZQJV^2R$`MO%eIZP^vhC}9_{Z;^WWV-MvNNRVt0d~{ zsdnqMB~{Z1i8tN?dW-h(ztZ33KkR4p#+`m>t2pKtO8Qgz#c)l3=nUF3>^zFfhxki3 zsJ3B96Vs?!Bx!esjAXi|f^nugh^sjv5Qzc`iZx8MF-BvmkfCoj=TKT|tT7sMwp452 zBjt6a*zrR>sMXh0{a;j^5|bZ|2YvphTFG=+RTTx*lq?BVB&K?twlU*WURL9YP8XWE zn)2lyHIiZPT+$jHZQ+~3oAM2S)u^hfs%uac#Zl@{T%}^Gs^YF1!kl%QJ+w(K_9sC| z1BHPGI|uavBViC$SJ7@8H*1WJℜoKfd*RWBYwnoT}rrZ(5!CN#n|?ID=~9QxtTO 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

9uLarpDZ|VvCuG+7`?mE4HoJ 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

    Q9 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%0D~s!vA7V`WdWx@BcGcjkr}%m*hAv+9IZvHE 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 N1 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 NpG?s2;PV`m{uj1cQwsn9 literal 0 HcmV?d00001