diff --git a/packages/php-wasm/compile/base-image/Dockerfile b/packages/php-wasm/compile/base-image/Dockerfile index 8702332f79..2b9dd6029a 100644 --- a/packages/php-wasm/compile/base-image/Dockerfile +++ b/packages/php-wasm/compile/base-image/Dockerfile @@ -38,8 +38,8 @@ RUN set -euxo pipefail;\ # the build take forever on Apple Silicon. RUN ln -s /usr/bin/python3 /usr/bin/python RUN git clone https://github.com/emscripten-core/emsdk.git && \ - ./emsdk/emsdk install 3.1.43 && \ - /root/emsdk/emsdk activate 3.1.43 + ./emsdk/emsdk install 3.1.56 && \ + /root/emsdk/emsdk activate 3.1.56 RUN mkdir -p /root/lib/lib /root/lib/include /root/lib/share /root/lib/bin diff --git a/packages/php-wasm/node/public/8_0_30/php_8_0.wasm b/packages/php-wasm/node/public/8_0_30/php_8_0.wasm index 7be56a883e..d833ff517a 100755 Binary files a/packages/php-wasm/node/public/8_0_30/php_8_0.wasm and b/packages/php-wasm/node/public/8_0_30/php_8_0.wasm differ diff --git a/packages/php-wasm/node/public/php_8_0.js b/packages/php-wasm/node/public/php_8_0.js index 370120bc7c..f928bd622d 100644 --- a/packages/php-wasm/node/public/php_8_0.js +++ b/packages/php-wasm/node/public/php_8_0.js @@ -1,6 +1,6 @@ const dependencyFilename = __dirname + '/8_0_30/php_8_0.wasm'; export { dependencyFilename }; -export const dependenciesTotalSize = 13597806; +export const dependenciesTotalSize = 13591072; export function init(RuntimeName, PHPLoader) { /** * Overrides Emscripten's default ExitStatus object which gets @@ -88,9 +88,9 @@ if (ENVIRONMENT_IS_NODE) { }; readAsync = (filename, onload, onerror, binary = true) => { filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); - fs.readFile(filename, binary ? undefined : "utf8", ((err, data) => { + fs.readFile(filename, binary ? undefined : "utf8", (err, data) => { if (err) onerror(err); else onload(binary ? data.buffer : data); - })); + }); }; if (!Module["thisProgram"] && process.argv.length > 1) { thisProgram = process.argv[1].replace(/\\/g, "/"); @@ -103,7 +103,6 @@ if (ENVIRONMENT_IS_NODE) { process.exitCode = status; throw toThrow; }; - Module["inspect"] = () => "[Emscripten Module object]"; } else {} var out = Module["print"] || console.log.bind(console); @@ -124,40 +123,32 @@ var wasmBinary; if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; -var noExitRuntime = Module["noExitRuntime"] || false; - -if (typeof WebAssembly != "object") { - abort("no native wasm support detected"); -} - var wasmMemory; var ABORT = false; var EXITSTATUS; -function assert(condition, text) { +/** @type {function(*, string=)} */ function assert(condition, text) { if (!condition) { abort(text); } } -var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; +var /** @type {!Int8Array} */ HEAP8, /** @type {!Uint8Array} */ HEAPU8, /** @type {!Int16Array} */ HEAP16, /** @type {!Uint16Array} */ HEAPU16, /** @type {!Int32Array} */ HEAP32, /** @type {!Uint32Array} */ HEAPU32, /** @type {!Float32Array} */ HEAPF32, /** @type {!Float64Array} */ HEAPF64; function updateMemoryViews() { var b = wasmMemory.buffer; Module["HEAP8"] = HEAP8 = new Int8Array(b); Module["HEAP16"] = HEAP16 = new Int16Array(b); - Module["HEAP32"] = HEAP32 = new Int32Array(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); } -var wasmTable; - var __ATPRERUN__ = []; var __ATINIT__ = []; @@ -170,12 +161,6 @@ var runtimeInitialized = false; var runtimeExited = false; -var runtimeKeepaliveCounter = 0; - -function keepRuntimeAlive() { - return noExitRuntime || runtimeKeepaliveCounter > 0; -} - function preRun() { if (Module["preRun"]) { if (typeof Module["preRun"] == "function") Module["preRun"] = [ Module["preRun"] ]; @@ -238,16 +223,12 @@ function getUniqueRunDependency(id) { function addRunDependency(id) { runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } + Module["monitorRunDependencies"]?.(runDependencies); } function removeRunDependency(id) { runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } + Module["monitorRunDependencies"]?.(runDependencies); if (runDependencies == 0) { if (runDependencyWatcher !== null) { clearInterval(runDependencyWatcher); @@ -261,28 +242,28 @@ function removeRunDependency(id) { } } -function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what); - } +/** @param {string|number=} what */ function abort(what) { + Module["onAbort"]?.(what); what = "Aborted(" + what + ")"; err(what); ABORT = true; EXITSTATUS = 1; what += ". Build with -sASSERTIONS for more info."; - var e = new WebAssembly.RuntimeError(what); + /** @suppress {checkTypes} */ var e = new WebAssembly.RuntimeError(what); throw e; } var dataURIPrefix = "data:application/octet-stream;base64,"; -function isDataURI(filename) { - return filename.startsWith(dataURIPrefix); -} +/** + * Indicates whether filename is a base64 data URI. + * @noinline + */ var isDataURI = filename => filename.startsWith(dataURIPrefix); -function isFileURI(filename) { - return filename.startsWith("file://"); -} +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ var isFileURI = filename => filename.startsWith("file://"); var wasmBinaryFile; @@ -307,36 +288,36 @@ function getBinaryPromise(binaryFile) { if (typeof fetch == "function") { return fetch(binaryFile, { credentials: "same-origin" - }).then((response => { + }).then(response => { if (!response["ok"]) { - throw "failed to load wasm binary file at '" + binaryFile + "'"; + throw `failed to load wasm binary file at '${binaryFile}'`; } return response["arrayBuffer"](); - })).catch((() => getBinarySync(binaryFile))); + }).catch(() => getBinarySync(binaryFile)); } } - return Promise.resolve().then((() => getBinarySync(binaryFile))); + return Promise.resolve().then(() => getBinarySync(binaryFile)); } function instantiateArrayBuffer(binaryFile, imports, receiver) { - return getBinaryPromise(binaryFile).then((binary => WebAssembly.instantiate(binary, imports))).then((instance => instance)).then(receiver, (reason => { - err("failed to asynchronously prepare wasm: " + reason); + return getBinaryPromise(binaryFile).then(binary => WebAssembly.instantiate(binary, imports)).then(receiver, reason => { + err(`failed to asynchronously prepare wasm: ${reason}`); abort(reason); - })); + }); } function instantiateAsync(binary, binaryFile, imports, callback) { if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") { return fetch(binaryFile, { credentials: "same-origin" - }).then((response => { - var result = WebAssembly.instantiateStreaming(response, imports); - return result.then(callback, (function(reason) { - err("wasm streaming compile failed: " + reason); + }).then(response => { + /** @suppress {checkTypes} */ var result = WebAssembly.instantiateStreaming(response, imports); + return result.then(callback, function(reason) { + err(`wasm streaming compile failed: ${reason}`); err("falling back to ArrayBuffer instantiation"); return instantiateArrayBuffer(binaryFile, imports, callback); - })); - })); + }); + }); } return instantiateArrayBuffer(binaryFile, imports, callback); } @@ -345,16 +326,15 @@ function createWasm() { var info = { "a": wasmImports }; - function receiveInstance(instance, module) { - var exports = instance.exports; - exports = Asyncify.instrumentWasmExports(exports); - Module["asm"] = exports; - wasmMemory = Module["asm"]["$a"]; + /** @param {WebAssembly.Module=} module*/ function receiveInstance(instance, module) { + wasmExports = instance.exports; + wasmExports = Asyncify.instrumentWasmExports(wasmExports); + wasmMemory = wasmExports["_a"]; updateMemoryViews(); - wasmTable = Module["asm"]["db"]; - addOnInit(Module["asm"]["ab"]); + wasmTable = wasmExports["bb"]; + addOnInit(wasmExports["$a"]); removeRunDependency("wasm-instantiate"); - return exports; + return wasmExports; } addRunDependency("wasm-instantiate"); function receiveInstantiationResult(result) { @@ -364,7 +344,7 @@ function createWasm() { try { return Module["instantiateWasm"](info, receiveInstance); } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); + err(`Module.instantiateWasm callback failed with error: ${e}`); return false; } } @@ -376,7 +356,7 @@ var tempDouble; var tempI64; -function ExitStatus(status) { +/** @constructor */ function ExitStatus(status) { this.name = "ExitStatus"; this.message = `Program terminated with exit(${status})`; this.status = status; @@ -388,9 +368,19 @@ var callRuntimeCallbacks = callbacks => { } }; +var noExitRuntime = Module["noExitRuntime"] || false; + var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; -var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => { +/** + * 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; while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; @@ -406,26 +396,40 @@ var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => { } var u1 = heapOrArray[idx++] & 63; if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); + str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } var u2 = heapOrArray[idx++] & 63; if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2; + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63; + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); } if (u0 < 65536) { str += String.fromCharCode(u0); } else { var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023)); } } return str; }; -var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; +/** + * 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) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; Module["UTF8ToString"] = UTF8ToString; @@ -433,7 +437,7 @@ var ___assert_fail = (condition, filename, line, func) => { abort(`Assertion failed: ${UTF8ToString(condition)}, at: ` + [ filename ? UTF8ToString(filename) : "unknown filename", line, func ? UTF8ToString(func) : "unknown function" ]); }; -var ___call_sighandler = (fp, sig) => (a1 => dynCall_vi.apply(null, [ fp, a1 ]))(sig); +var ___call_sighandler = (fp, sig) => (a1 => dynCall_vi(fp, a1))(sig); var PATH = { isAbs: path => path.charAt(0) === "/", @@ -464,7 +468,7 @@ var PATH = { }, normalize: path => { var isAbsolute = PATH.isAbs(path), trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter((p => !!p)), !isAbsolute).join("/"); + path = PATH.normalizeArray(path.split("/").filter(p => !!p), !isAbsolute).join("/"); if (!path && !isAbsolute) { path = "."; } @@ -491,10 +495,7 @@ var PATH = { if (lastSlash === -1) return path; return path.substr(lastSlash + 1); }, - join: function() { - var paths = Array.prototype.slice.call(arguments); - return PATH.normalize(paths.join("/")); - }, + join: (...paths) => PATH.normalize(paths.join("/")), join2: (l, r) => PATH.normalize(l + "/" + r) }; @@ -518,10 +519,10 @@ var initRandomFill = () => { var randomFill = view => (randomFill = initRandomFill())(view); var PATH_FS = { - resolve: function() { + resolve: (...args) => { var resolvedPath = "", resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); if (typeof path != "string") { throw new TypeError("Arguments to path.resolve must be strings"); } else if (!path) { @@ -530,8 +531,8 @@ var PATH_FS = { resolvedPath = path + "/" + resolvedPath; resolvedAbsolute = PATH.isAbs(path); } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter((p => !!p)), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; + resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(p => !!p), !resolvedAbsolute).join("/"); + return ((resolvedAbsolute ? "/" : "") + resolvedPath) || "."; }, relative: (from, to) => { from = PATH_FS.resolve(from).substr(1); @@ -597,33 +598,33 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { var u = str.charCodeAt(i); if (u >= 55296 && u <= 57343) { var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023; + u = 65536 + ((u & 1023) << 10) | (u1 & 1023); } if (u <= 127) { if (outIdx >= endIdx) break; heap[outIdx++] = u; } else if (u <= 2047) { if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63; + heap[outIdx++] = 192 | (u >> 6); + heap[outIdx++] = 128 | (u & 63); } else if (u <= 65535) { if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; + heap[outIdx++] = 224 | (u >> 12); + heap[outIdx++] = 128 | ((u >> 6) & 63); + heap[outIdx++] = 128 | (u & 63); } else { if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; + heap[outIdx++] = 240 | (u >> 18); + heap[outIdx++] = 128 | ((u >> 12) & 63); + heap[outIdx++] = 128 | ((u >> 6) & 63); + heap[outIdx++] = 128 | (u & 63); } } heap[outIdx] = 0; return outIdx - startIdx; }; -function intArrayFromString(stringy, dontAddNull, length) { +/** @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); @@ -638,9 +639,9 @@ var FS_stdin_getChar = () => { var BUFSIZE = 256; var buf = Buffer.alloc(BUFSIZE); var bytesRead = 0; - var fd = process.stdin.fd; + /** @suppress {missingProperties} */ var fd = process.stdin.fd; try { - bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, -1); + bytesRead = fs.readSync(fd, buf); } catch (e) { if (e.toString().includes("EOF")) bytesRead = 0; else throw e; } @@ -670,9 +671,9 @@ var FS_stdin_getChar = () => { var TTY = { ttys: [], - init: function() {}, - shutdown: function() {}, - register: function(dev, ops) { + init() {}, + shutdown() {}, + register(dev, ops) { TTY.ttys[dev] = { input: [], output: [], @@ -681,7 +682,7 @@ var TTY = { FS.registerDevice(dev, TTY.stream_ops); }, stream_ops: { - open: function(stream) { + open(stream) { var tty = TTY.ttys[stream.node.rdev]; if (!tty) { throw new FS.ErrnoError(43); @@ -689,14 +690,14 @@ var TTY = { stream.tty = tty; stream.seekable = false; }, - close: function(stream) { + close(stream) { stream.tty.ops.fsync(stream.tty); }, - fsync: function(stream) { + fsync(stream) { stream.tty.ops.fsync(stream.tty); }, - read: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { + read(stream, buffer, offset, length, pos) { + /* ignored */ if (!stream.tty || !stream.tty.ops.get_char) { throw new FS.ErrnoError(60); } var bytesRead = 0; @@ -719,7 +720,7 @@ var TTY = { } return bytesRead; }, - write: function(stream, buffer, offset, length, pos) { + write(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.put_char) { throw new FS.ErrnoError(60); } @@ -737,10 +738,10 @@ var TTY = { } }, default_tty_ops: { - get_char: function(tty) { + get_char(tty) { return FS_stdin_getChar(); }, - put_char: function(tty, val) { + put_char(tty, val) { if (val === null || val === 10) { out(UTF8ArrayToString(tty.output, 0)); tty.output = []; @@ -748,13 +749,13 @@ var TTY = { if (val != 0) tty.output.push(val); } }, - fsync: function(tty) { + fsync(tty) { if (tty.output && tty.output.length > 0) { out(UTF8ArrayToString(tty.output, 0)); tty.output = []; } }, - ioctl_tcgets: function(tty) { + ioctl_tcgets(tty) { return { c_iflag: 25856, c_oflag: 5, @@ -763,15 +764,15 @@ var TTY = { c_cc: [ 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }; }, - ioctl_tcsets: function(tty, optional_actions, data) { + ioctl_tcsets(tty, optional_actions, data) { return 0; }, - ioctl_tiocgwinsz: function(tty) { + ioctl_tiocgwinsz(tty) { return [ 24, 80 ]; } }, default_tty1_ops: { - put_char: function(tty, val) { + put_char(tty, val) { if (val === null || val === 10) { err(UTF8ArrayToString(tty.output, 0)); tty.output = []; @@ -779,7 +780,7 @@ var TTY = { if (val != 0) tty.output.push(val); } }, - fsync: function(tty) { + fsync(tty) { if (tty.output && tty.output.length > 0) { err(UTF8ArrayToString(tty.output, 0)); tty.output = []; @@ -805,61 +806,59 @@ var mmapAlloc = size => { var MEMFS = { ops_table: null, mount(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0); + return MEMFS.createNode(null, "/", 16384 | 511, /* 0777 */ 0); }, createNode(parent, name, mode, dev) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { throw new FS.ErrnoError(63); } - if (!MEMFS.ops_table) { - 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 - } + 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 }, - 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: {} + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops + 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; @@ -893,7 +892,7 @@ var MEMFS = { var prevCapacity = node.contents ? node.contents.length : 0; if (prevCapacity >= newCapacity) return; var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0); if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); var oldContents = node.contents; node.contents = new Uint8Array(newCapacity); @@ -989,16 +988,13 @@ var MEMFS = { }, readdir(node) { var entries = [ ".", ".." ]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue; - } + for (var key of Object.keys(node.contents)) { entries.push(key); } return entries; }, symlink(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); + var node = MEMFS.createNode(parent, newname, 511 | /* 0777 */ 40960, 0); node.link = oldpath; return node; }, @@ -1108,66 +1104,69 @@ var MEMFS = { } }; -var asyncLoad = (url, onload, onerror, noRunDep) => { +/** @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).`); + readAsync(url, arrayBuffer => { onload(new Uint8Array(arrayBuffer)); if (dep) removeRunDependency(dep); - }), (event => { + }, 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"] || []; -function FS_handledByPreloadPlugin(byteArray, fullname, finish, onerror) { +var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { if (typeof Browser != "undefined") Browser.init(); var handled = false; - preloadPlugins.forEach((function(plugin) { + preloadPlugins.forEach(plugin => { if (handled) return; if (plugin["canHandle"](fullname)) { plugin["handle"](byteArray, fullname, finish, onerror); handled = true; } - })); + }); return handled; -} +}; -function FS_createPreloadedFile(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { +var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; var dep = getUniqueRunDependency(`cp ${fullname}`); function processData(byteArray) { function finish(byteArray) { - if (preFinish) preFinish(); + preFinish?.(); if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); } - if (onload) onload(); + onload?.(); removeRunDependency(dep); } - if (FS_handledByPreloadPlugin(byteArray, fullname, finish, (() => { - if (onerror) onerror(); + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); removeRunDependency(dep); - }))) { + })) { return; } finish(byteArray); } addRunDependency(dep); if (typeof url == "string") { - asyncLoad(url, (byteArray => processData(byteArray)), onerror); + asyncLoad(url, processData, onerror); } else { processData(url); } -} +}; -function FS_modeStringToFlags(str) { +var FS_modeStringToFlags = str => { var flagModes = { "r": 0, "r+": 2, @@ -1181,20 +1180,142 @@ function FS_modeStringToFlags(str) { throw new Error(`Unknown file open mode: ${str}`); } return flags; -} +}; -function FS_getMode(canRead, canWrite) { +var FS_getMode = (canRead, canWrite) => { var mode = 0; if (canRead) mode |= 292 | 73; if (canWrite) mode |= 146; return mode; -} +}; -var ERRNO_CODES = {}; +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 NODEFS = { isWindows: false, - staticInit: () => { + staticInit() { NODEFS.isWindows = !!process.platform.match(/^win/); var flags = process.binding("constants"); if (flags["fs"]) { @@ -1213,12 +1334,14 @@ var NODEFS = { 131072: flags["O_NOFOLLOW"] }; }, - convertNodeCode: e => { + convertNodeCode(e) { var code = e.code; return ERRNO_CODES[code]; }, - mount: mount => NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0), - createNode: (parent, name, mode, dev) => { + mount(mount) { + return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0); + }, + createNode(parent, name, mode, dev) { if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { throw new FS.ErrnoError(28); } @@ -1227,12 +1350,12 @@ var NODEFS = { node.stream_ops = NODEFS.stream_ops; return node; }, - getMode: path => { + getMode(path) { var stat; try { stat = fs.lstatSync(path); if (NODEFS.isWindows) { - stat.mode = stat.mode | (stat.mode & 292) >> 2; + stat.mode = stat.mode | ((stat.mode & 292) >> 2); } } catch (e) { if (!e.code) throw e; @@ -1240,7 +1363,7 @@ var NODEFS = { } return stat.mode; }, - realPath: node => { + realPath(node) { var parts = []; while (node.parent !== node) { parts.push(node.name); @@ -1248,9 +1371,9 @@ var NODEFS = { } parts.push(node.mount.opts.root); parts.reverse(); - return PATH.join.apply(null, parts); + return PATH.join(...parts); }, - flagsForNode: flags => { + flagsForNode(flags) { flags &= ~2097152; flags &= ~2048; flags &= ~32768; @@ -1269,7 +1392,7 @@ var NODEFS = { return newFlags; }, node_ops: { - getattr: node => { + getattr(node) { var path = NODEFS.realPath(node); var stat; try { @@ -1300,7 +1423,7 @@ var NODEFS = { blocks: stat.blocks }; }, - setattr: (node, attr) => { + setattr(node, attr) { var path = NODEFS.realPath(node); try { if (attr.mode !== undefined) { @@ -1319,12 +1442,12 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - lookup: (parent, name) => { + lookup(parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); var mode = NODEFS.getMode(path); return NODEFS.createNode(parent, name, mode); }, - mknod: (parent, name, mode, dev) => { + mknod(parent, name, mode, dev) { var node = NODEFS.createNode(parent, name, mode, dev); var path = NODEFS.realPath(node); try { @@ -1341,7 +1464,7 @@ var NODEFS = { } return node; }, - rename: (oldNode, newDir, newName) => { + rename(oldNode, newDir, newName) { var oldPath = NODEFS.realPath(oldNode); var newPath = PATH.join2(NODEFS.realPath(newDir), newName); try { @@ -1352,7 +1475,7 @@ var NODEFS = { } oldNode.name = newName; }, - unlink: (parent, name) => { + unlink(parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); try { fs.unlinkSync(path); @@ -1361,7 +1484,7 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - rmdir: (parent, name) => { + rmdir(parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); try { fs.rmdirSync(path); @@ -1370,7 +1493,7 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - readdir: node => { + readdir(node) { var path = NODEFS.realPath(node); try { return fs.readdirSync(path); @@ -1379,7 +1502,7 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - symlink: (parent, newName, oldPath) => { + symlink(parent, newName, oldPath) { var newPath = PATH.join2(NODEFS.realPath(parent), newName); try { fs.symlinkSync(oldPath, newPath); @@ -1388,7 +1511,7 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - readlink: node => { + readlink(node) { var path = NODEFS.realPath(node); try { path = fs.readlinkSync(path); @@ -1402,10 +1525,11 @@ var NODEFS = { } }, stream_ops: { - open: stream => { + open(stream) { var path = NODEFS.realPath(stream.node); try { if (FS.isFile(stream.node.mode)) { + stream.shared.refcount = 1; stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)); } } catch (e) { @@ -1413,9 +1537,9 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - close: stream => { + close(stream) { try { - if (FS.isFile(stream.node.mode) && stream.nfd) { + if (FS.isFile(stream.node.mode) && stream.nfd && --stream.shared.refcount === 0) { fs.closeSync(stream.nfd); } } catch (e) { @@ -1423,22 +1547,29 @@ var NODEFS = { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - read: (stream, buffer, offset, length, position) => { + dup(stream) { + stream.shared.refcount++; + }, + read(stream, buffer, offset, length, position) { if (length === 0) return 0; try { - return fs.readSync(stream.nfd, Buffer.from(buffer.buffer), offset, length, position); + return fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { + position: position + }); } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - write: (stream, buffer, offset, length, position) => { + write(stream, buffer, offset, length, position) { try { - return fs.writeSync(stream.nfd, Buffer.from(buffer.buffer), offset, length, position); + return fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { + position: position + }); } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, - llseek: (stream, offset, whence) => { + llseek(stream, offset, whence) { var position = offset; if (whence === 1) { position += stream.position; @@ -1457,7 +1588,7 @@ var NODEFS = { } return position; }, - mmap: (stream, length, position, prot, flags) => { + mmap(stream, length, position, prot, flags) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43); } @@ -1468,7 +1599,7 @@ var NODEFS = { allocated: true }; }, - msync: (stream, buffer, offset, length, mmapFlags) => { + msync(stream, buffer, offset, length, mmapFlags) { NODEFS.stream_ops.write(stream, buffer, 0, length, offset, false); return 0; } @@ -1496,7 +1627,7 @@ var PROXYFS = { } parts.push(node.mount.opts.root); parts.reverse(); - return PATH.join.apply(null, parts); + return PATH.join(...parts); }, node_ops: { getattr(node) { @@ -1695,11 +1826,84 @@ var FS = { currentPath: "/", initialized: false, ignorePermissions: true, - ErrnoError: null, + ErrnoError: class { + constructor(errno) { + this.name = "ErrnoError"; + this.errno = errno; + } + }, genericErrors: {}, filesystems: null, syncFSRequests: 0, - lookupPath: (path, opts = {}) => { + FSStream: class { + constructor() { + 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; + } + 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: "", @@ -1713,18 +1917,18 @@ var FS = { if (opts.recurse_count > 8) { throw new FS.ErrnoError(32); } - var parts = path.split("/").filter((p => !!p)); + var parts = path.split("/").filter(p => !!p); var current = FS.root; var current_path = "/"; for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; + var islast = (i === parts.length - 1); if (islast && opts.parent) { break; } current = FS.lookupNode(current, parts[i]); current_path = PATH.join2(current_path, parts[i]); if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { + if (!islast || (islast && opts.follow_mount)) { current = current.mounted.root; } } @@ -1748,7 +1952,7 @@ var FS = { node: current }; }, - getPath: node => { + getPath(node) { var path; while (true) { if (FS.isRoot(node)) { @@ -1760,19 +1964,19 @@ var FS = { node = node.parent; } }, - hashName: (parentid, name) => { + hashName(parentid, name) { var hash = 0; for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0; + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; } - return (parentid + hash >>> 0) % FS.nameTable.length; + return ((parentid + hash) >>> 0) % FS.nameTable.length; }, - hashAddNode: node => { + hashAddNode(node) { var hash = FS.hashName(node.parent.id, node.name); node.name_next = FS.nameTable[hash]; FS.nameTable[hash] = node; }, - hashRemoveNode: node => { + hashRemoveNode(node) { var hash = FS.hashName(node.parent.id, node.name); if (FS.nameTable[hash] === node) { FS.nameTable[hash] = node.name_next; @@ -1787,10 +1991,10 @@ var FS = { } } }, - lookupNode: (parent, name) => { + lookupNode(parent, name) { var errCode = FS.mayLookup(parent); if (errCode) { - throw new FS.ErrnoError(errCode, parent); + throw new FS.ErrnoError(errCode); } var hash = FS.hashName(parent.id, name); for (var node = FS.nameTable[hash]; node; node = node.name_next) { @@ -1801,31 +2005,49 @@ var FS = { } return FS.lookup(parent, name); }, - createNode: (parent, name, mode, rdev) => { + createNode(parent, name, mode, rdev) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); return node; }, - destroyNode: node => { + destroyNode(node) { FS.hashRemoveNode(node); }, - isRoot: node => node === node.parent, - isMountpoint: node => !!node.mounted, - isFile: mode => (mode & 61440) === 32768, - isDir: mode => (mode & 61440) === 16384, - isLink: mode => (mode & 61440) === 40960, - isChrdev: mode => (mode & 61440) === 8192, - isBlkdev: mode => (mode & 61440) === 24576, - isFIFO: mode => (mode & 61440) === 4096, - isSocket: mode => (mode & 49152) === 49152, - flagsToPermissionString: flag => { + 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) { + if ((flag & 512)) { perms += "w"; } return perms; }, - nodePermissions: (node, perms) => { + nodePermissions(node, perms) { if (FS.ignorePermissions) { return 0; } @@ -1838,20 +2060,21 @@ var FS = { } return 0; }, - mayLookup: dir => { + 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) => { + mayCreate(dir, name) { try { var node = FS.lookupNode(dir, name); return 20; } catch (e) {} return FS.nodePermissions(dir, "wx"); }, - mayDelete: (dir, name, isdir) => { + mayDelete(dir, name, isdir) { var node; try { node = FS.lookupNode(dir, name); @@ -1876,21 +2099,21 @@ var FS = { } return 0; }, - mayOpen: (node, flags) => { + 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" || flags & 512) { + if (FS.flagsToPermissionString(flags) !== "r" || (flags & 512)) { return 31; } } return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); }, MAX_OPEN_FDS: 4096, - nextfd: () => { + nextfd() { for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { if (!FS.streams[fd]) { return fd; @@ -1898,7 +2121,7 @@ var FS = { } throw new FS.ErrnoError(33); }, - getStreamChecked: fd => { + getStreamChecked(fd) { var stream = FS.getStream(fd); if (!stream) { throw new FS.ErrnoError(8); @@ -1906,54 +2129,7 @@ var FS = { return stream; }, getStream: fd => FS.streams[fd], - createStream: (stream, fd = -1) => { - if (!FS.FSStream) { - FS.FSStream = function() { - this.shared = {}; - }; - FS.FSStream.prototype = {}; - Object.defineProperties(FS.FSStream.prototype, { - object: { - get() { - return this.node; - }, - set(val) { - this.node = val; - } - }, - isRead: { - get() { - return (this.flags & 2097155) !== 1; - } - }, - isWrite: { - get() { - return (this.flags & 2097155) !== 0; - } - }, - isAppend: { - get() { - return this.flags & 1024; - } - }, - flags: { - get() { - return this.shared.flags; - }, - set(val) { - this.shared.flags = val; - } - }, - position: { - get() { - return this.shared.position; - }, - set(val) { - this.shared.position = val; - } - } - }); - } + createStream(stream, fd = -1) { stream = Object.assign(new FS.FSStream, stream); if (fd == -1) { fd = FS.nextfd(); @@ -1962,41 +2138,44 @@ var FS = { FS.streams[fd] = stream; return stream; }, - closeStream: fd => { + 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 => { + open(stream) { var device = FS.getDevice(stream.node.rdev); stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } + stream.stream_ops.open?.(stream); }, - llseek: () => { + llseek() { throw new FS.ErrnoError(70); } }, - major: dev => dev >> 8, - minor: dev => dev & 255, - makedev: (ma, mi) => ma << 8 | mi, - registerDevice: (dev, ops) => { + major: dev => ((dev) >> 8), + minor: dev => ((dev) & 255), + makedev: (ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { FS.devices[dev] = { stream_ops: ops }; }, getDevice: dev => FS.devices[dev], - getMounts: mount => { + getMounts(mount) { var mounts = []; var check = [ mount ]; while (check.length) { var m = check.pop(); mounts.push(m); - check.push.apply(check, m.mounts); + check.push(...m.mounts); } return mounts; }, - syncfs: (populate, callback) => { + syncfs(populate, callback) { if (typeof populate == "function") { callback = populate; populate = false; @@ -2023,14 +2202,14 @@ var FS = { doCallback(null); } } - mounts.forEach((mount => { + mounts.forEach(mount => { if (!mount.type.syncfs) { return done(null); } mount.type.syncfs(mount, populate, done); - })); + }); }, - mount: (type, opts, mountpoint) => { + mount(type, opts, mountpoint) { var root = mountpoint === "/"; var pseudo = !mountpoint; var node; @@ -2068,7 +2247,7 @@ var FS = { } return mountRoot; }, - unmount: mountpoint => { + unmount(mountpoint) { var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); @@ -2078,7 +2257,7 @@ var FS = { var node = lookup.node; var mount = node.mounted; var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach((hash => { + Object.keys(FS.nameTable).forEach(hash => { var current = FS.nameTable[hash]; while (current) { var next = current.name_next; @@ -2087,13 +2266,15 @@ var FS = { } current = next; } - })); + }); node.mounted = null; var idx = node.mount.mounts.indexOf(mount); node.mount.mounts.splice(idx, 1); }, - lookup: (parent, name) => parent.node_ops.lookup(parent, name), - mknod: (path, mode, dev) => { + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { var lookup = FS.lookupPath(path, { parent: true }); @@ -2111,19 +2292,19 @@ var FS = { } return parent.node_ops.mknod(parent, name, mode, dev); }, - create: (path, mode) => { + create(path, mode) { mode = mode !== undefined ? mode : 438; - mode &= 4095; + /* 0666 */ mode &= 4095; mode |= 32768; return FS.mknod(path, mode, 0); }, - mkdir: (path, mode) => { + mkdir(path, mode) { mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; + /* 0777 */ mode &= 511 | 512; mode |= 16384; return FS.mknod(path, mode, 0); }, - mkdirTree: (path, mode) => { + mkdirTree(path, mode) { var dirs = path.split("/"); var d = ""; for (var i = 0; i < dirs.length; ++i) { @@ -2136,15 +2317,15 @@ var FS = { } } }, - mkdev: (path, mode, dev) => { + mkdev(path, mode, dev) { if (typeof dev == "undefined") { dev = mode; mode = 438; } - mode |= 8192; + /* 0666 */ mode |= 8192; return FS.mknod(path, mode, dev); }, - symlink: (oldpath, newpath) => { + symlink(oldpath, newpath) { if (!PATH_FS.resolve(oldpath)) { throw new FS.ErrnoError(44); } @@ -2165,7 +2346,7 @@ var FS = { } return parent.node_ops.symlink(parent, newname, oldpath); }, - rename: (old_path, new_path) => { + 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); @@ -2211,7 +2392,7 @@ var FS = { if (!old_dir.node_ops.rename) { throw new FS.ErrnoError(63); } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { throw new FS.ErrnoError(10); } if (new_dir !== old_dir) { @@ -2229,7 +2410,7 @@ var FS = { FS.hashAddNode(old_node); } }, - rmdir: path => { + rmdir(path) { var lookup = FS.lookupPath(path, { parent: true }); @@ -2249,7 +2430,7 @@ var FS = { parent.node_ops.rmdir(parent, name); FS.destroyNode(node); }, - readdir: path => { + readdir(path) { var lookup = FS.lookupPath(path, { follow: true }); @@ -2259,7 +2440,7 @@ var FS = { } return node.node_ops.readdir(node); }, - unlink: path => { + unlink(path) { var lookup = FS.lookupPath(path, { parent: true }); @@ -2282,7 +2463,7 @@ var FS = { parent.node_ops.unlink(parent, name); FS.destroyNode(node); }, - readlink: path => { + readlink(path) { var lookup = FS.lookupPath(path); var link = lookup.node; if (!link) { @@ -2293,7 +2474,7 @@ var FS = { } return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); }, - stat: (path, dontFollow) => { + stat(path, dontFollow) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); @@ -2306,8 +2487,10 @@ var FS = { } return node.node_ops.getattr(node); }, - lstat: path => FS.stat(path, true), - chmod: (path, mode, dontFollow) => { + lstat(path) { + return FS.stat(path, true); + }, + chmod(path, mode, dontFollow) { var node; if (typeof path == "string") { var lookup = FS.lookupPath(path, { @@ -2321,18 +2504,18 @@ var FS = { throw new FS.ErrnoError(63); } node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, + mode: (mode & 4095) | (node.mode & ~4095), timestamp: Date.now() }); }, - lchmod: (path, mode) => { + lchmod(path, mode) { FS.chmod(path, mode, true); }, - fchmod: (fd, mode) => { + fchmod(fd, mode) { var stream = FS.getStreamChecked(fd); FS.chmod(stream.node, mode); }, - chown: (path, uid, gid, dontFollow) => { + chown(path, uid, gid, dontFollow) { var node; if (typeof path == "string") { var lookup = FS.lookupPath(path, { @@ -2349,14 +2532,14 @@ var FS = { timestamp: Date.now() }); }, - lchown: (path, uid, gid) => { + lchown(path, uid, gid) { FS.chown(path, uid, gid, true); }, - fchown: (fd, uid, gid) => { + fchown(fd, uid, gid) { var stream = FS.getStreamChecked(fd); FS.chown(stream.node, uid, gid); }, - truncate: (path, len) => { + truncate(path, len) { if (len < 0) { throw new FS.ErrnoError(28); } @@ -2387,14 +2570,14 @@ var FS = { timestamp: Date.now() }); }, - ftruncate: (fd, len) => { + 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) => { + utime(path, atime, mtime) { var lookup = FS.lookupPath(path, { follow: true }); @@ -2403,14 +2586,14 @@ var FS = { timestamp: Math.max(atime, mtime) }); }, - open: (path, flags, mode) => { + open(path, flags, mode) { if (path === "") { throw new FS.ErrnoError(44); } flags = typeof flags == "string" ? FS_modeStringToFlags(flags) : flags; - mode = typeof mode == "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768; + mode = typeof mode == "undefined" ? 438 : /* 0666 */ mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; } else { mode = 0; } @@ -2427,9 +2610,9 @@ var FS = { } catch (e) {} } var created = false; - if (flags & 64) { + if ((flags & 64)) { if (node) { - if (flags & 128) { + if ((flags & 128)) { throw new FS.ErrnoError(20); } } else { @@ -2443,7 +2626,7 @@ var FS = { if (FS.isChrdev(node.mode)) { flags &= ~512; } - if (flags & 65536 && !FS.isDir(node.mode)) { + if ((flags & 65536) && !FS.isDir(node.mode)) { throw new FS.ErrnoError(54); } if (!created) { @@ -2452,7 +2635,7 @@ var FS = { throw new FS.ErrnoError(errCode); } } - if (flags & 512 && !created) { + if ((flags & 512) && !created) { FS.truncate(node, 0); } flags &= ~(128 | 512 | 131072); @@ -2477,7 +2660,7 @@ var FS = { } return stream; }, - close: stream => { + close(stream) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8); } @@ -2493,8 +2676,10 @@ var FS = { } stream.fd = null; }, - isClosed: stream => stream.fd === null, - llseek: (stream, offset, whence) => { + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8); } @@ -2508,7 +2693,7 @@ var FS = { stream.ungotten = []; return stream.position; }, - read: (stream, buffer, offset, length, position) => { + read(stream, buffer, offset, length, position) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2534,7 +2719,7 @@ var FS = { if (!seeking) stream.position += bytesRead; return bytesRead; }, - write: (stream, buffer, offset, length, position, canOwn) => { + write(stream, buffer, offset, length, position, canOwn) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2563,7 +2748,7 @@ var FS = { if (!seeking) stream.position += bytesWritten; return bytesWritten; }, - allocate: (stream, offset, length) => { + allocate(stream, offset, length) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8); } @@ -2581,7 +2766,7 @@ var FS = { } stream.stream_ops.allocate(stream, offset, length); }, - mmap: (stream, length, position, prot, flags) => { + mmap(stream, length, position, prot, flags) { if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2); } @@ -2593,20 +2778,19 @@ var FS = { } return stream.stream_ops.mmap(stream, length, position, prot, flags); }, - msync: (stream, buffer, offset, length, mmapFlags) => { + msync(stream, buffer, offset, length, mmapFlags) { if (!stream.stream_ops.msync) { return 0; } return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); }, - munmap: stream => 0, - ioctl: (stream, cmd, arg) => { + 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 = {}) => { + readFile(path, opts = {}) { opts.flags = opts.flags || 0; opts.encoding = opts.encoding || "binary"; if (opts.encoding !== "utf8" && opts.encoding !== "binary") { @@ -2626,7 +2810,7 @@ var FS = { FS.close(stream); return ret; }, - writeFile: (path, data, opts = {}) => { + writeFile(path, data, opts = {}) { opts.flags = opts.flags || 577; var stream = FS.open(path, opts.flags, opts.mode); if (typeof data == "string") { @@ -2641,7 +2825,7 @@ var FS = { FS.close(stream); }, cwd: () => FS.currentPath, - chdir: path => { + chdir(path) { var lookup = FS.lookupPath(path, { follow: true }); @@ -2657,12 +2841,12 @@ var FS = { } FS.currentPath = lookup.path; }, - createDefaultDirectories: () => { + createDefaultDirectories() { FS.mkdir("/tmp"); FS.mkdir("/home"); FS.mkdir("/home/web_user"); }, - createDefaultDevices: () => { + createDefaultDevices() { FS.mkdir("/dev"); FS.registerDevice(FS.makedev(1, 3), { read: () => 0, @@ -2685,15 +2869,15 @@ var FS = { FS.mkdir("/dev/shm"); FS.mkdir("/dev/shm/tmp"); }, - createSpecialDirectories: () => { + createSpecialDirectories() { 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, 73); + mount() { + var node = FS.createNode(proc_self, "fd", 16384 | 511, /* 0777 */ 73); node.node_ops = { - lookup: (parent, name) => { + lookup(parent, name) { var fd = +name; var stream = FS.getStreamChecked(fd); var ret = { @@ -2713,7 +2897,7 @@ var FS = { } }, {}, "/proc/self/fd"); }, - createStandardStreams: () => { + createStandardStreams() { if (Module["stdin"]) { FS.createDevice("/dev", "stdin", Module["stdin"]); } else { @@ -2733,26 +2917,11 @@ var FS = { var stdout = FS.open("/dev/stdout", 1); var stderr = FS.open("/dev/stderr", 1); }, - ensureErrnoError: () => { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.name = "ErrnoError"; - this.node = node; - this.setErrno = function(errno) { - this.errno = errno; - }; - this.setErrno(errno); - this.message = "FS error"; - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [ 44 ].forEach((code => { + staticInit() { + [ 44 ].forEach(code => { FS.genericErrors[code] = new FS.ErrnoError(code); FS.genericErrors[code].stack = ""; - })); - }, - staticInit: () => { - FS.ensureErrnoError(); + }); FS.nameTable = new Array(4096); FS.mount(MEMFS, {}, "/"); FS.createDefaultDirectories(); @@ -2764,15 +2933,14 @@ var FS = { "PROXYFS": PROXYFS }; }, - init: (input, output, error) => { + init(input, output, error) { FS.init.initialized = true; - FS.ensureErrnoError(); Module["stdin"] = input || Module["stdin"]; Module["stdout"] = output || Module["stdout"]; Module["stderr"] = error || Module["stderr"]; FS.createStandardStreams(); }, - quit: () => { + quit() { FS.init.initialized = false; _fflush(0); for (var i = 0; i < FS.streams.length; i++) { @@ -2783,14 +2951,14 @@ var FS = { FS.close(stream); } }, - findObject: (path, dontResolveLastLink) => { + findObject(path, dontResolveLastLink) { var ret = FS.analyzePath(path, dontResolveLastLink); if (!ret.exists) { return null; } return ret.object; }, - analyzePath: (path, dontResolveLastLink) => { + analyzePath(path, dontResolveLastLink) { try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink @@ -2829,7 +2997,7 @@ var FS = { } return ret; }, - createPath: (parent, path, canRead, canWrite) => { + createPath(parent, path, canRead, canWrite) { parent = typeof parent == "string" ? parent : FS.getPath(parent); var parts = path.split("/").reverse(); while (parts.length) { @@ -2843,12 +3011,12 @@ var FS = { } return current; }, - createFile: (parent, name, properties, canRead, canWrite) => { + 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) => { + createDataFile(parent, name, data, canRead, canWrite, canOwn) { var path = name; if (parent) { parent = typeof parent == "string" ? parent : FS.getPath(parent); @@ -2868,24 +3036,23 @@ var FS = { FS.close(stream); FS.chmod(node, mode); } - return node; }, - createDevice: (parent, name, input, output) => { + 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); FS.registerDevice(dev, { - open: stream => { + open(stream) { stream.seekable = false; }, - close: stream => { - if (output && output.buffer && output.buffer.length) { + close(stream) { + if (output?.buffer?.length) { output(10); } }, - read: (stream, buffer, offset, length, pos) => { - var bytesRead = 0; + read(stream, buffer, offset, length, pos) { + /* ignored */ var bytesRead = 0; for (var i = 0; i < length; i++) { var result; try { @@ -2905,7 +3072,7 @@ var FS = { } return bytesRead; }, - write: (stream, buffer, offset, length, pos) => { + write(stream, buffer, offset, length, pos) { for (var i = 0; i < length; i++) { try { output(buffer[offset + i]); @@ -2921,7 +3088,7 @@ var FS = { }); return FS.mkdev(path, mode, dev); }, - forceLoadFile: obj => { + 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."); @@ -2936,92 +3103,88 @@ var FS = { throw new Error("Cannot load without read() or XMLHttpRequest."); } }, - createLazyFile: (parent, name, url, canRead, canWrite) => { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = []; - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) { - return undefined; + createLazyFile(parent, name, url, canRead, canWrite) { + class LazyUint8Array { + constructor() { + this.lengthKnown = false; + this.chunks = []; } - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset]; - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter; - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - 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; - if (!hasByteServing) chunkSize = datalength; - 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!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) { - xhr.overrideMimeType("text/plain; charset=x-user-defined"); + 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() { + 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); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []); + 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; + if (!hasByteServing) chunkSize = datalength; + 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!"); + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + 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; + end = Math.min(end, datalength - 1); + 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) { + chunkSize = datalength = 1; + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); } - return intArrayFromString(xhr.responseText || "", true); - }; - var lazyArray = this; - lazyArray.setDataGetter((chunkNum => { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] == "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end); + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); } - if (typeof lazyArray.chunks[chunkNum] == "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum]; - })); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - 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; - }; + 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; - Object.defineProperties(lazyArray, { - length: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength(); - } - return this._length; - } - }, - chunkSize: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength(); - } - return this._chunkSize; - } - } - }); var properties = { isDevice: false, contents: lazyArray @@ -3048,13 +3211,13 @@ var FS = { }); var stream_ops = {}; var keys = Object.keys(node.stream_ops); - keys.forEach((key => { + keys.forEach(key => { var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { + stream_ops[key] = (...args) => { FS.forceLoadFile(node); - return fn.apply(null, arguments); + return fn(...args); }; - })); + }); function writeChunks(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= contents.length) return 0; @@ -3095,7 +3258,7 @@ Module["FS"] = FS; var SYSCALLS = { DEFAULT_POLLMASK: 5, - calculateAt: function(dirfd, path, allowEmpty) { + calculateAt(dirfd, path, allowEmpty) { if (PATH.isAbs(path)) { return path; } @@ -3114,45 +3277,38 @@ var SYSCALLS = { } return PATH.join2(dir, path); }, - doStat: function(func, path, buf) { - try { - var stat = func(path); - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; - } - throw e; - } - 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 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 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; + 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 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 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 / 1e3) >>> 0, (tempDouble = Math.floor(atime / 1e3), - +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3; - tempI64 = [ Math.floor(mtime / 1e3) >>> 0, (tempDouble = Math.floor(mtime / 1e3), - +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[buf + 56 >> 2] = tempI64[0], HEAP32[buf + 60 >> 2] = tempI64[1]; - HEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3; - tempI64 = [ Math.floor(ctime / 1e3) >>> 0, (tempDouble = Math.floor(ctime / 1e3), - +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[buf + 72 >> 2] = tempI64[0], HEAP32[buf + 76 >> 2] = tempI64[1]; - HEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3; - tempI64 = [ stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[buf + 88 >> 2] = tempI64[0], HEAP32[buf + 92 >> 2] = tempI64[1]; + (tempI64 = [ Math.floor(atime / 1e3) >>> 0, (tempDouble = Math.floor(atime / 1e3), + (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((buf) + (40)) >> 2)] = tempI64[0], HEAP32[(((buf) + (44)) >> 2)] = tempI64[1]); + HEAPU32[(((buf) + (48)) >> 2)] = (atime % 1e3) * 1e3; + (tempI64 = [ Math.floor(mtime / 1e3) >>> 0, (tempDouble = Math.floor(mtime / 1e3), + (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((buf) + (56)) >> 2)] = tempI64[0], HEAP32[(((buf) + (60)) >> 2)] = tempI64[1]); + HEAPU32[(((buf) + (64)) >> 2)] = (mtime % 1e3) * 1e3; + (tempI64 = [ Math.floor(ctime / 1e3) >>> 0, (tempDouble = Math.floor(ctime / 1e3), + (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((buf) + (72)) >> 2)] = tempI64[0], HEAP32[(((buf) + (76)) >> 2)] = tempI64[1]); + HEAPU32[(((buf) + (80)) >> 2)] = (ctime % 1e3) * 1e3; + (tempI64 = [ stat.ino >>> 0, (tempDouble = stat.ino, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((buf) + (88)) >> 2)] = tempI64[0], HEAP32[(((buf) + (92)) >> 2)] = tempI64[1]); return 0; }, - doMsync: function(addr, stream, len, flags, offset) { + doMsync(addr, stream, len, flags, offset) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43); } @@ -3164,15 +3320,18 @@ var SYSCALLS = { }, varargs: undefined, get() { + var ret = HEAP32[((+SYSCALLS.varargs) >> 2)]; SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; return ret; }, + getp() { + return SYSCALLS.get(); + }, getStr(ptr) { var ret = UTF8ToString(ptr); return ret; }, - getStreamFromFD: function(fd) { + getStreamFromFD(fd) { var stream = FS.getStreamChecked(fd); return stream; } @@ -3181,20 +3340,20 @@ var SYSCALLS = { function ___syscall__newselect(nfds, readfds, writefds, exceptfds, timeout) { try { var total = 0; - var srcReadLow = readfds ? HEAP32[readfds >> 2] : 0, srcReadHigh = readfds ? HEAP32[readfds + 4 >> 2] : 0; - var srcWriteLow = writefds ? HEAP32[writefds >> 2] : 0, srcWriteHigh = writefds ? HEAP32[writefds + 4 >> 2] : 0; - var srcExceptLow = exceptfds ? HEAP32[exceptfds >> 2] : 0, srcExceptHigh = exceptfds ? HEAP32[exceptfds + 4 >> 2] : 0; + var srcReadLow = (readfds ? HEAP32[((readfds) >> 2)] : 0), srcReadHigh = (readfds ? HEAP32[(((readfds) + (4)) >> 2)] : 0); + var srcWriteLow = (writefds ? HEAP32[((writefds) >> 2)] : 0), srcWriteHigh = (writefds ? HEAP32[(((writefds) + (4)) >> 2)] : 0); + var srcExceptLow = (exceptfds ? HEAP32[((exceptfds) >> 2)] : 0), srcExceptHigh = (exceptfds ? HEAP32[(((exceptfds) + (4)) >> 2)] : 0); var dstReadLow = 0, dstReadHigh = 0; var dstWriteLow = 0, dstWriteHigh = 0; var dstExceptLow = 0, dstExceptHigh = 0; - var allLow = (readfds ? HEAP32[readfds >> 2] : 0) | (writefds ? HEAP32[writefds >> 2] : 0) | (exceptfds ? HEAP32[exceptfds >> 2] : 0); - var allHigh = (readfds ? HEAP32[readfds + 4 >> 2] : 0) | (writefds ? HEAP32[writefds + 4 >> 2] : 0) | (exceptfds ? HEAP32[exceptfds + 4 >> 2] : 0); + var allLow = (readfds ? HEAP32[((readfds) >> 2)] : 0) | (writefds ? HEAP32[((writefds) >> 2)] : 0) | (exceptfds ? HEAP32[((exceptfds) >> 2)] : 0); + var allHigh = (readfds ? HEAP32[(((readfds) + (4)) >> 2)] : 0) | (writefds ? HEAP32[(((writefds) + (4)) >> 2)] : 0) | (exceptfds ? HEAP32[(((exceptfds) + (4)) >> 2)] : 0); var check = function(fd, low, high, val) { - return fd < 32 ? low & val : high & val; + return (fd < 32 ? (low & val) : (high & val)); }; for (var fd = 0; fd < nfds; fd++) { - var mask = 1 << fd % 32; - if (!check(fd, allLow, allHigh, mask)) { + var mask = 1 << (fd % 32); + if (!(check(fd, allLow, allHigh, mask))) { continue; } var stream = SYSCALLS.getStreamFromFD(fd); @@ -3202,35 +3361,35 @@ function ___syscall__newselect(nfds, readfds, writefds, exceptfds, timeout) { if (stream.stream_ops?.poll) { var timeoutInMillis = -1; if (timeout) { - var tv_sec = readfds ? HEAP32[timeout >> 2] : 0, tv_usec = readfds ? HEAP32[timeout + 8 >> 2] : 0; + var tv_sec = (readfds ? HEAP32[((timeout) >> 2)] : 0), tv_usec = (readfds ? HEAP32[(((timeout) + (4)) >> 2)] : 0); timeoutInMillis = (tv_sec + tv_usec / 1e6) * 1e3; } flags = stream.stream_ops.poll(stream, timeoutInMillis); } - if (flags & 1 && check(fd, srcReadLow, srcReadHigh, mask)) { - fd < 32 ? dstReadLow = dstReadLow | mask : dstReadHigh = dstReadHigh | mask; + if ((flags & 1) && check(fd, srcReadLow, srcReadHigh, mask)) { + fd < 32 ? (dstReadLow = dstReadLow | mask) : (dstReadHigh = dstReadHigh | mask); total++; } - if (flags & 4 && check(fd, srcWriteLow, srcWriteHigh, mask)) { - fd < 32 ? dstWriteLow = dstWriteLow | mask : dstWriteHigh = dstWriteHigh | mask; + if ((flags & 4) && check(fd, srcWriteLow, srcWriteHigh, mask)) { + fd < 32 ? (dstWriteLow = dstWriteLow | mask) : (dstWriteHigh = dstWriteHigh | mask); total++; } - if (flags & 2 && check(fd, srcExceptLow, srcExceptHigh, mask)) { - fd < 32 ? dstExceptLow = dstExceptLow | mask : dstExceptHigh = dstExceptHigh | mask; + if ((flags & 2) && check(fd, srcExceptLow, srcExceptHigh, mask)) { + fd < 32 ? (dstExceptLow = dstExceptLow | mask) : (dstExceptHigh = dstExceptHigh | mask); total++; } } if (readfds) { - HEAP32[readfds >> 2] = dstReadLow; - HEAP32[readfds + 4 >> 2] = dstReadHigh; + HEAP32[((readfds) >> 2)] = dstReadLow; + HEAP32[(((readfds) + (4)) >> 2)] = dstReadHigh; } if (writefds) { - HEAP32[writefds >> 2] = dstWriteLow; - HEAP32[writefds + 4 >> 2] = dstWriteHigh; + HEAP32[((writefds) >> 2)] = dstWriteLow; + HEAP32[(((writefds) + (4)) >> 2)] = dstWriteHigh; } if (exceptfds) { - HEAP32[exceptfds >> 2] = dstExceptLow; - HEAP32[exceptfds + 4 >> 2] = dstExceptHigh; + HEAP32[((exceptfds) >> 2)] = dstExceptLow; + HEAP32[(((exceptfds) + (4)) >> 2)] = dstExceptHigh; } return total; } catch (e) { @@ -3241,20 +3400,20 @@ function ___syscall__newselect(nfds, readfds, writefds, exceptfds, timeout) { var SOCKFS = { mount(mount) { - Module["websocket"] = Module["websocket"] && "object" === typeof Module["websocket"] ? Module["websocket"] : {}; + Module["websocket"] = (Module["websocket"] && ("object" === typeof Module["websocket"])) ? Module["websocket"] : {}; Module["websocket"]._callbacks = {}; - Module["websocket"]["on"] = function(event, callback) { + Module["websocket"]["on"] = /** @this{Object} */ function(event, callback) { if ("function" === typeof callback) { this._callbacks[event] = callback; } return this; }; - Module["websocket"].emit = function(event, param) { + Module["websocket"].emit = /** @this{Object} */ function(event, param) { if ("function" === typeof this._callbacks[event]) { this._callbacks[event].call(this, param); } }; - return FS.createNode(null, "/", 16384 | 511, 0); + return FS.createNode(null, "/", 16384 | 511, /* 0777 */ 0); }, createSocket(family, type, protocol) { type &= ~526336; @@ -3303,7 +3462,7 @@ var SOCKFS = { return sock.sock_ops.ioctl(sock, request, varargs); }, read(stream, buffer, offset, length, position) { - var sock = stream.node.sock; + /* ignored */ var sock = stream.node.sock; var msg = sock.sock_ops.recvmsg(sock, length); if (!msg) { return 0; @@ -3312,7 +3471,7 @@ var SOCKFS = { return msg.buffer.length; }, write(stream, buffer, offset, length, position) { - var sock = stream.node.sock; + /* ignored */ var sock = stream.node.sock; return sock.sock_ops.sendmsg(sock, buffer, offset, length); }, close(stream) { @@ -3324,7 +3483,7 @@ var SOCKFS = { if (!SOCKFS.nextname.current) { SOCKFS.nextname.current = 0; } - return "socket[" + SOCKFS.nextname.current++ + "]"; + return "socket[" + (SOCKFS.nextname.current++) + "]"; }, websocket_sock_ops: { createPeer(sock, addr, port) { @@ -3348,7 +3507,7 @@ var SOCKFS = { } } else { try { - var runtimeConfig = Module["websocket"] && "object" === typeof Module["websocket"]; + var runtimeConfig = (Module["websocket"] && ("object" === typeof Module["websocket"])); var url = "ws:#".replace("#", "//"); if (runtimeConfig) { if("function"===typeof Module["websocket"]["url"]) { @@ -3378,7 +3537,7 @@ url = Module["websocket"]["url"](...arguments); } var WebSocketConstructor; if (ENVIRONMENT_IS_NODE) { - WebSocketConstructor = require("ws"); + WebSocketConstructor = /** @type{(typeof WebSocket)} */ (require("ws")); } else { WebSocketConstructor = WebSocket; } @@ -3397,7 +3556,7 @@ url = Module["websocket"]["url"](...arguments); SOCKFS.websocket_sock_ops.addPeer(sock, peer); SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); if (sock.type === 2 && typeof sock.sport != "undefined") { - peer.dgram_send_queue.push(new Uint8Array([ 255, 255, 255, 255, "p".charCodeAt(0), "o".charCodeAt(0), "r".charCodeAt(0), "t".charCodeAt(0), (sock.sport & 65280) >> 8, sock.sport & 255 ])); + peer.dgram_send_queue.push(new Uint8Array([ 255, 255, 255, 255, "p".charCodeAt(0), "o".charCodeAt(0), "r".charCodeAt(0), "t".charCodeAt(0), ((sock.sport & 65280) >> 8), (sock.sport & 255) ])); } return peer; }, @@ -3438,7 +3597,7 @@ url = Module["websocket"]["url"](...arguments); var wasfirst = first; first = false; if (wasfirst && data.length === 10 && data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && data[4] === "p".charCodeAt(0) && data[5] === "o".charCodeAt(0) && data[6] === "r".charCodeAt(0) && data[7] === "t".charCodeAt(0)) { - var newport = data[8] << 8 | data[9]; + var newport = ((data[8] << 8) | data[9]); SOCKFS.websocket_sock_ops.removePeer(sock, peer); peer.port = newport; SOCKFS.websocket_sock_ops.addPeer(sock, peer); @@ -3453,19 +3612,19 @@ url = Module["websocket"]["url"](...arguments); } if (ENVIRONMENT_IS_NODE) { peer.socket.on("open", handleOpen); - peer.socket.on("message", (function(data, isBinary) { + peer.socket.on("message", function(data, isBinary) { if (!isBinary) { return; } - handleMessage(new Uint8Array(data).buffer); - })); - peer.socket.on("close", (function() { + handleMessage((new Uint8Array(data)).buffer); + }); + peer.socket.on("close", function() { Module["websocket"].emit("close", sock.stream.fd); - })); - peer.socket.on("error", (function(error) { + }); + peer.socket.on("error", function(error) { sock.error = 14; Module["websocket"].emit("error", [ sock.stream.fd, sock.error, "ECONNREFUSED: Connection refused" ]); - })); + }); } else { peer.socket.onopen = handleOpen; peer.socket.onclose = function() { @@ -3482,17 +3641,17 @@ url = Module["websocket"]["url"](...arguments); }, poll(sock) { if (sock.type === 1 && sock.server) { - return sock.pending.length ? 64 | 1 : 0; + return sock.pending.length ? (64 | 1) : 0; } var mask = 0; var dest = sock.type === 1 ? SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : null; - if (sock.recv_queue.length || !dest || dest && dest.socket.readyState === dest.socket.CLOSING || dest && dest.socket.readyState === dest.socket.CLOSED) { - mask |= 64 | 1; + if (sock.recv_queue.length || !dest || (dest && dest.socket.readyState === dest.socket.CLOSING) || (dest && dest.socket.readyState === dest.socket.CLOSED)) { + mask |= (64 | 1); } - if (!dest || dest && dest.socket.readyState === dest.socket.OPEN) { + if (!dest || (dest && dest.socket.readyState === dest.socket.OPEN)) { mask |= 4; } - if (dest && dest.socket.readyState === dest.socket.CLOSING || dest && dest.socket.readyState === dest.socket.CLOSED) { + if ((dest && dest.socket.readyState === dest.socket.CLOSING) || (dest && dest.socket.readyState === dest.socket.CLOSED)) { mask |= 16; } return mask; @@ -3504,7 +3663,7 @@ url = Module["websocket"]["url"](...arguments); if (sock.recv_queue.length) { bytes = sock.recv_queue[0].data.length; } - HEAP32[arg >> 2] = bytes; + HEAP32[((arg) >> 2)] = bytes; return 0; default: @@ -3580,7 +3739,7 @@ url = Module["websocket"]["url"](...arguments); port: sock.sport }); Module["websocket"].emit("listen", sock.stream.fd); - sock.server.on("connection", (function(ws) { + sock.server.on("connection", function(ws) { if (sock.type === 1) { var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); @@ -3592,15 +3751,15 @@ url = Module["websocket"]["url"](...arguments); SOCKFS.websocket_sock_ops.createPeer(sock, ws); Module["websocket"].emit("connection", sock.stream.fd); } - })); - sock.server.on("close", (function() { + }); + sock.server.on("close", function() { Module["websocket"].emit("close", sock.stream.fd); sock.server = null; - })); - sock.server.on("error", (function(error) { + }); + sock.server.on("error", function(error) { sock.error = 23; Module["websocket"].emit("error", [ sock.stream.fd, sock.error, "EHOSTUNREACH: Host is unreachable" ]); - })); + }); }, accept(listensock) { if (!listensock.server || !listensock.pending.length) { @@ -3707,15 +3866,10 @@ url = Module["websocket"]["url"](...arguments); } }; -function getSocketFromFD(fd) { +var getSocketFromFD = fd => { var socket = SOCKFS.getSocket(fd); if (!socket) throw new FS.ErrnoError(8); return socket; -} - -var setErrNo = value => { - HEAP32[___errno_location() >> 2] = value; - return value; }; var inetPton4 = str => { @@ -3725,15 +3879,15 @@ var inetPton4 = str => { if (isNaN(tmp)) return null; b[i] = tmp; } - return (b[0] | b[1] << 8 | b[2] << 16 | b[3] << 24) >>> 0; + return (b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0; }; -var jstoi_q = str => parseInt(str); +/** @suppress {checkTypes} */ var jstoi_q = str => parseInt(str); var inetPton6 = str => { var words; var w, offset, z; - var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i; + /* http://home.deds.nl/~aeron/regex/ */ var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i; var parts = []; if (!valid6regx.test(str)) { return null; @@ -3760,7 +3914,7 @@ var inetPton6 = str => { for (w = 0; w < words.length; w++) { if (typeof words[w] == "string") { if (words[w] === "Z") { - for (z = 0; z < 8 - words.length + 1; z++) { + for (z = 0; z < (8 - words.length + 1); z++) { parts[w + z] = 0; } offset = z - 1; @@ -3771,34 +3925,34 @@ var inetPton6 = str => { parts[w + offset] = words[w]; } } - return [ parts[1] << 16 | parts[0], parts[3] << 16 | parts[2], parts[5] << 16 | parts[4], parts[7] << 16 | parts[6] ]; + return [ (parts[1] << 16) | parts[0], (parts[3] << 16) | parts[2], (parts[5] << 16) | parts[4], (parts[7] << 16) | parts[6] ]; }; -var writeSockaddr = (sa, family, addr, port, addrlen) => { +/** @param {number=} addrlen */ var writeSockaddr = (sa, family, addr, port, addrlen) => { switch (family) { case 2: addr = inetPton4(addr); zeroMemory(sa, 16); if (addrlen) { - HEAP32[addrlen >> 2] = 16; + HEAP32[((addrlen) >> 2)] = 16; } - HEAP16[sa >> 1] = family; - HEAP32[sa + 4 >> 2] = addr; - HEAP16[sa + 2 >> 1] = _htons(port); + HEAP16[((sa) >> 1)] = family; + HEAP32[(((sa) + (4)) >> 2)] = addr; + HEAP16[(((sa) + (2)) >> 1)] = _htons(port); break; case 10: addr = inetPton6(addr); zeroMemory(sa, 28); if (addrlen) { - HEAP32[addrlen >> 2] = 28; - } - HEAP32[sa >> 2] = family; - HEAP32[sa + 8 >> 2] = addr[0]; - HEAP32[sa + 12 >> 2] = addr[1]; - HEAP32[sa + 16 >> 2] = addr[2]; - HEAP32[sa + 20 >> 2] = addr[3]; - HEAP16[sa + 2 >> 1] = _htons(port); + HEAP32[((addrlen) >> 2)] = 28; + } + HEAP32[((sa) >> 2)] = family; + HEAP32[(((sa) + (8)) >> 2)] = addr[0]; + HEAP32[(((sa) + (12)) >> 2)] = addr[1]; + HEAP32[(((sa) + (16)) >> 2)] = addr[2]; + HEAP32[(((sa) + (20)) >> 2)] = addr[3]; + HEAP16[(((sa) + (2)) >> 1)] = _htons(port); break; default: @@ -3813,7 +3967,7 @@ var DNS = { addrs: {}, names: {} }, - lookup_name: name => { + lookup_name(name) { var res = inetPton4(name); if (res !== null) { return name; @@ -3834,7 +3988,7 @@ var DNS = { } return addr; }, - lookup_addr: addr => { + lookup_addr(addr) { if (DNS.address_map.names[addr]) { return DNS.address_map.names[addr]; } @@ -3856,7 +4010,7 @@ function ___syscall_accept4(fd, addr, addrlen, flags, d1, d2) { } } -var inetNtop4 = addr => (addr & 255) + "." + (addr >> 8 & 255) + "." + (addr >> 16 & 255) + "." + (addr >> 24 & 255); +var inetNtop4 = addr => (addr & 255) + "." + ((addr >> 8) & 255) + "." + ((addr >> 16) & 255) + "." + ((addr >> 24) & 255); var inetNtop6 = ints => { var str = ""; @@ -3866,7 +4020,7 @@ var inetNtop6 = ints => { var zstart = 0; var len = 0; var i = 0; - var parts = [ ints[0] & 65535, ints[0] >> 16, ints[1] & 65535, ints[1] >> 16, ints[2] & 65535, ints[2] >> 16, ints[3] & 65535, ints[3] >> 16 ]; + var parts = [ ints[0] & 65535, (ints[0] >> 16), ints[1] & 65535, (ints[1] >> 16), ints[2] & 65535, (ints[2] >> 16), ints[3] & 65535, (ints[3] >> 16) ]; var hasipv4 = true; var v4part = ""; for (i = 0; i < 5; i++) { @@ -3876,7 +4030,7 @@ var inetNtop6 = ints => { } } if (hasipv4) { - v4part = inetNtop4(parts[6] | parts[7] << 16); + v4part = inetNtop4(parts[6] | (parts[7] << 16)); if (parts[5] === -1) { str = "::ffff:"; str += v4part; @@ -3905,7 +4059,7 @@ var inetNtop6 = ints => { } for (word = 0; word < 8; word++) { if (longest > 1) { - if (parts[word] === 0 && word >= zstart && word < zstart + longest) { + if (parts[word] === 0 && word >= zstart && word < (zstart + longest)) { if (word === zstart) { str += ":"; if (zstart === 0) str += ":"; @@ -3920,8 +4074,8 @@ var inetNtop6 = ints => { }; var readSockaddr = (sa, salen) => { - var family = HEAP16[sa >> 1]; - var port = _ntohs(HEAPU16[sa + 2 >> 1]); + var family = HEAP16[((sa) >> 1)]; + var port = _ntohs(HEAPU16[(((sa) + (2)) >> 1)]); var addr; switch (family) { case 2: @@ -3930,7 +4084,7 @@ var readSockaddr = (sa, salen) => { errno: 28 }; } - addr = HEAP32[sa + 4 >> 2]; + addr = HEAP32[(((sa) + (4)) >> 2)]; addr = inetNtop4(addr); break; @@ -3940,7 +4094,7 @@ var readSockaddr = (sa, salen) => { errno: 28 }; } - addr = [ HEAP32[sa + 8 >> 2], HEAP32[sa + 12 >> 2], HEAP32[sa + 16 >> 2], HEAP32[sa + 20 >> 2] ]; + addr = [ HEAP32[(((sa) + (8)) >> 2)], HEAP32[(((sa) + (12)) >> 2)], HEAP32[(((sa) + (16)) >> 2)], HEAP32[(((sa) + (20)) >> 2)] ]; addr = inetNtop6(addr); break; @@ -3956,13 +4110,13 @@ var readSockaddr = (sa, salen) => { }; }; -function getSocketAddress(addrp, addrlen, allowNull) { +/** @param {boolean=} allowNull */ var getSocketAddress = (addrp, addrlen, allowNull) => { if (allowNull && addrp === 0) return null; var info = readSockaddr(addrp, addrlen); if (info.errno) throw new FS.ErrnoError(info.errno); info.addr = DNS.lookup_addr(info.addr) || info.addr; return info; -} +}; function ___syscall_bind(fd, addr, addrlen, d1, d2, d3) { try { @@ -4013,7 +4167,7 @@ function ___syscall_connect(fd, addr, addrlen, d1, d2, d3) { function ___syscall_dup(fd) { try { var old = SYSCALLS.getStreamFromFD(fd); - return FS.createStream(old).fd; + return FS.dupStream(old).fd; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; return -e.errno; @@ -4026,7 +4180,7 @@ function ___syscall_dup3(fd, newfd, flags) { if (old.fd === newfd) return -28; var existing = FS.getStream(newfd); if (existing) FS.close(existing); - return FS.createStream(old, newfd).fd; + return FS.dupStream(old, newfd).fd; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; return -e.errno; @@ -4051,7 +4205,7 @@ function ___syscall_faccessat(dirfd, path, amode, flags) { if (amode & 4) perms += "r"; if (amode & 2) perms += "w"; if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { + if (perms && /* otherwise, they've just passed F_OK */ FS.nodePermissions(node, perms)) { return -2; } return 0; @@ -4061,9 +4215,7 @@ function ___syscall_faccessat(dirfd, path, amode, flags) { } } -function convertI32PairToI53Checked(lo, hi) { - return hi + 2097152 >>> 0 < 4194305 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN; -} +var convertI32PairToI53Checked = (lo, hi) => ((hi + 2097152) >>> 0 < 4194305 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN; function ___syscall_fallocate(fd, mode, offset_low, offset_high, len_low, len_high) { var offset = convertI32PairToI53Checked(offset_low, offset_high); @@ -4103,7 +4255,7 @@ function ___syscall_fchownat(dirfd, path, owner, group, flags) { try { path = SYSCALLS.getStr(path); var nofollow = flags & 256; - flags = flags & ~256; + flags = flags & (~256); path = SYSCALLS.calculateAt(dirfd, path); (nofollow ? FS.lchown : FS.chown)(path, owner, group); return 0; @@ -4124,8 +4276,11 @@ function ___syscall_fcntl64(fd, cmd, varargs) { if (arg < 0) { return -28; } + while (FS.streams[arg]) { + arg++; + } var newStream; - newStream = FS.createStream(stream, arg); + newStream = FS.dupStream(stream, arg); return newStream.fd; } @@ -4143,31 +4298,19 @@ function ___syscall_fcntl64(fd, cmd, varargs) { return 0; } - case 5: + case 12: { - var arg = SYSCALLS.get(); + var arg = SYSCALLS.getp(); var offset = 0; - HEAP16[arg + offset >> 1] = 2; + HEAP16[(((arg) + (offset)) >> 1)] = 2; return 0; } - case 6: - case 7: + case 13: + case 14: return 0; - - case 16: - case 8: - return -28; - - case 9: - setErrNo(28); - return -1; - - default: - { - return -28; - } } + return -28; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; return -e.errno; @@ -4227,9 +4370,7 @@ function ___syscall_getcwd(buf, size) { function ___syscall_getdents64(fd, dirp, count) { try { var stream = SYSCALLS.getStreamFromFD(fd); - if (!stream.getdents) { - stream.getdents = FS.readdir(stream.path); - } + stream.getdents ||= FS.readdir(stream.path); var struct_size = 280; var pos = 0; var off = FS.llseek(stream, 0, 1); @@ -4252,13 +4393,13 @@ function ___syscall_getdents64(fd, dirp, count) { id = child.id; type = FS.isChrdev(child.mode) ? 2 : FS.isDir(child.mode) ? 4 : FS.isLink(child.mode) ? 10 : 8; } - tempI64 = [ id >>> 0, (tempDouble = id, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[dirp + pos >> 2] = tempI64[0], HEAP32[dirp + pos + 4 >> 2] = tempI64[1]; - tempI64 = [ (idx + 1) * struct_size >>> 0, (tempDouble = (idx + 1) * struct_size, - +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[dirp + pos + 8 >> 2] = tempI64[0], HEAP32[dirp + pos + 12 >> 2] = tempI64[1]; - HEAP16[dirp + pos + 16 >> 1] = 280; - HEAP8[dirp + pos + 18 >> 0] = type; + (tempI64 = [ id >>> 0, (tempDouble = id, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[((dirp + pos) >> 2)] = tempI64[0], HEAP32[(((dirp + pos) + (4)) >> 2)] = tempI64[1]); + (tempI64 = [ (idx + 1) * struct_size >>> 0, (tempDouble = (idx + 1) * struct_size, + (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((dirp + pos) + (8)) >> 2)] = tempI64[0], HEAP32[(((dirp + pos) + (12)) >> 2)] = tempI64[1]); + HEAP16[(((dirp + pos) + (16)) >> 1)] = 280; + HEAP8[(dirp + pos) + (18)] = type; stringToUTF8(name, dirp + pos + 19, 256); pos += struct_size; idx += 1; @@ -4301,8 +4442,8 @@ function ___syscall_getsockopt(fd, level, optname, optval, optlen, d1) { var sock = getSocketFromFD(fd); if (level === 1) { if (optname === 4) { - HEAP32[optval >> 2] = sock.error; - HEAP32[optlen >> 2] = 4; + HEAP32[((optval) >> 2)] = sock.error; + HEAP32[((optlen) >> 2)] = 4; sock.error = null; return 0; } @@ -4330,13 +4471,13 @@ function ___syscall_ioctl(fd, op, varargs) { if (!stream.tty) return -59; if (stream.tty.ops.ioctl_tcgets) { var termios = stream.tty.ops.ioctl_tcgets(stream); - var argp = SYSCALLS.get(); - HEAP32[argp >> 2] = termios.c_iflag || 0; - HEAP32[argp + 4 >> 2] = termios.c_oflag || 0; - HEAP32[argp + 8 >> 2] = termios.c_cflag || 0; - HEAP32[argp + 12 >> 2] = termios.c_lflag || 0; + var argp = SYSCALLS.getp(); + HEAP32[((argp) >> 2)] = termios.c_iflag || 0; + HEAP32[(((argp) + (4)) >> 2)] = termios.c_oflag || 0; + HEAP32[(((argp) + (8)) >> 2)] = termios.c_cflag || 0; + HEAP32[(((argp) + (12)) >> 2)] = termios.c_lflag || 0; for (var i = 0; i < 32; i++) { - HEAP8[argp + i + 17 >> 0] = termios.c_cc[i] || 0; + HEAP8[(argp + i) + (17)] = termios.c_cc[i] || 0; } return 0; } @@ -4357,14 +4498,14 @@ function ___syscall_ioctl(fd, op, varargs) { { if (!stream.tty) return -59; if (stream.tty.ops.ioctl_tcsets) { - var argp = SYSCALLS.get(); - var c_iflag = HEAP32[argp >> 2]; - var c_oflag = HEAP32[argp + 4 >> 2]; - var c_cflag = HEAP32[argp + 8 >> 2]; - var c_lflag = HEAP32[argp + 12 >> 2]; + var argp = SYSCALLS.getp(); + var c_iflag = HEAP32[((argp) >> 2)]; + var c_oflag = HEAP32[(((argp) + (4)) >> 2)]; + var c_cflag = HEAP32[(((argp) + (8)) >> 2)]; + var c_lflag = HEAP32[(((argp) + (12)) >> 2)]; var c_cc = []; for (var i = 0; i < 32; i++) { - c_cc.push(HEAP8[argp + i + 17 >> 0]); + c_cc.push(HEAP8[(argp + i) + (17)]); } return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag: c_iflag, @@ -4380,8 +4521,8 @@ function ___syscall_ioctl(fd, op, varargs) { case 21519: { if (!stream.tty) return -59; - var argp = SYSCALLS.get(); - HEAP32[argp >> 2] = 0; + var argp = SYSCALLS.getp(); + HEAP32[((argp) >> 2)] = 0; return 0; } @@ -4393,7 +4534,7 @@ function ___syscall_ioctl(fd, op, varargs) { case 21531: { - var argp = SYSCALLS.get(); + var argp = SYSCALLS.getp(); return FS.ioctl(stream, op, argp); } @@ -4402,9 +4543,9 @@ function ___syscall_ioctl(fd, op, varargs) { if (!stream.tty) return -59; if (stream.tty.ops.ioctl_tiocgwinsz) { var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); - var argp = SYSCALLS.get(); - HEAP16[argp >> 1] = winsize[0]; - HEAP16[argp + 2 >> 1] = winsize[1]; + var argp = SYSCALLS.getp(); + HEAP16[((argp) >> 1)] = winsize[0]; + HEAP16[(((argp) + (2)) >> 1)] = winsize[1]; } return 0; } @@ -4470,7 +4611,7 @@ function ___syscall_newfstatat(dirfd, path, buf, flags) { path = SYSCALLS.getStr(path); var nofollow = flags & 256; var allowEmpty = flags & 4096; - flags = flags & ~6400; + flags = flags & (~6400); path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf); } catch (e) { @@ -4495,7 +4636,7 @@ function ___syscall_openat(dirfd, path, flags, varargs) { var PIPEFS = { BUCKET_BUFFER_SIZE: 8192, mount(mount) { - return FS.createNode(null, "/", 16384 | 511, 0); + return FS.createNode(null, "/", 16384 | 511, /* 0777 */ 0); }, createPipe() { var pipe = { @@ -4538,13 +4679,13 @@ var PIPEFS = { poll(stream) { var pipe = stream.node.pipe; if ((stream.flags & 2097155) === 1) { - return 256 | 4; + return (256 | 4); } if (pipe.buckets.length > 0) { for (var i = 0; i < pipe.buckets.length; i++) { var bucket = pipe.buckets[i]; if (bucket.offset - bucket.roffset > 0) { - return 64 | 1; + return (64 | 1); } } } @@ -4557,13 +4698,12 @@ var PIPEFS = { return 28; }, read(stream, buffer, offset, length, position) { - var pipe = stream.node.pipe; + /* ignored */ var pipe = stream.node.pipe; var currentLength = 0; for (var i = 0; i < pipe.buckets.length; i++) { var bucket = pipe.buckets[i]; currentLength += bucket.offset - bucket.roffset; } - assert(buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)); var data = buffer.subarray(offset, offset + length); if (length <= 0) { return 0; @@ -4604,8 +4744,7 @@ var PIPEFS = { return totalRead; }, write(stream, buffer, offset, length, position) { - var pipe = stream.node.pipe; - assert(buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)); + /* ignored */ var pipe = stream.node.pipe; var data = buffer.subarray(offset, offset + length); var dataLen = data.byteLength; if (dataLen <= 0) { @@ -4633,7 +4772,7 @@ var PIPEFS = { currBucket.offset += freeBytesInCurrBuffer; data = data.subarray(freeBytesInCurrBuffer, data.byteLength); } - var numBuckets = data.byteLength / PIPEFS.BUCKET_BUFFER_SIZE | 0; + var numBuckets = (data.byteLength / PIPEFS.BUCKET_BUFFER_SIZE) | 0; var remElements = data.byteLength % PIPEFS.BUCKET_BUFFER_SIZE; for (var i = 0; i < numBuckets; i++) { var newBucket = { @@ -4668,7 +4807,7 @@ var PIPEFS = { if (!PIPEFS.nextname.current) { PIPEFS.nextname.current = 0; } - return "pipe[" + PIPEFS.nextname.current++ + "]"; + return "pipe[" + (PIPEFS.nextname.current++) + "]"; } }; @@ -4678,8 +4817,8 @@ function ___syscall_pipe(fdPtr) { throw new FS.ErrnoError(21); } var res = PIPEFS.createPipe(); - HEAP32[fdPtr >> 2] = res.readable_fd; - HEAP32[fdPtr + 4 >> 2] = res.writable_fd; + HEAP32[((fdPtr) >> 2)] = res.readable_fd; + HEAP32[(((fdPtr) + (4)) >> 2)] = res.writable_fd; return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -4692,8 +4831,8 @@ function ___syscall_poll(fds, nfds, timeout) { var nonzero = 0; for (var i = 0; i < nfds; i++) { var pollfd = fds + 8 * i; - var fd = HEAP32[pollfd >> 2]; - var events = HEAP16[pollfd + 4 >> 1]; + var fd = HEAP32[((pollfd) >> 2)]; + var events = HEAP16[(((pollfd) + (4)) >> 1)]; var mask = 32; var stream = FS.getStream(fd); if (stream) { @@ -4704,7 +4843,7 @@ function ___syscall_poll(fds, nfds, timeout) { } mask &= events | 8 | 16; if (mask) nonzero++; - HEAP16[pollfd + 6 >> 1] = mask; + HEAP16[(((pollfd) + (6)) >> 1)] = mask; } return nonzero; } catch (e) { @@ -4808,16 +4947,16 @@ function ___syscall_stat64(path, buf) { function ___syscall_statfs64(path, size, buf) { try { path = SYSCALLS.getStr(path); - HEAP32[buf + 4 >> 2] = 4096; - HEAP32[buf + 40 >> 2] = 4096; - HEAP32[buf + 8 >> 2] = 1e6; - HEAP32[buf + 12 >> 2] = 5e5; - HEAP32[buf + 16 >> 2] = 5e5; - HEAP32[buf + 20 >> 2] = FS.nextInode; - HEAP32[buf + 24 >> 2] = 1e6; - HEAP32[buf + 28 >> 2] = 42; - HEAP32[buf + 44 >> 2] = 2; - HEAP32[buf + 36 >> 2] = 255; + HEAP32[(((buf) + (4)) >> 2)] = 4096; + HEAP32[(((buf) + (40)) >> 2)] = 4096; + HEAP32[(((buf) + (8)) >> 2)] = 1e6; + HEAP32[(((buf) + (12)) >> 2)] = 5e5; + HEAP32[(((buf) + (16)) >> 2)] = 5e5; + HEAP32[(((buf) + (20)) >> 2)] = FS.nextInode; + HEAP32[(((buf) + (24)) >> 2)] = 1e6; + HEAP32[(((buf) + (28)) >> 2)] = 42; + HEAP32[(((buf) + (44)) >> 2)] = 2; + HEAP32[(((buf) + (36)) >> 2)] = 255; return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -4855,9 +4994,7 @@ function ___syscall_unlinkat(dirfd, path, flags) { } } -function readI53FromI64(ptr) { - return HEAPU32[ptr >> 2] + HEAP32[ptr + 4 >> 2] * 4294967296; -} +var readI53FromI64 = ptr => HEAPU32[((ptr) >> 2)] + HEAP32[(((ptr) + (4)) >> 2)] * 4294967296; function ___syscall_utimensat(dirfd, path, times, flags) { try { @@ -4868,12 +5005,12 @@ function ___syscall_utimensat(dirfd, path, times, flags) { var mtime = atime; } else { var seconds = readI53FromI64(times); - var nanoseconds = HEAP32[times + 8 >> 2]; - atime = seconds * 1e3 + nanoseconds / (1e3 * 1e3); + var nanoseconds = HEAP32[(((times) + (8)) >> 2)]; + atime = (seconds * 1e3) + (nanoseconds / (1e3 * 1e3)); times += 16; seconds = readI53FromI64(times); - nanoseconds = HEAP32[times + 8 >> 2]; - mtime = seconds * 1e3 + nanoseconds / (1e3 * 1e3); + nanoseconds = HEAP32[(((times) + (8)) >> 2)]; + mtime = (seconds * 1e3) + (nanoseconds / (1e3 * 1e3)); } FS.utime(path, atime, mtime); return 0; @@ -4883,10 +5020,20 @@ function ___syscall_utimensat(dirfd, path, times, flags) { } } -var nowIsMonotonic = true; +var nowIsMonotonic = 1; var __emscripten_get_now_is_monotonic = () => nowIsMonotonic; +var __emscripten_lookup_name = name => { + var nameString = UTF8ToString(name); + return inetPton4(DNS.lookup_name(nameString)); +}; + +var __emscripten_runtime_keepalive_clear = () => { + noExitRuntime = false; + runtimeKeepaliveCounter = 0; +}; + var __emscripten_throw_longjmp = () => { throw Infinity; }; @@ -4894,16 +5041,16 @@ var __emscripten_throw_longjmp = () => { function __gmtime_js(time_low, time_high, tmPtr) { var time = convertI32PairToI53Checked(time_low, time_high); var date = new Date(time * 1e3); - HEAP32[tmPtr >> 2] = date.getUTCSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(); - HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(); - HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900; - HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); + HEAP32[((tmPtr) >> 2)] = date.getUTCSeconds(); + HEAP32[(((tmPtr) + (4)) >> 2)] = date.getUTCMinutes(); + HEAP32[(((tmPtr) + (8)) >> 2)] = date.getUTCHours(); + HEAP32[(((tmPtr) + (12)) >> 2)] = date.getUTCDate(); + HEAP32[(((tmPtr) + (16)) >> 2)] = date.getUTCMonth(); + HEAP32[(((tmPtr) + (20)) >> 2)] = date.getUTCFullYear() - 1900; + HEAP32[(((tmPtr) + (24)) >> 2)] = date.getUTCDay(); var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; + var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0; + HEAP32[(((tmPtr) + (28)) >> 2)] = yday; } var isLeapYear = year => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); @@ -4914,7 +5061,7 @@ var MONTH_DAYS_REGULAR_CUMULATIVE = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 27 var ydayFromDate = date => { var leap = isLeapYear(date.getFullYear()); - var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE; + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; return yday; }; @@ -4922,52 +5069,56 @@ var ydayFromDate = date => { function __localtime_js(time_low, time_high, tmPtr) { var time = convertI32PairToI53Checked(time_low, time_high); var date = new Date(time * 1e3); - HEAP32[tmPtr >> 2] = date.getSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getHours(); - HEAP32[tmPtr + 12 >> 2] = date.getDate(); - HEAP32[tmPtr + 16 >> 2] = date.getMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900; - HEAP32[tmPtr + 24 >> 2] = date.getDay(); + HEAP32[((tmPtr) >> 2)] = date.getSeconds(); + HEAP32[(((tmPtr) + (4)) >> 2)] = date.getMinutes(); + HEAP32[(((tmPtr) + (8)) >> 2)] = date.getHours(); + HEAP32[(((tmPtr) + (12)) >> 2)] = date.getDate(); + HEAP32[(((tmPtr) + (16)) >> 2)] = date.getMonth(); + HEAP32[(((tmPtr) + (20)) >> 2)] = date.getFullYear() - 1900; + HEAP32[(((tmPtr) + (24)) >> 2)] = date.getDay(); var yday = ydayFromDate(date) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60); + HEAP32[(((tmPtr) + (28)) >> 2)] = yday; + HEAP32[(((tmPtr) + (36)) >> 2)] = -(date.getTimezoneOffset() * 60); var start = new Date(date.getFullYear(), 0, 1); var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); var winterOffset = start.getTimezoneOffset(); var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; - HEAP32[tmPtr + 32 >> 2] = dst; + HEAP32[(((tmPtr) + (32)) >> 2)] = dst; } var __mktime_js = function(tmPtr) { var ret = (() => { - var date = new Date(HEAP32[tmPtr + 20 >> 2] + 1900, HEAP32[tmPtr + 16 >> 2], HEAP32[tmPtr + 12 >> 2], HEAP32[tmPtr + 8 >> 2], HEAP32[tmPtr + 4 >> 2], HEAP32[tmPtr >> 2], 0); - var dst = HEAP32[tmPtr + 32 >> 2]; + var date = new Date(HEAP32[(((tmPtr) + (20)) >> 2)] + 1900, HEAP32[(((tmPtr) + (16)) >> 2)], HEAP32[(((tmPtr) + (12)) >> 2)], HEAP32[(((tmPtr) + (8)) >> 2)], HEAP32[(((tmPtr) + (4)) >> 2)], HEAP32[((tmPtr) >> 2)], 0); + var dst = HEAP32[(((tmPtr) + (32)) >> 2)]; var guessedOffset = date.getTimezoneOffset(); var start = new Date(date.getFullYear(), 0, 1); var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); var winterOffset = start.getTimezoneOffset(); var dstOffset = Math.min(winterOffset, summerOffset); if (dst < 0) { - HEAP32[tmPtr + 32 >> 2] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); - } else if (dst > 0 != (dstOffset == guessedOffset)) { + HEAP32[(((tmPtr) + (32)) >> 2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { var nonDstOffset = Math.max(winterOffset, summerOffset); var trueOffset = dst > 0 ? dstOffset : nonDstOffset; date.setTime(date.getTime() + (trueOffset - guessedOffset) * 6e4); } - HEAP32[tmPtr + 24 >> 2] = date.getDay(); + HEAP32[(((tmPtr) + (24)) >> 2)] = date.getDay(); var yday = ydayFromDate(date) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - HEAP32[tmPtr >> 2] = date.getSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getHours(); - HEAP32[tmPtr + 12 >> 2] = date.getDate(); - HEAP32[tmPtr + 16 >> 2] = date.getMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getYear(); - return date.getTime() / 1e3; + HEAP32[(((tmPtr) + (28)) >> 2)] = yday; + HEAP32[((tmPtr) >> 2)] = date.getSeconds(); + HEAP32[(((tmPtr) + (4)) >> 2)] = date.getMinutes(); + HEAP32[(((tmPtr) + (8)) >> 2)] = date.getHours(); + HEAP32[(((tmPtr) + (12)) >> 2)] = date.getDate(); + HEAP32[(((tmPtr) + (16)) >> 2)] = date.getMonth(); + HEAP32[(((tmPtr) + (20)) >> 2)] = date.getYear(); + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + return timeMs / 1e3; })(); - return setTempRet0((tempDouble = ret, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)), - ret >>> 0; + return (setTempRet0((tempDouble = ret, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0)), + ret >>> 0); }; function __mmap_js(len, prot, flags, fd, offset_low, offset_high, allocated, addr) { @@ -4977,8 +5128,8 @@ function __mmap_js(len, prot, flags, fd, offset_low, offset_high, allocated, add var stream = SYSCALLS.getStreamFromFD(fd); var res = FS.mmap(stream, len, offset, prot, flags); var ptr = res.ptr; - HEAP32[allocated >> 2] = res.allocated; - HEAPU32[addr >> 2] = ptr; + HEAP32[((allocated) >> 2)] = res.allocated; + HEAPU32[((addr) >> 2)] = ptr; return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -4989,12 +5140,10 @@ function __mmap_js(len, prot, flags, fd, offset_low, offset_high, allocated, add function __munmap_js(addr, len, prot, flags, fd, offset_low, offset_high) { var offset = convertI32PairToI53Checked(offset_low, offset_high); try { - if (isNaN(offset)) return 61; var stream = SYSCALLS.getStreamFromFD(fd); if (prot & 2) { SYSCALLS.doMsync(addr, stream, len, flags, offset); } - FS.munmap(stream); } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; return -e.errno; @@ -5010,16 +5159,20 @@ var handleException = e => { quit_(1, e); }; +var runtimeKeepaliveCounter = 0; + +var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = code => { EXITSTATUS = code; if (!keepRuntimeAlive()) { - if (Module["onExit"]) Module["onExit"](code); + Module["onExit"]?.(code); ABORT = true; } quit_(code, new ExitStatus(code)); }; -var exitJS = (status, implicit) => { +/** @param {boolean|number=} implicit */ var exitJS = (status, implicit) => { EXITSTATUS = status; if (!keepRuntimeAlive()) { exitRuntime(); @@ -5066,10 +5219,10 @@ var __setitimer_js = (which, timeout_ms) => { delete timers[which]; } if (!timeout_ms) return 0; - var id = setTimeout((() => { + var id = setTimeout(() => { delete timers[which]; - callUserCallback((() => __emscripten_timeout(which, _emscripten_get_now()))); - }), timeout_ms); + callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now())); + }, timeout_ms); timers[which] = { id: id, timeout_ms: timeout_ms @@ -5077,36 +5230,27 @@ var __setitimer_js = (which, timeout_ms) => { return 0; }; -var stringToNewUTF8 = str => { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8(str, ret, size); - return ret; -}; - -var __tzset_js = (timezone, daylight, tzname) => { +var __tzset_js = (timezone, daylight, std_name, dst_name) => { var currentYear = (new Date).getFullYear(); var winter = new Date(currentYear, 0, 1); var summer = new Date(currentYear, 6, 1); var winterOffset = winter.getTimezoneOffset(); var summerOffset = summer.getTimezoneOffset(); var stdTimezoneOffset = Math.max(winterOffset, summerOffset); - HEAPU32[timezone >> 2] = stdTimezoneOffset * 60; - HEAP32[daylight >> 2] = Number(winterOffset != summerOffset); + HEAPU32[((timezone) >> 2)] = stdTimezoneOffset * 60; + HEAP32[((daylight) >> 2)] = Number(winterOffset != summerOffset); function extractZone(date) { var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); return match ? match[1] : "GMT"; } var winterName = extractZone(winter); var summerName = extractZone(summer); - var winterNamePtr = stringToNewUTF8(winterName); - var summerNamePtr = stringToNewUTF8(summerName); if (summerOffset < winterOffset) { - HEAPU32[tzname >> 2] = winterNamePtr; - HEAPU32[tzname + 4 >> 2] = summerNamePtr; + stringToUTF8(winterName, std_name, 7); + stringToUTF8(summerName, dst_name, 7); } else { - HEAPU32[tzname >> 2] = summerNamePtr; - HEAPU32[tzname + 4 >> 2] = winterNamePtr; + stringToUTF8(winterName, dst_name, 7); + stringToUTF8(summerName, std_name, 7); } }; @@ -5114,24 +5258,22 @@ var _abort = () => { abort(""); }; -function _emscripten_date_now() { - return Date.now(); -} +var _emscripten_date_now = () => Date.now(); var getHeapMax = () => 2147483648; var _emscripten_get_heap_max = () => getHeapMax(); -var _emscripten_memcpy_big = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num); +var _emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num); var growMemory = size => { var b = wasmMemory.buffer; - var pages = size - b.byteLength + 65535 >>> 16; + var pages = (size - b.byteLength + 65535) / 65536; try { wasmMemory.grow(pages); updateMemoryViews(); return 1; - } catch (e) {} + } /*success*/ catch (e) {} }; var _emscripten_resize_heap = requestedSize => { @@ -5162,17 +5304,15 @@ var runtimeKeepalivePop = () => { runtimeKeepaliveCounter -= 1; }; -var safeSetTimeout = (func, timeout) => { +/** @param {number=} timeout */ var safeSetTimeout = (func, timeout) => { runtimeKeepalivePush(); - return setTimeout((() => { + return setTimeout(() => { runtimeKeepalivePop(); callUserCallback(func); - }), timeout); + }, timeout); }; -var _emscripten_sleep = function(ms) { - return Asyncify.handleSleep((wakeUp => safeSetTimeout(wakeUp, ms))); -}; +var _emscripten_sleep = ms => Asyncify.handleSleep(wakeUp => safeSetTimeout(wakeUp, ms)); Module["_emscripten_sleep"] = _emscripten_sleep; @@ -5184,7 +5324,7 @@ var getExecutableName = () => thisProgram || "./this.program"; var getEnvStrings = () => { if (!getEnvStrings.strings) { - var lang = (typeof navigator == "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; + var lang = ((typeof navigator == "object" && navigator.languages && navigator.languages[0]) || "C").replace("-", "_") + ".UTF-8"; var env = { "USER": "web_user", "LOGNAME": "web_user", @@ -5208,30 +5348,28 @@ var getEnvStrings = () => { var stringToAscii = (str, buffer) => { for (var i = 0; i < str.length; ++i) { - HEAP8[buffer++ >> 0] = str.charCodeAt(i); + HEAP8[buffer++] = str.charCodeAt(i); } - HEAP8[buffer >> 0] = 0; + HEAP8[buffer] = 0; }; var _environ_get = (__environ, environ_buf) => { var bufSize = 0; - getEnvStrings().forEach((function(string, i) { + getEnvStrings().forEach((string, i) => { var ptr = environ_buf + bufSize; - HEAPU32[__environ + i * 4 >> 2] = ptr; + 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; + HEAPU32[((penviron_count) >> 2)] = strings.length; var bufSize = 0; - strings.forEach((function(string) { - bufSize += string.length + 1; - })); - HEAPU32[penviron_buf_size >> 2] = bufSize; + strings.forEach(string => bufSize += string.length + 1); + HEAPU32[((penviron_buf_size) >> 2)] = bufSize; return 0; }; @@ -5255,12 +5393,12 @@ function _fd_fdstat_get(fd, pbuf) { var stream = SYSCALLS.getStreamFromFD(fd); var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4; } - HEAP8[pbuf >> 0] = type; - HEAP16[pbuf + 2 >> 1] = flags; - tempI64 = [ rightsBase >>> 0, (tempDouble = rightsBase, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[pbuf + 8 >> 2] = tempI64[0], HEAP32[pbuf + 12 >> 2] = tempI64[1]; - tempI64 = [ rightsInheriting >>> 0, (tempDouble = rightsInheriting, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[pbuf + 16 >> 2] = tempI64[0], HEAP32[pbuf + 20 >> 2] = tempI64[1]; + HEAP8[pbuf] = type; + HEAP16[(((pbuf) + (2)) >> 1)] = flags; + (tempI64 = [ rightsBase >>> 0, (tempDouble = rightsBase, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((pbuf) + (8)) >> 2)] = tempI64[0], HEAP32[(((pbuf) + (12)) >> 2)] = tempI64[1]); + (tempI64 = [ rightsInheriting >>> 0, (tempDouble = rightsInheriting, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[(((pbuf) + (16)) >> 2)] = tempI64[0], HEAP32[(((pbuf) + (20)) >> 2)] = tempI64[1]); return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -5268,11 +5406,11 @@ function _fd_fdstat_get(fd, pbuf) { } } -var doReadv = (stream, iov, iovcnt, offset) => { +/** @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]; + 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; @@ -5289,7 +5427,7 @@ function _fd_read(fd, iov, iovcnt, pnum) { try { var stream = SYSCALLS.getStreamFromFD(fd); var num = doReadv(stream, iov, iovcnt); - HEAPU32[pnum >> 2] = num; + HEAPU32[((pnum) >> 2)] = num; return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -5303,8 +5441,8 @@ function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { 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 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0) ], - HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; + (tempI64 = [ stream.position >>> 0, (tempDouble = stream.position, (+(Math.abs(tempDouble))) >= 1 ? (tempDouble > 0 ? (+(Math.floor((tempDouble) / 4294967296))) >>> 0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / 4294967296))))) >>> 0) : 0) ], + HEAP32[((newOffset) >> 2)] = tempI64[0], HEAP32[(((newOffset) + (4)) >> 2)] = tempI64[1]); if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; return 0; } catch (e) { @@ -5313,11 +5451,11 @@ function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { } } -var doWritev = (stream, iov, iovcnt, offset) => { +/** @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]; + 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; @@ -5333,7 +5471,7 @@ function _fd_write(fd, iov, iovcnt, pnum) { try { var stream = SYSCALLS.getStreamFromFD(fd); var num = doWritev(stream, iov, iovcnt); - HEAPU32[pnum >> 2] = num; + HEAPU32[((pnum) >> 2)] = num; return 0; } catch (e) { if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; @@ -5358,24 +5496,24 @@ var _getaddrinfo = (node, service, hint, out) => { errno = writeSockaddr(sa, family, addr, port); assert(!errno); ai = _malloc(32); - HEAP32[ai + 4 >> 2] = family; - HEAP32[ai + 8 >> 2] = type; - HEAP32[ai + 12 >> 2] = proto; - HEAPU32[ai + 24 >> 2] = canon; - HEAPU32[ai + 20 >> 2] = sa; + HEAP32[(((ai) + (4)) >> 2)] = family; + HEAP32[(((ai) + (8)) >> 2)] = type; + HEAP32[(((ai) + (12)) >> 2)] = proto; + HEAPU32[(((ai) + (24)) >> 2)] = canon; + HEAPU32[(((ai) + (20)) >> 2)] = sa; if (family === 10) { - HEAP32[ai + 16 >> 2] = 28; + HEAP32[(((ai) + (16)) >> 2)] = 28; } else { - HEAP32[ai + 16 >> 2] = 16; + HEAP32[(((ai) + (16)) >> 2)] = 16; } - HEAP32[ai + 28 >> 2] = 0; + HEAP32[(((ai) + (28)) >> 2)] = 0; return ai; } if (hint) { - flags = HEAP32[hint >> 2]; - family = HEAP32[hint + 4 >> 2]; - type = HEAP32[hint + 8 >> 2]; - proto = HEAP32[hint + 12 >> 2]; + flags = HEAP32[((hint) >> 2)]; + family = HEAP32[(((hint) + (4)) >> 2)]; + type = HEAP32[(((hint) + (8)) >> 2)]; + proto = HEAP32[(((hint) + (12)) >> 2)]; } if (type && !proto) { proto = type === 2 ? 17 : 6; @@ -5395,7 +5533,7 @@ var _getaddrinfo = (node, service, hint, out) => { if (flags & ~(1 | 2 | 4 | 1024 | 8 | 16 | 32)) { return -1; } - if (hint !== 0 && HEAP32[hint >> 2] & 2 && !node) { + if (hint !== 0 && (HEAP32[((hint) >> 2)] & 2) && !node) { return -1; } if (flags & 32) { @@ -5429,7 +5567,7 @@ var _getaddrinfo = (node, service, hint, out) => { } } ai = allocaddrinfo(family, type, proto, null, addr, port); - HEAPU32[out >> 2] = ai; + HEAPU32[((out) >> 2)] = ai; return 0; } node = UTF8ToString(node); @@ -5437,7 +5575,7 @@ var _getaddrinfo = (node, service, hint, out) => { if (addr !== null) { if (family === 0 || family === 2) { family = 2; - } else if (family === 10 && flags & 8) { + } else if (family === 10 && (flags & 8)) { addr = [ 0, 0, _htonl(65535), addr ]; family = 10; } else { @@ -5455,7 +5593,7 @@ var _getaddrinfo = (node, service, hint, out) => { } if (addr != null) { ai = allocaddrinfo(family, type, proto, node, addr, port); - HEAPU32[out >> 2] = ai; + HEAPU32[((out) >> 2)] = ai; return 0; } if (flags & 4) { @@ -5469,62 +5607,10 @@ var _getaddrinfo = (node, service, hint, out) => { addr = [ 0, 0, _htonl(65535), addr ]; } ai = allocaddrinfo(family, type, proto, null, addr, port); - HEAPU32[out >> 2] = ai; - return 0; -}; - -var getHostByName = name => { - var ret = _malloc(20); - var nameBuf = stringToNewUTF8(name); - HEAPU32[ret >> 2] = nameBuf; - var aliasesBuf = _malloc(4); - HEAPU32[aliasesBuf >> 2] = 0; - HEAPU32[ret + 4 >> 2] = aliasesBuf; - var afinet = 2; - HEAP32[ret + 8 >> 2] = afinet; - HEAP32[ret + 12 >> 2] = 4; - var addrListBuf = _malloc(12); - HEAPU32[addrListBuf >> 2] = addrListBuf + 8; - HEAPU32[addrListBuf + 4 >> 2] = 0; - HEAP32[addrListBuf + 8 >> 2] = inetPton4(DNS.lookup_name(name)); - HEAPU32[ret + 16 >> 2] = addrListBuf; - return ret; -}; - -var _gethostbyaddr = (addr, addrlen, type) => { - if (type !== 2) { - setErrNo(5); - return null; - } - addr = HEAP32[addr >> 2]; - var host = inetNtop4(addr); - var lookup = DNS.lookup_addr(host); - if (lookup) { - host = lookup; - } - return getHostByName(host); -}; - -var _gethostbyname = name => getHostByName(UTF8ToString(name)); - -var _gethostbyname_r = (name, ret, buf, buflen, out, err) => { - var data = _gethostbyname(name); - _memcpy(ret, data, 20); - _free(data); - HEAP32[err >> 2] = 0; - HEAPU32[out >> 2] = ret; + HEAPU32[((out) >> 2)] = ai; return 0; }; -var _getloadavg = (loadavg, nelem) => { - var limit = Math.min(nelem, 3); - var doubleSize = 8; - for (var i = 0; i < limit; i++) { - HEAPF64[loadavg + i * doubleSize >> 3] = .1; - } - return limit; -}; - var _getnameinfo = (sa, salen, node, nodelen, serv, servlen, flags) => { var info = readSockaddr(sa, salen); if (info.errno) { @@ -5535,7 +5621,7 @@ var _getnameinfo = (sa, salen, node, nodelen, serv, servlen, flags) => { var overflowed = false; if (node && nodelen) { var lookup; - if (flags & 1 || !(lookup = DNS.lookup_addr(addr))) { + if ((flags & 1) || !(lookup = DNS.lookup_addr(addr))) { if (flags & 8) { return -2; } @@ -5576,13 +5662,13 @@ var _setprotoent = stayopen => { var alias = aliases[i]; var aliasBuf = _malloc(alias.length + 1); stringToAscii(alias, aliasBuf); - HEAPU32[aliasListBuf + j >> 2] = aliasBuf; + HEAPU32[(((aliasListBuf) + (j)) >> 2)] = aliasBuf; } - HEAPU32[aliasListBuf + j >> 2] = 0; + HEAPU32[(((aliasListBuf) + (j)) >> 2)] = 0; var pe = _malloc(12); - HEAPU32[pe >> 2] = nameBuf; - HEAPU32[pe + 4 >> 2] = aliasListBuf; - HEAP32[pe + 8 >> 2] = proto; + HEAPU32[((pe) >> 2)] = nameBuf; + HEAPU32[(((pe) + (4)) >> 2)] = aliasListBuf; + HEAP32[(((pe) + (8)) >> 2)] = proto; return pe; } var list = Protocols.list; @@ -5611,7 +5697,7 @@ var _getprotobynumber = number => { return result; }; -var stringToUTF8OnStack = str => { +/** @suppress {duplicate } */ var stringToUTF8OnStack = str => { var size = lengthBytesUTF8(str) + 1; var ret = stackAlloc(size); stringToUTF8(str, ret, size); @@ -5629,9 +5715,9 @@ var PHPWASM = { } emit(eventName, data) { if (this.listeners[eventName]) { - this.listeners[eventName].forEach((callback => { + this.listeners[eventName].forEach(callback => { callback(data); - })); + }); } } once(eventName, callback) { @@ -5665,9 +5751,9 @@ var PHPWASM = { getAllWebSockets: function(sock) { const webSockets = new Set; if (sock.server) { - sock.server.clients.forEach((ws => { + sock.server.clients.forEach(ws => { webSockets.add(ws); - })); + }); } for (const peer of PHPWASM.getAllPeers(sock)) { webSockets.add(peer.socket); @@ -5677,11 +5763,11 @@ var PHPWASM = { getAllPeers: function(sock) { const peers = new Set; if (sock.server) { - sock.pending.filter((pending => pending.peers)).forEach((pending => { + sock.pending.filter(pending => pending.peers).forEach(pending => { for (const peer of Object.values(pending.peers)) { peers.add(peer); } - })); + }); } if (sock.peers) { for (const peer of Object.values(sock.peers)) { @@ -5716,10 +5802,10 @@ var PHPWASM = { const listener = () => { resolve(); }; - const promise = new Promise((function(_resolve) { + const promise = new Promise(function(_resolve) { resolve = _resolve; ws.once(event, listener); - })); + }); const cancel = () => { ws.removeListener(event, listener); setTimeout(resolve); @@ -5730,12 +5816,12 @@ var PHPWASM = { spawnProcess: function(command, args, options) { if (Module["spawnProcess"]) { const spawnedPromise = Module["spawnProcess"](command, args, options); - return Promise.resolve(spawnedPromise).then((function(spawned) { + return Promise.resolve(spawnedPromise).then(function(spawned) { if (!spawned || !spawned.on) { throw new Error("spawnProcess() must return an EventEmitter but returned a different type."); } return spawned; - })); + }); } if (ENVIRONMENT_IS_NODE) { return require("child_process").spawn(command, args, { @@ -5770,7 +5856,7 @@ function _js_create_input_device(deviceId) { let dataBuffer = []; let dataCallback; const filename = "proc_id_" + deviceId; - const device = FS.createDevice("/dev", filename, (function() {}), (function(byte) { + const device = FS.createDevice("/dev", filename, function() {}, function(byte) { try { dataBuffer.push(byte); if (dataCallback) { @@ -5781,15 +5867,15 @@ function _js_create_input_device(deviceId) { console.error(e); throw e; } - })); + }); const devicePath = "/dev/" + filename; PHPWASM.input_devices[deviceId] = { devicePath: devicePath, onData: function(cb) { dataCallback = cb; - dataBuffer.forEach((function(data) { + dataBuffer.forEach(function(data) { cb(data); - })); + }); dataBuffer.length = 0; } }; @@ -5816,7 +5902,7 @@ function _js_fd_read(fd, iov, iovcnt, pnum) { } } } - return Asyncify.handleSleep((function(wakeUp) { + return Asyncify.handleSleep(function(wakeUp) { var retries = 0; var interval = 50; var timeout = 5e3; @@ -5837,7 +5923,7 @@ function _js_fd_read(fd, iov, iovcnt, pnum) { returnCode = e.errno; } const success = returnCode === 0; - const failure = ++retries > maxRetries || !(fd in PHPWASM.child_proc_by_fd) || PHPWASM.child_proc_by_fd[fd]?.exited || FS.isClosed(stream); + const failure = (++retries > maxRetries || !(fd in PHPWASM.child_proc_by_fd) || PHPWASM.child_proc_by_fd[fd]?.exited || FS.isClosed(stream)); if (success) { HEAPU32[pnum >> 2] = num; wakeUp(0); @@ -5849,7 +5935,7 @@ function _js_fd_read(fd, iov, iovcnt, pnum) { } } poll(); - })); + }); } function _js_module_onMessage(data, bufPtr) { @@ -5858,8 +5944,8 @@ function _js_module_onMessage(data, bufPtr) { } if (Module["onMessage"]) { const dataStr = UTF8ToString(data); - return Asyncify.handleSleep((wakeUp => { - Module["onMessage"](dataStr).then((response => { + return Asyncify.handleSleep(wakeUp => { + Module["onMessage"](dataStr).then(response => { const responseBytes = typeof response === "string" ? (new TextEncoder).encode(response) : response; const responseSize = responseBytes.byteLength; const responsePtr = _malloc(responseSize + 1); @@ -5870,11 +5956,11 @@ function _js_module_onMessage(data, bufPtr) { HEAPU8[bufPtr + 2] = responsePtr >> 16; HEAPU8[bufPtr + 3] = responsePtr >> 24; wakeUp(responseSize); - })).catch((e => { + }).catch(e => { console.error(e); wakeUp(-1); - })); - })); + }); + }); } } @@ -5911,13 +5997,13 @@ function _js_open_process(command, argsPtr, argsLength, descriptorsPtr, descript } var std = {}; for (var i = 0; i < descriptorsLength; i++) { - const descriptorPtr = HEAPU32[descriptorsPtr + i * 4 >> 2]; + const descriptorPtr = HEAPU32[(descriptorsPtr + i * 4) >> 2]; std[HEAPU32[descriptorPtr >> 2]] = { - child: HEAPU32[descriptorPtr + 4 >> 2], - parent: HEAPU32[descriptorPtr + 8 >> 2] + child: HEAPU32[(descriptorPtr + 4) >> 2], + parent: HEAPU32[(descriptorPtr + 8) >> 2] }; } - return Asyncify.handleSleep((async wakeUp => { + return Asyncify.handleSleep(async wakeUp => { let cp; try { const options = {}; @@ -5957,46 +6043,52 @@ function _js_open_process(command, argsPtr, argsLength, descriptorsPtr, descript if (ProcInfo.stdoutParentFd) PHPWASM.child_proc_by_fd[ProcInfo.stdoutParentFd] = ProcInfo; if (ProcInfo.stderrParentFd) PHPWASM.child_proc_by_fd[ProcInfo.stderrParentFd] = ProcInfo; PHPWASM.child_proc_by_pid[ProcInfo.pid] = ProcInfo; - cp.on("exit", (function(code) { + cp.on("exit", function(code) { ProcInfo.exitCode = code; ProcInfo.exited = true; ProcInfo.stdout.emit("data"); ProcInfo.stderr.emit("data"); - })); + }); if (ProcInfo.stdoutChildFd) { const stdoutStream = SYSCALLS.getStreamFromFD(ProcInfo.stdoutChildFd); let stdoutAt = 0; - cp.stdout.on("data", (function(data) { + cp.stdout.on("data", function(data) { ProcInfo.stdout.emit("data", data); stdoutStream.stream_ops.write(stdoutStream, data, 0, data.length, stdoutAt); stdoutAt += data.length; - })); + }); } if (ProcInfo.stderrChildFd) { const stderrStream = SYSCALLS.getStreamFromFD(ProcInfo.stderrChildFd); let stderrAt = 0; - cp.stderr.on("data", (function(data) { + cp.stderr.on("data", function(data) { ProcInfo.stderr.emit("data", data); stderrStream.stream_ops.write(stderrStream, data, 0, data.length, stderrAt); stderrAt += data.length; - })); + }); } - try { - await new Promise(((resolve, reject) => { + /** + * Wait until the child process has been spawned. + * Unfortunately there is no Node.js API to check whether + * the process has already been spawned. We can only listen + * to the 'spawn' event and if it has already been spawned, + * listen to the 'exit' event. + */ try { + await new Promise((resolve, reject) => { cp.on("spawn", resolve); cp.on("error", reject); - })); + }); } catch (e) { console.error(e); wakeUp(1); return; } if (ProcInfo.stdinIsDevice) { - PHPWASM.input_devices[ProcInfo.stdinFd].onData((function(data) { + PHPWASM.input_devices[ProcInfo.stdinFd].onData(function(data) { if (!data) return; const dataStr = new TextDecoder("utf-8").decode(data); cp.stdin.write(dataStr); - })); + }); wakeUp(ProcInfo.pid); return; } @@ -6027,7 +6119,7 @@ function _js_open_process(command, argsPtr, argsLength, descriptorsPtr, descript } } wakeUp(ProcInfo.pid); - })); + }); } function _js_popen_to_file(command, mode, exitCodePtr) { @@ -6039,7 +6131,7 @@ function _js_popen_to_file(command, mode, exitCodePtr) { if (modestr === "w") { console.error('popen($cmd, "w") is not implemented yet'); } - return Asyncify.handleSleep((async wakeUp => { + return Asyncify.handleSleep(async wakeUp => { let cp; try { cp = PHPWASM.spawnProcess(cmdstr, []); @@ -6054,12 +6146,12 @@ function _js_popen_to_file(command, mode, exitCodePtr) { throw e; } const outByteArrays = []; - cp.stdout.on("data", (function(data) { + cp.stdout.on("data", function(data) { outByteArrays.push(data); - })); + }); const outputPath = "/tmp/popen_output"; - cp.on("exit", (function(exitCode) { - const outBytes = new Uint8Array(outByteArrays.reduce(((acc, curr) => acc + curr.length), 0)); + cp.on("exit", function(exitCode) { + const outBytes = new Uint8Array(outByteArrays.reduce((acc, curr) => acc + curr.length, 0)); let offset = 0; for (const byteArray of outByteArrays) { outBytes.set(byteArray, offset); @@ -6068,8 +6160,8 @@ function _js_popen_to_file(command, mode, exitCodePtr) { FS.writeFile(outputPath, outBytes); HEAPU8[exitCodePtr] = exitCode; wakeUp(allocateUTF8OnStack(outputPath)); - })); - })); + }); + }); } function _js_process_status(pid, exitCodePtr) { @@ -6087,7 +6179,7 @@ function _js_waitpid(pid, exitCodePtr) { if (!PHPWASM.child_proc_by_pid[pid]) { return -1; } - return Asyncify.handleSleep((wakeUp => { + return Asyncify.handleSleep(wakeUp => { const poll = function() { if (PHPWASM.child_proc_by_pid[pid]?.exited) { HEAPU32[exitCodePtr >> 2] = PHPWASM.child_proc_by_pid[pid].exitCode; @@ -6097,7 +6189,7 @@ function _js_waitpid(pid, exitCodePtr) { } }; poll(); - })); + }); } var arraySum = (array, index) => { @@ -6117,7 +6209,7 @@ var addDays = (date, days) => { var currentMonth = newDate.getMonth(); var daysInCurrentMonth = (leap ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR)[currentMonth]; if (days > daysInCurrentMonth - newDate.getDate()) { - days -= daysInCurrentMonth - newDate.getDate() + 1; + days -= (daysInCurrentMonth - newDate.getDate() + 1); newDate.setDate(1); if (currentMonth < 11) { newDate.setMonth(currentMonth + 1); @@ -6138,18 +6230,18 @@ var writeArrayToMemory = (array, buffer) => { }; var _strftime = (s, maxsize, format, tm) => { - var tm_zone = HEAP32[tm + 40 >> 2]; + 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_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); @@ -6189,7 +6281,7 @@ var _strftime = (s, maxsize, format, tm) => { 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 || ""; + var str = typeof value == "number" ? value.toString() : (value || ""); while (str.length < digits) { str = character[0] + str; } @@ -6200,7 +6292,7 @@ var _strftime = (s, maxsize, format, tm) => { } function compareByDay(date1, date2) { function sgn(value) { - return value < 0 ? -1 : value > 0 ? 1 : 0; + return value < 0 ? -1 : (value > 0 ? 1 : 0); } var compare; if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { @@ -6255,12 +6347,12 @@ var _strftime = (s, maxsize, format, tm) => { "%B": date => MONTHS[date.tm_mon], "%C": date => { var year = date.tm_year + 1900; - return leadingNulls(year / 100 | 0, 2); + return leadingNulls((year / 100) | 0, 2); }, "%d": date => leadingNulls(date.tm_mday, 2), "%e": date => leadingSomething(date.tm_mday, 2, " "), "%g": date => getWeekBasedYear(date).toString().substring(2), - "%G": date => getWeekBasedYear(date), + "%G": getWeekBasedYear, "%H": date => leadingNulls(date.tm_hour, 2), "%I": date => { var twelveHour = date.tm_hour; @@ -6292,7 +6384,7 @@ var _strftime = (s, maxsize, format, tm) => { if (!val) { val = 52; var dec31 = (date.tm_wday + 7 - date.tm_yday - 1) % 7; - if (dec31 == 4 || dec31 == 5 && isLeapYear(date.tm_year % 400 - 1)) { + if (dec31 == 4 || (dec31 == 5 && isLeapYear(date.tm_year % 400 - 1))) { val++; } } else if (val == 53) { @@ -6303,7 +6395,7 @@ var _strftime = (s, maxsize, format, tm) => { }, "%w": date => date.tm_wday, "%W": date => { - var days = date.tm_yday + 7 - (date.tm_wday + 6) % 7; + var days = date.tm_yday + 7 - ((date.tm_wday + 6) % 7); return leadingNulls(Math.floor(days / 7), 2); }, "%y": date => (date.tm_year + 1900).toString().substring(2), @@ -6312,7 +6404,7 @@ var _strftime = (s, maxsize, format, tm) => { var off = date.tm_gmtoff; var ahead = off >= 0; off = Math.abs(off) / 60; - off = off / 60 * 100 + off % 60; + off = (off / 60) * 100 + (off % 60); return (ahead ? "+" : "-") + String("0000" + off).slice(-4); }, "%Z": date => date.tm_zone, @@ -6340,42 +6432,39 @@ var _strptime = (buf, format, tm) => { pattern = pattern.replace(new RegExp("\\" + SPECIAL_CHARS[i], "g"), "\\" + SPECIAL_CHARS[i]); } var EQUIVALENT_MATCHERS = { - "%A": "%a", - "%B": "%b", - "%c": "%a %b %d %H:%M:%S %Y", - "%D": "%m\\/%d\\/%y", - "%e": "%d", - "%F": "%Y-%m-%d", - "%h": "%b", - "%R": "%H\\:%M", - "%r": "%I\\:%M\\:%S\\s%p", - "%T": "%H\\:%M\\:%S", - "%x": "%m\\/%d\\/(?:%y|%Y)", - "%X": "%H\\:%M\\:%S" + "A": "%a", + "B": "%b", + "c": "%a %b %d %H:%M:%S %Y", + "D": "%m\\/%d\\/%y", + "e": "%d", + "F": "%Y-%m-%d", + "h": "%b", + "R": "%H\\:%M", + "r": "%I\\:%M\\:%S\\s%p", + "T": "%H\\:%M\\:%S", + "x": "%m\\/%d\\/(?:%y|%Y)", + "X": "%H\\:%M\\:%S" }; - for (var matcher in EQUIVALENT_MATCHERS) { - pattern = pattern.replace(matcher, EQUIVALENT_MATCHERS[matcher]); - } var DATE_PATTERNS = { - "%a": "(?:Sun(?:day)?)|(?:Mon(?:day)?)|(?:Tue(?:sday)?)|(?:Wed(?:nesday)?)|(?:Thu(?:rsday)?)|(?:Fri(?:day)?)|(?:Sat(?:urday)?)", - "%b": "(?:Jan(?:uary)?)|(?:Feb(?:ruary)?)|(?:Mar(?:ch)?)|(?:Apr(?:il)?)|May|(?:Jun(?:e)?)|(?:Jul(?:y)?)|(?:Aug(?:ust)?)|(?:Sep(?:tember)?)|(?:Oct(?:ober)?)|(?:Nov(?:ember)?)|(?:Dec(?:ember)?)", - "%C": "\\d\\d", - "%d": "0[1-9]|[1-9](?!\\d)|1\\d|2\\d|30|31", - "%H": "\\d(?!\\d)|[0,1]\\d|20|21|22|23", - "%I": "\\d(?!\\d)|0\\d|10|11|12", - "%j": "00[1-9]|0?[1-9](?!\\d)|0?[1-9]\\d(?!\\d)|[1,2]\\d\\d|3[0-6]\\d", - "%m": "0[1-9]|[1-9](?!\\d)|10|11|12", - "%M": "0\\d|\\d(?!\\d)|[1-5]\\d", - "%n": "\\s", - "%p": "AM|am|PM|pm|A\\.M\\.|a\\.m\\.|P\\.M\\.|p\\.m\\.", - "%S": "0\\d|\\d(?!\\d)|[1-5]\\d|60", - "%U": "0\\d|\\d(?!\\d)|[1-4]\\d|50|51|52|53", - "%W": "0\\d|\\d(?!\\d)|[1-4]\\d|50|51|52|53", - "%w": "[0-6]", - "%y": "\\d\\d", - "%Y": "\\d\\d\\d\\d", - "%%": "%", - "%t": "\\s" + /* weekday name */ "a": "(?:Sun(?:day)?)|(?:Mon(?:day)?)|(?:Tue(?:sday)?)|(?:Wed(?:nesday)?)|(?:Thu(?:rsday)?)|(?:Fri(?:day)?)|(?:Sat(?:urday)?)", + /* month name */ "b": "(?:Jan(?:uary)?)|(?:Feb(?:ruary)?)|(?:Mar(?:ch)?)|(?:Apr(?:il)?)|May|(?:Jun(?:e)?)|(?:Jul(?:y)?)|(?:Aug(?:ust)?)|(?:Sep(?:tember)?)|(?:Oct(?:ober)?)|(?:Nov(?:ember)?)|(?:Dec(?:ember)?)", + /* century */ "C": "\\d\\d", + /* day of month */ "d": "0[1-9]|[1-9](?!\\d)|1\\d|2\\d|30|31", + /* hour (24hr) */ "H": "\\d(?!\\d)|[0,1]\\d|20|21|22|23", + /* hour (12hr) */ "I": "\\d(?!\\d)|0\\d|10|11|12", + /* day of year */ "j": "00[1-9]|0?[1-9](?!\\d)|0?[1-9]\\d(?!\\d)|[1,2]\\d\\d|3[0-6]\\d", + /* month */ "m": "0[1-9]|[1-9](?!\\d)|10|11|12", + /* minutes */ "M": "0\\d|\\d(?!\\d)|[1-5]\\d", + /* whitespace */ "n": " ", + /* AM/PM */ "p": "AM|am|PM|pm|A\\.M\\.|a\\.m\\.|P\\.M\\.|p\\.m\\.", + /* seconds */ "S": "0\\d|\\d(?!\\d)|[1-5]\\d|60", + /* week number */ "U": "0\\d|\\d(?!\\d)|[1-4]\\d|50|51|52|53", + /* week number */ "W": "0\\d|\\d(?!\\d)|[1-4]\\d|50|51|52|53", + /* weekday number */ "w": "[0-6]", + /* 2-digit year */ "y": "\\d\\d", + /* 4-digit year */ "Y": "\\d\\d\\d\\d", + /* whitespace */ "t": " ", + /* time zone */ "z": "Z|(?:[\\+\\-]\\d\\d:?(?:\\d\\d)?)" }; var MONTH_NUMBERS = { JAN: 0, @@ -6409,26 +6498,29 @@ var _strptime = (buf, format, tm) => { SAT: 5, SUN: 6 }; - for (var datePattern in DATE_PATTERNS) { - pattern = pattern.replace(datePattern, "(" + datePattern + DATE_PATTERNS[datePattern] + ")"); - } var capture = []; - for (var i = pattern.indexOf("%"); i >= 0; i = pattern.indexOf("%")) { - capture.push(pattern[i + 1]); - pattern = pattern.replace(new RegExp("\\%" + pattern[i + 1], "g"), ""); - } - var matches = new RegExp("^" + pattern, "i").exec(UTF8ToString(buf)); + var pattern_out = pattern.replace(/%(.)/g, (m, c) => EQUIVALENT_MATCHERS[c] || m).replace(/%(.)/g, (_, c) => { + let pat = DATE_PATTERNS[c]; + if (pat) { + capture.push(c); + return `(${pat})`; + } else { + return c; + } + }).replace(/\s+/g, "\\s*"); + var matches = new RegExp("^" + pattern_out, "i").exec(UTF8ToString(buf)); function initDate() { function fixup(value, min, max) { - return typeof value != "number" || isNaN(value) ? min : value >= min ? value <= max ? value : max : min; + return (typeof value != "number" || isNaN(value)) ? min : (value >= min ? (value <= max ? value : max) : min); } return { - year: fixup(HEAP32[tm + 20 >> 2] + 1900, 1970, 9999), - month: fixup(HEAP32[tm + 16 >> 2], 0, 11), - day: fixup(HEAP32[tm + 12 >> 2], 1, 31), - hour: fixup(HEAP32[tm + 8 >> 2], 0, 23), - min: fixup(HEAP32[tm + 4 >> 2], 0, 59), - sec: fixup(HEAP32[tm >> 2], 0, 59) + year: fixup(HEAP32[(((tm) + (20)) >> 2)] + 1900, 1970, 9999), + month: fixup(HEAP32[(((tm) + (16)) >> 2)], 0, 11), + day: fixup(HEAP32[(((tm) + (12)) >> 2)], 1, 31), + hour: fixup(HEAP32[(((tm) + (8)) >> 2)], 0, 23), + min: fixup(HEAP32[(((tm) + (4)) >> 2)], 0, 59), + sec: fixup(HEAP32[((tm) >> 2)], 0, 59), + gmtoff: 0 }; } if (matches) { @@ -6441,40 +6533,40 @@ var _strptime = (buf, format, tm) => { } return; }; - if (value = getMatch("S")) { + if ((value = getMatch("S"))) { date.sec = jstoi_q(value); } - if (value = getMatch("M")) { + if ((value = getMatch("M"))) { date.min = jstoi_q(value); } - if (value = getMatch("H")) { + if ((value = getMatch("H"))) { date.hour = jstoi_q(value); - } else if (value = getMatch("I")) { + } else if ((value = getMatch("I"))) { var hour = jstoi_q(value); - if (value = getMatch("p")) { + if ((value = getMatch("p"))) { hour += value.toUpperCase()[0] === "P" ? 12 : 0; } date.hour = hour; } - if (value = getMatch("Y")) { + if ((value = getMatch("Y"))) { date.year = jstoi_q(value); - } else if (value = getMatch("y")) { + } else if ((value = getMatch("y"))) { var year = jstoi_q(value); - if (value = getMatch("C")) { + if ((value = getMatch("C"))) { year += jstoi_q(value) * 100; } else { year += year < 69 ? 2e3 : 1900; } date.year = year; } - if (value = getMatch("m")) { + if ((value = getMatch("m"))) { date.month = jstoi_q(value) - 1; - } else if (value = getMatch("b")) { + } else if ((value = getMatch("b"))) { date.month = MONTH_NUMBERS[value.substring(0, 3).toUpperCase()] || 0; } - if (value = getMatch("d")) { + if ((value = getMatch("d"))) { date.day = jstoi_q(value); - } else if (value = getMatch("j")) { + } else if ((value = getMatch("j"))) { var day = jstoi_q(value); var leapYear = isLeapYear(date.year); for (var month = 0; month < 12; ++month) { @@ -6483,9 +6575,9 @@ var _strptime = (buf, format, tm) => { date.day = day - daysUntilMonth; } } - } else if (value = getMatch("a")) { + } else if ((value = getMatch("a"))) { var weekDay = value.substring(0, 3).toUpperCase(); - if (value = getMatch("U")) { + if ((value = getMatch("U"))) { var weekDayNumber = DAY_NUMBERS_SUN_FIRST[weekDay]; var weekNumber = jstoi_q(value); var janFirst = new Date(date.year, 0, 1); @@ -6497,7 +6589,7 @@ var _strptime = (buf, format, tm) => { } date.day = endDate.getDate(); date.month = endDate.getMonth(); - } else if (value = getMatch("W")) { + } else if ((value = getMatch("W"))) { var weekDayNumber = DAY_NUMBERS_MON_FIRST[weekDay]; var weekNumber = jstoi_q(value); var janFirst = new Date(date.year, 0, 1); @@ -6511,16 +6603,39 @@ var _strptime = (buf, format, tm) => { date.month = endDate.getMonth(); } } - var fullDate = new Date(date.year, date.month, date.day, date.hour, date.min, date.sec, 0); - HEAP32[tm >> 2] = fullDate.getSeconds(); - HEAP32[tm + 4 >> 2] = fullDate.getMinutes(); - HEAP32[tm + 8 >> 2] = fullDate.getHours(); - HEAP32[tm + 12 >> 2] = fullDate.getDate(); - HEAP32[tm + 16 >> 2] = fullDate.getMonth(); - HEAP32[tm + 20 >> 2] = fullDate.getFullYear() - 1900; - HEAP32[tm + 24 >> 2] = fullDate.getDay(); - HEAP32[tm + 28 >> 2] = arraySum(isLeapYear(fullDate.getFullYear()) ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR, fullDate.getMonth() - 1) + fullDate.getDate() - 1; - HEAP32[tm + 32 >> 2] = 0; + if ((value = getMatch("z"))) { + if (value.toLowerCase() === "z") { + date.gmtoff = 0; + } else { + var match = value.match(/^((?:\-|\+)\d\d):?(\d\d)?/); + date.gmtoff = match[1] * 3600; + if (match[2]) { + date.gmtoff += date.gmtoff > 0 ? match[2] * 60 : -match[2] * 60; + } + } + } + /* + tm_sec int seconds after the minute 0-61* + tm_min int minutes after the hour 0-59 + tm_hour int hours since midnight 0-23 + tm_mday int day of the month 1-31 + tm_mon int months since January 0-11 + tm_year int years since 1900 + tm_wday int days since Sunday 0-6 + tm_yday int days since January 1 0-365 + tm_isdst int Daylight Saving Time flag + tm_gmtoff long offset from GMT (seconds) + */ var fullDate = new Date(date.year, date.month, date.day, date.hour, date.min, date.sec, 0); + HEAP32[((tm) >> 2)] = fullDate.getSeconds(); + HEAP32[(((tm) + (4)) >> 2)] = fullDate.getMinutes(); + HEAP32[(((tm) + (8)) >> 2)] = fullDate.getHours(); + HEAP32[(((tm) + (12)) >> 2)] = fullDate.getDate(); + HEAP32[(((tm) + (16)) >> 2)] = fullDate.getMonth(); + HEAP32[(((tm) + (20)) >> 2)] = fullDate.getFullYear() - 1900; + HEAP32[(((tm) + (24)) >> 2)] = fullDate.getDay(); + HEAP32[(((tm) + (28)) >> 2)] = arraySum(isLeapYear(fullDate.getFullYear()) ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR, fullDate.getMonth() - 1) + fullDate.getDate() - 1; + HEAP32[(((tm) + (32)) >> 2)] = 0; + HEAP32[(((tm) + (36)) >> 2)] = date.gmtoff; return buf + intArrayFromString(matches[0]).length - 1; } return 0; @@ -6535,12 +6650,12 @@ function _wasm_poll_socket(socketd, events, timeout) { return 0; } const POLLIN = 1; - const POLLPRI = 2; - const POLLOUT = 4; - const POLLERR = 8; - const POLLHUP = 16; - const POLLNVAL = 32; - return Asyncify.handleSleep((wakeUp => { + /* There is data to read */ const POLLPRI = 2; + /* There is urgent data to read */ const POLLOUT = 4; + /* Writing now will not block */ const POLLERR = 8; + /* Error condition */ const POLLHUP = 16; + /* Hung up */ const POLLNVAL = 32; + /* Invalid request: fd not open */ return Asyncify.handleSleep(wakeUp => { const polls = []; if (socketd in PHPWASM.child_proc_by_fd) { const procInfo = PHPWASM.child_proc_by_fd[socketd]; @@ -6595,16 +6710,16 @@ function _wasm_poll_socket(socketd, events, timeout) { } if (polls.length === 0) { console.warn("Unsupported poll event " + events + ", defaulting to setTimeout()."); - setTimeout((function() { + setTimeout(function() { wakeUp(0); - }), timeout); + }, timeout); return; } - const promises = polls.map((([promise]) => promise)); - const clearPolling = () => polls.forEach((([, clear]) => clear())); + const promises = polls.map(([promise]) => promise); + const clearPolling = () => polls.forEach(([, clear]) => clear()); let awaken = false; let timeoutId; - Promise.race(promises).then((function(results) { + Promise.race(promises).then(function(results) { if (!awaken) { awaken = true; wakeUp(1); @@ -6613,17 +6728,17 @@ function _wasm_poll_socket(socketd, events, timeout) { } clearPolling(); } - })); + }); if (timeout !== -1) { - timeoutId = setTimeout((function() { + timeoutId = setTimeout(function() { if (!awaken) { awaken = true; wakeUp(0); clearPolling(); } - }), timeout); + }, timeout); } - })); + }); } function _wasm_setsockopt(socketd, level, optionName, optionValuePtr, optionLen) { @@ -6632,7 +6747,7 @@ function _wasm_setsockopt(socketd, level, optionName, optionValuePtr, optionLen) const SO_KEEPALIVE = 9; const IPPROTO_TCP = 6; const TCP_NODELAY = 1; - const isSupported = level === SOL_SOCKET && optionName === SO_KEEPALIVE || level === IPPROTO_TCP && optionName === TCP_NODELAY; + const isSupported = (level === SOL_SOCKET && optionName === SO_KEEPALIVE) || (level === IPPROTO_TCP && optionName === TCP_NODELAY); if (!isSupported) { console.warn(`Unsupported socket option: ${level}, ${optionName}, ${optionValue}`); return -1; @@ -6649,49 +6764,44 @@ function _wasm_shutdown(socketd, how) { return PHPWASM.shutdownSocket(socketd, how); } -function runAndAbortIfError(func) { +var wasmTable; + +var runAndAbortIfError = func => { try { return func(); } catch (e) { abort(e); } -} +}; var Asyncify = { - instrumentWasmImports: function(imports) { - var importPatterns = [ /^_dlopen_js$/, /^invoke_i$/, /^invoke_ii$/, /^invoke_iii$/, /^invoke_iiii$/, /^invoke_iiiii$/, /^invoke_iiiiii$/, /^invoke_iiiiiii$/, /^invoke_iiiiiiii$/, /^invoke_iiiiiiiiii$/, /^invoke_v$/, /^invoke_vi$/, /^invoke_vii$/, /^invoke_viidii$/, /^invoke_viii$/, /^invoke_viiii$/, /^invoke_viiiii$/, /^invoke_viiiiii$/, /^invoke_viiiiiii$/, /^invoke_viiiiiiiii$/, /^js_open_process$/, /^js_popen_to_file$/, /^js_fd_read$/, /^js_module_onMessage$/, /^js_waitpid$/, /^wasm_poll_socket$/, /^wasm_shutdown$/, /^fd_sync$/, /^__wasi_fd_sync$/, /^__asyncjs__.*$/, /^emscripten_promise_await$/, /^emscripten_idb_load$/, /^emscripten_idb_store$/, /^emscripten_idb_delete$/, /^emscripten_idb_exists$/, /^emscripten_idb_load_blob$/, /^emscripten_idb_store_blob$/, /^emscripten_sleep$/, /^emscripten_wget_data$/, /^emscripten_scan_registers$/, /^emscripten_lazy_load_code$/, /^_load_secondary_module$/, /^emscripten_fiber_swap$/, /^SDL_Delay$/ ]; - for (var x in imports) { - (function(x) { - var original = imports[x]; - var sig = original.sig; - if (typeof original == "function") { - var isAsyncifyImport = original.isAsync || importPatterns.some((pattern => !!x.match(pattern))); - } - })(x); + instrumentWasmImports(imports) { + var importPattern = /^(_dlopen_js|invoke_i|invoke_ii|invoke_iii|invoke_iiii|invoke_iiiii|invoke_iiiiii|invoke_iiiiiii|invoke_iiiiiiii|invoke_iiiiiiiiii|invoke_v|invoke_vi|invoke_vii|invoke_viidii|invoke_viii|invoke_viiii|invoke_viiiii|invoke_viiiiii|invoke_viiiiiii|invoke_viiiiiiiii|js_open_process|js_popen_to_file|js_fd_read|js_module_onMessage|js_waitpid|wasm_poll_socket|wasm_shutdown|__asyncjs__.*)$/; + for (let [x, original] of Object.entries(imports)) { + let sig = original.sig; + if (typeof original == "function") { + let isAsyncifyImport = original.isAsync || importPattern.test(x); + } } }, - instrumentWasmExports: function(exports) { + instrumentWasmExports(exports) { var ret = {}; - for (var x in exports) { - (function(x) { - var original = exports[x]; - if (typeof original == "function") { - ret[x] = function() { - Asyncify.exportCallStack.push(x); - try { - return original.apply(null, arguments); - } finally { - if (!ABORT) { - var y = Asyncify.exportCallStack.pop(); - assert(y === x); - Asyncify.maybeStopUnwind(); - } + for (let [x, original] of Object.entries(exports)) { + if (typeof original == "function") { + ret[x] = (...args) => { + Asyncify.exportCallStack.push(x); + try { + return original(...args); + } finally { + if (!ABORT) { + var y = Asyncify.exportCallStack.pop(); + Asyncify.maybeStopUnwind(); } - }; - } else { - ret[x] = original; - } - })(x); + } + }; + } else { + ret[x] = original; + } } return ret; }, @@ -6711,7 +6821,7 @@ var Asyncify = { callStackId: 0, asyncPromiseHandlers: null, sleepCallbacks: [], - getCallStackId: function(funcName) { + getCallStackId(funcName) { var id = Asyncify.callStackNameToId[funcName]; if (id === undefined) { id = Asyncify.callStackId++; @@ -6720,7 +6830,7 @@ var Asyncify = { } return id; }, - maybeStopUnwind: function() { + maybeStopUnwind() { if (Asyncify.currData && Asyncify.state === Asyncify.State.Unwinding && Asyncify.exportCallStack.length === 0) { Asyncify.state = Asyncify.State.Normal; runtimeKeepalivePush(); @@ -6730,46 +6840,46 @@ var Asyncify = { } } }, - whenDone: function() { - return new Promise(((resolve, reject) => { + whenDone() { + return new Promise((resolve, reject) => { Asyncify.asyncPromiseHandlers = { resolve: resolve, reject: reject }; - })); + }); }, - allocateData: function() { + allocateData() { var ptr = _malloc(12 + Asyncify.StackSize); Asyncify.setDataHeader(ptr, ptr + 12, Asyncify.StackSize); Asyncify.setDataRewindFunc(ptr); return ptr; }, - setDataHeader: function(ptr, stack, stackSize) { - HEAP32[ptr >> 2] = stack; - HEAP32[ptr + 4 >> 2] = stack + stackSize; + setDataHeader(ptr, stack, stackSize) { + HEAPU32[((ptr) >> 2)] = stack; + HEAPU32[(((ptr) + (4)) >> 2)] = stack + stackSize; }, - setDataRewindFunc: function(ptr) { + setDataRewindFunc(ptr) { var bottomOfCallStack = Asyncify.exportCallStack[0]; var rewindId = Asyncify.getCallStackId(bottomOfCallStack); - HEAP32[ptr + 8 >> 2] = rewindId; + HEAP32[(((ptr) + (8)) >> 2)] = rewindId; }, - getDataRewindFunc: function(ptr) { - var id = HEAP32[ptr + 8 >> 2]; + getDataRewindFunc(ptr) { + var id = HEAP32[(((ptr) + (8)) >> 2)]; var name = Asyncify.callStackIdToName[id]; - var func = Module["asm"][name]; + var func = wasmExports[name]; return func; }, - doRewind: function(ptr) { + doRewind(ptr) { var start = Asyncify.getDataRewindFunc(ptr); runtimeKeepalivePop(); return start(); }, - handleSleep: function(startAsync) { + handleSleep(startAsync) { if (ABORT) return; if (Asyncify.state === Asyncify.State.Normal) { var reachedCallback = false; var reachedAfterCallback = false; - startAsync(((handleSleepReturnValue = 0) => { + startAsync((handleSleepReturnValue = 0) => { if (ABORT) return; Asyncify.handleSleepReturnValue = handleSleepReturnValue; reachedCallback = true; @@ -6777,7 +6887,7 @@ var Asyncify = { return; } Asyncify.state = Asyncify.State.Rewinding; - runAndAbortIfError((() => _asyncify_start_rewind(Asyncify.currData))); + runAndAbortIfError(() => _asyncify_start_rewind(Asyncify.currData)); if (typeof Browser != "undefined" && Browser.mainLoop.func) { Browser.mainLoop.resume(); } @@ -6800,7 +6910,7 @@ var Asyncify = { if (isError && !handled) { throw asyncWasmReturnValue; } - })); + }); reachedAfterCallback = true; if (!reachedCallback) { Asyncify.state = Asyncify.State.Unwinding; @@ -6808,32 +6918,37 @@ var Asyncify = { if (typeof Browser != "undefined" && Browser.mainLoop.func) { Browser.mainLoop.pause(); } - runAndAbortIfError((() => _asyncify_start_unwind(Asyncify.currData))); + runAndAbortIfError(() => _asyncify_start_unwind(Asyncify.currData)); } } else if (Asyncify.state === Asyncify.State.Rewinding) { Asyncify.state = Asyncify.State.Normal; runAndAbortIfError(_asyncify_stop_rewind); _free(Asyncify.currData); Asyncify.currData = null; - Asyncify.sleepCallbacks.forEach((func => callUserCallback(func))); + Asyncify.sleepCallbacks.forEach(callUserCallback); } else { abort(`invalid state: ${Asyncify.state}`); } return Asyncify.handleSleepReturnValue; }, - handleAsync: function(startAsync) { - return Asyncify.handleSleep((wakeUp => { + handleAsync(startAsync) { + return Asyncify.handleSleep(wakeUp => { startAsync().then(wakeUp); - })); + }); } }; -function getCFunc(ident) { +var getCFunc = ident => { var func = Module["_" + ident]; return func; -} +}; -var ccall = function(ident, returnType, argTypes, args, opts) { +/** + * @param {string|null=} returnType + * @param {Array=} argTypes + * @param {Arguments|Array=} args + * @param {Object=} opts + */ var ccall = (ident, returnType, argTypes, args, opts) => { var toC = { "string": str => { var ret = 0; @@ -6870,13 +6985,13 @@ var ccall = function(ident, returnType, argTypes, args, opts) { } } var previousAsync = Asyncify.currData; - var ret = func.apply(null, cArgs); + var ret = func(...cArgs); function onDone(ret) { runtimeKeepalivePop(); if (stack !== 0) stackRestore(stack); return convertReturnValue(ret); } - var asyncMode = opts && opts.async; + var asyncMode = opts?.async; runtimeKeepalivePush(); if (Asyncify.currData != previousAsync) { return Asyncify.whenDone().then(onDone); @@ -6886,56 +7001,6 @@ var ccall = function(ident, returnType, argTypes, args, opts) { return ret; }; -var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this; - } - 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; -}; - -var readMode = 292 | 73; - -var writeMode = 146; - -Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode; - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode; - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode; - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode; - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode); - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode); - } - } -}); - -FS.FSNode = FSNode; - FS.createPreloadedFile = FS_createPreloadedFile; FS.staticInit(); @@ -6956,527 +7021,250 @@ if (ENVIRONMENT_IS_NODE) { NODEFS.staticInit(); } -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 -}; - PHPWASM.init(); var wasmImports = { - m: ___assert_fail, - _a: ___call_sighandler, - Za: ___syscall__newselect, - Ya: ___syscall_accept4, - Xa: ___syscall_bind, - Wa: ___syscall_chdir, - T: ___syscall_chmod, - Va: ___syscall_connect, - Ua: ___syscall_dup, - Ta: ___syscall_dup3, - Sa: ___syscall_faccessat, - ba: ___syscall_fallocate, - Ra: ___syscall_fchmod, - Qa: ___syscall_fchown32, - S: ___syscall_fchownat, - o: ___syscall_fcntl64, - Pa: ___syscall_fdatasync, - Oa: ___syscall_fstat64, - aa: ___syscall_ftruncate64, - Na: ___syscall_getcwd, - Ma: ___syscall_getdents64, - La: ___syscall_getpeername, - Ka: ___syscall_getsockname, - Ja: ___syscall_getsockopt, - R: ___syscall_ioctl, - Ia: ___syscall_listen, - Ha: ___syscall_lstat64, - Ga: ___syscall_mkdirat, - Fa: ___syscall_newfstatat, - x: ___syscall_openat, - Ea: ___syscall_pipe, - Da: ___syscall_poll, - Ca: ___syscall_readlinkat, - Ba: ___syscall_recvfrom, - Aa: ___syscall_renameat, - Q: ___syscall_rmdir, - za: ___syscall_sendto, - P: ___syscall_socket, - ya: ___syscall_stat64, - xa: ___syscall_statfs64, - wa: ___syscall_symlink, - D: ___syscall_unlinkat, - va: ___syscall_utimensat, - ra: __emscripten_get_now_is_monotonic, - qa: __emscripten_throw_longjmp, - _: __gmtime_js, - Z: __localtime_js, - Y: __mktime_js, - X: __mmap_js, - W: __munmap_js, - M: __setitimer_js, - pa: __tzset_js, - f: _abort, - B: _emscripten_date_now, - oa: _emscripten_get_heap_max, - v: _emscripten_get_now, - na: _emscripten_memcpy_big, - ma: _emscripten_resize_heap, - L: _emscripten_sleep, - ua: _environ_get, - ta: _environ_sizes_get, - p: _exit, - s: _fd_close, - O: _fd_fdstat_get, - N: _fd_read, - $: _fd_seek, - C: _fd_write, - la: _getaddrinfo, - K: _gethostbyaddr, - J: _gethostbyname_r, - ka: _getloadavg, - I: _getnameinfo, - ja: _getprotobyname, - ia: _getprotobynumber, - i: invoke_i, - c: invoke_ii, - b: invoke_iii, - g: invoke_iiii, - h: invoke_iiiii, - u: invoke_iiiiii, - r: invoke_iiiiiii, - w: invoke_iiiiiiii, - H: invoke_iiiiiiiiii, - e: invoke_v, - a: invoke_vi, - d: invoke_vii, - A: invoke_viidii, - l: invoke_viii, - j: invoke_viiii, - n: invoke_viiiii, - k: invoke_viiiiii, - ha: invoke_viiiiiii, - z: invoke_viiiiiiiii, - G: _js_create_input_device, - ga: _js_fd_read, - fa: _js_module_onMessage, - F: _js_open_process, - ea: _js_popen_to_file, - da: _js_process_status, - ca: _js_waitpid, - sa: _proc_exit, - E: _strftime, - V: _strptime, - t: _wasm_close, - y: _wasm_poll_socket, - q: _wasm_setsockopt, - U: _wasm_shutdown + /** @export */ m: ___assert_fail, + /** @export */ Za: ___call_sighandler, + /** @export */ Ya: ___syscall__newselect, + /** @export */ Xa: ___syscall_accept4, + /** @export */ Wa: ___syscall_bind, + /** @export */ Va: ___syscall_chdir, + /** @export */ R: ___syscall_chmod, + /** @export */ Ua: ___syscall_connect, + /** @export */ Ta: ___syscall_dup, + /** @export */ Sa: ___syscall_dup3, + /** @export */ Ra: ___syscall_faccessat, + /** @export */ $: ___syscall_fallocate, + /** @export */ Qa: ___syscall_fchmod, + /** @export */ Pa: ___syscall_fchown32, + /** @export */ Q: ___syscall_fchownat, + /** @export */ o: ___syscall_fcntl64, + /** @export */ Oa: ___syscall_fdatasync, + /** @export */ Na: ___syscall_fstat64, + /** @export */ _: ___syscall_ftruncate64, + /** @export */ Ma: ___syscall_getcwd, + /** @export */ La: ___syscall_getdents64, + /** @export */ Ka: ___syscall_getpeername, + /** @export */ Ja: ___syscall_getsockname, + /** @export */ Ia: ___syscall_getsockopt, + /** @export */ F: ___syscall_ioctl, + /** @export */ Ha: ___syscall_listen, + /** @export */ Ga: ___syscall_lstat64, + /** @export */ Fa: ___syscall_mkdirat, + /** @export */ Ea: ___syscall_newfstatat, + /** @export */ x: ___syscall_openat, + /** @export */ Da: ___syscall_pipe, + /** @export */ Ca: ___syscall_poll, + /** @export */ Ba: ___syscall_readlinkat, + /** @export */ Aa: ___syscall_recvfrom, + /** @export */ za: ___syscall_renameat, + /** @export */ P: ___syscall_rmdir, + /** @export */ ya: ___syscall_sendto, + /** @export */ O: ___syscall_socket, + /** @export */ xa: ___syscall_stat64, + /** @export */ wa: ___syscall_statfs64, + /** @export */ va: ___syscall_symlink, + /** @export */ E: ___syscall_unlinkat, + /** @export */ ua: ___syscall_utimensat, + /** @export */ qa: __emscripten_get_now_is_monotonic, + /** @export */ pa: __emscripten_lookup_name, + /** @export */ oa: __emscripten_runtime_keepalive_clear, + /** @export */ na: __emscripten_throw_longjmp, + /** @export */ Y: __gmtime_js, + /** @export */ X: __localtime_js, + /** @export */ W: __mktime_js, + /** @export */ V: __mmap_js, + /** @export */ U: __munmap_js, + /** @export */ L: __setitimer_js, + /** @export */ ma: __tzset_js, + /** @export */ f: _abort, + /** @export */ C: _emscripten_date_now, + /** @export */ la: _emscripten_get_heap_max, + /** @export */ v: _emscripten_get_now, + /** @export */ ka: _emscripten_memcpy_js, + /** @export */ ja: _emscripten_resize_heap, + /** @export */ K: _emscripten_sleep, + /** @export */ ta: _environ_get, + /** @export */ sa: _environ_sizes_get, + /** @export */ p: _exit, + /** @export */ s: _fd_close, + /** @export */ N: _fd_fdstat_get, + /** @export */ M: _fd_read, + /** @export */ Z: _fd_seek, + /** @export */ D: _fd_write, + /** @export */ ia: _getaddrinfo, + /** @export */ B: _getnameinfo, + /** @export */ ha: _getprotobyname, + /** @export */ ga: _getprotobynumber, + /** @export */ i: invoke_i, + /** @export */ c: invoke_ii, + /** @export */ b: invoke_iii, + /** @export */ g: invoke_iiii, + /** @export */ h: invoke_iiiii, + /** @export */ u: invoke_iiiiii, + /** @export */ r: invoke_iiiiiii, + /** @export */ w: invoke_iiiiiiii, + /** @export */ J: invoke_iiiiiiiiii, + /** @export */ e: invoke_v, + /** @export */ a: invoke_vi, + /** @export */ d: invoke_vii, + /** @export */ A: invoke_viidii, + /** @export */ l: invoke_viii, + /** @export */ j: invoke_viiii, + /** @export */ n: invoke_viiiii, + /** @export */ k: invoke_viiiiii, + /** @export */ fa: invoke_viiiiiii, + /** @export */ z: invoke_viiiiiiiii, + /** @export */ I: _js_create_input_device, + /** @export */ ea: _js_fd_read, + /** @export */ da: _js_module_onMessage, + /** @export */ H: _js_open_process, + /** @export */ ca: _js_popen_to_file, + /** @export */ ba: _js_process_status, + /** @export */ aa: _js_waitpid, + /** @export */ ra: _proc_exit, + /** @export */ G: _strftime, + /** @export */ T: _strptime, + /** @export */ t: _wasm_close, + /** @export */ y: _wasm_poll_socket, + /** @export */ q: _wasm_setsockopt, + /** @export */ S: _wasm_shutdown }; -var asm = createWasm(); +var wasmExports = createWasm(); -var ___wasm_call_ctors = function() { - return (___wasm_call_ctors = Module["asm"]["ab"]).apply(null, arguments); -}; +var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports["$a"])(); -var _free = function() { - return (_free = Module["asm"]["bb"]).apply(null, arguments); -}; +var _free = a0 => (_free = wasmExports["ab"])(a0); -var _memcpy = function() { - return (_memcpy = Module["asm"]["cb"]).apply(null, arguments); -}; +var _malloc = a0 => (_malloc = wasmExports["cb"])(a0); -var _malloc = function() { - return (_malloc = Module["asm"]["eb"]).apply(null, arguments); -}; +var setTempRet0 = a0 => (setTempRet0 = wasmExports["db"])(a0); -var setTempRet0 = function() { - return (setTempRet0 = Module["asm"]["fb"]).apply(null, arguments); -}; +var _wasm_read = Module["_wasm_read"] = (a0, a1, a2) => (_wasm_read = Module["_wasm_read"] = wasmExports["eb"])(a0, a1, a2); -var ___errno_location = function() { - return (___errno_location = Module["asm"]["gb"]).apply(null, arguments); -}; +var _fflush = a0 => (_fflush = wasmExports["fb"])(a0); -var _wasm_read = Module["_wasm_read"] = function() { - return (_wasm_read = Module["_wasm_read"] = Module["asm"]["hb"]).apply(null, arguments); -}; +var _wasm_popen = Module["_wasm_popen"] = (a0, a1) => (_wasm_popen = Module["_wasm_popen"] = wasmExports["gb"])(a0, a1); -var _fflush = Module["_fflush"] = function() { - return (_fflush = Module["_fflush"] = Module["asm"]["ib"]).apply(null, arguments); -}; +var _wasm_php_exec = Module["_wasm_php_exec"] = (a0, a1, a2, a3) => (_wasm_php_exec = Module["_wasm_php_exec"] = wasmExports["hb"])(a0, a1, a2, a3); -var _wasm_popen = Module["_wasm_popen"] = function() { - return (_wasm_popen = Module["_wasm_popen"] = Module["asm"]["jb"]).apply(null, arguments); -}; +var _php_pollfd_for = Module["_php_pollfd_for"] = (a0, a1, a2) => (_php_pollfd_for = Module["_php_pollfd_for"] = wasmExports["ib"])(a0, a1, a2); -var _wasm_php_exec = Module["_wasm_php_exec"] = function() { - return (_wasm_php_exec = Module["_wasm_php_exec"] = Module["asm"]["kb"]).apply(null, arguments); -}; +var _htons = a0 => (_htons = wasmExports["jb"])(a0); -var _php_pollfd_for = Module["_php_pollfd_for"] = function() { - return (_php_pollfd_for = Module["_php_pollfd_for"] = Module["asm"]["lb"]).apply(null, arguments); -}; +var _ntohs = a0 => (_ntohs = wasmExports["kb"])(a0); -var _htons = function() { - return (_htons = Module["asm"]["mb"]).apply(null, arguments); -}; +var _htonl = a0 => (_htonl = wasmExports["lb"])(a0); -var _ntohs = function() { - return (_ntohs = Module["asm"]["nb"]).apply(null, arguments); -}; +var _wasm_sleep = Module["_wasm_sleep"] = a0 => (_wasm_sleep = Module["_wasm_sleep"] = wasmExports["mb"])(a0); -var _htonl = function() { - return (_htonl = Module["asm"]["ob"]).apply(null, arguments); -}; +var _wasm_select = Module["_wasm_select"] = (a0, a1, a2, a3, a4) => (_wasm_select = Module["_wasm_select"] = wasmExports["nb"])(a0, a1, a2, a3, a4); -var _wasm_sleep = Module["_wasm_sleep"] = function() { - return (_wasm_sleep = Module["_wasm_sleep"] = Module["asm"]["pb"]).apply(null, arguments); -}; +var _wasm_add_cli_arg = Module["_wasm_add_cli_arg"] = a0 => (_wasm_add_cli_arg = Module["_wasm_add_cli_arg"] = wasmExports["ob"])(a0); -var _wasm_select = Module["_wasm_select"] = function() { - return (_wasm_select = Module["_wasm_select"] = Module["asm"]["qb"]).apply(null, arguments); -}; +var _run_cli = Module["_run_cli"] = () => (_run_cli = Module["_run_cli"] = wasmExports["pb"])(); -var _wasm_add_cli_arg = Module["_wasm_add_cli_arg"] = function() { - return (_wasm_add_cli_arg = Module["_wasm_add_cli_arg"] = Module["asm"]["rb"]).apply(null, arguments); -}; +var _wasm_set_sapi_name = Module["_wasm_set_sapi_name"] = a0 => (_wasm_set_sapi_name = Module["_wasm_set_sapi_name"] = wasmExports["qb"])(a0); -var _run_cli = Module["_run_cli"] = function() { - return (_run_cli = Module["_run_cli"] = Module["asm"]["sb"]).apply(null, arguments); -}; +var _wasm_set_phpini_path = Module["_wasm_set_phpini_path"] = a0 => (_wasm_set_phpini_path = Module["_wasm_set_phpini_path"] = wasmExports["rb"])(a0); -var _wasm_set_sapi_name = Module["_wasm_set_sapi_name"] = function() { - return (_wasm_set_sapi_name = Module["_wasm_set_sapi_name"] = Module["asm"]["tb"]).apply(null, arguments); -}; +var _wasm_set_phpini_entries = Module["_wasm_set_phpini_entries"] = a0 => (_wasm_set_phpini_entries = Module["_wasm_set_phpini_entries"] = wasmExports["sb"])(a0); -var _wasm_set_phpini_path = Module["_wasm_set_phpini_path"] = function() { - return (_wasm_set_phpini_path = Module["_wasm_set_phpini_path"] = Module["asm"]["ub"]).apply(null, arguments); -}; +var _wasm_add_SERVER_entry = Module["_wasm_add_SERVER_entry"] = (a0, a1) => (_wasm_add_SERVER_entry = Module["_wasm_add_SERVER_entry"] = wasmExports["tb"])(a0, a1); -var _wasm_set_phpini_entries = Module["_wasm_set_phpini_entries"] = function() { - return (_wasm_set_phpini_entries = Module["_wasm_set_phpini_entries"] = Module["asm"]["vb"]).apply(null, arguments); -}; +var _wasm_add_ENV_entry = Module["_wasm_add_ENV_entry"] = (a0, a1) => (_wasm_add_ENV_entry = Module["_wasm_add_ENV_entry"] = wasmExports["ub"])(a0, a1); -var _wasm_add_SERVER_entry = Module["_wasm_add_SERVER_entry"] = function() { - return (_wasm_add_SERVER_entry = Module["_wasm_add_SERVER_entry"] = Module["asm"]["wb"]).apply(null, arguments); -}; +var _wasm_set_query_string = Module["_wasm_set_query_string"] = a0 => (_wasm_set_query_string = Module["_wasm_set_query_string"] = wasmExports["vb"])(a0); -var _wasm_add_ENV_entry = Module["_wasm_add_ENV_entry"] = function() { - return (_wasm_add_ENV_entry = Module["_wasm_add_ENV_entry"] = Module["asm"]["xb"]).apply(null, arguments); -}; +var _wasm_set_path_translated = Module["_wasm_set_path_translated"] = a0 => (_wasm_set_path_translated = Module["_wasm_set_path_translated"] = wasmExports["wb"])(a0); -var _wasm_set_query_string = Module["_wasm_set_query_string"] = function() { - return (_wasm_set_query_string = Module["_wasm_set_query_string"] = Module["asm"]["yb"]).apply(null, arguments); -}; +var _wasm_set_skip_shebang = Module["_wasm_set_skip_shebang"] = a0 => (_wasm_set_skip_shebang = Module["_wasm_set_skip_shebang"] = wasmExports["xb"])(a0); -var _wasm_set_path_translated = Module["_wasm_set_path_translated"] = function() { - return (_wasm_set_path_translated = Module["_wasm_set_path_translated"] = Module["asm"]["zb"]).apply(null, arguments); -}; +var _wasm_set_request_uri = Module["_wasm_set_request_uri"] = a0 => (_wasm_set_request_uri = Module["_wasm_set_request_uri"] = wasmExports["yb"])(a0); -var _wasm_set_skip_shebang = Module["_wasm_set_skip_shebang"] = function() { - return (_wasm_set_skip_shebang = Module["_wasm_set_skip_shebang"] = Module["asm"]["Ab"]).apply(null, arguments); -}; +var _wasm_set_request_method = Module["_wasm_set_request_method"] = a0 => (_wasm_set_request_method = Module["_wasm_set_request_method"] = wasmExports["zb"])(a0); -var _wasm_set_request_uri = Module["_wasm_set_request_uri"] = function() { - return (_wasm_set_request_uri = Module["_wasm_set_request_uri"] = Module["asm"]["Bb"]).apply(null, arguments); -}; +var _wasm_set_request_host = Module["_wasm_set_request_host"] = a0 => (_wasm_set_request_host = Module["_wasm_set_request_host"] = wasmExports["Ab"])(a0); -var _wasm_set_request_method = Module["_wasm_set_request_method"] = function() { - return (_wasm_set_request_method = Module["_wasm_set_request_method"] = Module["asm"]["Cb"]).apply(null, arguments); -}; +var _wasm_set_content_type = Module["_wasm_set_content_type"] = a0 => (_wasm_set_content_type = Module["_wasm_set_content_type"] = wasmExports["Bb"])(a0); -var _wasm_set_request_host = Module["_wasm_set_request_host"] = function() { - return (_wasm_set_request_host = Module["_wasm_set_request_host"] = Module["asm"]["Db"]).apply(null, arguments); -}; +var _wasm_set_request_body = Module["_wasm_set_request_body"] = a0 => (_wasm_set_request_body = Module["_wasm_set_request_body"] = wasmExports["Cb"])(a0); -var _wasm_set_content_type = Module["_wasm_set_content_type"] = function() { - return (_wasm_set_content_type = Module["_wasm_set_content_type"] = Module["asm"]["Eb"]).apply(null, arguments); -}; +var _wasm_set_content_length = Module["_wasm_set_content_length"] = a0 => (_wasm_set_content_length = Module["_wasm_set_content_length"] = wasmExports["Db"])(a0); -var _wasm_set_request_body = Module["_wasm_set_request_body"] = function() { - return (_wasm_set_request_body = Module["_wasm_set_request_body"] = Module["asm"]["Fb"]).apply(null, arguments); -}; +var _wasm_set_cookies = Module["_wasm_set_cookies"] = a0 => (_wasm_set_cookies = Module["_wasm_set_cookies"] = wasmExports["Eb"])(a0); -var _wasm_set_content_length = Module["_wasm_set_content_length"] = function() { - return (_wasm_set_content_length = Module["_wasm_set_content_length"] = Module["asm"]["Gb"]).apply(null, arguments); -}; +var _wasm_set_php_code = Module["_wasm_set_php_code"] = a0 => (_wasm_set_php_code = Module["_wasm_set_php_code"] = wasmExports["Fb"])(a0); -var _wasm_set_cookies = Module["_wasm_set_cookies"] = function() { - return (_wasm_set_cookies = Module["_wasm_set_cookies"] = Module["asm"]["Hb"]).apply(null, arguments); -}; +var _wasm_set_request_port = Module["_wasm_set_request_port"] = a0 => (_wasm_set_request_port = Module["_wasm_set_request_port"] = wasmExports["Gb"])(a0); -var _wasm_set_php_code = Module["_wasm_set_php_code"] = function() { - return (_wasm_set_php_code = Module["_wasm_set_php_code"] = Module["asm"]["Ib"]).apply(null, arguments); -}; +var _wasm_sapi_request_shutdown = Module["_wasm_sapi_request_shutdown"] = () => (_wasm_sapi_request_shutdown = Module["_wasm_sapi_request_shutdown"] = wasmExports["Hb"])(); -var _wasm_set_request_port = Module["_wasm_set_request_port"] = function() { - return (_wasm_set_request_port = Module["_wasm_set_request_port"] = Module["asm"]["Jb"]).apply(null, arguments); -}; +var _wasm_sapi_handle_request = Module["_wasm_sapi_handle_request"] = () => (_wasm_sapi_handle_request = Module["_wasm_sapi_handle_request"] = wasmExports["Ib"])(); -var _wasm_sapi_request_shutdown = Module["_wasm_sapi_request_shutdown"] = function() { - return (_wasm_sapi_request_shutdown = Module["_wasm_sapi_request_shutdown"] = Module["asm"]["Kb"]).apply(null, arguments); -}; +var _php_wasm_init = Module["_php_wasm_init"] = () => (_php_wasm_init = Module["_php_wasm_init"] = wasmExports["Jb"])(); -var _wasm_sapi_handle_request = Module["_wasm_sapi_handle_request"] = function() { - return (_wasm_sapi_handle_request = Module["_wasm_sapi_handle_request"] = Module["asm"]["Lb"]).apply(null, arguments); -}; +var ___funcs_on_exit = () => (___funcs_on_exit = wasmExports["Kb"])(); -var _php_wasm_init = Module["_php_wasm_init"] = function() { - return (_php_wasm_init = Module["_php_wasm_init"] = Module["asm"]["Mb"]).apply(null, arguments); -}; +var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports["Lb"])(a0, a1); -var ___funcs_on_exit = function() { - return (___funcs_on_exit = Module["asm"]["Nb"]).apply(null, arguments); -}; +var __emscripten_timeout = (a0, a1) => (__emscripten_timeout = wasmExports["Mb"])(a0, a1); -var _emscripten_builtin_memalign = function() { - return (_emscripten_builtin_memalign = Module["asm"]["Ob"]).apply(null, arguments); -}; +var _setThrew = (a0, a1) => (_setThrew = wasmExports["Nb"])(a0, a1); -var __emscripten_timeout = function() { - return (__emscripten_timeout = Module["asm"]["Pb"]).apply(null, arguments); -}; +var stackSave = () => (stackSave = wasmExports["Ob"])(); -var _setThrew = function() { - return (_setThrew = Module["asm"]["Qb"]).apply(null, arguments); -}; +var stackRestore = a0 => (stackRestore = wasmExports["Pb"])(a0); -var _emscripten_stack_set_limits = function() { - return (_emscripten_stack_set_limits = Module["asm"]["emscripten_stack_set_limits"]).apply(null, arguments); -}; +var stackAlloc = a0 => (stackAlloc = wasmExports["Qb"])(a0); -var _emscripten_stack_get_base = function() { - return (_emscripten_stack_get_base = Module["asm"]["emscripten_stack_get_base"]).apply(null, arguments); -}; +var dynCall_iiii = Module["dynCall_iiii"] = (a0, a1, a2, a3) => (dynCall_iiii = Module["dynCall_iiii"] = wasmExports["Rb"])(a0, a1, a2, a3); -var _emscripten_stack_get_end = function() { - return (_emscripten_stack_get_end = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments); -}; +var dynCall_ii = Module["dynCall_ii"] = (a0, a1) => (dynCall_ii = Module["dynCall_ii"] = wasmExports["Sb"])(a0, a1); -var stackSave = function() { - return (stackSave = Module["asm"]["Rb"]).apply(null, arguments); -}; +var dynCall_vi = Module["dynCall_vi"] = (a0, a1) => (dynCall_vi = Module["dynCall_vi"] = wasmExports["Tb"])(a0, a1); -var stackRestore = function() { - return (stackRestore = Module["asm"]["Sb"]).apply(null, arguments); -}; +var dynCall_vii = Module["dynCall_vii"] = (a0, a1, a2) => (dynCall_vii = Module["dynCall_vii"] = wasmExports["Ub"])(a0, a1, a2); -var stackAlloc = function() { - return (stackAlloc = Module["asm"]["Tb"]).apply(null, arguments); -}; +var dynCall_viiiii = Module["dynCall_viiiii"] = (a0, a1, a2, a3, a4, a5) => (dynCall_viiiii = Module["dynCall_viiiii"] = wasmExports["Vb"])(a0, a1, a2, a3, a4, a5); -var dynCall_iiii = Module["dynCall_iiii"] = function() { - return (dynCall_iiii = Module["dynCall_iiii"] = Module["asm"]["Ub"]).apply(null, arguments); -}; +var dynCall_iii = Module["dynCall_iii"] = (a0, a1, a2) => (dynCall_iii = Module["dynCall_iii"] = wasmExports["Wb"])(a0, a1, a2); -var dynCall_ii = Module["dynCall_ii"] = function() { - return (dynCall_ii = Module["dynCall_ii"] = Module["asm"]["Vb"]).apply(null, arguments); -}; +var dynCall_iiiii = Module["dynCall_iiiii"] = (a0, a1, a2, a3, a4) => (dynCall_iiiii = Module["dynCall_iiiii"] = wasmExports["Xb"])(a0, a1, a2, a3, a4); -var dynCall_vi = Module["dynCall_vi"] = function() { - return (dynCall_vi = Module["dynCall_vi"] = Module["asm"]["Wb"]).apply(null, arguments); -}; +var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = (a0, a1, a2, a3, a4, a5, a6) => (dynCall_iiiiiii = Module["dynCall_iiiiiii"] = wasmExports["Yb"])(a0, a1, a2, a3, a4, a5, a6); -var dynCall_vii = Module["dynCall_vii"] = function() { - return (dynCall_vii = Module["dynCall_vii"] = Module["asm"]["Xb"]).apply(null, arguments); -}; +var dynCall_iiiiii = Module["dynCall_iiiiii"] = (a0, a1, a2, a3, a4, a5) => (dynCall_iiiiii = Module["dynCall_iiiiii"] = wasmExports["Zb"])(a0, a1, a2, a3, a4, a5); -var dynCall_viiiii = Module["dynCall_viiiii"] = function() { - return (dynCall_viiiii = Module["dynCall_viiiii"] = Module["asm"]["Yb"]).apply(null, arguments); -}; +var dynCall_i = Module["dynCall_i"] = a0 => (dynCall_i = Module["dynCall_i"] = wasmExports["_b"])(a0); -var dynCall_iii = Module["dynCall_iii"] = function() { - return (dynCall_iii = Module["dynCall_iii"] = Module["asm"]["Zb"]).apply(null, arguments); -}; +var dynCall_viii = Module["dynCall_viii"] = (a0, a1, a2, a3) => (dynCall_viii = Module["dynCall_viii"] = wasmExports["$b"])(a0, a1, a2, a3); -var dynCall_iiiii = Module["dynCall_iiiii"] = function() { - return (dynCall_iiiii = Module["dynCall_iiiii"] = Module["asm"]["_b"]).apply(null, arguments); -}; +var dynCall_viiii = Module["dynCall_viiii"] = (a0, a1, a2, a3, a4) => (dynCall_viiii = Module["dynCall_viiii"] = wasmExports["ac"])(a0, a1, a2, a3, a4); -var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = function() { - return (dynCall_iiiiiii = Module["dynCall_iiiiiii"] = Module["asm"]["$b"]).apply(null, arguments); -}; +var dynCall_v = Module["dynCall_v"] = a0 => (dynCall_v = Module["dynCall_v"] = wasmExports["bc"])(a0); -var dynCall_iiiiii = Module["dynCall_iiiiii"] = function() { - return (dynCall_iiiiii = Module["dynCall_iiiiii"] = Module["asm"]["ac"]).apply(null, arguments); -}; +var dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = wasmExports["cc"])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); -var dynCall_i = Module["dynCall_i"] = function() { - return (dynCall_i = Module["dynCall_i"] = Module["asm"]["bc"]).apply(null, arguments); -}; +var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = (a0, a1, a2, a3, a4, a5, a6, a7) => (dynCall_viiiiiii = Module["dynCall_viiiiiii"] = wasmExports["dc"])(a0, a1, a2, a3, a4, a5, a6, a7); -var dynCall_viii = Module["dynCall_viii"] = function() { - return (dynCall_viii = Module["dynCall_viii"] = Module["asm"]["cc"]).apply(null, arguments); -}; +var dynCall_viiiiii = Module["dynCall_viiiiii"] = (a0, a1, a2, a3, a4, a5, a6) => (dynCall_viiiiii = Module["dynCall_viiiiii"] = wasmExports["ec"])(a0, a1, a2, a3, a4, a5, a6); -var dynCall_viiii = Module["dynCall_viiii"] = function() { - return (dynCall_viiii = Module["dynCall_viiii"] = Module["asm"]["dc"]).apply(null, arguments); -}; +var dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = (a0, a1, a2, a3, a4, a5, a6, a7) => (dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = wasmExports["fc"])(a0, a1, a2, a3, a4, a5, a6, a7); -var dynCall_v = Module["dynCall_v"] = function() { - return (dynCall_v = Module["dynCall_v"] = Module["asm"]["ec"]).apply(null, arguments); -}; +var dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = wasmExports["gc"])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); -var dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = function() { - return (dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = Module["asm"]["fc"]).apply(null, arguments); -}; - -var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = function() { - return (dynCall_viiiiiii = Module["dynCall_viiiiiii"] = Module["asm"]["gc"]).apply(null, arguments); -}; - -var dynCall_viiiiii = Module["dynCall_viiiiii"] = function() { - return (dynCall_viiiiii = Module["dynCall_viiiiii"] = Module["asm"]["hc"]).apply(null, arguments); -}; - -var dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = function() { - return (dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = Module["asm"]["ic"]).apply(null, arguments); -}; +var dynCall_viidii = Module["dynCall_viidii"] = (a0, a1, a2, a3, a4, a5) => (dynCall_viidii = Module["dynCall_viidii"] = wasmExports["hc"])(a0, a1, a2, a3, a4, a5); -var dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = function() { - return (dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = Module["asm"]["jc"]).apply(null, arguments); -}; +var _asyncify_start_unwind = a0 => (_asyncify_start_unwind = wasmExports["ic"])(a0); -var dynCall_viidii = Module["dynCall_viidii"] = function() { - return (dynCall_viidii = Module["dynCall_viidii"] = Module["asm"]["kc"]).apply(null, arguments); -}; +var _asyncify_stop_unwind = () => (_asyncify_stop_unwind = wasmExports["jc"])(); -var _asyncify_start_unwind = function() { - return (_asyncify_start_unwind = Module["asm"]["lc"]).apply(null, arguments); -}; +var _asyncify_start_rewind = a0 => (_asyncify_start_rewind = wasmExports["kc"])(a0); -var _asyncify_stop_unwind = function() { - return (_asyncify_stop_unwind = Module["asm"]["mc"]).apply(null, arguments); -}; - -var _asyncify_start_rewind = function() { - return (_asyncify_start_rewind = Module["asm"]["nc"]).apply(null, arguments); -}; - -var _asyncify_stop_rewind = function() { - return (_asyncify_stop_rewind = Module["asm"]["oc"]).apply(null, arguments); -}; +var _asyncify_stop_rewind = () => (_asyncify_stop_rewind = wasmExports["lc"])(); function invoke_iiiiiii(index, a1, a2, a3, a4, a5, a6) { var sp = stackSave(); @@ -7693,18 +7481,18 @@ Module["removeRunDependency"] = removeRunDependency; Module["FS_createPath"] = FS.createPath; -Module["FS_createDataFile"] = FS.createDataFile; - Module["FS_createLazyFile"] = FS.createLazyFile; Module["FS_createDevice"] = FS.createDevice; -Module["FS_unlink"] = FS.unlink; - Module["ccall"] = ccall; Module["FS_createPreloadedFile"] = FS.createPreloadedFile; +Module["FS_createDataFile"] = FS.createDataFile; + +Module["FS_unlink"] = FS.unlink; + Module["PROXYFS"] = PROXYFS; var calledRun; @@ -7733,12 +7521,12 @@ function run() { } if (Module["setStatus"]) { Module["setStatus"]("Running..."); - setTimeout((function() { - setTimeout((function() { + setTimeout(function() { + setTimeout(function() { Module["setStatus"](""); - }), 1); + }, 1); doRun(); - }), 1); + }, 1); } else { doRun(); }