From 2e8202fd8773ab41b73835b1fa127bd562a850c8 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sun, 6 Sep 2026 10:29:48 +0200 Subject: [PATCH] worker: converted merlin32/nesasm to WASI --- src/worker/tools/m6502.ts | 115 +- src/worker/wasm/merlin32.js | 5550 --------------------------------- src/worker/wasm/merlin32.wasm | Bin 191532 -> 497492 bytes src/worker/wasm/nesasm.js | 21 - src/worker/wasm/nesasm.wasm | Bin 109191 -> 376620 bytes test/cli/testworker.js | 82 + test/unit/testtoolmeta.ts | 4 +- 7 files changed, 156 insertions(+), 5616 deletions(-) delete mode 100644 src/worker/wasm/merlin32.js delete mode 100644 src/worker/wasm/nesasm.js diff --git a/src/worker/tools/m6502.ts b/src/worker/tools/m6502.ts index e35b2047..185d1066 100644 --- a/src/worker/tools/m6502.ts +++ b/src/worker/tools/m6502.ts @@ -1,13 +1,15 @@ import { WorkerError, CodeListingMap } from "../../common/workertypes"; -import { BuildStep, BuildStepResult, populateFiles, putWorkFile, anyTargetChanged, gatherFiles, staleFiles } from "../builder"; -import { parseListing, makeErrorMatcher } from "../listingutils"; -import { loadNative, emglobal, moduleInstFn, execMain, print_fn } from "../wasmutils"; +import { BuildStep, BuildStepResult, populateFiles, putWorkFile, anyTargetChanged, gatherFiles, staleFiles, store } from "../builder"; +import { parseListing, makeErrorMatcher, re_crlf } from "../listingutils"; +import { loadNative, emglobal, moduleInstFn, execMain, print_fn, loadWASMBinary } from "../wasmutils"; import { EmscriptenModule } from "../wasmutils"; +import { WASIRunner } from "../../common/wasi/wasishim"; // http://www.nespowerpak.com/nesasm/ +let nesasmWasiModule: WebAssembly.Module | null = null; + export function assembleNESASM(step: BuildStep): BuildStepResult { - loadNative("nesasm"); var re_filename = /\#\[(\d+)\]\s+(\S+)/; var re_insn = /\s+(\d+)\s+([0-9A-F]+):([0-9A-F]+)/; var re_error = /\s+(.+)/; @@ -38,23 +40,36 @@ export function assembleNESASM(step: BuildStep): BuildStepResult { break; } } - var Module: EmscriptenModule = emglobal.nesasm({ - instantiateWasm: moduleInstFn('nesasm'), - noInitialRun: true, - print: match_fn - }); - var FS = Module.FS; - populateFiles(step, FS, { + gatherFiles(step, { mainFilePath: 'main.a' }); var binpath = step.prefix + '.nes'; var lstpath = step.prefix + '.lst'; var sympath = step.prefix + '.fns'; - execMain(step, Module, [step.path, '-s', "-l", "2"]); + if (!nesasmWasiModule) { + nesasmWasiModule = new WebAssembly.Module(loadWASMBinary("nesasm")); + } + const wasi = new WASIRunner(); + wasi.initSync(nesasmWasiModule); + for (let file of step.files) { + wasi.fs.putFile("./" + file, store.getFileData(file)); + } + wasi.addPreopenDirectory("."); + wasi.setArgs(['nesasm', step.path, '-s', "-l", "2"]); + try { + wasi.run(); + } catch (e) { + errors.push({ line: 0, msg: "" + e }); + } + const stdout = wasi.fds[1].getBytesAsString(); + for (let line of stdout.split(re_crlf)) { + match_fn(line); + } // parse main listing, get errors and listings for each file var listings: CodeListingMap = {}; + var alst; try { - var alst = FS.readFile(lstpath, { 'encoding': 'utf8' }); + alst = wasi.fs.getFile("./" + lstpath).getBytesAsString(); // 16 00:C004 8E 17 40 STX $4017 ; disable APU frame IRQ var asmlines = parseListing(alst, /^\s*(\d+)\s+([0-9A-F]+):([0-9A-F]+)\s+([0-9A-F ]+?) (.*)/i, 1, 3, 4); putWorkFile(lstpath, alst); @@ -70,9 +85,9 @@ export function assembleNESASM(step: BuildStep): BuildStepResult { } // read binary rom output and symbols var aout, asym; - aout = FS.readFile(binpath); + aout = wasi.fs.getFile("./" + binpath).getBytes(); try { - asym = FS.readFile(sympath, { 'encoding': 'utf8' }); + asym = wasi.fs.getFile("./" + sympath).getBytesAsString(); } catch (e) { console.log(e); errors.push({ line: 0, msg: "No symbol table generated, maybe missing ENDM or segment overflow?" }); @@ -116,50 +131,62 @@ Line | # File Line | Line Type | MX | Reloc | Size | Address Object => Creating Output file 'pcs.bin_S01__Output.txt' */ +let merlin32WasiModule: WebAssembly.Module | null = null; + export function assembleMerlin32(step: BuildStep): BuildStepResult { - loadNative("merlin32"); var errors = []; var lstfiles = []; gatherFiles(step, { mainFilePath: "main.lnk" }); var objpath = step.prefix + ".bin"; if (staleFiles(step, [objpath])) { var args = ['-v', step.path]; - var merlin32: EmscriptenModule = emglobal.merlin32({ - instantiateWasm: moduleInstFn('merlin32'), - noInitialRun: true, - print: (s: string) => { - var m = /\s*=>\s*Creating Output file '(.+?)'/.exec(s); - if (m) { - lstfiles.push(m[1]); - } - var errpos = s.indexOf('Error'); - if (errpos >= 0) { - s = s.slice(errpos + 6).trim(); - var mline = /\bline (\d+)\b/.exec(s); - var mpath = /\bfile '(.+?)'/.exec(s); - errors.push({ - line: parseInt(mline[1]) || 0, - msg: s, - path: mpath[1] || step.path, - }); - } - }, - printErr: print_fn, - }); - var FS = merlin32.FS; - populateFiles(step, FS); - execMain(step, merlin32, args); + if (!merlin32WasiModule) { + merlin32WasiModule = new WebAssembly.Module(loadWASMBinary("merlin32")); + } + const wasi = new WASIRunner(); + wasi.initSync(merlin32WasiModule); + for (let file of step.files) { + wasi.fs.putFile("./" + file, store.getFileData(file)); + } + wasi.addPreopenDirectory("."); + wasi.setArgs(['merlin32', ...args]); + try { + wasi.run(); + } catch (e) { + errors.push({ line: 0, msg: "" + e }); + } + const stdout = wasi.fds[1].getBytesAsString(); + const stderr = wasi.fds[2].getBytesAsString(); + for (let s of stdout.split(re_crlf)) { + var m = /\s*=>\s*Creating Output file '(.+?)'/.exec(s); + if (m) { + lstfiles.push(m[1]); + } + var errpos = s.indexOf('Error'); + if (errpos >= 0) { + s = s.slice(errpos + 6).trim(); + var mline = /\bline (\d+)\b/.exec(s); + var mpath = /\bfile '(.+?)'/.exec(s); + errors.push({ + line: mline ? parseInt(mline[1]) : 0, + msg: s, + path: mpath ? mpath[1] : step.path, + }); + } + } + if (stderr) + console.log(stderr); if (errors.length) return { errors: errors }; var errout = null; try { - errout = FS.readFile("error_output.txt", { encoding: 'utf8' }); + errout = wasi.fs.getFile("./error_output.txt").getBytesAsString(); } catch (e) { // } - var objout = FS.readFile(objpath, { encoding: 'binary' }); + var objout = wasi.fs.getFile("./" + objpath).getBytes(); putWorkFile(objpath, objout); if (!anyTargetChanged(step, [objpath])) return; @@ -168,7 +195,7 @@ export function assembleMerlin32(step: BuildStep): BuildStepResult { var segments = []; var listings: CodeListingMap = {}; lstfiles.forEach((lstfn) => { - var lst = FS.readFile(lstfn, { encoding: 'utf8' }) as string; + var lst = wasi.fs.getFile("./" + lstfn).getBytesAsString() as string; lst.split('\n').forEach((line) => { var toks = line.split(/\s*\|\s*/); if (toks && toks[6]) { diff --git a/src/worker/wasm/merlin32.js b/src/worker/wasm/merlin32.js deleted file mode 100644 index dd6d526b..00000000 --- a/src/worker/wasm/merlin32.js +++ /dev/null @@ -1,5550 +0,0 @@ - -var merlin32 = (function() { - var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; - if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; - return ( -function(merlin32) { - merlin32 = merlin32 || {}; - - - -// The Module object: Our interface to the outside world. We import -// and export values on it. There are various ways Module can be used: -// 1. Not defined. We create it here -// 2. A function parameter, function(Module) { ..generated code.. } -// 3. pre-run appended it, var Module = {}; ..generated code.. -// 4. External script tag defines var Module. -// We need to check if Module already exists (e.g. case 3 above). -// Substitution will be replaced with actual code on later stage of the build, -// this way Closure Compiler will not mangle it (e.g. case 4. above). -// Note that if you want to run closure, and also to use Module -// after the generated code, you will need to define var Module = {}; -// before the code. Then that object will be used in the code, and you -// can continue to use Module afterwards as well. -var Module = typeof merlin32 !== 'undefined' ? merlin32 : {}; - - -// Set up the promise that indicates the Module is initialized -var readyPromiseResolve, readyPromiseReject; -Module['ready'] = new Promise(function(resolve, reject) { - readyPromiseResolve = resolve; - readyPromiseReject = reject; -}); - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_main')) { - Object.defineProperty(Module['ready'], '_main', { configurable: true, get: function() { abort('You are getting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_main', { configurable: true, set: function() { abort('You are setting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_malloc')) { - Object.defineProperty(Module['ready'], '_malloc', { configurable: true, get: function() { abort('You are getting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_malloc', { configurable: true, set: function() { abort('You are setting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_free')) { - Object.defineProperty(Module['ready'], '_free', { configurable: true, get: function() { abort('You are getting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_free', { configurable: true, set: function() { abort('You are setting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackSave')) { - Object.defineProperty(Module['ready'], '_stackSave', { configurable: true, get: function() { abort('You are getting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_stackSave', { configurable: true, set: function() { abort('You are setting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackRestore')) { - Object.defineProperty(Module['ready'], '_stackRestore', { configurable: true, get: function() { abort('You are getting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_stackRestore', { configurable: true, set: function() { abort('You are setting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackAlloc')) { - Object.defineProperty(Module['ready'], '_stackAlloc', { configurable: true, get: function() { abort('You are getting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_stackAlloc', { configurable: true, set: function() { abort('You are setting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '___data_end')) { - Object.defineProperty(Module['ready'], '___data_end', { configurable: true, get: function() { abort('You are getting ___data_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '___data_end', { configurable: true, set: function() { abort('You are setting ___data_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '___wasm_call_ctors')) { - Object.defineProperty(Module['ready'], '___wasm_call_ctors', { configurable: true, get: function() { abort('You are getting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '___wasm_call_ctors', { configurable: true, set: function() { abort('You are setting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_fflush')) { - Object.defineProperty(Module['ready'], '_fflush', { configurable: true, get: function() { abort('You are getting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_fflush', { configurable: true, set: function() { abort('You are setting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '___errno_location')) { - Object.defineProperty(Module['ready'], '___errno_location', { configurable: true, get: function() { abort('You are getting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '___errno_location', { configurable: true, set: function() { abort('You are setting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_setThrew')) { - Object.defineProperty(Module['ready'], '_setThrew', { configurable: true, get: function() { abort('You are getting _setThrew on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_setThrew', { configurable: true, set: function() { abort('You are setting _setThrew on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_realloc')) { - Object.defineProperty(Module['ready'], '_realloc', { configurable: true, get: function() { abort('You are getting _realloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_realloc', { configurable: true, set: function() { abort('You are setting _realloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_testSetjmp')) { - Object.defineProperty(Module['ready'], '_testSetjmp', { configurable: true, get: function() { abort('You are getting _testSetjmp on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_testSetjmp', { configurable: true, set: function() { abort('You are setting _testSetjmp on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '_saveSetjmp')) { - Object.defineProperty(Module['ready'], '_saveSetjmp', { configurable: true, get: function() { abort('You are getting _saveSetjmp on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '_saveSetjmp', { configurable: true, set: function() { abort('You are setting _saveSetjmp on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_tzname')) { - Object.defineProperty(Module['ready'], '__get_tzname', { configurable: true, get: function() { abort('You are getting __get_tzname on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '__get_tzname', { configurable: true, set: function() { abort('You are setting __get_tzname on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_daylight')) { - Object.defineProperty(Module['ready'], '__get_daylight', { configurable: true, get: function() { abort('You are getting __get_daylight on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '__get_daylight', { configurable: true, set: function() { abort('You are setting __get_daylight on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_timezone')) { - Object.defineProperty(Module['ready'], '__get_timezone', { configurable: true, get: function() { abort('You are getting __get_timezone on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], '__get_timezone', { configurable: true, set: function() { abort('You are setting __get_timezone on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - - if (!Object.getOwnPropertyDescriptor(Module['ready'], 'onRuntimeInitialized')) { - Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { configurable: true, get: function() { abort('You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { configurable: true, set: function() { abort('You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); - } - - -// --pre-jses are emitted after the Module integration code, so that they can -// refer to Module (if they choose; they can also define Module) -// {{PRE_JSES}} - -// Sometimes an existing Module object exists with properties -// meant to overwrite the default module functionality. Here -// we collect those properties and reapply _after_ we configure -// the current environment's defaults to avoid having to be so -// defensive during initialization. -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } -} - -var arguments_ = []; -var thisProgram = './this.program'; -var quit_ = function(status, toThrow) { - throw toThrow; -}; - -// Determine the runtime environment we are in. You can customize this by -// setting the ENVIRONMENT setting at compile time (see settings.js). - -var ENVIRONMENT_IS_WEB = false; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -ENVIRONMENT_IS_WEB = typeof window === 'object'; -ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; -// N.b. Electron.js environment is simultaneously a NODE-environment, but -// also a web environment. -ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; -ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; - -if (Module['ENVIRONMENT']) { - throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)'); -} - - - -// `/` should be present at the end if `scriptDirectory` is not empty -var scriptDirectory = ''; -function locateFile(path) { - if (Module['locateFile']) { - return Module['locateFile'](path, scriptDirectory); - } - return scriptDirectory + path; -} - -// Hooks that are implemented differently in different runtime environments. -var read_, - readAsync, - readBinary, - setWindowTitle; - -var nodeFS; -var nodePath; - -if (ENVIRONMENT_IS_NODE) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = require('path').dirname(scriptDirectory) + '/'; - } else { - scriptDirectory = __dirname + '/'; - } - - - - - read_ = function shell_read(filename, binary) { - if (!nodeFS) nodeFS = require('fs'); - if (!nodePath) nodePath = require('path'); - filename = nodePath['normalize'](filename); - return nodeFS['readFileSync'](filename, binary ? null : 'utf8'); - }; - - readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret); - } - assert(ret.buffer); - return ret; - }; - - - - - if (process['argv'].length > 1) { - thisProgram = process['argv'][1].replace(/\\/g, '/'); - } - - arguments_ = process['argv'].slice(2); - - // MODULARIZE will export the module in the proper place outside, we don't need to export here - - process['on']('uncaughtException', function(ex) { - // suppress ExitStatus exceptions from showing an error - if (!(ex instanceof ExitStatus)) { - throw ex; - } - }); - - process['on']('unhandledRejection', abort); - - quit_ = function(status) { - process['exit'](status); - }; - - Module['inspect'] = function () { return '[Emscripten Module object]'; }; - - - -} else -if (ENVIRONMENT_IS_SHELL) { - - - if (typeof read != 'undefined') { - read_ = function shell_read(f) { - return read(f); - }; - } - - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === 'function') { - return new Uint8Array(readbuffer(f)); - } - data = read(f, 'binary'); - assert(typeof data === 'object'); - return data; - }; - - if (typeof scriptArgs != 'undefined') { - arguments_ = scriptArgs; - } else if (typeof arguments != 'undefined') { - arguments_ = arguments; - } - - if (typeof quit === 'function') { - quit_ = function(status) { - quit(status); - }; - } - - if (typeof print !== 'undefined') { - // Prefer to use print/printErr where they exist, as they usually work better. - if (typeof console === 'undefined') console = /** @type{!Console} */({}); - console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); - console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print); - } - - -} else - -// Note that this includes Node.js workers when relevant (pthreads is enabled). -// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and -// ENVIRONMENT_IS_NODE. -if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled - scriptDirectory = self.location.href; - } else if (document.currentScript) { // web - scriptDirectory = document.currentScript.src; - } - // When MODULARIZE, this JS may be executed later, after document.currentScript - // is gone, so we saved it, and we use it here instead of any other info. - if (_scriptDir) { - scriptDirectory = _scriptDir; - } - // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. - // otherwise, slice off the final part of the url to find the script directory. - // if scriptDirectory does not contain a slash, lastIndexOf will return -1, - // and scriptDirectory will correctly be replaced with an empty string. - if (scriptDirectory.indexOf('blob:') !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1); - } else { - scriptDirectory = ''; - } - - - // Differentiate the Web Worker from the Node Worker case, as reading must - // be done differently. - { - - - - - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.send(null); - return xhr.responseText; - }; - - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.responseType = 'arraybuffer'; - xhr.send(null); - return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); - }; - } - - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 - onload(xhr.response); - return; - } - onerror(); - }; - xhr.onerror = onerror; - xhr.send(null); - }; - - - - - } - - setWindowTitle = function(title) { document.title = title }; -} else -{ - throw new Error('environment detection error'); -} - - -// Set up the out() and err() hooks, which are how we can print to stdout or -// stderr, respectively. -var out = Module['print'] || console.log.bind(console); -var err = Module['printErr'] || console.warn.bind(console); - -// Merge back in the overrides -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } -} -// Free the object hierarchy contained in the overrides, this lets the GC -// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. -moduleOverrides = null; - -// Emit code to handle expected values on the Module object. This applies Module.x -// to the proper local x. This has two benefits: first, we only emit it if it is -// expected to arrive, and second, by using a local everywhere else that can be -// minified. -if (Module['arguments']) arguments_ = Module['arguments'];if (!Object.getOwnPropertyDescriptor(Module, 'arguments')) Object.defineProperty(Module, 'arguments', { configurable: true, get: function() { abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -if (Module['thisProgram']) thisProgram = Module['thisProgram'];if (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) Object.defineProperty(Module, 'thisProgram', { configurable: true, get: function() { abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -if (Module['quit']) quit_ = Module['quit'];if (!Object.getOwnPropertyDescriptor(Module, 'quit')) Object.defineProperty(Module, 'quit', { configurable: true, get: function() { abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); - -// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message -// Assertions on removed incoming Module JS APIs. -assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)'); -assert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); -assert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); -assert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)'); -assert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); -if (!Object.getOwnPropertyDescriptor(Module, 'read')) Object.defineProperty(Module, 'read', { configurable: true, get: function() { abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -if (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) Object.defineProperty(Module, 'readAsync', { configurable: true, get: function() { abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -if (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) Object.defineProperty(Module, 'readBinary', { configurable: true, get: function() { abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -if (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) Object.defineProperty(Module, 'setWindowTitle', { configurable: true, get: function() { abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; -var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; - -var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; - - - - - - -// {{PREAMBLE_ADDITIONS}} - -var STACK_ALIGN = 16; - -function dynamicAlloc(size) { - assert(DYNAMICTOP_PTR); - var ret = HEAP32[DYNAMICTOP_PTR>>2]; - var end = (ret + size + 15) & -16; - assert(end <= HEAP8.length, 'failure to dynamicAlloc - memory growth etc. is not supported there, call malloc/sbrk directly'); - HEAP32[DYNAMICTOP_PTR>>2] = end; - return ret; -} - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default - return Math.ceil(size / factor) * factor; -} - -function getNativeTypeSize(type) { - switch (type) { - case 'i1': case 'i8': return 1; - case 'i16': return 2; - case 'i32': return 4; - case 'i64': return 8; - case 'float': return 4; - case 'double': return 8; - default: { - if (type[type.length-1] === '*') { - return 4; // A pointer - } else if (type[0] === 'i') { - var bits = Number(type.substr(1)); - assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); - return bits / 8; - } else { - return 0; - } - } - } -} - -function warnOnce(text) { - if (!warnOnce.shown) warnOnce.shown = {}; - if (!warnOnce.shown[text]) { - warnOnce.shown[text] = 1; - err(text); - } -} - - - - - - - - -// Wraps a JS function as a wasm function with a given signature. -function convertJsFunctionToWasm(func, sig) { - - // If the type reflection proposal is available, use the new - // "WebAssembly.Function" constructor. - // Otherwise, construct a minimal wasm module importing the JS function and - // re-exporting it. - if (typeof WebAssembly.Function === "function") { - var typeNames = { - 'i': 'i32', - 'j': 'i64', - 'f': 'f32', - 'd': 'f64' - }; - var type = { - parameters: [], - results: sig[0] == 'v' ? [] : [typeNames[sig[0]]] - }; - for (var i = 1; i < sig.length; ++i) { - type.parameters.push(typeNames[sig[i]]); - } - return new WebAssembly.Function(type, func); - } - - // The module is static, with the exception of the type section, which is - // generated based on the signature passed in. - var typeSection = [ - 0x01, // id: section, - 0x00, // length: 0 (placeholder) - 0x01, // count: 1 - 0x60, // form: func - ]; - var sigRet = sig.slice(0, 1); - var sigParam = sig.slice(1); - var typeCodes = { - 'i': 0x7f, // i32 - 'j': 0x7e, // i64 - 'f': 0x7d, // f32 - 'd': 0x7c, // f64 - }; - - // Parameters, length + signatures - typeSection.push(sigParam.length); - for (var i = 0; i < sigParam.length; ++i) { - typeSection.push(typeCodes[sigParam[i]]); - } - - // Return values, length + signatures - // With no multi-return in MVP, either 0 (void) or 1 (anything else) - if (sigRet == 'v') { - typeSection.push(0x00); - } else { - typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); - } - - // Write the overall length of the type section back into the section header - // (excepting the 2 bytes for the section id and length) - typeSection[1] = typeSection.length - 2; - - // Rest of the module is static - var bytes = new Uint8Array([ - 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") - 0x01, 0x00, 0x00, 0x00, // version: 1 - ].concat(typeSection, [ - 0x02, 0x07, // import section - // (import "e" "f" (func 0 (type 0))) - 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, - 0x07, 0x05, // export section - // (export "f" (func 0 (type 0))) - 0x01, 0x01, 0x66, 0x00, 0x00, - ])); - - // We can compile this wasm module synchronously because it is very small. - // This accepts an import (at "e.f"), that it reroutes to an export (at "f") - var module = new WebAssembly.Module(bytes); - var instance = new WebAssembly.Instance(module, { - 'e': { - 'f': func - } - }); - var wrappedFunc = instance.exports['f']; - return wrappedFunc; -} - -var freeTableIndexes = []; - -// Weak map of functions in the table to their indexes, created on first use. -var functionsInTableMap; - -// Add a wasm function to the table. -function addFunctionWasm(func, sig) { - var table = wasmTable; - - // Check if the function is already in the table, to ensure each function - // gets a unique index. First, create the map if this is the first use. - if (!functionsInTableMap) { - functionsInTableMap = new WeakMap(); - for (var i = 0; i < table.length; i++) { - var item = table.get(i); - // Ignore null values. - if (item) { - functionsInTableMap.set(item, i); - } - } - } - if (functionsInTableMap.has(func)) { - return functionsInTableMap.get(func); - } - - // It's not in the table, add it now. - - - var ret; - // Reuse a free index if there is one, otherwise grow. - if (freeTableIndexes.length) { - ret = freeTableIndexes.pop(); - } else { - ret = table.length; - // Grow the table - try { - table.grow(1); - } catch (err) { - if (!(err instanceof RangeError)) { - throw err; - } - throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; - } - } - - // Set the new value. - try { - // Attempting to call this with JS function will cause of table.set() to fail - table.set(ret, func); - } catch (err) { - if (!(err instanceof TypeError)) { - throw err; - } - assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction'); - var wrapped = convertJsFunctionToWasm(func, sig); - table.set(ret, wrapped); - } - - functionsInTableMap.set(func, ret); - - return ret; -} - -function removeFunctionWasm(index) { - functionsInTableMap.delete(wasmTable.get(index)); - freeTableIndexes.push(index); -} - -// 'sig' parameter is required for the llvm backend but only when func is not -// already a WebAssembly function. -function addFunction(func, sig) { - assert(typeof func !== 'undefined'); - - return addFunctionWasm(func, sig); -} - -function removeFunction(index) { - removeFunctionWasm(index); -} - - - -var funcWrappers = {}; - -function getFuncWrapper(func, sig) { - if (!func) return; // on null pointer, return undefined - assert(sig); - if (!funcWrappers[sig]) { - funcWrappers[sig] = {}; - } - var sigCache = funcWrappers[sig]; - if (!sigCache[func]) { - // optimize away arguments usage in common cases - if (sig.length === 1) { - sigCache[func] = function dynCall_wrapper() { - return dynCall(sig, func); - }; - } else if (sig.length === 2) { - sigCache[func] = function dynCall_wrapper(arg) { - return dynCall(sig, func, [arg]); - }; - } else { - // general case - sigCache[func] = function dynCall_wrapper() { - return dynCall(sig, func, Array.prototype.slice.call(arguments)); - }; - } - } - return sigCache[func]; -} - - - - - - - -function makeBigInt(low, high, unsigned) { - return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); -} - -/** @param {Array=} args */ -function dynCall(sig, ptr, args) { - if (args && args.length) { - // j (64-bit integer) must be passed in as two numbers [low 32, high 32]. - assert(args.length === sig.substring(1).replace(/j/g, '--').length); - assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); - return Module['dynCall_' + sig].apply(null, [ptr].concat(args)); - } else { - assert(sig.length == 1); - assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); - return Module['dynCall_' + sig].call(null, ptr); - } -} - -var tempRet0 = 0; - -var setTempRet0 = function(value) { - tempRet0 = value; -}; - -var getTempRet0 = function() { - return tempRet0; -}; - -function getCompilerSetting(name) { - throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; -} - -// The address globals begin at. Very low in memory, for code size and optimization opportunities. -// Above 0 is static memory, starting with globals. -// Then the stack. -// Then 'dynamic' memory for sbrk. -var GLOBAL_BASE = 1024; - - - - - -// === Preamble library stuff === - -// Documentation for the public APIs defined in this file must be updated in: -// site/source/docs/api_reference/preamble.js.rst -// A prebuilt local version of the documentation is available at: -// site/build/text/docs/api_reference/preamble.js.txt -// You can also build docs locally as HTML or other formats in site/ -// An online HTML version (which may be of a different version of Emscripten) -// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html - - -var wasmBinary;if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];if (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) Object.defineProperty(Module, 'wasmBinary', { configurable: true, get: function() { abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); -var noExitRuntime;if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];if (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) Object.defineProperty(Module, 'noExitRuntime', { configurable: true, get: function() { abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); - - -if (typeof WebAssembly !== 'object') { - abort('No WebAssembly support found. Build with -s WASM=0 to target JavaScript instead.'); -} - - - - -// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. -// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) - -/** @param {number} ptr - @param {number} value - @param {string} type - @param {number|boolean=} noSafe */ -function setValue(ptr, value, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': HEAP8[((ptr)>>0)]=value; break; - case 'i8': HEAP8[((ptr)>>0)]=value; break; - case 'i16': HEAP16[((ptr)>>1)]=value; break; - case 'i32': HEAP32[((ptr)>>2)]=value; break; - case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; - case 'float': HEAPF32[((ptr)>>2)]=value; break; - case 'double': HEAPF64[((ptr)>>3)]=value; break; - default: abort('invalid type for setValue: ' + type); - } -} - -/** @param {number} ptr - @param {string} type - @param {number|boolean=} noSafe */ -function getValue(ptr, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': return HEAP8[((ptr)>>0)]; - case 'i8': return HEAP8[((ptr)>>0)]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP32[((ptr)>>2)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - default: abort('invalid type for getValue: ' + type); - } - return null; -} - - - - - - -// Wasm globals - -var wasmMemory; - -// In fastcomp asm.js, we don't need a wasm Table at all. -// In the wasm backend, we polyfill the WebAssembly object, -// so this creates a (non-native-wasm) table for us. -var wasmTable = new WebAssembly.Table({ - 'initial': 27, - 'maximum': 27 + 0, - 'element': 'anyfunc' -}); - - -//======================================== -// Runtime essentials -//======================================== - -// whether we are quitting the application. no code should run after this. -// set in exit() and abort() -var ABORT = false; - -// set by exit() and abort(). Passed to 'onExit' handler. -// NOTE: This is also used as the process return code code in shell environments -// but only when noExitRuntime is false. -var EXITSTATUS = 0; - -/** @type {function(*, string=)} */ -function assert(condition, text) { - if (!condition) { - abort('Assertion failed: ' + text); - } -} - -// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) -function getCFunc(ident) { - var func = Module['_' + ident]; // closure exported function - assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); - return func; -} - -// C calling interface. -/** @param {string|null=} returnType - @param {Array=} argTypes - @param {Arguments|Array=} args - @param {Object=} opts */ -function ccall(ident, returnType, argTypes, args, opts) { - // For fast lookup of conversion functions - var toC = { - 'string': function(str) { - var ret = 0; - if (str !== null && str !== undefined && str !== 0) { // null string - // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' - var len = (str.length << 2) + 1; - ret = stackAlloc(len); - stringToUTF8(str, ret, len); - } - return ret; - }, - 'array': function(arr) { - var ret = stackAlloc(arr.length); - writeArrayToMemory(arr, ret); - return ret; - } - }; - - function convertReturnValue(ret) { - if (returnType === 'string') return UTF8ToString(ret); - if (returnType === 'boolean') return Boolean(ret); - return ret; - } - - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - assert(returnType !== 'array', 'Return type should not be "array".'); - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]); - } else { - cArgs[i] = args[i]; - } - } - } - var ret = func.apply(null, cArgs); - - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret; -} - -/** @param {string=} returnType - @param {Array=} argTypes - @param {Object=} opts */ -function cwrap(ident, returnType, argTypes, opts) { - return function() { - return ccall(ident, returnType, argTypes, arguments, opts); - } -} - -var ALLOC_NORMAL = 0; // Tries to use _malloc() -var ALLOC_STACK = 1; // Lives for the duration of the current function call -var ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk -var ALLOC_NONE = 3; // Do not allocate - -// allocate(): This is for internal use. You can use it yourself as well, but the interface -// is a little tricky (see docs right below). The reason is that it is optimized -// for multiple syntaxes to save space in generated code. So you should -// normally not use allocate(), and instead allocate memory using _malloc(), -// initialize it with setValue(), and so forth. -// @slab: An array of data, or a number. If a number, then the size of the block to allocate, -// in *bytes* (note that this is sometimes confusing: the next parameter does not -// affect this!) -// @types: Either an array of types, one for each byte (or 0 if no type at that position), -// or a single type which is used for the entire block. This only matters if there -// is initial data - if @slab is a number, then this does not matter at all and is -// ignored. -// @allocator: How to allocate memory, see ALLOC_* -/** @type {function((TypedArray|Array|number), string, number, number=)} */ -function allocate(slab, types, allocator, ptr) { - var zeroinit, size; - if (typeof slab === 'number') { - zeroinit = true; - size = slab; - } else { - zeroinit = false; - size = slab.length; - } - - var singleType = typeof types === 'string' ? types : null; - - var ret; - if (allocator == ALLOC_NONE) { - ret = ptr; - } else { - ret = [_malloc, - stackAlloc, - dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length)); - } - - if (zeroinit) { - var stop; - ptr = ret; - assert((ret & 3) == 0); - stop = ret + (size & ~3); - for (; ptr < stop; ptr += 4) { - HEAP32[((ptr)>>2)]=0; - } - stop = ret + size; - while (ptr < stop) { - HEAP8[((ptr++)>>0)]=0; - } - return ret; - } - - if (singleType === 'i8') { - if (slab.subarray || slab.slice) { - HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret); - } else { - HEAPU8.set(new Uint8Array(slab), ret); - } - return ret; - } - - var i = 0, type, typeSize, previousType; - while (i < size) { - var curr = slab[i]; - - type = singleType || types[i]; - if (type === 0) { - i++; - continue; - } - assert(type, 'Must know what type to store in allocate!'); - - if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later - - setValue(ret+i, curr, type); - - // no need to look up size unless type changes, so cache it - if (previousType !== type) { - typeSize = getNativeTypeSize(type); - previousType = type; - } - i += typeSize; - } - - return ret; -} - -// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready -function getMemory(size) { - if (!runtimeInitialized) return dynamicAlloc(size); - return _malloc(size); -} - - - - -// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime. - -// Given a pointer 'ptr' 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. - -var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; - -/** - * @param {number} idx - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)); - } else { - var str = ''; - // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that - while (idx < endPtr) { - // For UTF8 byte structure, see: - // http://en.wikipedia.org/wiki/UTF-8#Description - // https://www.ietf.org/rfc/rfc2279.txt - // https://tools.ietf.org/html/rfc3629 - var u0 = heap[idx++]; - if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } - var u1 = heap[idx++] & 63; - if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } - var u2 = heap[idx++] & 63; - if ((u0 & 0xF0) == 0xE0) { - u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; - } else { - if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string on the asm.js/wasm heap to a JS string!'); - u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63); - } - - if (u0 < 0x10000) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } - } - } - return str; -} - -// 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. -// 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 -// style or the other. -/** - * @param {number} ptr - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; -} - -// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', -// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// heap: the array to copy to. Each index in this array is assumed to be one 8-byte element. -// outIdx: The starting offset in the array to begin the copying. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. -// This count should include the null terminator, -// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. -// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. - return 0; - - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) { - var u1 = str.charCodeAt(++i); - u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); - } - if (u <= 0x7F) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u; - } else if (u <= 0x7FF) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 0xC0 | (u >> 6); - heap[outIdx++] = 0x80 | (u & 63); - } else if (u <= 0xFFFF) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 0xE0 | (u >> 12); - heap[outIdx++] = 0x80 | ((u >> 6) & 63); - heap[outIdx++] = 0x80 | (u & 63); - } else { - if (outIdx + 3 >= endIdx) break; - if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF).'); - heap[outIdx++] = 0xF0 | (u >> 18); - heap[outIdx++] = 0x80 | ((u >> 12) & 63); - heap[outIdx++] = 0x80 | ((u >> 6) & 63); - heap[outIdx++] = 0x80 | (u & 63); - } - } - // Null-terminate the pointer to the buffer. - heap[outIdx] = 0; - return outIdx - startIdx; -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); - if (u <= 0x7F) ++len; - else if (u <= 0x7FF) len += 2; - else if (u <= 0xFFFF) len += 3; - else len += 4; - } - return len; -} - - - - - -// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime. - -// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -function AsciiToString(ptr) { - var str = ''; - while (1) { - var ch = HEAPU8[((ptr++)>>0)]; - if (!ch) return str; - str += String.fromCharCode(ch); - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. - -function stringToAscii(str, outPtr) { - return writeAsciiToMemory(str, outPtr, false); -} - -// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; - -function UTF16ToString(ptr, maxBytesToRead) { - assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); - var endPtr = ptr; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - var idx = endPtr >> 1; - var maxIdx = idx + maxBytesToRead / 2; - // If maxBytesToRead is not passed explicitly, it will be undefined, and this - // will always evaluate to true. This saves on code size. - while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; - endPtr = idx << 1; - - if (endPtr - ptr > 32 && UTF16Decoder) { - return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); - } else { - var i = 0; - - var str = ''; - while (1) { - var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; - if (codeUnit == 0 || i == maxBytesToRead / 2) return str; - ++i; - // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. - str += String.fromCharCode(codeUnit); - } - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. -// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. -// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF16(str, outPtr, maxBytesToWrite) { - assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); - assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 2) return 0; - maxBytesToWrite -= 2; // Null terminator. - var startPtr = outPtr; - var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - HEAP16[((outPtr)>>1)]=codeUnit; - outPtr += 2; - } - // Null-terminate the pointer to the HEAP. - HEAP16[((outPtr)>>1)]=0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF16(str) { - return str.length*2; -} - -function UTF32ToString(ptr, maxBytesToRead) { - assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); - var i = 0; - - var str = ''; - // If maxBytesToRead is not passed explicitly, it will be undefined, and this - // will always evaluate to true. This saves on code size. - while (!(i >= maxBytesToRead / 4)) { - var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; - if (utf32 == 0) break; - ++i; - // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - if (utf32 >= 0x10000) { - var ch = utf32 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } else { - str += String.fromCharCode(utf32); - } - } - return str; -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. -// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. -// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF32(str, outPtr, maxBytesToWrite) { - assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); - assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 4) return 0; - var startPtr = outPtr; - var endPtr = startPtr + maxBytesToWrite - 4; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { - var trailSurrogate = str.charCodeAt(++i); - codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); - } - HEAP32[((outPtr)>>2)]=codeUnit; - outPtr += 4; - if (outPtr + 4 > endPtr) break; - } - // Null-terminate the pointer to the HEAP. - HEAP32[((outPtr)>>2)]=0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF32(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. - len += 4; - } - - return len; -} - -// Allocate heap space for a JS string, and write it there. -// It is the responsibility of the caller to free() that memory. -function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Allocate stack space for a JS string, and write it there. -function allocateUTF8OnStack(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = stackAlloc(size); - stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Deprecated: This function should not be called because it is unsafe and does not provide -// a maximum length limit of how many bytes it is allowed to write. Prefer calling the -// function stringToUTF8Array() instead, which takes in a maximum length that can be used -// to be secure from out of bounds writes. -/** @deprecated - @param {boolean=} dontAddNull */ -function writeStringToMemory(string, buffer, dontAddNull) { - warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); - - var /** @type {number} */ lastChar, /** @type {number} */ end; - if (dontAddNull) { - // stringToUTF8Array always appends null. If we don't want to do that, remember the - // character that existed at the location where the null will be placed, and restore - // that after the write (below). - end = buffer + lengthBytesUTF8(string); - lastChar = HEAP8[end]; - } - stringToUTF8(string, buffer, Infinity); - if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. -} - -function writeArrayToMemory(array, buffer) { - assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') - HEAP8.set(array, buffer); -} - -/** @param {boolean=} dontAddNull */ -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); - HEAP8[((buffer++)>>0)]=str.charCodeAt(i); - } - // Null-terminate the pointer to the HEAP. - if (!dontAddNull) HEAP8[((buffer)>>0)]=0; -} - - - -// Memory management - -var PAGE_SIZE = 16384; -var WASM_PAGE_SIZE = 65536; -var ASMJS_PAGE_SIZE = 16777216; - -function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - (x % multiple); - } - return x; -} - -var HEAP, -/** @type {ArrayBuffer} */ - buffer, -/** @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 updateGlobalBufferAndViews(buf) { - buffer = buf; - Module['HEAP8'] = HEAP8 = new Int8Array(buf); - Module['HEAP16'] = HEAP16 = new Int16Array(buf); - Module['HEAP32'] = HEAP32 = new Int32Array(buf); - Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); - Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); - Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); - Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); - Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); -} - -var STATIC_BASE = 1024, - STACK_BASE = 5270048, - STACKTOP = STACK_BASE, - STACK_MAX = 27168, - DYNAMIC_BASE = 5270048, - DYNAMICTOP_PTR = 27008; - -assert(STACK_BASE % 16 === 0, 'stack must start aligned'); -assert(DYNAMIC_BASE % 16 === 0, 'heap must start aligned'); - - -var TOTAL_STACK = 5242880; -if (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime') - -var INITIAL_INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;if (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) Object.defineProperty(Module, 'INITIAL_MEMORY', { configurable: true, get: function() { abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') } }); - -assert(INITIAL_INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); - -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) -assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, - 'JS engine does not provide full typed array support'); - - - - - - - - -// In non-standalone/normal mode, we create the memory here. - - - -// Create the main memory. (Note: this isn't used in STANDALONE_WASM mode since the wasm -// memory is created in the wasm, not in JS.) - - if (Module['wasmMemory']) { - wasmMemory = Module['wasmMemory']; - } else - { - wasmMemory = new WebAssembly.Memory({ - 'initial': INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - , - 'maximum': INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - }); - } - - -if (wasmMemory) { - buffer = wasmMemory.buffer; -} - -// If the user provides an incorrect length, just use that length instead rather than providing the user to -// specifically provide the memory length with Module['INITIAL_MEMORY']. -INITIAL_INITIAL_MEMORY = buffer.byteLength; -assert(INITIAL_INITIAL_MEMORY % WASM_PAGE_SIZE === 0); -updateGlobalBufferAndViews(buffer); - -HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE; - - - - - - -// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. -function writeStackCookie() { - assert((STACK_MAX & 3) == 0); - // The stack grows downwards - HEAPU32[(STACK_MAX >> 2)+1] = 0x2135467; - HEAPU32[(STACK_MAX >> 2)+2] = 0x89BACDFE; - // Also test the global address 0 for integrity. - // We don't do this with ASan because ASan does its own checks for this. - HEAP32[0] = 0x63736d65; /* 'emsc' */ -} - -function checkStackCookie() { - var cookie1 = HEAPU32[(STACK_MAX >> 2)+1]; - var cookie2 = HEAPU32[(STACK_MAX >> 2)+2]; - if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) { - abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16)); - } - // Also test the global address 0 for integrity. - // We don't do this with ASan because ASan does its own checks for this. - if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); -} - - - - - -// Endianness check (note: assumes compiler arch was little-endian) -(function() { - var h16 = new Int16Array(1); - var h8 = new Int8Array(h16.buffer); - h16[0] = 0x6373; - if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; -})(); - -function abortFnPtrError(ptr, sig) { - abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info."); -} - - - -function callRuntimeCallbacks(callbacks) { - while(callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == 'function') { - callback(Module); // Pass the module as the first argument. - continue; - } - var func = callback.func; - if (typeof func === 'number') { - if (callback.arg === undefined) { - Module['dynCall_v'](func); - } else { - Module['dynCall_vi'](func, callback.arg); - } - } else { - func(callback.arg === undefined ? null : callback.arg); - } - } -} - -var __ATPRERUN__ = []; // functions called before the runtime is initialized -var __ATINIT__ = []; // functions called during startup -var __ATMAIN__ = []; // functions called when main() is to be run -var __ATEXIT__ = []; // functions called during shutdown -var __ATPOSTRUN__ = []; // functions called after the main() is called - -var runtimeInitialized = false; -var runtimeExited = false; - - -function preRun() { - - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPRERUN__); -} - -function initRuntime() { - checkStackCookie(); - assert(!runtimeInitialized); - runtimeInitialized = true; - if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); -TTY.init(); - callRuntimeCallbacks(__ATINIT__); -} - -function preMain() { - checkStackCookie(); - FS.ignorePermissions = false; - callRuntimeCallbacks(__ATMAIN__); -} - -function exitRuntime() { - checkStackCookie(); - runtimeExited = true; -} - -function postRun() { - checkStackCookie(); - - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPOSTRUN__); -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); -} - -function addOnInit(cb) { - __ATINIT__.unshift(cb); -} - -function addOnPreMain(cb) { - __ATMAIN__.unshift(cb); -} - -function addOnExit(cb) { -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); -} - -/** @param {number|boolean=} ignore */ -function unSign(value, bits, ignore) { - if (value >= 0) { - return value; - } - return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts - : Math.pow(2, bits) + value; -} -/** @param {number|boolean=} ignore */ -function reSign(value, bits, ignore) { - if (value <= 0) { - return value; - } - var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 - : Math.pow(2, bits-1); - if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that - // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors - // TODO: In i64 mode 1, resign the two parts separately and safely - value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts - } - return value; -} - - - - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc - -assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); - -var Math_abs = Math.abs; -var Math_cos = Math.cos; -var Math_sin = Math.sin; -var Math_tan = Math.tan; -var Math_acos = Math.acos; -var Math_asin = Math.asin; -var Math_atan = Math.atan; -var Math_atan2 = Math.atan2; -var Math_exp = Math.exp; -var Math_log = Math.log; -var Math_sqrt = Math.sqrt; -var Math_ceil = Math.ceil; -var Math_floor = Math.floor; -var Math_pow = Math.pow; -var Math_imul = Math.imul; -var Math_fround = Math.fround; -var Math_round = Math.round; -var Math_min = Math.min; -var Math_max = Math.max; -var Math_clz32 = Math.clz32; -var Math_trunc = Math.trunc; - - - -// A counter of dependencies for calling run(). If we need to -// do asynchronous work before running, increment this and -// decrement it. Incrementing must happen in a place like -// Module.preRun (used by emcc to add file preloading). -// Note that you can add dependencies in preRun, even though -// it happens right before run - run will be postponed until -// the dependencies are met. -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled -var runDependencyTracking = {}; - -function getUniqueRunDependency(id) { - var orig = id; - while (1) { - if (!runDependencyTracking[id]) return id; - id = orig + Math.random(); - } -} - -function addRunDependency(id) { - runDependencies++; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - - if (id) { - assert(!runDependencyTracking[id]); - runDependencyTracking[id] = 1; - if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { - // Check for missing dependencies every few seconds - runDependencyWatcher = setInterval(function() { - if (ABORT) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - return; - } - var shown = false; - for (var dep in runDependencyTracking) { - if (!shown) { - shown = true; - err('still waiting on run dependencies:'); - } - err('dependency: ' + dep); - } - if (shown) { - err('(end of list)'); - } - }, 10000); - } - } else { - err('warning: run dependency added without ID'); - } -} - -function removeRunDependency(id) { - runDependencies--; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - - if (id) { - assert(runDependencyTracking[id]); - delete runDependencyTracking[id]; - } else { - err('warning: run dependency removed without ID'); - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } - } -} - -Module["preloadedImages"] = {}; // maps url to image data -Module["preloadedAudios"] = {}; // maps url to audio data - -/** @param {string|number=} what */ -function abort(what) { - if (Module['onAbort']) { - Module['onAbort'](what); - } - - what += ''; - out(what); - err(what); - - ABORT = true; - EXITSTATUS = 1; - - var output = 'abort(' + what + ') at ' + stackTrace(); - what = output; - - // Throw a wasm runtime error, because a JS error might be seen as a foreign - // exception, which means we'd run destructors on it. We need the error to - // simply make the program stop. - throw new WebAssembly.RuntimeError(what); -} - - -var memoryInitializer = null; - - - - - - - - - - - - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? - str.startsWith(prefix) : - str.indexOf(prefix) === 0; -} - -// Prefix of data URIs emitted by SINGLE_FILE and related options. -var dataURIPrefix = 'data:application/octet-stream;base64,'; - -// Indicates whether filename is a base64 data URI. -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix); -} - -var fileURIPrefix = "file://"; - -// Indicates whether filename is delivered via file protocol (as opposed to http/https) -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix); -} - - - -function createExportWrapper(name, fixedasm) { - return function() { - var displayName = name; - var asm = fixedasm; - if (!fixedasm) { - asm = Module['asm']; - } - assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization'); - assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); - if (!asm[name]) { - assert(asm[name], 'exported native function `' + displayName + '` not found'); - } - return asm[name].apply(null, arguments); - }; -} - -var wasmBinaryFile = 'merlin32.wasm'; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary); - } - - if (readBinary) { - return readBinary(wasmBinaryFile); - } else { - throw "both async and sync fetching of the wasm failed"; - } - } - catch (err) { - abort(err); - } -} - -function getBinaryPromise() { - // If we don't have the binary yet, and have the Fetch api, use that; - // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function' - // Let's not use fetch to get objects over file:// as it's most likely Cordova which doesn't support fetch for file:// - && !isFileURI(wasmBinaryFile) - ) { - return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { - if (!response['ok']) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; - } - return response['arrayBuffer'](); - }).catch(function () { - return getBinary(); - }); - } - // Otherwise, getBinary should be able to get it synchronously - return new Promise(function(resolve, reject) { - resolve(getBinary()); - }); -} - - - -// Create the wasm instance. -// Receives the wasm imports, returns the exports. -function createWasm() { - // prepare imports - var info = { - 'env': asmLibraryArg, - 'wasi_snapshot_preview1': asmLibraryArg - }; - // Load the wasm module and create an instance of using native support in the JS engine. - // handle a generated wasm instance, receiving its exports and - // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { - var exports = instance.exports; - Module['asm'] = exports; - removeRunDependency('wasm-instantiate'); - } - // we can't run yet (except in a pthread, where we have a custom sync instantiator) - addRunDependency('wasm-instantiate'); - - - // Async compilation can be confusing when an error on the page overwrites Module - // (for example, if the order of elements is wrong, and the one defining Module is - // later), so we save Module and check it later. - var trueModule = Module; - function receiveInstantiatedSource(output) { - // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance. - // receiveInstance() will swap in the exports (to Module.asm) so they can be called - assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); - trueModule = null; - // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. - // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. - receiveInstance(output['instance']); - } - - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info); - }).then(receiver, function(reason) { - err('failed to asynchronously prepare wasm: ' + reason); - abort(reason); - }); - } - - // Prefer streaming instantiation if available. - function instantiateAsync() { - if (!wasmBinary && - typeof WebAssembly.instantiateStreaming === 'function' && - !isDataURI(wasmBinaryFile) && - // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. - !isFileURI(wasmBinaryFile) && - typeof fetch === 'function') { - fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiatedSource, function(reason) { - // We expect the most common failure cause to be a bad MIME type for the binary, - // in which case falling back to ArrayBuffer instantiation should work. - err('wasm streaming compile failed: ' + reason); - err('falling back to ArrayBuffer instantiation'); - return instantiateArrayBuffer(receiveInstantiatedSource); - }); - }); - } else { - return instantiateArrayBuffer(receiveInstantiatedSource); - } - } - // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback - // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel - // to any other async startup actions they are performing. - if (Module['instantiateWasm']) { - try { - var exports = Module['instantiateWasm'](info, receiveInstance); - return exports; - } catch(e) { - err('Module.instantiateWasm callback failed with error: ' + e); - return false; - } - } - - instantiateAsync(); - return {}; // no exports yet; we'll fill them in later -} - - -// Globals used by JS i64 conversions -var tempDouble; -var tempI64; - -// === Body === - -var ASM_CONSTS = { - -}; - - - - -// STATICTOP = STATIC_BASE + 26144; -/* global initializers */ __ATINIT__.push({ func: function() { ___wasm_call_ctors() } }); - - - - -/* no memory initializer */ -// {{PRE_LIBRARY}} - - - function abortStackOverflow(allocSize) { - abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!'); - } - - function demangle(func) { - warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); - return func; - } - - function demangleAll(text) { - var regex = - /\b_Z[\w\d_]+/g; - return text.replace(regex, - function(x) { - var y = demangle(x); - return x === y ? x : (y + ' [' + x + ']'); - }); - } - - function jsStackTrace() { - var err = new Error(); - if (!err.stack) { - // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, - // so try that as a special-case. - try { - throw new Error(); - } catch(e) { - err = e; - } - if (!err.stack) { - return '(no stack trace available)'; - } - } - return err.stack.toString(); - } - - function stackTrace() { - var js = jsStackTrace(); - if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); - return demangleAll(js); - } - - function ___handle_stack_overflow() { - abort('stack overflow') - } - - - function setErrNo(value) { - HEAP32[((___errno_location())>>2)]=value; - return value; - } - - - var PATH={splitPath:function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1); - },normalizeArray:function(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift('..'); - } - } - return parts; - },normalize:function(path) { - var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.substr(-1) === '/'; - // Normalize the path - path = PATH.normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), !isAbsolute).join('/'); - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - return (isAbsolute ? '/' : '') + path; - },dirname:function(path) { - var result = PATH.splitPath(path), - root = result[0], - dir = result[1]; - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - return root + dir; - },basename:function(path) { - // EMSCRIPTEN return '/'' for '/', not an empty string - if (path === '/') return '/'; - var lastSlash = path.lastIndexOf('/'); - if (lastSlash === -1) return path; - return path.substr(lastSlash+1); - },extname:function(path) { - return PATH.splitPath(path)[3]; - },join:function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join('/')); - },join2:function(l, r) { - return PATH.normalize(l + '/' + r); - }}; - - - var PATH_FS={resolve:function() { - var resolvedPath = '', - resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : FS.cwd(); - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - return ''; // an invalid portion invalidates the whole thing - } - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; - },relative:function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join('/'); - }}; - - var TTY={ttys:[],init:function () { - // https://github.com/emscripten-core/emscripten/pull/1555 - // if (ENVIRONMENT_IS_NODE) { - // // currently, FS.init does not distinguish if process.stdin is a file or TTY - // // device, it always assumes it's a TTY device. because of this, we're forcing - // // process.stdin to UTF8 encoding to at least make stdin reading compatible - // // with text files until FS.init can be refactored. - // process['stdin']['setEncoding']('utf8'); - // } - },shutdown:function() { - // https://github.com/emscripten-core/emscripten/pull/1555 - // if (ENVIRONMENT_IS_NODE) { - // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? - // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation - // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? - // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle - // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call - // process['stdin']['pause'](); - // } - },register:function(dev, ops) { - TTY.ttys[dev] = { input: [], output: [], ops: ops }; - FS.registerDevice(dev, TTY.stream_ops); - },stream_ops:{open:function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43); - } - stream.tty = tty; - stream.seekable = false; - },close:function(stream) { - // flush any pending line data - stream.tty.ops.flush(stream.tty); - },flush:function(stream) { - stream.tty.ops.flush(stream.tty); - },read:function(stream, buffer, offset, length, pos /* ignored */) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60); - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty); - } catch (e) { - throw new FS.ErrnoError(29); - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6); - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset+i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - },write:function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60); - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer[offset+i]); - } - } catch (e) { - throw new FS.ErrnoError(29); - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - }},default_tty_ops:{get_char:function(tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - // we will read data by chunks of BUFSIZE - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - - try { - bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null); - } catch(e) { - // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, - // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. - if (e.toString().indexOf('EOF') != -1) bytesRead = 0; - else throw e; - } - - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString('utf-8'); - } else { - result = null; - } - } else - if (typeof window != 'undefined' && - typeof window.prompt == 'function') { - // Browser. - result = window.prompt('Input: '); // returns null on cancel - if (result !== null) { - result += '\n'; - } - } else if (typeof readline == 'function') { - // Command line. - result = readline(); - if (result !== null) { - result += '\n'; - } - } - if (!result) { - return null; - } - tty.input = intArrayFromString(result, true); - } - return tty.input.shift(); - },put_char:function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else { - if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. - } - },flush:function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - }},default_tty1_ops:{put_char:function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else { - if (val != 0) tty.output.push(val); - } - },flush:function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - }}}; - - var MEMFS={ops_table:null,mount:function(mount) { - return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); - },createNode:function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - // no supported - 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 - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - }; - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {}; - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. - // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred - // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size - // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. - node.contents = null; - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream; - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream; - } - node.timestamp = Date.now(); - // add the new node to the parent - if (parent) { - parent.contents[name] = node; - } - return node; - },getFileDataAsRegularArray:function(node) { - if (node.contents && node.contents.subarray) { - var arr = []; - for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); - return arr; // Returns a copy of the original data. - } - return node.contents; // No-op, the file contents are already in a JS array. Return as-is. - },getFileDataAsTypedArray:function(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. - return new Uint8Array(node.contents); - },expandFileStorage:function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. - // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. - // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to - // avoid overshooting the allocation cap by a very large margin. - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); // Allocate new storage. - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. - return; - },resizeFileStorage:function(node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; // Fully decommit when requesting a resize to zero. - node.usedBytes = 0; - return; - } - if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store. - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); // Allocate new storage. - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. - } - node.usedBytes = newSize; - return; - } - // Backing with a JS array. - if (!node.contents) node.contents = []; - if (node.contents.length > newSize) node.contents.length = newSize; - else while (node.contents.length < newSize) node.contents.push(0); - node.usedBytes = newSize; - },node_ops:{getattr:function(node) { - var attr = {}; - // device numbers reuse inode numbers. - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096; - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes; - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length; - } else { - attr.size = 0; - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), - // but this is not required by the standard. - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr; - },setattr:function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode; - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp; - } - if (attr.size !== undefined) { - MEMFS.resizeFileStorage(node, attr.size); - } - },lookup:function(parent, name) { - throw FS.genericErrors[44]; - },mknod:function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev); - },rename:function(old_node, new_dir, new_name) { - // if we're overwriting a directory at new_name, make sure it's empty. - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - } - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } - } - } - // do the internal rewiring - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir; - },unlink:function(parent, name) { - delete parent.contents[name]; - },rmdir:function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55); - } - delete parent.contents[name]; - },readdir:function(node) { - var entries = ['.', '..']; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue; - } - entries.push(key); - } - return entries; - },symlink:function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); - node.link = oldpath; - return node; - },readlink:function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28); - } - return node.link; - }},stream_ops:{read:function(stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - assert(size >= 0); - if (size > 8 && contents.subarray) { // non-trivial, and typed array - buffer.set(contents.subarray(position, position + size), offset); - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; - } - return size; - },write:function(stream, buffer, offset, length, position, canOwn) { - // The data buffer should be a typed array view - assert(!(buffer instanceof ArrayBuffer)); - - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - - if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? - if (canOwn) { - assert(position === 0, 'canOwn must imply no weird position inside the file'); - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length; - } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length; - } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? - node.contents.set(buffer.subarray(offset, offset + length), position); - return length; - } - } - - // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. - MEMFS.expandFileStorage(node, position+length); - if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available. - else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length; - },llseek:function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position; - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes; - } - } - if (position < 0) { - throw new FS.ErrnoError(28); - } - return position; - },allocate:function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); - },mmap:function(stream, address, length, position, prot, flags) { - // We don't currently support location hints for the address of the mapping - assert(address === 0); - - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - var ptr; - var allocated; - var contents = stream.node.contents; - // Only make a new copy when MAP_PRIVATE is specified. - if (!(flags & 2) && contents.buffer === buffer) { - // We can't emulate MAP_SHARED when the file is not backed by the buffer - // we're mapping to (e.g. the HEAP buffer). - allocated = false; - ptr = contents.byteOffset; - } else { - // Try to avoid unnecessary slices. - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length); - } else { - contents = Array.prototype.slice.call(contents, position, position + length); - } - } - allocated = true; - ptr = _malloc(length); - if (!ptr) { - throw new FS.ErrnoError(48); - } - HEAP8.set(contents, ptr); - } - return { ptr: ptr, allocated: allocated }; - },msync:function(stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (mmapFlags & 2) { - // MAP_PRIVATE calls need not to be synced back to underlying fs - return 0; - } - - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - // should we check if bytesWritten and length are the same? - return 0; - }}}; - - var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function (mount) { - assert(ENVIRONMENT_IS_WORKER); - if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync(); - var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0); - var createdParents = {}; - function ensureParent(path) { - // return the parent node, creating subdirs as necessary - var parts = path.split('/'); - var parent = root; - for (var i = 0; i < parts.length-1; i++) { - var curr = parts.slice(0, i+1).join('/'); - // Issue 4254: Using curr as a node name will prevent the node - // from being found in FS.nameTable when FS.open is called on - // a path which holds a child of this node, - // given that all FS functions assume node names - // are just their corresponding parts within their given path, - // rather than incremental aggregates which include their parent's - // directories. - if (!createdParents[curr]) { - createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0); - } - parent = createdParents[curr]; - } - return parent; - } - function base(path) { - var parts = path.split('/'); - return parts[parts.length-1]; - } - // We also accept FileList here, by using Array.prototype - Array.prototype.forEach.call(mount.opts["files"] || [], function(file) { - WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate); - }); - (mount.opts["blobs"] || []).forEach(function(obj) { - WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]); - }); - (mount.opts["packages"] || []).forEach(function(pack) { - pack['metadata'].files.forEach(function(file) { - var name = file.filename.substr(1); // remove initial slash - WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack['blob'].slice(file.start, file.end)); - }); - }); - return root; - },createNode:function (parent, name, mode, dev, contents, mtime) { - var node = FS.createNode(parent, name, mode); - node.mode = mode; - node.node_ops = WORKERFS.node_ops; - node.stream_ops = WORKERFS.stream_ops; - node.timestamp = (mtime || new Date).getTime(); - assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE); - if (mode === WORKERFS.FILE_MODE) { - node.size = contents.size; - node.contents = contents; - } else { - node.size = 4096; - node.contents = {}; - } - if (parent) { - parent.contents[name] = node; - } - return node; - },node_ops:{getattr:function(node) { - return { - dev: 1, - ino: node.id, - mode: node.mode, - nlink: 1, - uid: 0, - gid: 0, - rdev: undefined, - size: node.size, - atime: new Date(node.timestamp), - mtime: new Date(node.timestamp), - ctime: new Date(node.timestamp), - blksize: 4096, - blocks: Math.ceil(node.size / 4096), - }; - },setattr:function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode; - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp; - } - },lookup:function(parent, name) { - throw new FS.ErrnoError(44); - },mknod:function (parent, name, mode, dev) { - throw new FS.ErrnoError(63); - },rename:function (oldNode, newDir, newName) { - throw new FS.ErrnoError(63); - },unlink:function(parent, name) { - throw new FS.ErrnoError(63); - },rmdir:function(parent, name) { - throw new FS.ErrnoError(63); - },readdir:function(node) { - var entries = ['.', '..']; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue; - } - entries.push(key); - } - return entries; - },symlink:function(parent, newName, oldPath) { - throw new FS.ErrnoError(63); - },readlink:function(node) { - throw new FS.ErrnoError(63); - }},stream_ops:{read:function (stream, buffer, offset, length, position) { - if (position >= stream.node.size) return 0; - var chunk = stream.node.contents.slice(position, position + length); - var ab = WORKERFS.reader.readAsArrayBuffer(chunk); - buffer.set(new Uint8Array(ab), offset); - return chunk.size; - },write:function (stream, buffer, offset, length, position) { - throw new FS.ErrnoError(29); - },llseek:function (stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position; - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.size; - } - } - if (position < 0) { - throw new FS.ErrnoError(28); - } - return position; - }}}; - - var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"}; - - var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e) { - if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); - return setErrNo(e.errno); - },lookupPath:function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - - if (!path) return { path: '', node: null }; - - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - for (var key in defaults) { - if (opts[key] === undefined) { - opts[key] = defaults[key]; - } - } - - if (opts.recurse_count > 8) { // max recursive lookup of 8 - throw new FS.ErrnoError(32); - } - - // split the path - var parts = PATH.normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), false); - - // start at the root - var current = FS.root; - var current_path = '/'; - - for (var i = 0; i < parts.length; i++) { - var islast = (i === parts.length-1); - if (islast && opts.parent) { - // stop resolving - break; - } - - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - - // jump to the mount's root node if this is a mountpoint - if (FS.isMountpoint(current)) { - if (!islast || (islast && opts.follow_mount)) { - current = current.mounted.root; - } - } - - // by default, lookupPath will not follow a symlink if it is the final path component. - // setting opts.follow = true will override this behavior. - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - - var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); - current = lookup.node; - - if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). - throw new FS.ErrnoError(32); - } - } - } - } - - return { path: current_path, node: current }; - },getPath:function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; - } - path = path ? node.name + '/' + path : node.name; - node = node.parent; - } - },hashName:function(parentid, name) { - var hash = 0; - - - for (var i = 0; i < name.length; i++) { - hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; - } - return ((parentid + hash) >>> 0) % FS.nameTable.length; - },hashAddNode:function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node; - },hashRemoveNode:function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next; - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break; - } - current = current.name_next; - } - } - },lookupNode:function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent); - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node; - } - } - // if we failed to find it in the cache, call into the VFS - return FS.lookup(parent, name); - },createNode:function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - - FS.hashAddNode(node); - - return node; - },destroyNode:function(node) { - FS.hashRemoveNode(node); - },isRoot:function(node) { - return node === node.parent; - },isMountpoint:function(node) { - return !!node.mounted; - },isFile:function(mode) { - return (mode & 61440) === 32768; - },isDir:function(mode) { - return (mode & 61440) === 16384; - },isLink:function(mode) { - return (mode & 61440) === 40960; - },isChrdev:function(mode) { - return (mode & 61440) === 8192; - },isBlkdev:function(mode) { - return (mode & 61440) === 24576; - },isFIFO:function(mode) { - return (mode & 61440) === 4096; - },isSocket:function(mode) { - return (mode & 49152) === 49152; - },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === 'undefined') { - throw new Error('Unknown file open mode: ' + str); - } - return flags; - },flagsToPermissionString:function(flag) { - var perms = ['r', 'w', 'rw'][flag & 3]; - if ((flag & 512)) { - perms += 'w'; - } - return perms; - },nodePermissions:function(node, perms) { - if (FS.ignorePermissions) { - return 0; - } - // return 0 if any user, group or owner bits are set. - if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { - return 2; - } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { - return 2; - } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { - return 2; - } - return 0; - },mayLookup:function(dir) { - var errCode = FS.nodePermissions(dir, 'x'); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0; - },mayCreate:function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20; - } catch (e) { - } - return FS.nodePermissions(dir, 'wx'); - },mayDelete:function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name); - } catch (e) { - return e.errno; - } - var errCode = FS.nodePermissions(dir, 'wx'); - if (errCode) { - return errCode; - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54; - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10; - } - } else { - if (FS.isDir(node.mode)) { - return 31; - } - } - return 0; - },mayOpen:function(node, flags) { - if (!node) { - return 44; - } - if (FS.isLink(node.mode)) { - return 32; - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write - (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only) - return 31; - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); - },MAX_OPEN_FDS:4096,nextfd:function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd; - } - } - throw new FS.ErrnoError(33); - },getStream:function(fd) { - return FS.streams[fd]; - },createStream:function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = /** @constructor */ function(){}; - FS.FSStream.prototype = { - object: { - get: function() { return this.node; }, - set: function(val) { this.node = val; } - }, - isRead: { - get: function() { return (this.flags & 2097155) !== 1; } - }, - isWrite: { - get: function() { return (this.flags & 2097155) !== 0; } - }, - isAppend: { - get: function() { return (this.flags & 1024); } - } - }; - } - // clone it, so we can return an instance of FSStream - var newStream = new FS.FSStream(); - for (var p in stream) { - newStream[p] = stream[p]; - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream; - },closeStream:function(fd) { - FS.streams[fd] = null; - },chrdev_stream_ops:{open:function(stream) { - var device = FS.getDevice(stream.node.rdev); - // override node's stream ops with the device's - stream.stream_ops = device.stream_ops; - // forward the open call - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - },llseek:function() { - throw new FS.ErrnoError(70); - }},major:function(dev) { - return ((dev) >> 8); - },minor:function(dev) { - return ((dev) & 0xff); - },makedev:function(ma, mi) { - return ((ma) << 8 | (mi)); - },registerDevice:function(dev, ops) { - FS.devices[dev] = { stream_ops: ops }; - },getDevice:function(dev) { - return FS.devices[dev]; - },getMounts:function(mount) { - var mounts = []; - var check = [mount]; - - while (check.length) { - var m = check.pop(); - - mounts.push(m); - - check.push.apply(check, m.mounts); - } - - return mounts; - },syncfs:function(populate, callback) { - if (typeof(populate) === 'function') { - callback = populate; - populate = false; - } - - FS.syncFSRequests++; - - if (FS.syncFSRequests > 1) { - err('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work'); - } - - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - - function doCallback(errCode) { - assert(FS.syncFSRequests > 0); - FS.syncFSRequests--; - return callback(errCode); - } - - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode); - } - return; - } - if (++completed >= mounts.length) { - doCallback(null); - } - }; - - // sync all mounts - mounts.forEach(function (mount) { - if (!mount.type.syncfs) { - return done(null); - } - mount.type.syncfs(mount, populate, done); - }); - },mount:function(type, opts, mountpoint) { - if (typeof type === 'string') { - // The filesystem was not included, and instead we have an error - // message stored in the variable. - throw type; - } - var root = mountpoint === '/'; - var pseudo = !mountpoint; - var node; - - if (root && FS.root) { - throw new FS.ErrnoError(10); - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - - mountpoint = lookup.path; // use the absolute path - node = lookup.node; - - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54); - } - } - - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - mounts: [] - }; - - // create a root node for the fs - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - - if (root) { - FS.root = mountRoot; - } else if (node) { - // set as a mountpoint - node.mounted = mount; - - // add the new mount to the current mount's children - if (node.mount) { - node.mount.mounts.push(mount); - } - } - - return mountRoot; - },unmount:function (mountpoint) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28); - } - - // destroy the nodes for this mount, and all its child mounts - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - - Object.keys(FS.nameTable).forEach(function (hash) { - var current = FS.nameTable[hash]; - - while (current) { - var next = current.name_next; - - if (mounts.indexOf(current.mount) !== -1) { - FS.destroyNode(current); - } - - current = next; - } - }); - - // no longer a mountpoint - node.mounted = null; - - // remove this mount from the child mounts - var idx = node.mount.mounts.indexOf(mount); - assert(idx !== -1); - node.mount.mounts.splice(idx, 1); - },lookup:function(parent, name) { - return parent.node_ops.lookup(parent, name); - },mknod:function(path, mode, dev) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === '.' || name === '..') { - throw new FS.ErrnoError(28); - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63); - } - return parent.node_ops.mknod(parent, name, mode, dev); - },create:function(path, mode) { - mode = mode !== undefined ? mode : 438 /* 0666 */; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0); - },mkdir:function(path, mode) { - mode = mode !== undefined ? mode : 511 /* 0777 */; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0); - },mkdirTree:function(path, mode) { - var dirs = path.split('/'); - var d = ''; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += '/' + dirs[i]; - try { - FS.mkdir(d, mode); - } catch(e) { - if (e.errno != 20) throw e; - } - } - },mkdev:function(path, mode, dev) { - if (typeof(dev) === 'undefined') { - dev = mode; - mode = 438 /* 0666 */; - } - mode |= 8192; - return FS.mknod(path, mode, dev); - },symlink:function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44); - } - var lookup = FS.lookupPath(newpath, { parent: true }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44); - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63); - } - return parent.node_ops.symlink(parent, newname, oldpath); - },rename:function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - // parents must exist - var lookup, old_dir, new_dir; - try { - lookup = FS.lookupPath(old_path, { parent: true }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { parent: true }); - new_dir = lookup.node; - } catch (e) { - throw new FS.ErrnoError(10); - } - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - // need to be part of the same mount - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75); - } - // source must exist - var old_node = FS.lookupNode(old_dir, old_name); - // old path should not be an ancestor of the new path - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== '.') { - throw new FS.ErrnoError(28); - } - // new path should not be an ancestor of the old path - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== '.') { - throw new FS.ErrnoError(55); - } - // see if the new path already exists - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - // not fatal - } - // early out if nothing needs to change - if (old_node === new_node) { - return; - } - // we'll need to delete the old entry - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - // need delete permissions if we'll be overwriting. - // need create permissions if new doesn't already exist. - errCode = new_node ? - FS.mayDelete(new_dir, new_name, isdir) : - FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { - throw new FS.ErrnoError(10); - } - // if we are going to change the parent, check write permissions - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, 'w'); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - } - try { - if (FS.trackingDelegate['willMovePath']) { - FS.trackingDelegate['willMovePath'](old_path, new_path); - } - } catch(e) { - err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); - } - // remove the node from the lookup hash - FS.hashRemoveNode(old_node); - // do the underlying fs rename - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); - } catch (e) { - throw e; - } finally { - // add the node back to the hash (in case node_ops.rename - // changed its name) - FS.hashAddNode(old_node); - } - try { - if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); - } catch(e) { - err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); - } - },rmdir:function(path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - try { - if (FS.trackingDelegate['willDeletePath']) { - FS.trackingDelegate['willDeletePath'](path); - } - } catch(e) { - err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); - } catch(e) { - err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); - } - },readdir:function(path) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54); - } - return node.node_ops.readdir(node); - },unlink:function(path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - // According to POSIX, we should map EISDIR to EPERM, but - // we instead do what Linux does (and we must, as we use - // the musl linux libc). - throw new FS.ErrnoError(errCode); - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10); - } - try { - if (FS.trackingDelegate['willDeletePath']) { - FS.trackingDelegate['willDeletePath'](path); - } - } catch(e) { - err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); - } catch(e) { - err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); - } - },readlink:function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44); - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28); - } - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); - },stat:function(path, dontFollow) { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44); - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63); - } - return node.node_ops.getattr(node); - },lstat:function(path) { - return FS.stat(path, true); - },chmod:function(path, mode, dontFollow) { - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { - mode: (mode & 4095) | (node.mode & ~4095), - timestamp: Date.now() - }); - },lchmod:function(path, mode) { - FS.chmod(path, mode, true); - },fchmod:function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - FS.chmod(stream.node, mode); - },chown:function(path, uid, gid, dontFollow) { - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { - timestamp: Date.now() - // we ignore the uid / gid for now - }); - },lchown:function(path, uid, gid) { - FS.chown(path, uid, gid, true); - },fchown:function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - FS.chown(stream.node, uid, gid); - },truncate:function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28); - } - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31); - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28); - } - var errCode = FS.nodePermissions(node, 'w'); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }); - },ftruncate:function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28); - } - FS.truncate(stream.node, len); - },utime:function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }); - },open:function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44); - } - flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; - if ((flags & 64)) { - mode = (mode & 4095) | 32768; - } else { - mode = 0; - } - var node; - if (typeof path === 'object') { - node = path; - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node; - } catch (e) { - // ignore - } - } - // perhaps we need to create the node - var created = false; - if ((flags & 64)) { - if (node) { - // if O_CREAT and O_EXCL are set, error out if the node already exists - if ((flags & 128)) { - throw new FS.ErrnoError(20); - } - } else { - // node doesn't exist, try to create it - node = FS.mknod(path, mode, 0); - created = true; - } - } - if (!node) { - throw new FS.ErrnoError(44); - } - // can't truncate a device - if (FS.isChrdev(node.mode)) { - flags &= ~512; - } - // if asked only for a directory, then this must be one - if ((flags & 65536) && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54); - } - // check permissions, if this is not a file we just created now (it is ok to - // create and write to a file with read-only permissions; it is read-only - // for later use) - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - } - // do truncation if necessary - if ((flags & 512)) { - FS.truncate(node, 0); - } - // we've already handled these, don't pass down to the underlying vfs - flags &= ~(128 | 512 | 131072); - - // register the stream with the filesystem - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), // we want the absolute path to the node - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - // used by the file family libc calls (fopen, fwrite, ferror, etc.) - ungotten: [], - error: false - }, fd_start, fd_end); - // call the new stream's open function - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - if (Module['logReadFiles'] && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path); - } - } - try { - if (FS.trackingDelegate['onOpenFile']) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ; - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE; - } - FS.trackingDelegate['onOpenFile'](path, trackingFlags); - } - } catch(e) { - err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message); - } - return stream; - },close:function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (stream.getdents) stream.getdents = null; // free readdir state - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream); - } - } catch (e) { - throw e; - } finally { - FS.closeStream(stream.fd); - } - stream.fd = null; - },isClosed:function(stream) { - return stream.fd === null; - },llseek:function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70); - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28); - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position; - },read:function(stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28); - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31); - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28); - } - var seeking = typeof position !== 'undefined'; - if (!seeking) { - position = stream.position; - } else if (!stream.seekable) { - throw new FS.ErrnoError(70); - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead; - },write:function(stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28); - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31); - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28); - } - if (stream.seekable && stream.flags & 1024) { - // seek to the end before writing in append mode - FS.llseek(stream, 0, 2); - } - var seeking = typeof position !== 'undefined'; - if (!seeking) { - position = stream.position; - } else if (!stream.seekable) { - throw new FS.ErrnoError(70); - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); - } catch(e) { - err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: " + e.message); - } - return bytesWritten; - },allocate:function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8); - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138); - } - stream.stream_ops.allocate(stream, offset, length); - },mmap:function(stream, address, length, position, prot, flags) { - // User requests writing to file (prot & PROT_WRITE != 0). - // Checking if we have permissions to write to the file unless - // MAP_PRIVATE flag is set. According to POSIX spec it is possible - // to write to file opened in read-only mode with MAP_PRIVATE flag, - // as all modifications will be visible only in the memory of - // the current process. - if ((prot & 2) !== 0 - && (flags & 2) === 0 - && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2); - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2); - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43); - } - return stream.stream_ops.mmap(stream, address, length, position, prot, flags); - },msync:function(stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0; - } - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); - },munmap:function(stream) { - return 0; - },ioctl:function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59); - } - return stream.stream_ops.ioctl(stream, cmd, arg); - },readFile:function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || 'r'; - opts.encoding = opts.encoding || 'binary'; - if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { - throw new Error('Invalid encoding type "' + opts.encoding + '"'); - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === 'utf8') { - ret = UTF8ArrayToString(buf, 0); - } else if (opts.encoding === 'binary') { - ret = buf; - } - FS.close(stream); - return ret; - },writeFile:function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || 'w'; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === 'string') { - var buf = new Uint8Array(lengthBytesUTF8(data)+1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); - } else { - throw new Error('Unsupported data type'); - } - FS.close(stream); - },cwd:function() { - return FS.currentPath; - },chdir:function(path) { - var lookup = FS.lookupPath(path, { follow: true }); - if (lookup.node === null) { - throw new FS.ErrnoError(44); - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54); - } - var errCode = FS.nodePermissions(lookup.node, 'x'); - if (errCode) { - throw new FS.ErrnoError(errCode); - } - FS.currentPath = lookup.path; - },createDefaultDirectories:function() { - FS.mkdir('/tmp'); - FS.mkdir('/home'); - FS.mkdir('/home/web_user'); - },createDefaultDevices:function() { - // create /dev - FS.mkdir('/dev'); - // setup /dev/null - FS.registerDevice(FS.makedev(1, 3), { - read: function() { return 0; }, - write: function(stream, buffer, offset, length, pos) { return length; } - }); - FS.mkdev('/dev/null', FS.makedev(1, 3)); - // setup /dev/tty and /dev/tty1 - // stderr needs to print output using Module['printErr'] - // so we register a second tty just for it. - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev('/dev/tty', FS.makedev(5, 0)); - FS.mkdev('/dev/tty1', FS.makedev(6, 0)); - // setup /dev/[u]random - var random_device; - if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') { - // for modern web browsers - var randomBuffer = new Uint8Array(1); - random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; - } else - if (ENVIRONMENT_IS_NODE) { - // for nodejs with or without crypto support included - try { - var crypto_module = require('crypto'); - // nodejs has crypto support - random_device = function() { return crypto_module['randomBytes'](1)[0]; }; - } catch (e) { - // nodejs doesn't have crypto support - } - } else - {} - if (!random_device) { - // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 - random_device = function() { abort("no cryptographic support found for random_device. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };"); }; - } - FS.createDevice('/dev', 'random', random_device); - FS.createDevice('/dev', 'urandom', random_device); - // we're not going to emulate the actual shm device, - // just create the tmp dirs that reside in it commonly - FS.mkdir('/dev/shm'); - FS.mkdir('/dev/shm/tmp'); - },createSpecialDirectories:function() { - // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the name of the stream for fd 6 (see test_unistd_ttyname) - FS.mkdir('/proc'); - FS.mkdir('/proc/self'); - FS.mkdir('/proc/self/fd'); - FS.mount({ - mount: function() { - var node = FS.createNode('/proc/self', 'fd', 16384 | 511 /* 0777 */, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { mountpoint: 'fake' }, - node_ops: { readlink: function() { return stream.path } } - }; - ret.parent = ret; // make it look like a simple root node - return ret; - } - }; - return node; - } - }, {}, '/proc/self/fd'); - },createStandardStreams:function() { - // TODO deprecate the old functionality of a single - // input / output callback and that utilizes FS.createDevice - // and instead require a unique set of stream ops - - // by default, we symlink the standard streams to the - // default tty devices. however, if the standard streams - // have been overwritten we create a unique device for - // them instead. - if (Module['stdin']) { - FS.createDevice('/dev', 'stdin', Module['stdin']); - } else { - FS.symlink('/dev/tty', '/dev/stdin'); - } - if (Module['stdout']) { - FS.createDevice('/dev', 'stdout', null, Module['stdout']); - } else { - FS.symlink('/dev/tty', '/dev/stdout'); - } - if (Module['stderr']) { - FS.createDevice('/dev', 'stderr', null, Module['stderr']); - } else { - FS.symlink('/dev/tty1', '/dev/stderr'); - } - - // open default streams for the stdin, stdout and stderr devices - var stdin = FS.open('/dev/stdin', 'r'); - var stdout = FS.open('/dev/stdout', 'w'); - var stderr = FS.open('/dev/stderr', 'w'); - assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); - assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); - assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); - },ensureErrnoError:function() { - if (FS.ErrnoError) return; - FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) { - this.node = node; - this.setErrno = /** @this{Object} */ function(errno) { - this.errno = errno; - for (var key in ERRNO_CODES) { - if (ERRNO_CODES[key] === errno) { - this.code = key; - break; - } - } - }; - this.setErrno(errno); - this.message = ERRNO_MESSAGES[errno]; - - // Try to get a maximally helpful stack trace. On Node.js, getting Error.stack - // now ensures it shows what we want. - if (this.stack) { - // Define the stack property for Node.js 4, which otherwise errors on the next line. - Object.defineProperty(this, "stack", { value: (new Error).stack, writable: true }); - this.stack = demangleAll(this.stack); - } - }; - FS.ErrnoError.prototype = new Error(); - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = ''; - }); - },staticInit:function() { - FS.ensureErrnoError(); - - FS.nameTable = new Array(4096); - - FS.mount(MEMFS, {}, '/'); - - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - - FS.filesystems = { - 'MEMFS': MEMFS, - 'WORKERFS': WORKERFS, - }; - },init:function(input, output, error) { - assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); - FS.init.initialized = true; - - FS.ensureErrnoError(); - - // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here - Module['stdin'] = input || Module['stdin']; - Module['stdout'] = output || Module['stdout']; - Module['stderr'] = error || Module['stderr']; - - FS.createStandardStreams(); - },quit:function() { - FS.init.initialized = false; - // force-flush all streams, so we get musl std streams printed out - var fflush = Module['_fflush']; - if (fflush) fflush(0); - // close all of our streams - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue; - } - FS.close(stream); - } - },getMode:function(canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode; - },joinPath:function(parts, forceRelative) { - var path = PATH.join.apply(null, parts); - if (forceRelative && path[0] == '/') path = path.substr(1); - return path; - },absolutePath:function(relative, base) { - return PATH_FS.resolve(base, relative); - },standardizePath:function(path) { - return PATH.normalize(path); - },findObject:function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object; - } else { - setErrNo(ret.error); - return null; - } - },analyzePath:function(path, dontResolveLastLink) { - // operate from within the context of the symlink's target - try { - var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - path = lookup.path; - } catch (e) { - } - var ret = { - isRoot: false, exists: false, error: 0, name: null, path: null, object: null, - parentExists: false, parentPath: null, parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { parent: true }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === '/'; - } catch (e) { - ret.error = e.errno; - }; - return ret; - },createFolder:function(parent, name, canRead, canWrite) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.mkdir(path, mode); - },createPath:function(parent, path, canRead, canWrite) { - parent = typeof parent === 'string' ? parent : FS.getPath(parent); - var parts = path.split('/').reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current); - } catch (e) { - // ignore EEXIST - } - parent = current; - } - return current; - },createFile:function(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:function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === 'string') { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr; - } - // make sure we can write to the file - FS.chmod(node, mode | 146); - var stream = FS.open(node, 'w'); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode); - } - return node; - },createDevice:function(parent, name, input, output) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - // Create a fake device that a set of stream ops to emulate - // the old behavior. - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false; - }, - close: function(stream) { - // flush any pending line data - if (output && output.buffer && output.buffer.length) { - output(10); - } - }, - read: function(stream, buffer, offset, length, pos /* ignored */) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input(); - } catch (e) { - throw new FS.ErrnoError(29); - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6); - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset+i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset+i]); - } catch (e) { - throw new FS.ErrnoError(29); - } - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - } - }); - return FS.mkdev(path, mode, dev); - },createLink:function(parent, name, target, canRead, canWrite) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - return FS.symlink(target, path); - },forceLoadFile:function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== 'undefined') { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); - } else if (read_) { - // Command-line. - try { - // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as - // read() will try to parse UTF8. - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length; - } catch (e) { - success = false; - } - } else { - throw new Error('Cannot load without read() or XMLHttpRequest.'); - } - if (!success) setErrNo(29); - return success; - },createLazyFile:function(parent, name, url, canRead, canWrite) { - // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. - /** @constructor */ - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = []; // Loaded chunks. Index is the chunk number - } - LazyUint8Array.prototype.get = /** @this{Object} */ function LazyUint8Array_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]; - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter; - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - // Find length - var xhr = new XMLHttpRequest(); - xhr.open('HEAD', url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - - var chunkSize = 1024*1024; // Chunk size in bytes - - if (!hasByteServing) chunkSize = datalength; - - // Function to get a range from the remote URL. - var doXHR = (function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); - - // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - - // Some hints to the browser that we want binary data. - if (typeof Uint8Array != 'undefined') 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 || [])); - } else { - return intArrayFromString(xhr.responseText || '', true); - } - }); - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum+1) * chunkSize - 1; // including this byte - end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end); - } - if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum]; - }); - - if (usesGzip || !datalength) { - // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length - chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); - } - - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true; - }; - 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: /** @this{Object} */ function() { - if(!this.lengthKnown) { - this.cacheLength(); - } - return this._length; - } - }, - chunkSize: { - get: /** @this{Object} */ function() { - if(!this.lengthKnown) { - this.cacheLength(); - } - return this._chunkSize; - } - } - }); - - var properties = { isDevice: false, contents: lazyArray }; - } else { - var properties = { isDevice: false, url: url }; - } - - var node = FS.createFile(parent, name, properties, canRead, canWrite); - // This is a total hack, but I want to get this lazy file code out of the - // core of MEMFS. If we want to keep this lazy file concept I feel it should - // be its own thin LAZYFS proxying calls to MEMFS. - if (properties.contents) { - node.contents = properties.contents; - } else if (properties.url) { - node.contents = null; - node.url = properties.url; - } - // Add a function that defers querying the file size until it is asked the first time. - Object.defineProperties(node, { - usedBytes: { - get: /** @this {FSNode} */ function() { return this.contents.length; } - } - }); - // override each stream op with one that tries to force load the lazy file first - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29); - } - return fn.apply(null, arguments); - }; - }); - // use a custom read function - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29); - } - var contents = stream.node.contents; - if (position >= contents.length) - return 0; - var size = Math.min(contents.length - position, length); - assert(size >= 0); - if (contents.slice) { // normal array - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i]; - } - } else { - for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR - buffer[offset + i] = contents.get(position + i); - } - } - return size; - }; - node.stream_ops = stream_ops; - return node; - },createPreloadedFile:function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); // XXX perhaps this method should move onto Browser? - // TODO we should allow people to just pass in a complete filename instead - // of parent and name being that we just join them anyways - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); - } - if (onload) onload(); - removeRunDependency(dep); - } - var handled = false; - Module['preloadPlugins'].forEach(function(plugin) { - if (handled) return; - if (plugin['canHandle'](fullname)) { - plugin['handle'](byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency(dep); - }); - handled = true; - } - }); - if (!handled) finish(byteArray); - } - addRunDependency(dep); - if (typeof url == 'string') { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray); - }, onerror); - } else { - processData(url); - } - },indexedDB:function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; - },DB_NAME:function() { - return 'EM_FS_' + window.location.pathname; - },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths, onload, onerror) { - onload = onload || function(){}; - onerror = onerror || function(){}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out('creating db'); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME); - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) onload(); else onerror(); - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; - putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - },loadFilesFromDB:function(paths, onload, onerror) { - onload = onload || function(){}; - onerror = onerror || function(){}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = onerror; // no database to load from - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); - } catch(e) { - onerror(e); - return; - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) onload(); else onerror(); - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path); - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish(); - }; - getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - }};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd, path) { - if (path[0] !== '/') { - // relative path - var dir; - if (dirfd === -100) { - dir = FS.cwd(); - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path; - } - path = PATH.join2(dir, path); - } - return 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))) { - // an error occurred while trying to look up the path; we should just report ENOTDIR - return -54; - } - throw e; - } - HEAP32[((buf)>>2)]=stat.dev; - HEAP32[(((buf)+(4))>>2)]=0; - HEAP32[(((buf)+(8))>>2)]=stat.ino; - HEAP32[(((buf)+(12))>>2)]=stat.mode; - HEAP32[(((buf)+(16))>>2)]=stat.nlink; - HEAP32[(((buf)+(20))>>2)]=stat.uid; - HEAP32[(((buf)+(24))>>2)]=stat.gid; - HEAP32[(((buf)+(28))>>2)]=stat.rdev; - HEAP32[(((buf)+(32))>>2)]=0; - (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)]=tempI64[0],HEAP32[(((buf)+(44))>>2)]=tempI64[1]); - HEAP32[(((buf)+(48))>>2)]=4096; - HEAP32[(((buf)+(52))>>2)]=stat.blocks; - HEAP32[(((buf)+(56))>>2)]=(stat.atime.getTime() / 1000)|0; - HEAP32[(((buf)+(60))>>2)]=0; - HEAP32[(((buf)+(64))>>2)]=(stat.mtime.getTime() / 1000)|0; - HEAP32[(((buf)+(68))>>2)]=0; - HEAP32[(((buf)+(72))>>2)]=(stat.ctime.getTime() / 1000)|0; - HEAP32[(((buf)+(76))>>2)]=0; - (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(80))>>2)]=tempI64[0],HEAP32[(((buf)+(84))>>2)]=tempI64[1]); - return 0; - },doMsync:function(addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags); - },doMkdir:function(path, mode) { - // remove a trailing slash, if one - /a/b/ has basename of '', but - // we want to create b in the context of this function - path = PATH.normalize(path); - if (path[path.length-1] === '/') path = path.substr(0, path.length-1); - FS.mkdir(path, mode, 0); - return 0; - },doMknod:function(path, mode, dev) { - // we don't want this in the JS API as it uses mknod to create all nodes. - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: return -28; - } - FS.mknod(path, mode, dev); - return 0; - },doReadlink:function(path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf+len]; - stringToUTF8(ret, buf, bufsize+1); - // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!) - // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write. - HEAP8[buf+len] = endChar; - - return len; - },doAccess:function(path, amode) { - if (amode & ~7) { - // need a valid mode - return -28; - } - var node; - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - if (!node) { - return -44; - } - var perms = ''; - if (amode & 4) perms += 'r'; - if (amode & 2) perms += 'w'; - if (amode & 1) perms += 'x'; - if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) { - return -2; - } - return 0; - },doDup:function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd; - },doReadv:function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[(((iov)+(i*8))>>2)]; - var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; - var curr = FS.read(stream, HEAP8,ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break; // nothing more to read - } - return ret; - },doWritev:function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[(((iov)+(i*8))>>2)]; - var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; - var curr = FS.write(stream, HEAP8,ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - } - return ret; - },varargs:undefined,get:function() { - assert(SYSCALLS.varargs != undefined); - SYSCALLS.varargs += 4; - var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; - return ret; - },getStr:function(ptr) { - var ret = UTF8ToString(ptr); - return ret; - },getStreamFromFD:function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream; - },get64:function(low, high) { - if (low >= 0) assert(high === 0); - else assert(high === -1); - return low; - }};function ___sys_fcntl64(fd, cmd, varargs) {SYSCALLS.varargs = varargs; - try { - - var stream = SYSCALLS.getStreamFromFD(fd); - switch (cmd) { - case 0: { - var arg = SYSCALLS.get(); - if (arg < 0) { - return -28; - } - var newStream; - newStream = FS.open(stream.path, stream.flags, 0, arg); - return newStream.fd; - } - case 1: - case 2: - return 0; // FD_CLOEXEC makes no sense for a single process. - case 3: - return stream.flags; - case 4: { - var arg = SYSCALLS.get(); - stream.flags |= arg; - return 0; - } - case 12: - /* case 12: Currently in musl F_GETLK64 has same value as F_GETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ { - - var arg = SYSCALLS.get(); - var offset = 0; - // We're always unlocked. - HEAP16[(((arg)+(offset))>>1)]=2; - return 0; - } - case 13: - case 14: - /* case 13: Currently in musl F_SETLK64 has same value as F_SETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ - /* case 14: Currently in musl F_SETLKW64 has same value as F_SETLKW, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ - - - return 0; // Pretend that the locking is successful. - case 16: - case 8: - return -28; // These are for sockets. We don't have them fully implemented yet. - case 9: - // musl trusts getown return values, due to a bug where they must be, as they overlap with errors. just return -1 here, so fnctl() returns that, and we set errno ourselves. - setErrNo(28); - return -1; - default: { - return -28; - } - } - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_getcwd(buf, size) {try { - - if (size === 0) return -28; - var cwd = FS.cwd(); - var cwdLengthInBytes = lengthBytesUTF8(cwd); - if (size < cwdLengthInBytes + 1) return -68; - stringToUTF8(cwd, buf, size); - return buf; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_getdents64(fd, dirp, count) {try { - - var stream = SYSCALLS.getStreamFromFD(fd) - if (!stream.getdents) { - stream.getdents = FS.readdir(stream.path); - } - - var struct_size = 280; - var pos = 0; - var off = FS.llseek(stream, 0, 1); - - var idx = Math.floor(off / struct_size); - - while (idx < stream.getdents.length && pos + struct_size <= count) { - var id; - var type; - var name = stream.getdents[idx]; - if (name[0] === '.') { - id = 1; - type = 4; // DT_DIR - } else { - var child = FS.lookupNode(stream.node, name); - id = child.id; - type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device. - FS.isDir(child.mode) ? 4 : // DT_DIR, directory. - FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link. - 8; // DT_REG, regular file. - } - (tempI64 = [id>>>0,(tempDouble=id,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>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.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>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; - stringToUTF8(name, dirp + pos + 19, 256); - pos += struct_size; - idx += 1; - } - FS.llseek(stream, idx * struct_size, 0); - return pos; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_ioctl(fd, op, varargs) {SYSCALLS.varargs = varargs; - try { - - var stream = SYSCALLS.getStreamFromFD(fd); - switch (op) { - case 21509: - case 21505: { - if (!stream.tty) return -59; - return 0; - } - case 21510: - case 21511: - case 21512: - case 21506: - case 21507: - case 21508: { - if (!stream.tty) return -59; - return 0; // no-op, not actually adjusting terminal settings - } - case 21519: { - if (!stream.tty) return -59; - var argp = SYSCALLS.get(); - HEAP32[((argp)>>2)]=0; - return 0; - } - case 21520: { - if (!stream.tty) return -59; - return -28; // not supported - } - case 21531: { - var argp = SYSCALLS.get(); - return FS.ioctl(stream, op, argp); - } - case 21523: { - // TODO: in theory we should write to the winsize struct that gets - // passed in, but for now musl doesn't read anything on it - if (!stream.tty) return -59; - return 0; - } - case 21524: { - // TODO: technically, this ioctl call should change the window size. - // but, since emscripten doesn't have any concept of a terminal window - // yet, we'll just silently throw it away as we do TIOCGWINSZ - if (!stream.tty) return -59; - return 0; - } - default: abort('bad ioctl syscall ' + op); - } - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_open(path, flags, varargs) {SYSCALLS.varargs = varargs; - try { - - var pathname = SYSCALLS.getStr(path); - var mode = SYSCALLS.get(); - var stream = FS.open(pathname, flags, mode); - return stream.fd; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_stat64(path, buf) {try { - - path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.stat, path, buf); - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function ___sys_unlink(path) {try { - - path = SYSCALLS.getStr(path); - FS.unlink(path); - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - - function _emscripten_get_sbrk_ptr() { - return 27008; - } - - - function _longjmp(env, value) { - _setThrew(env, value || 1); - throw 'longjmp'; - }function _emscripten_longjmp(env, value) { - _longjmp(env, value); - } - - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num); - } - - - function _emscripten_get_heap_size() { - return HEAPU8.length; - } - - function abortOnCannotGrowMemory(requestedSize) { - abort('Cannot enlarge memory arrays to size ' + requestedSize + ' bytes (OOM). Either (1) compile with -s INITIAL_MEMORY=X with X higher than the current value ' + HEAP8.length + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 '); - }function _emscripten_resize_heap(requestedSize) { - requestedSize = requestedSize >>> 0; - abortOnCannotGrowMemory(requestedSize); - } - - function _exit(status) { - // void _exit(int status); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html - exit(status); - } - - function _fd_close(fd) {try { - - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - - function _fd_read(fd, iov, iovcnt, pnum) {try { - - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[((pnum)>>2)]=num - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {try { - - - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 0x100000000; // 2^32 - // use an unsigned operator on low and shift high by 32-bits - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - - var DOUBLE_LIMIT = 0x20000000000000; // 2^53 - // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61; - } - - FS.llseek(stream, offset, whence); - (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)]=tempI64[0],HEAP32[(((newOffset)+(4))>>2)]=tempI64[1]); - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - - function _fd_write(fd, iov, iovcnt, pnum) {try { - - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[((pnum)>>2)]=num - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - - function _getTempRet0() { - return (getTempRet0() | 0); - } - - - var ___tm_current=27024; - - - var ___tm_timezone=(stringToUTF8("GMT", 27072, 4), 27072); - - function _tzset() { - // TODO: Use (malleable) environment variables instead of system settings. - if (_tzset.called) return; - _tzset.called = true; - - // timezone is specified as seconds west of UTC ("The external variable - // `timezone` shall be set to the difference, in seconds, between - // Coordinated Universal Time (UTC) and local standard time."), the same - // as returned by getTimezoneOffset(). - // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html - HEAP32[((__get_timezone())>>2)]=(new Date()).getTimezoneOffset() * 60; - - var currentYear = new Date().getFullYear(); - var winter = new Date(currentYear, 0, 1); - var summer = new Date(currentYear, 6, 1); - HEAP32[((__get_daylight())>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset()); - - 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 = allocateUTF8(winterName); - var summerNamePtr = allocateUTF8(summerName); - if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) { - // Northern hemisphere - HEAP32[((__get_tzname())>>2)]=winterNamePtr; - HEAP32[(((__get_tzname())+(4))>>2)]=summerNamePtr; - } else { - HEAP32[((__get_tzname())>>2)]=summerNamePtr; - HEAP32[(((__get_tzname())+(4))>>2)]=winterNamePtr; - } - }function _localtime_r(time, tmPtr) { - _tzset(); - var date = new Date(HEAP32[((time)>>2)]*1000); - 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 start = new Date(date.getFullYear(), 0, 1); - var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0; - HEAP32[(((tmPtr)+(28))>>2)]=yday; - HEAP32[(((tmPtr)+(36))>>2)]=-(date.getTimezoneOffset() * 60); - - // Attention: DST is in December in South, and some regions don't have DST at all. - 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; - - var zonePtr = HEAP32[(((__get_tzname())+(dst ? 4 : 0))>>2)]; - HEAP32[(((tmPtr)+(40))>>2)]=zonePtr; - - return tmPtr; - }function _localtime(time) { - return _localtime_r(time, ___tm_current); - } - - function _setTempRet0($i) { - setTempRet0(($i) | 0); - } - - function _time(ptr) { - var ret = (Date.now()/1000)|0; - if (ptr) { - HEAP32[((ptr)>>2)]=ret; - } - return ret; - } - -var FSNode = /** @constructor */ function(parent, name, mode, rdev) { - if (!parent) { - parent = this; // root node sets parent to itself - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev; - }; - var readMode = 292/*292*/ | 73/*73*/; - var writeMode = 146/*146*/; - Object.defineProperties(FSNode.prototype, { - read: { - get: /** @this{FSNode} */function() { - return (this.mode & readMode) === readMode; - }, - set: /** @this{FSNode} */function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode; - } - }, - write: { - get: /** @this{FSNode} */function() { - return (this.mode & writeMode) === writeMode; - }, - set: /** @this{FSNode} */function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode; - } - }, - isFolder: { - get: /** @this{FSNode} */function() { - return FS.isDir(this.mode); - } - }, - isDevice: { - get: /** @this{FSNode} */function() { - return FS.isChrdev(this.mode); - } - } - }); - FS.FSNode = FSNode; - FS.staticInit();Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;Module["FS_unlink"] = FS.unlink;; -var ASSERTIONS = true; - - - -/** @type {function(string, boolean=, number=)} */ -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array; -} - -function intArrayToString(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - var chr = array[i]; - if (chr > 0xFF) { - if (ASSERTIONS) { - assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); - } - chr &= 0xFF; - } - ret.push(String.fromCharCode(chr)); - } - return ret.join(''); -} - - -var asmGlobalArg = {}; -var asmLibraryArg = { "__handle_stack_overflow": ___handle_stack_overflow, "__sys_fcntl64": ___sys_fcntl64, "__sys_getcwd": ___sys_getcwd, "__sys_getdents64": ___sys_getdents64, "__sys_ioctl": ___sys_ioctl, "__sys_open": ___sys_open, "__sys_stat64": ___sys_stat64, "__sys_unlink": ___sys_unlink, "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, "emscripten_longjmp": _emscripten_longjmp, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "exit": _exit, "fd_close": _fd_close, "fd_read": _fd_read, "fd_seek": _fd_seek, "fd_write": _fd_write, "getTempRet0": _getTempRet0, "invoke_i": invoke_i, "invoke_ii": invoke_ii, "invoke_iii": invoke_iii, "invoke_iiii": invoke_iiii, "invoke_vii": invoke_vii, "invoke_viiii": invoke_viiii, "invoke_viiiii": invoke_viiiii, "localtime": _localtime, "memory": wasmMemory, "setTempRet0": _setTempRet0, "table": wasmTable, "time": _time }; -var asm = createWasm(); -/** @type {function(...*):?} */ -var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors"); - -/** @type {function(...*):?} */ -var _free = Module["_free"] = createExportWrapper("free"); - -/** @type {function(...*):?} */ -var _main = Module["_main"] = createExportWrapper("main"); - -/** @type {function(...*):?} */ -var _malloc = Module["_malloc"] = createExportWrapper("malloc"); - -/** @type {function(...*):?} */ -var _testSetjmp = Module["_testSetjmp"] = createExportWrapper("testSetjmp"); - -/** @type {function(...*):?} */ -var _saveSetjmp = Module["_saveSetjmp"] = createExportWrapper("saveSetjmp"); - -/** @type {function(...*):?} */ -var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location"); - -/** @type {function(...*):?} */ -var _fflush = Module["_fflush"] = createExportWrapper("fflush"); - -/** @type {function(...*):?} */ -var _realloc = Module["_realloc"] = createExportWrapper("realloc"); - -/** @type {function(...*):?} */ -var __get_tzname = Module["__get_tzname"] = createExportWrapper("_get_tzname"); - -/** @type {function(...*):?} */ -var __get_daylight = Module["__get_daylight"] = createExportWrapper("_get_daylight"); - -/** @type {function(...*):?} */ -var __get_timezone = Module["__get_timezone"] = createExportWrapper("_get_timezone"); - -/** @type {function(...*):?} */ -var _setThrew = Module["_setThrew"] = createExportWrapper("setThrew"); - -/** @type {function(...*):?} */ -var stackSave = Module["stackSave"] = createExportWrapper("stackSave"); - -/** @type {function(...*):?} */ -var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore"); - -/** @type {function(...*):?} */ -var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc"); - -/** @type {function(...*):?} */ -var dynCall_vii = Module["dynCall_vii"] = createExportWrapper("dynCall_vii"); - -/** @type {function(...*):?} */ -var dynCall_viiii = Module["dynCall_viiii"] = createExportWrapper("dynCall_viiii"); - -/** @type {function(...*):?} */ -var dynCall_viiiii = Module["dynCall_viiiii"] = createExportWrapper("dynCall_viiiii"); - -/** @type {function(...*):?} */ -var dynCall_i = Module["dynCall_i"] = createExportWrapper("dynCall_i"); - -/** @type {function(...*):?} */ -var dynCall_ii = Module["dynCall_ii"] = createExportWrapper("dynCall_ii"); - -/** @type {function(...*):?} */ -var dynCall_iii = Module["dynCall_iii"] = createExportWrapper("dynCall_iii"); - -/** @type {function(...*):?} */ -var dynCall_iiii = Module["dynCall_iiii"] = createExportWrapper("dynCall_iiii"); - -/** @type {function(...*):?} */ -var ___set_stack_limit = Module["___set_stack_limit"] = createExportWrapper("__set_stack_limit"); - -/** @type {function(...*):?} */ -var __growWasmMemory = Module["__growWasmMemory"] = createExportWrapper("__growWasmMemory"); - -/** @type {function(...*):?} */ -var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji"); - - -function invoke_iiii(index,a1,a2,a3) { - var sp = stackSave(); - try { - return dynCall_iiii(index,a1,a2,a3); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_iii(index,a1,a2) { - var sp = stackSave(); - try { - return dynCall_iii(index,a1,a2); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_viiiii(index,a1,a2,a3,a4,a5) { - var sp = stackSave(); - try { - dynCall_viiiii(index,a1,a2,a3,a4,a5); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_viiii(index,a1,a2,a3,a4) { - var sp = stackSave(); - try { - dynCall_viiii(index,a1,a2,a3,a4); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_vii(index,a1,a2) { - var sp = stackSave(); - try { - dynCall_vii(index,a1,a2); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_i(index) { - var sp = stackSave(); - try { - return dynCall_i(index); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - -function invoke_ii(index,a1) { - var sp = stackSave(); - try { - return dynCall_ii(index,a1); - } catch(e) { - stackRestore(sp); - if (e !== e+0 && e !== 'longjmp') throw e; - _setThrew(1, 0); - } -} - - - - -// === Auto-generated postamble setup entry stuff === - - -if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString")) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString")) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ccall")) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "cwrap")) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setValue")) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getValue")) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocate")) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["getMemory"] = getMemory; -if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString")) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString")) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array")) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8")) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8")) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun")) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnInit")) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain")) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnExit")) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun")) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory")) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory")) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory")) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["addRunDependency"] = addRunDependency; -Module["removeRunDependency"] = removeRunDependency; -Module["FS_createFolder"] = FS.createFolder; -Module["FS_createPath"] = FS.createPath; -Module["FS_createDataFile"] = FS.createDataFile; -Module["FS_createPreloadedFile"] = FS.createPreloadedFile; -Module["FS_createLazyFile"] = FS.createLazyFile; -Module["FS_createLink"] = FS.createLink; -Module["FS_createDevice"] = FS.createDevice; -Module["FS_unlink"] = FS.unlink; -if (!Object.getOwnPropertyDescriptor(Module, "dynamicAlloc")) Module["dynamicAlloc"] = function() { abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "loadDynamicLibrary")) Module["loadDynamicLibrary"] = function() { abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "loadWebAssemblyModule")) Module["loadWebAssemblyModule"] = function() { abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getLEB")) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables")) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables")) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions")) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addFunction")) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "removeFunction")) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint")) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "makeBigInt")) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting")) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "print")) Module["print"] = function() { abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "printErr")) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0")) Module["getTempRet0"] = function() { abort("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0")) Module["setTempRet0"] = function() { abort("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["callMain"] = callMain; -if (!Object.getOwnPropertyDescriptor(Module, "abort")) Module["abort"] = function() { abort("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8")) Module["stringToNewUTF8"] = function() { abort("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "abortOnCannotGrowMemory")) Module["abortOnCannotGrowMemory"] = function() { abort("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")) Module["emscripten_realloc_buffer"] = function() { abort("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ENV")) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES")) Module["ERRNO_CODES"] = function() { abort("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES")) Module["ERRNO_MESSAGES"] = function() { abort("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setErrNo")) Module["setErrNo"] = function() { abort("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "DNS")) Module["DNS"] = function() { abort("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES")) Module["GAI_ERRNO_MESSAGES"] = function() { abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Protocols")) Module["Protocols"] = function() { abort("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Sockets")) Module["Sockets"] = function() { abort("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE")) Module["UNWIND_CACHE"] = function() { abort("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs")) Module["readAsmConstArgs"] = function() { abort("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q")) Module["jstoi_q"] = function() { abort("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s")) Module["jstoi_s"] = function() { abort("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "abortStackOverflow")) Module["abortStackOverflow"] = function() { abort("'abortStackOverflow' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative")) Module["reallyNegative"] = function() { abort("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "formatString")) Module["formatString"] = function() { abort("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PATH")) Module["PATH"] = function() { abort("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS")) Module["PATH_FS"] = function() { abort("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS")) Module["SYSCALLS"] = function() { abort("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2")) Module["syscallMmap2"] = function() { abort("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap")) Module["syscallMunmap"] = function() { abort("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "JSEvents")) Module["JSEvents"] = function() { abort("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets")) Module["specialHTMLTargets"] = function() { abort("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "demangle")) Module["demangle"] = function() { abort("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "demangleAll")) Module["demangleAll"] = function() { abort("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace")) Module["jsStackTrace"] = function() { abort("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings")) Module["getEnvStrings"] = function() { abort("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock")) Module["checkWasiClock"] = function() { abort("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64")) Module["writeI53ToI64"] = function() { abort("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped")) Module["writeI53ToI64Clamped"] = function() { abort("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling")) Module["writeI53ToI64Signaling"] = function() { abort("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped")) Module["writeI53ToU64Clamped"] = function() { abort("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling")) Module["writeI53ToU64Signaling"] = function() { abort("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64")) Module["readI53FromI64"] = function() { abort("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64")) Module["readI53FromU64"] = function() { abort("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53")) Module["convertI32PairToI53"] = function() { abort("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53")) Module["convertU32PairToI53"] = function() { abort("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Browser")) Module["Browser"] = function() { abort("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["FS"] = FS; -if (!Object.getOwnPropertyDescriptor(Module, "MEMFS")) Module["MEMFS"] = function() { abort("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "TTY")) Module["TTY"] = function() { abort("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PIPEFS")) Module["PIPEFS"] = function() { abort("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SOCKFS")) Module["SOCKFS"] = function() { abort("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GL")) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet")) Module["emscriptenWebGLGet"] = function() { abort("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetTexPixelData")) Module["emscriptenWebGLGetTexPixelData"] = function() { abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")) Module["emscriptenWebGLGetUniform"] = function() { abort("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetVertexAttrib")) Module["emscriptenWebGLGetVertexAttrib"] = function() { abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "AL")) Module["AL"] = function() { abort("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode")) Module["SDL_unicode"] = function() { abort("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext")) Module["SDL_ttfContext"] = function() { abort("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio")) Module["SDL_audio"] = function() { abort("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL")) Module["SDL"] = function() { abort("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx")) Module["SDL_gfx"] = function() { abort("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLUT")) Module["GLUT"] = function() { abort("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "EGL")) Module["EGL"] = function() { abort("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window")) Module["GLFW_Window"] = function() { abort("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLFW")) Module["GLFW"] = function() { abort("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLEW")) Module["GLEW"] = function() { abort("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "IDBStore")) Module["IDBStore"] = function() { abort("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError")) Module["runAndAbortIfError"] = function() { abort("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "WORKERFS")) Module["WORKERFS"] = function() { abort("'WORKERFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "warnOnce")) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackSave")) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackRestore")) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc")) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString")) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii")) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString")) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16")) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16")) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString")) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32")) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32")) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8")) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack")) Module["allocateUTF8OnStack"] = function() { abort("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["writeStackCookie"] = writeStackCookie; -Module["checkStackCookie"] = checkStackCookie;if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL")) Object.defineProperty(Module, "ALLOC_NORMAL", { configurable: true, get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); -if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK")) Object.defineProperty(Module, "ALLOC_STACK", { configurable: true, get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); -if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_DYNAMIC")) Object.defineProperty(Module, "ALLOC_DYNAMIC", { configurable: true, get: function() { abort("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); -if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NONE")) Object.defineProperty(Module, "ALLOC_NONE", { configurable: true, get: function() { abort("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); - - - -var calledRun; - -/** - * @constructor - * @this {ExitStatus} - */ -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; -} - -var calledMain = false; - - -dependenciesFulfilled = function runCaller() { - // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled -}; - -function callMain(args) { - assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); - assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); - - var entryFunction = Module['_main']; - - - args = args || []; - - var argc = args.length+1; - var argv = stackAlloc((argc + 1) * 4); - HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); - for (var i = 1; i < argc; i++) { - HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]); - } - HEAP32[(argv >> 2) + argc] = 0; - - try { - - Module['___set_stack_limit'](STACK_MAX); - - var ret = entryFunction(argc, argv); - - - // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as execution is asynchronously handed - // off to a pthread. - // if we're not running an evented main loop, it's time to exit - exit(ret, /* implicit = */ true); - } - catch(e) { - if (e instanceof ExitStatus) { - // exit() throws this once it's done to make sure execution - // has been stopped completely - return; - } else if (e == 'unwind') { - // running an evented main loop, don't immediately exit - noExitRuntime = true; - return; - } else { - var toLog = e; - if (e && typeof e === 'object' && e.stack) { - toLog = [e, e.stack]; - } - err('exception thrown: ' + toLog); - quit_(1, e); - } - } finally { - calledMain = true; - } -} - - - - -/** @type {function(Array=)} */ -function run(args) { - args = args || arguments_; - - if (runDependencies > 0) { - return; - } - - writeStackCookie(); - - preRun(); - - if (runDependencies > 0) return; // a preRun added a dependency, run will be called later - - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - if (calledRun) return; - calledRun = true; - Module['calledRun'] = true; - - if (ABORT) return; - - initRuntime(); - - preMain(); - - readyPromiseResolve(Module); - if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); - - if (shouldRunNow) callMain(args); - - postRun(); - } - - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(function() { - setTimeout(function() { - Module['setStatus'](''); - }, 1); - doRun(); - }, 1); - } else - { - doRun(); - } - checkStackCookie(); -} -Module['run'] = run; - -function checkUnflushedContent() { - // Compiler settings do not allow exiting the runtime, so flushing - // the streams is not possible. but in ASSERTIONS mode we check - // if there was something to flush, and if so tell the user they - // should request that the runtime be exitable. - // Normally we would not even include flush() at all, but in ASSERTIONS - // builds we do so just for this check, and here we see if there is any - // content to flush, that is, we check if there would have been - // something a non-ASSERTIONS build would have not seen. - // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 - // mode (which has its own special function for this; otherwise, all - // the code is inside libc) - var print = out; - var printErr = err; - var has = false; - out = err = function(x) { - has = true; - } - try { // it doesn't matter if it fails - var flush = Module['_fflush']; - if (flush) flush(0); - // also flush in the JS FS layer - ['stdout', 'stderr'].forEach(function(name) { - var info = FS.analyzePath('/dev/' + name); - if (!info) return; - var stream = info.object; - var rdev = stream.rdev; - var tty = TTY.ttys[rdev]; - if (tty && tty.output && tty.output.length) { - has = true; - } - }); - } catch(e) {} - out = print; - err = printErr; - if (has) { - warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.'); - } -} - -/** @param {boolean|number=} implicit */ -function exit(status, implicit) { - checkUnflushedContent(); - - // if this is just main exit-ing implicitly, and the status is 0, then we - // don't need to do anything here and can just leave. if the status is - // non-zero, though, then we need to report it. - // (we may have warned about this earlier, if a situation justifies doing so) - if (implicit && noExitRuntime && status === 0) { - return; - } - - if (noExitRuntime) { - // if exit() was called, we may warn the user if the runtime isn't actually being shut down - if (!implicit) { - var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)'; - readyPromiseReject(msg); - } - } else { - - ABORT = true; - EXITSTATUS = status; - - exitRuntime(); - - if (Module['onExit']) Module['onExit'](status); - } - - quit_(status, new ExitStatus(status)); -} - -if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].pop()(); - } -} - -// shouldRunNow refers to calling main(), not run(). -var shouldRunNow = true; - -if (Module['noInitialRun']) shouldRunNow = false; - - - noExitRuntime = true; - -run(); - - - - - - -// {{MODULE_ADDITIONS}} - - - - - - return merlin32;//.ready -} -); -})(); -if (typeof exports === 'object' && typeof module === 'object') - module.exports = merlin32; - else if (typeof define === 'function' && define['amd']) - define([], function() { return merlin32; }); - else if (typeof exports === 'object') - exports["merlin32"] = merlin32; - \ No newline at end of file diff --git a/src/worker/wasm/merlin32.wasm b/src/worker/wasm/merlin32.wasm index 8aa0bb159b89fa1911467bb7f1cf8f999317f338..05f0cc8661eb0aed13061d8e9537f5401e66ee10 100644 GIT binary patch literal 497492 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 z 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 B4jljh literal 191532 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%0A7vBVOkiI4fOkBsWE4TG07a>V=94JeO&gcd0a3q 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%0D|9uVg&Pn79M0{R1>z63*{yxWrAwO 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 diff --git a/src/worker/wasm/nesasm.js b/src/worker/wasm/nesasm.js deleted file mode 100644 index f996968d..00000000 --- a/src/worker/wasm/nesasm.js +++ /dev/null @@ -1,21 +0,0 @@ - -var nesasm = (function() { - var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; - return ( -function(nesasm) { - nesasm = nesasm || {}; - -var Module=typeof nesasm!=="undefined"?nesasm:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_HAS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_HAS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_NODE=ENVIRONMENT_HAS_NODE&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;read_=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var jsCallStartIndex=1;var functionPointers=new Array(0);function convertJsFunctionToWasm(func,sig){var typeSection=[1,0,1,96];var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={"i":127,"j":126,"f":125,"d":124};typeSection.push(sigParam.length);for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=2192560,DYNAMIC_BASE=7435440,DYNAMICTOP_PTR=2192528;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="nesasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){return WebAssembly.instantiateStreaming(response,info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":90,"maximum":90,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var tempDouble;var tempI64;__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});var tempDoublePtr=2192544;var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["LANG"]=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}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}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};transaction.oncomplete=function(e){if(!errored){callback(null)}};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_HAS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.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};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.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)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}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=function(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);if(typeof Uint8Array!="undefined")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(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(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;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};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}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-22}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-22;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-22}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-13}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(9);return stream},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-75}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-22}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-22;case 9:___setErrNo(22);return-1;default:{return-22}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-25;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-25;return 0}case 21519:{if(!stream.tty)return-25;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-25;return-22}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-25;return 0}case 21524:{if(!stream.tty)return-25;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_get_heap_size(){return HEAP8.length}function _exit(status){exit(status)}function _getenv(name){if(name===0)return 0;name=UTF8ToString(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _system(command){___setErrNo(11);return-1}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_HAS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"abort":abort,"setTempRet0":setTempRet0,"getTempRet0":getTempRet0,"___buildEnvironment":___buildEnvironment,"___lock":___lock,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall145":___syscall145,"___syscall146":___syscall146,"___syscall221":___syscall221,"___syscall5":___syscall5,"___syscall54":___syscall54,"___syscall6":___syscall6,"___unlock":___unlock,"_emscripten_get_heap_size":_emscripten_get_heap_size,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_emscripten_resize_heap":_emscripten_resize_heap,"_exit":_exit,"_getenv":_getenv,"_system":_system,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"tempDoublePtr":tempDoublePtr,"DYNAMICTOP_PTR":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=function(){return Module["asm"]["___emscripten_environ_constructor"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["___errno_location"].apply(null,arguments)};var __get_environ=Module["__get_environ"]=function(){return Module["asm"]["__get_environ"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["_free"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["_main"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["_malloc"].apply(null,arguments)};var _memcpy=Module["_memcpy"]=function(){return Module["asm"]["_memcpy"].apply(null,arguments)};var _memset=Module["_memset"]=function(){return Module["asm"]["_memset"].apply(null,arguments)};var _sbrk=Module["_sbrk"]=function(){return Module["asm"]["_sbrk"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["establishStackSpace"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["stackAlloc"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["stackRestore"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["stackSave"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return Module["asm"]["dynCall_iidiiii"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return Module["asm"]["dynCall_iiiii"].apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return Module["asm"]["dynCall_jiji"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS"]=FS;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["then"]=function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); - - - return nesasm -} -); -})(); -if (typeof exports === 'object' && typeof module === 'object') - module.exports = nesasm; - else if (typeof define === 'function' && define['amd']) - define([], function() { return nesasm; }); - else if (typeof exports === 'object') - exports["nesasm"] = nesasm; - \ No newline at end of file diff --git a/src/worker/wasm/nesasm.wasm b/src/worker/wasm/nesasm.wasm index d996db41c3ea22a6d0ed5180871d5d41221f8860..730fd2966f99b5ff7090869a21b8d0448d2a9405 100644 GIT binary patch literal 376620 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 b{o6+axJ`kovOvDxpVQwPtC(1o58nR+#yMx2 literal 109191 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 diff --git a/test/cli/testworker.js b/test/cli/testworker.js index 856738fb..77c23bb3 100644 --- a/test/cli/testworker.js +++ b/test/cli/testworker.js @@ -345,6 +345,88 @@ describe('Worker', function() { it('should compile CC65 flags', function(done) { compile('cc65', '#define CC65_FLAGS -Or,-g,-j\nint main() {\nint x=1;\nreturn x+2;\n}', 'apple2', done, 416+58, 3); }); + + // merlin32 is driven by a .lnk link file that names the sources to assemble + var MERLIN32_LNK = ' TYP $06\n' + + ' DSK main.bin\n' + + ' ORG $2000\n' + + ' ASM hello.asm\n'; + function merlin32Msgs(asm) { + return [{ + updates: [ + {path:'main.lnk', data:MERLIN32_LNK}, + {path:'hello.asm', data:asm} + ], + buildsteps: [ + {path:'main.lnk', platform:'apple2', tool:'merlin32', mainfile:true, + files:['main.lnk', 'hello.asm']} + ] + }]; + } + it('should assemble Merlin32', function(done) { + var asm = ' ORG $2000\n' + + 'START LDA #$C1\n' + + ' STA $0400\n' + + ' RTS\n'; + doBuild(merlin32Msgs(asm), function(err, msg) { + if (err) return done(err); + try { + // LDA #$C1 / STA $0400 / RTS + assert.deepEqual(Array.from(msg.output), [0xa9, 0xc1, 0x8d, 0x00, 0x04, 0x60]); + var lst = msg.listings['hello.asm']; + assert.equal(lst.lines[1].line, 2); + assert.equal(lst.lines[1].offset, 0x2000); + assert.equal(lst.lines[2].offset, 0x2002); + done(); + } catch (e) { done(e); } + }, 6, [5], 0); + }); + it('should NOT assemble Merlin32 (syntax error)', function(done) { + var asm = ' ORG $2000\n' + + 'START LDA #$C1\n' + + ' BOGUS $0400\n' + + ' RTS\n'; + doBuild(merlin32Msgs(asm), function(err, msg) { + if (err) return done(err); + try { + assert.equal(msg.errors[0].line, 3); + assert.equal(msg.errors[0].path, 'hello.asm'); + done(); + } catch (e) { done(e); } + }, 0, 0, 1, {ignoreErrorPath:true}); + }); + + // nesasm needs the iNES header directives and a bank/org before any code + var NESASM_HEADER = '\t.inesprg 1\n\t.ineschr 0\n\t.inesmap 0\n\t.inesmir 0\n'; + it('should assemble NESASM', function(done) { + var asm = NESASM_HEADER + + '\t.list\n\t.bank 0\n\t.org $8000\n' + + 'Start:\n\tlda #$c1\n\tsta $0400\n\trts\n' + + '\t.bank 1\n\t.org $fffa\n\t.dw 0,Start,0\n'; + compile('nesasm', asm, 'nes', function(err, msg) { + if (err) return done(err); + try { + assert.deepEqual(Array.from(msg.output.slice(0,4)), [0x4e, 0x45, 0x53, 0x1a]); // "NES\x1a" + assert.equal(msg.symbolmap['Start'], 0x8000); + var lst = msg.listings['src.lst']; + assert.equal(lst.lines[1].offset, 0x8000); + assert.equal(lst.lines[1].insns, 'A9 C1'); + assert.equal(lst.lines[2].offset, 0x8002); + done(); + } catch (e) { done(e); } + }, 16400, [5], 0); + }); + it('should NOT assemble NESASM (unknown instruction)', function(done) { + var asm = NESASM_HEADER + '\t.bank 0\n\t.org $8000\n\tbogus #$c1\n\trts\n'; + compile('nesasm', asm, 'nes', function(err, msg) { + if (err) return done(err); + try { + assert.equal(msg.errors[0].line, 7); + assert.ok(/Unknown instruction/.test(msg.errors[0].msg)); + done(); + } catch (e) { done(e); } + }, 0, 0, 1); + }); /* it('should compile gameboy', function(done) { compile('sdcc', '//#link "gb/sfr.sgb"\n//#link "gb/crt0.sgb"\nvoid main(void){}\n', 'gb', done, 416+58, 3); diff --git a/test/unit/testtoolmeta.ts b/test/unit/testtoolmeta.ts index 0d1c4ce8..80ef5691 100644 --- a/test/unit/testtoolmeta.ts +++ b/test/unit/testtoolmeta.ts @@ -70,7 +70,7 @@ describe('Tool metadata registry', function () { it('covers the previously-scattered editor styles and help URLs', function () { // spot-check ids that used to live in TOOL_TO_SOURCE_STYLE / TOOL_TO_HELPURL for (let id of ['dasm', 'acme', 'cc65', 'ca65', 'sdcc', 'cmoc', 'zmac', - 'nesasm', 'bataribasic', 'fastbasic', 'wiz', 'silice', 'ecs', 'dialog']) { + 'nesasm', 'merlin32', 'bataribasic', 'fastbasic', 'wiz', 'silice', 'ecs', 'dialog']) { assert.ok(TOOL_META[id], `expected tool '${id}' in registry`); } assert.strictEqual(TOOL_META['cc65'].editorStyle, 'text/x-csrc'); @@ -95,6 +95,8 @@ describe('Tool metadata registry', function () { assert.deepStrictEqual(deps('!src "foo.acme"\n', 'acme'), ['foo.acme']); assert.deepStrictEqual(deps('%% #include "foo.dg"\n', 'dialog'), ['foo.dg']); assert.deepStrictEqual(deps(' USE foo.xasm\n', 'xasm6809'), ['foo.xasm']); + // merlin32 link files name their sources with ASM + assert.deepStrictEqual(deps(' ASM hello.asm\n', 'merlin32'), ['hello.asm']); // ecs uses both its own import and the shared .include directive assert.deepStrictEqual(deps('.include "vcs.h"\nimport "lib.ecs"\n', 'ecs'), ['vcs.h', 'lib.ecs']);