mirror of
https://github.com/sanyuered/WeChat-MiniProgram-AR-WASM.git
synced 2025-12-24 13:28:12 +08:00
9686 lines
438 KiB
JavaScript
9686 lines
438 KiB
JavaScript
(function (root, factory) {
|
||
if (typeof define === 'function' && define.amd) {
|
||
// AMD. Register as an anonymous module.
|
||
define(function () {
|
||
return (root.cv = factory());
|
||
});
|
||
} else if (typeof module === 'object' && module.exports) {
|
||
// Node. Does not work with strict CommonJS, but
|
||
// only CommonJS-like environments that support module.exports,
|
||
// like Node.
|
||
module.exports = factory();
|
||
} else if (typeof window === 'object') {
|
||
// Browser globals
|
||
root.cv = factory();
|
||
} else if (typeof importScripts === 'function') {
|
||
// Web worker
|
||
root.cv = factory();
|
||
} else {
|
||
// Other shells, e.g. d8
|
||
root.cv = factory();
|
||
}
|
||
}(this, function () {
|
||
const IsWechat = false;
|
||
var cv = (function () {
|
||
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
|
||
return (function (cv) {
|
||
cv = cv || {};
|
||
|
||
// IsWechat
|
||
var wasmBinaryFile;
|
||
if (IsWechat) {
|
||
wasmBinaryFile = global.wasm_url
|
||
} else {
|
||
wasmBinaryFile = window.wasm_url;
|
||
}
|
||
|
||
var Module = typeof cv !== "undefined" ? cv : {};
|
||
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
|
||
};
|
||
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)
|
||
}
|
||
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;
|
||
ret = tryParseAsDataURI(filename);
|
||
if (!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) {
|
||
thisProgram = process["argv"][1].replace(/\\/g, "/")
|
||
}
|
||
arguments_ = process["argv"].slice(2);
|
||
process["on"]("uncaughtException", function (ex) {
|
||
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 (!IsWechat && ENVIRONMENT_IS_SHELL) {
|
||
if (typeof read != "undefined") {
|
||
read_ = function shell_read(f) {
|
||
var data = tryParseAsDataURI(f);
|
||
if (data) {
|
||
return intArrayToString(data)
|
||
}
|
||
return read(f)
|
||
}
|
||
}
|
||
readBinary = function readBinary(f) {
|
||
var data;
|
||
data = tryParseAsDataURI(f);
|
||
if (data) {
|
||
return 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") {
|
||
if (typeof console === "undefined")
|
||
console = {};
|
||
console.log = print;
|
||
console.warn = console.error = typeof printErr !== "undefined" ? printErr : print
|
||
}
|
||
// } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
||
} else if (IsWechat || ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
||
|
||
if (ENVIRONMENT_IS_WORKER) {
|
||
scriptDirectory = self.location.href
|
||
} else if (!IsWechat && 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) {
|
||
try {
|
||
var xhr = new XMLHttpRequest;
|
||
xhr.open("GET", url, false);
|
||
xhr.send(null);
|
||
return xhr.responseText
|
||
} catch (err) {
|
||
var data = tryParseAsDataURI(url);
|
||
if (data) {
|
||
return intArrayToString(data)
|
||
}
|
||
throw err
|
||
}
|
||
}
|
||
;
|
||
if (ENVIRONMENT_IS_WORKER) {
|
||
readBinary = function readBinary(url) {
|
||
try {
|
||
var xhr = new XMLHttpRequest;
|
||
xhr.open("GET", url, false);
|
||
xhr.responseType = "arraybuffer";
|
||
xhr.send(null);
|
||
return new Uint8Array(xhr.response)
|
||
} catch (err) {
|
||
var data = tryParseAsDataURI(url);
|
||
if (data) {
|
||
return data
|
||
}
|
||
throw err
|
||
}
|
||
}
|
||
}
|
||
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
|
||
}
|
||
var data = tryParseAsDataURI(url);
|
||
if (data) {
|
||
onload(data.buffer);
|
||
return
|
||
}
|
||
onerror()
|
||
}
|
||
;
|
||
xhr.onerror = onerror;
|
||
xhr.send(null)
|
||
}
|
||
;
|
||
setWindowTitle = function (title) {
|
||
document.title = title
|
||
}
|
||
} else { }
|
||
|
||
var out = Module["print"] || console.log.bind(console);
|
||
var err = Module["printErr"] || console.warn.bind(console);
|
||
for (key in moduleOverrides) {
|
||
if (moduleOverrides.hasOwnProperty(key)) {
|
||
Module[key] = moduleOverrides[key]
|
||
}
|
||
}
|
||
moduleOverrides = null;
|
||
if (Module["arguments"])
|
||
arguments_ = Module["arguments"];
|
||
if (Module["thisProgram"])
|
||
thisProgram = Module["thisProgram"];
|
||
if (Module["quit"])
|
||
quit_ = Module["quit"];
|
||
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)
|
||
}
|
||
}
|
||
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 < sigParam.length; ++i) {
|
||
typeSection.push(typeCodes[sigParam[i]])
|
||
}
|
||
if (sigRet == "v") {
|
||
typeSection.push(0)
|
||
} else {
|
||
typeSection = typeSection.concat([1, typeCodes[sigRet]])
|
||
}
|
||
typeSection[1] = typeSection.length - 2;
|
||
var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0]));
|
||
var module = new WebAssembly.Module(bytes);
|
||
var instance = new WebAssembly.Instance(module, {
|
||
e: {
|
||
f: func
|
||
}
|
||
});
|
||
var wrappedFunc = instance.exports.f;
|
||
return wrappedFunc
|
||
}
|
||
function addFunctionWasm(func, sig) {
|
||
var table = wasmTable;
|
||
var ret = table.length;
|
||
try {
|
||
table.grow(1)
|
||
} catch (err) {
|
||
if (!err instanceof RangeError) {
|
||
throw err
|
||
}
|
||
throw "Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH."
|
||
}
|
||
try {
|
||
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)
|
||
}
|
||
return ret
|
||
}
|
||
function removeFunctionWasm(index) { }
|
||
var funcWrappers = {};
|
||
function dynCall(sig, ptr, args) {
|
||
if (args && args.length) {
|
||
return Module["dynCall_" + sig].apply(null, [ptr].concat(args))
|
||
} else {
|
||
return Module["dynCall_" + sig].call(null, ptr)
|
||
}
|
||
}
|
||
var tempRet0 = 0;
|
||
var setTempRet0 = function (value) {
|
||
tempRet0 = value
|
||
};
|
||
var wasmBinary;
|
||
if (Module["wasmBinary"])
|
||
wasmBinary = Module["wasmBinary"];
|
||
var noExitRuntime;
|
||
if (Module["noExitRuntime"])
|
||
noExitRuntime = Module["noExitRuntime"];
|
||
if (typeof WebAssembly !== "object") {
|
||
err("no native wasm support detected")
|
||
}
|
||
function setValue(ptr, value, type, noSafe) {
|
||
type = type || "i8";
|
||
if (type.charAt(type.length - 1) === "*")
|
||
type = "i32";
|
||
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 ? 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 = new WebAssembly.Table({
|
||
"initial": 8039,
|
||
"maximum": 8039 + 0,
|
||
"element": "anyfunc"
|
||
});
|
||
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 < 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
|
||
}
|
||
var ALLOC_NONE = 3;
|
||
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(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
|
||
}
|
||
if (type == "i64")
|
||
type = "i32";
|
||
setValue(ret + i, curr, type);
|
||
if (previousType !== type) {
|
||
typeSize = getNativeTypeSize(type);
|
||
previousType = type
|
||
}
|
||
i += typeSize
|
||
}
|
||
return ret
|
||
}
|
||
function getMemory(size) {
|
||
if (!runtimeInitialized)
|
||
return dynamicAlloc(size);
|
||
return _malloc(size)
|
||
}
|
||
var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined;
|
||
function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {
|
||
var endIdx = idx + maxBytesToRead;
|
||
var endPtr = idx;
|
||
while (u8Array[endPtr] && !(endPtr >= endIdx))
|
||
++endPtr;
|
||
if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
|
||
return UTF8Decoder.decode(u8Array.subarray(idx, endPtr))
|
||
} else {
|
||
var str = "";
|
||
while (idx < endPtr) {
|
||
var u0 = u8Array[idx++];
|
||
if (!(u0 & 128)) {
|
||
str += String.fromCharCode(u0);
|
||
continue
|
||
}
|
||
var u1 = u8Array[idx++] & 63;
|
||
if ((u0 & 224) == 192) {
|
||
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
||
continue
|
||
}
|
||
var u2 = u8Array[idx++] & 63;
|
||
if ((u0 & 240) == 224) {
|
||
u0 = (u0 & 15) << 12 | u1 << 6 | u2
|
||
} else {
|
||
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63
|
||
}
|
||
if (u0 < 65536) {
|
||
str += String.fromCharCode(u0)
|
||
} else {
|
||
var ch = u0 - 65536;
|
||
str += String.fromCharCode(55296 | ch >> 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 < str.length; ++i) {
|
||
var u = str.charCodeAt(i);
|
||
if (u >= 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 < str.length; ++i) {
|
||
var u = str.charCodeAt(i);
|
||
if (u >= 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 writeArrayToMemory(array, buffer) {
|
||
HEAP8.set(array, buffer)
|
||
}
|
||
function writeAsciiToMemory(str, buffer, dontAddNull) {
|
||
for (var i = 0; i < str.length; ++i) {
|
||
HEAP8[buffer++ >> 0] = str.charCodeAt(i)
|
||
}
|
||
if (!dontAddNull)
|
||
HEAP8[buffer >> 0] = 0
|
||
}
|
||
var PAGE_SIZE = 16384;
|
||
var WASM_PAGE_SIZE = 65536;
|
||
function alignUp(x, multiple) {
|
||
if (x % multiple > 0) {
|
||
x += multiple - x % multiple
|
||
}
|
||
return x
|
||
}
|
||
var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, 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 STACK_BASE = 6518496
|
||
, DYNAMIC_BASE = 6518496
|
||
, DYNAMICTOP_PTR = 1275456;
|
||
var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 134217728;
|
||
if (Module["wasmMemory"]) {
|
||
wasmMemory = Module["wasmMemory"]
|
||
} else {
|
||
wasmMemory = new WebAssembly.Memory({
|
||
"initial": INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE,
|
||
"maximum": 1073741824 / WASM_PAGE_SIZE
|
||
})
|
||
}
|
||
if (wasmMemory) {
|
||
buffer = wasmMemory.buffer
|
||
}
|
||
INITIAL_TOTAL_MEMORY = buffer.byteLength;
|
||
updateGlobalBufferAndViews(buffer);
|
||
HEAP32[DYNAMICTOP_PTR >> 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 __ATEXIT__ = [];
|
||
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"] = {};
|
||
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."
|
||
}
|
||
var dataURIPrefix = "data:application/octet-stream;base64,";
|
||
function isDataURI(filename) {
|
||
return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0
|
||
}
|
||
|
||
if (!isDataURI(wasmBinaryFile)) {
|
||
wasmBinaryFile = locateFile(wasmBinaryFile)
|
||
}
|
||
function getBinary() {
|
||
try {
|
||
if (wasmBinary) {
|
||
return new Uint8Array(wasmBinary)
|
||
}
|
||
var binary = tryParseAsDataURI(wasmBinaryFile);
|
||
if (binary) {
|
||
return binary
|
||
}
|
||
if (readBinary) {
|
||
return readBinary(wasmBinaryFile)
|
||
} else {
|
||
throw "both async and sync fetching of the wasm failed"
|
||
}
|
||
} catch (err) {
|
||
abort(err)
|
||
}
|
||
}
|
||
function getBinaryPromise() {
|
||
if (!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() {
|
||
var info = {
|
||
"env": asmLibraryArg,
|
||
"wasi_unstable": asmLibraryArg
|
||
};
|
||
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 (IsWechat) {
|
||
var result = WXWebAssembly.instantiate(wasmBinaryFile, info)
|
||
return result.then(receiveInstantiatedSource, function (reason) {
|
||
err("wasm streaming compile failed: " + reason);
|
||
err("falling back to ArrayBuffer instantiation");
|
||
instantiateArrayBuffer(receiveInstantiatedSource)
|
||
})
|
||
|
||
} else {
|
||
if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") {
|
||
fetch(wasmBinaryFile, {
|
||
credentials: "same-origin"
|
||
}).then(function (response) {
|
||
var result = WebAssembly.instantiateStreaming(response, info);
|
||
|
||
return result.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 {}
|
||
}
|
||
var tempDouble;
|
||
var tempI64;
|
||
__ATINIT__.push({
|
||
func: function () {
|
||
___wasm_call_ctors()
|
||
}
|
||
});
|
||
function _emscripten_set_main_loop_timing(mode, value) {
|
||
Browser.mainLoop.timingMode = mode;
|
||
Browser.mainLoop.timingValue = value;
|
||
if (!Browser.mainLoop.func) {
|
||
return 1
|
||
}
|
||
if (mode == 0) {
|
||
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() {
|
||
var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now()) | 0;
|
||
setTimeout(Browser.mainLoop.runner, timeUntilNextTick)
|
||
}
|
||
;
|
||
Browser.mainLoop.method = "timeout"
|
||
} else if (mode == 1) {
|
||
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() {
|
||
Browser.requestAnimationFrame(Browser.mainLoop.runner)
|
||
}
|
||
;
|
||
Browser.mainLoop.method = "rAF"
|
||
} else if (mode == 2) {
|
||
if (typeof setImmediate === "undefined") {
|
||
var setImmediates = [];
|
||
var emscriptenMainLoopMessageId = "setimmediate";
|
||
var Browser_setImmediate_messageHandler = function (event) {
|
||
if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) {
|
||
event.stopPropagation();
|
||
setImmediates.shift()()
|
||
}
|
||
};
|
||
addEventListener("message", Browser_setImmediate_messageHandler, true);
|
||
setImmediate = function Browser_emulated_setImmediate(func) {
|
||
setImmediates.push(func);
|
||
if (ENVIRONMENT_IS_WORKER) {
|
||
if (Module["setImmediates"] === undefined)
|
||
Module["setImmediates"] = [];
|
||
Module["setImmediates"].push(func);
|
||
postMessage({
|
||
target: emscriptenMainLoopMessageId
|
||
})
|
||
} else
|
||
postMessage(emscriptenMainLoopMessageId, "*")
|
||
}
|
||
}
|
||
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() {
|
||
setImmediate(Browser.mainLoop.runner)
|
||
}
|
||
;
|
||
Browser.mainLoop.method = "immediate"
|
||
}
|
||
return 0
|
||
}
|
||
function _emscripten_get_now() {
|
||
abort()
|
||
}
|
||
function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) {
|
||
noExitRuntime = true;
|
||
assert(!Browser.mainLoop.func, "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");
|
||
Browser.mainLoop.func = func;
|
||
Browser.mainLoop.arg = arg;
|
||
var browserIterationFunc;
|
||
if (typeof arg !== "undefined") {
|
||
browserIterationFunc = function () {
|
||
Module["dynCall_vi"](func, arg)
|
||
}
|
||
} else {
|
||
browserIterationFunc = function () {
|
||
Module["dynCall_v"](func)
|
||
}
|
||
}
|
||
var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop;
|
||
Browser.mainLoop.runner = function Browser_mainLoop_runner() {
|
||
if (ABORT)
|
||
return;
|
||
if (Browser.mainLoop.queue.length > 0) {
|
||
var start = Date.now();
|
||
var blocker = Browser.mainLoop.queue.shift();
|
||
blocker.func(blocker.arg);
|
||
if (Browser.mainLoop.remainingBlockers) {
|
||
var remaining = Browser.mainLoop.remainingBlockers;
|
||
var next = remaining % 1 == 0 ? remaining - 1 : Math.floor(remaining);
|
||
if (blocker.counted) {
|
||
Browser.mainLoop.remainingBlockers = next
|
||
} else {
|
||
next = next + .5;
|
||
Browser.mainLoop.remainingBlockers = (8 * remaining + next) / 9
|
||
}
|
||
}
|
||
console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + " ms");
|
||
Browser.mainLoop.updateStatus();
|
||
if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop)
|
||
return;
|
||
setTimeout(Browser.mainLoop.runner, 0);
|
||
return
|
||
}
|
||
if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop)
|
||
return;
|
||
Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0;
|
||
if (Browser.mainLoop.timingMode == 1 && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) {
|
||
Browser.mainLoop.scheduler();
|
||
return
|
||
} else if (Browser.mainLoop.timingMode == 0) {
|
||
Browser.mainLoop.tickStartTime = _emscripten_get_now()
|
||
}
|
||
if (Browser.mainLoop.method === "timeout" && Module.ctx) {
|
||
err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");
|
||
Browser.mainLoop.method = ""
|
||
}
|
||
Browser.mainLoop.runIter(browserIterationFunc);
|
||
if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop)
|
||
return;
|
||
if (typeof SDL === "object" && SDL.audio && SDL.audio.queueNewAudioData)
|
||
SDL.audio.queueNewAudioData();
|
||
Browser.mainLoop.scheduler()
|
||
}
|
||
;
|
||
if (!noSetTiming) {
|
||
if (fps && fps > 0)
|
||
_emscripten_set_main_loop_timing(0, 1e3 / fps);
|
||
else
|
||
_emscripten_set_main_loop_timing(1, 1);
|
||
Browser.mainLoop.scheduler()
|
||
}
|
||
if (simulateInfiniteLoop) {
|
||
throw "SimulateInfiniteLoop"
|
||
}
|
||
}
|
||
var Browser = {
|
||
mainLoop: {
|
||
scheduler: null,
|
||
method: "",
|
||
currentlyRunningMainloop: 0,
|
||
func: null,
|
||
arg: 0,
|
||
timingMode: 0,
|
||
timingValue: 0,
|
||
currentFrameNumber: 0,
|
||
queue: [],
|
||
pause: function () {
|
||
Browser.mainLoop.scheduler = null;
|
||
Browser.mainLoop.currentlyRunningMainloop++
|
||
},
|
||
resume: function () {
|
||
Browser.mainLoop.currentlyRunningMainloop++;
|
||
var timingMode = Browser.mainLoop.timingMode;
|
||
var timingValue = Browser.mainLoop.timingValue;
|
||
var func = Browser.mainLoop.func;
|
||
Browser.mainLoop.func = null;
|
||
_emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true);
|
||
_emscripten_set_main_loop_timing(timingMode, timingValue);
|
||
Browser.mainLoop.scheduler()
|
||
},
|
||
updateStatus: function () {
|
||
if (Module["setStatus"]) {
|
||
var message = Module["statusMessage"] || "Please wait...";
|
||
var remaining = Browser.mainLoop.remainingBlockers;
|
||
var expected = Browser.mainLoop.expectedBlockers;
|
||
if (remaining) {
|
||
if (remaining < expected) {
|
||
Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")")
|
||
} else {
|
||
Module["setStatus"](message)
|
||
}
|
||
} else {
|
||
Module["setStatus"]("")
|
||
}
|
||
}
|
||
},
|
||
runIter: function (func) {
|
||
if (ABORT)
|
||
return;
|
||
if (Module["preMainLoop"]) {
|
||
var preRet = Module["preMainLoop"]();
|
||
if (preRet === false) {
|
||
return
|
||
}
|
||
}
|
||
try {
|
||
func()
|
||
} catch (e) {
|
||
if (e instanceof ExitStatus) {
|
||
return
|
||
} else {
|
||
if (e && typeof e === "object" && e.stack)
|
||
err("exception thrown: " + [e, e.stack]);
|
||
throw e
|
||
}
|
||
}
|
||
if (Module["postMainLoop"])
|
||
Module["postMainLoop"]()
|
||
}
|
||
},
|
||
isFullscreen: false,
|
||
pointerLock: false,
|
||
moduleContextCreatedCallbacks: [],
|
||
workers: [],
|
||
init: function () {
|
||
if (!Module["preloadPlugins"])
|
||
Module["preloadPlugins"] = [];
|
||
if (Browser.initted)
|
||
return;
|
||
Browser.initted = true;
|
||
try {
|
||
new Blob;
|
||
Browser.hasBlobConstructor = true
|
||
} catch (e) {
|
||
Browser.hasBlobConstructor = false;
|
||
console.log("warning: no blob constructor, cannot create blobs with mimetypes")
|
||
}
|
||
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : !Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null;
|
||
Browser.URLObject = typeof window != "undefined" ? window.URL ? window.URL : window.webkitURL : undefined;
|
||
if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") {
|
||
console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
|
||
Module.noImageDecoding = true
|
||
}
|
||
var imagePlugin = {};
|
||
imagePlugin["canHandle"] = function imagePlugin_canHandle(name) {
|
||
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name)
|
||
}
|
||
;
|
||
imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) {
|
||
var b = null;
|
||
if (Browser.hasBlobConstructor) {
|
||
try {
|
||
b = new Blob([byteArray], {
|
||
type: Browser.getMimetype(name)
|
||
});
|
||
if (b.size !== byteArray.length) {
|
||
b = new Blob([new Uint8Array(byteArray).buffer], {
|
||
type: Browser.getMimetype(name)
|
||
})
|
||
}
|
||
} catch (e) {
|
||
warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder")
|
||
}
|
||
}
|
||
if (!b) {
|
||
var bb = new Browser.BlobBuilder;
|
||
bb.append(new Uint8Array(byteArray).buffer);
|
||
b = bb.getBlob()
|
||
}
|
||
var url = Browser.URLObject.createObjectURL(b);
|
||
var img = new Image;
|
||
img.onload = function img_onload() {
|
||
assert(img.complete, "Image " + name + " could not be decoded");
|
||
var canvas = document.createElement("canvas");
|
||
canvas.width = img.width;
|
||
canvas.height = img.height;
|
||
var ctx = canvas.getContext("2d");
|
||
ctx.drawImage(img, 0, 0);
|
||
Module["preloadedImages"][name] = canvas;
|
||
Browser.URLObject.revokeObjectURL(url);
|
||
if (onload)
|
||
onload(byteArray)
|
||
}
|
||
;
|
||
img.onerror = function img_onerror(event) {
|
||
console.log("Image " + url + " could not be decoded");
|
||
if (onerror)
|
||
onerror()
|
||
}
|
||
;
|
||
img.src = url
|
||
}
|
||
;
|
||
Module["preloadPlugins"].push(imagePlugin);
|
||
var audioPlugin = {};
|
||
audioPlugin["canHandle"] = function audioPlugin_canHandle(name) {
|
||
return !Module.noAudioDecoding && name.substr(-4) in {
|
||
".ogg": 1,
|
||
".wav": 1,
|
||
".mp3": 1
|
||
}
|
||
}
|
||
;
|
||
audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) {
|
||
var done = false;
|
||
function finish(audio) {
|
||
if (done)
|
||
return;
|
||
done = true;
|
||
Module["preloadedAudios"][name] = audio;
|
||
if (onload)
|
||
onload(byteArray)
|
||
}
|
||
function fail() {
|
||
if (done)
|
||
return;
|
||
done = true;
|
||
Module["preloadedAudios"][name] = new Audio;
|
||
if (onerror)
|
||
onerror()
|
||
}
|
||
if (Browser.hasBlobConstructor) {
|
||
try {
|
||
var b = new Blob([byteArray], {
|
||
type: Browser.getMimetype(name)
|
||
})
|
||
} catch (e) {
|
||
return fail()
|
||
}
|
||
var url = Browser.URLObject.createObjectURL(b);
|
||
var audio = new Audio;
|
||
audio.addEventListener("canplaythrough", function () {
|
||
finish(audio)
|
||
}, false);
|
||
audio.onerror = function audio_onerror(event) {
|
||
if (done)
|
||
return;
|
||
console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach");
|
||
function encode64(data) {
|
||
var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||
var PAD = "=";
|
||
var ret = "";
|
||
var leftchar = 0;
|
||
var leftbits = 0;
|
||
for (var i = 0; i < data.length; i++) {
|
||
leftchar = leftchar << 8 | data[i];
|
||
leftbits += 8;
|
||
while (leftbits >= 6) {
|
||
var curr = leftchar >> leftbits - 6 & 63;
|
||
leftbits -= 6;
|
||
ret += BASE[curr]
|
||
}
|
||
}
|
||
if (leftbits == 2) {
|
||
ret += BASE[(leftchar & 3) << 4];
|
||
ret += PAD + PAD
|
||
} else if (leftbits == 4) {
|
||
ret += BASE[(leftchar & 15) << 2];
|
||
ret += PAD
|
||
}
|
||
return ret
|
||
}
|
||
audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray);
|
||
finish(audio)
|
||
}
|
||
;
|
||
audio.src = url;
|
||
Browser.safeSetTimeout(function () {
|
||
finish(audio)
|
||
}, 1e4)
|
||
} else {
|
||
return fail()
|
||
}
|
||
}
|
||
;
|
||
Module["preloadPlugins"].push(audioPlugin);
|
||
function pointerLockChange() {
|
||
Browser.pointerLock = document["pointerLockElement"] === Module["canvas"] || document["mozPointerLockElement"] === Module["canvas"] || document["webkitPointerLockElement"] === Module["canvas"] || document["msPointerLockElement"] === Module["canvas"]
|
||
}
|
||
var canvas = Module["canvas"];
|
||
if (canvas) {
|
||
canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || function () { }
|
||
;
|
||
canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] || function () { }
|
||
;
|
||
canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
|
||
document.addEventListener("pointerlockchange", pointerLockChange, false);
|
||
document.addEventListener("mozpointerlockchange", pointerLockChange, false);
|
||
document.addEventListener("webkitpointerlockchange", pointerLockChange, false);
|
||
document.addEventListener("mspointerlockchange", pointerLockChange, false);
|
||
if (Module["elementPointerLock"]) {
|
||
canvas.addEventListener("click", function (ev) {
|
||
if (!Browser.pointerLock && Module["canvas"].requestPointerLock) {
|
||
Module["canvas"].requestPointerLock();
|
||
ev.preventDefault()
|
||
}
|
||
}, false)
|
||
}
|
||
}
|
||
},
|
||
createContext: function (canvas, useWebGL, setInModule, webGLContextAttributes) {
|
||
if (useWebGL && Module.ctx && canvas == Module.canvas)
|
||
return Module.ctx;
|
||
var ctx;
|
||
var contextHandle;
|
||
if (useWebGL) {
|
||
var contextAttributes = {
|
||
antialias: false,
|
||
alpha: false,
|
||
majorVersion: 1
|
||
};
|
||
if (webGLContextAttributes) {
|
||
for (var attribute in webGLContextAttributes) {
|
||
contextAttributes[attribute] = webGLContextAttributes[attribute]
|
||
}
|
||
}
|
||
if (typeof GL !== "undefined") {
|
||
contextHandle = GL.createContext(canvas, contextAttributes);
|
||
if (contextHandle) {
|
||
ctx = GL.getContext(contextHandle).GLctx
|
||
}
|
||
}
|
||
} else {
|
||
ctx = canvas.getContext("2d")
|
||
}
|
||
if (!ctx)
|
||
return null;
|
||
if (setInModule) {
|
||
if (!useWebGL)
|
||
assert(typeof GLctx === "undefined", "cannot set in module if GLctx is used, but we are a non-GL context that would replace it");
|
||
Module.ctx = ctx;
|
||
if (useWebGL)
|
||
GL.makeContextCurrent(contextHandle);
|
||
Module.useWebGL = useWebGL;
|
||
Browser.moduleContextCreatedCallbacks.forEach(function (callback) {
|
||
callback()
|
||
});
|
||
Browser.init()
|
||
}
|
||
return ctx
|
||
},
|
||
destroyContext: function (canvas, useWebGL, setInModule) { },
|
||
fullscreenHandlersInstalled: false,
|
||
lockPointer: undefined,
|
||
resizeCanvas: undefined,
|
||
requestFullscreen: function (lockPointer, resizeCanvas, vrDevice) {
|
||
Browser.lockPointer = lockPointer;
|
||
Browser.resizeCanvas = resizeCanvas;
|
||
Browser.vrDevice = vrDevice;
|
||
if (typeof Browser.lockPointer === "undefined")
|
||
Browser.lockPointer = true;
|
||
if (typeof Browser.resizeCanvas === "undefined")
|
||
Browser.resizeCanvas = false;
|
||
if (typeof Browser.vrDevice === "undefined")
|
||
Browser.vrDevice = null;
|
||
var canvas = Module["canvas"];
|
||
function fullscreenChange() {
|
||
Browser.isFullscreen = false;
|
||
var canvasContainer = canvas.parentNode;
|
||
if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvasContainer) {
|
||
canvas.exitFullscreen = Browser.exitFullscreen;
|
||
if (Browser.lockPointer)
|
||
canvas.requestPointerLock();
|
||
Browser.isFullscreen = true;
|
||
if (Browser.resizeCanvas) {
|
||
Browser.setFullscreenCanvasSize()
|
||
} else {
|
||
Browser.updateCanvasDimensions(canvas)
|
||
}
|
||
} else {
|
||
canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
|
||
canvasContainer.parentNode.removeChild(canvasContainer);
|
||
if (Browser.resizeCanvas) {
|
||
Browser.setWindowedCanvasSize()
|
||
} else {
|
||
Browser.updateCanvasDimensions(canvas)
|
||
}
|
||
}
|
||
if (Module["onFullScreen"])
|
||
Module["onFullScreen"](Browser.isFullscreen);
|
||
if (Module["onFullscreen"])
|
||
Module["onFullscreen"](Browser.isFullscreen)
|
||
}
|
||
if (!Browser.fullscreenHandlersInstalled) {
|
||
Browser.fullscreenHandlersInstalled = true;
|
||
document.addEventListener("fullscreenchange", fullscreenChange, false);
|
||
document.addEventListener("mozfullscreenchange", fullscreenChange, false);
|
||
document.addEventListener("webkitfullscreenchange", fullscreenChange, false);
|
||
document.addEventListener("MSFullscreenChange", fullscreenChange, false)
|
||
}
|
||
var canvasContainer = document.createElement("div");
|
||
canvas.parentNode.insertBefore(canvasContainer, canvas);
|
||
canvasContainer.appendChild(canvas);
|
||
canvasContainer.requestFullscreen = canvasContainer["requestFullscreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullscreen"] ? function () {
|
||
canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])
|
||
}
|
||
: null) || (canvasContainer["webkitRequestFullScreen"] ? function () {
|
||
canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])
|
||
}
|
||
: null);
|
||
if (vrDevice) {
|
||
canvasContainer.requestFullscreen({
|
||
vrDisplay: vrDevice
|
||
})
|
||
} else {
|
||
canvasContainer.requestFullscreen()
|
||
}
|
||
},
|
||
requestFullScreen: function (lockPointer, resizeCanvas, vrDevice) {
|
||
err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");
|
||
Browser.requestFullScreen = function (lockPointer, resizeCanvas, vrDevice) {
|
||
return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice)
|
||
}
|
||
;
|
||
return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice)
|
||
},
|
||
exitFullscreen: function () {
|
||
if (!Browser.isFullscreen) {
|
||
return false
|
||
}
|
||
var CFS = document["exitFullscreen"] || document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["msExitFullscreen"] || document["webkitCancelFullScreen"] || function () { }
|
||
;
|
||
CFS.apply(document, []);
|
||
return true
|
||
},
|
||
nextRAF: 0,
|
||
fakeRequestAnimationFrame: function (func) {
|
||
var now = Date.now();
|
||
if (Browser.nextRAF === 0) {
|
||
Browser.nextRAF = now + 1e3 / 60
|
||
} else {
|
||
while (now + 2 >= Browser.nextRAF) {
|
||
Browser.nextRAF += 1e3 / 60
|
||
}
|
||
}
|
||
var delay = Math.max(Browser.nextRAF - now, 0);
|
||
setTimeout(func, delay)
|
||
},
|
||
requestAnimationFrame: function (func) {
|
||
if (typeof requestAnimationFrame === "function") {
|
||
requestAnimationFrame(func);
|
||
return
|
||
}
|
||
var RAF = Browser.fakeRequestAnimationFrame;
|
||
RAF(func)
|
||
},
|
||
safeCallback: function (func) {
|
||
return function () {
|
||
if (!ABORT)
|
||
return func.apply(null, arguments)
|
||
}
|
||
},
|
||
allowAsyncCallbacks: true,
|
||
queuedAsyncCallbacks: [],
|
||
pauseAsyncCallbacks: function () {
|
||
Browser.allowAsyncCallbacks = false
|
||
},
|
||
resumeAsyncCallbacks: function () {
|
||
Browser.allowAsyncCallbacks = true;
|
||
if (Browser.queuedAsyncCallbacks.length > 0) {
|
||
var callbacks = Browser.queuedAsyncCallbacks;
|
||
Browser.queuedAsyncCallbacks = [];
|
||
callbacks.forEach(function (func) {
|
||
func()
|
||
})
|
||
}
|
||
},
|
||
safeRequestAnimationFrame: function (func) {
|
||
return Browser.requestAnimationFrame(function () {
|
||
if (ABORT)
|
||
return;
|
||
if (Browser.allowAsyncCallbacks) {
|
||
func()
|
||
} else {
|
||
Browser.queuedAsyncCallbacks.push(func)
|
||
}
|
||
})
|
||
},
|
||
safeSetTimeout: function (func, timeout) {
|
||
noExitRuntime = true;
|
||
return setTimeout(function () {
|
||
if (ABORT)
|
||
return;
|
||
if (Browser.allowAsyncCallbacks) {
|
||
func()
|
||
} else {
|
||
Browser.queuedAsyncCallbacks.push(func)
|
||
}
|
||
}, timeout)
|
||
},
|
||
safeSetInterval: function (func, timeout) {
|
||
noExitRuntime = true;
|
||
return setInterval(function () {
|
||
if (ABORT)
|
||
return;
|
||
if (Browser.allowAsyncCallbacks) {
|
||
func()
|
||
}
|
||
}, timeout)
|
||
},
|
||
getMimetype: function (name) {
|
||
return {
|
||
"jpg": "image/jpeg",
|
||
"jpeg": "image/jpeg",
|
||
"png": "image/png",
|
||
"bmp": "image/bmp",
|
||
"ogg": "audio/ogg",
|
||
"wav": "audio/wav",
|
||
"mp3": "audio/mpeg"
|
||
}[name.substr(name.lastIndexOf(".") + 1)]
|
||
},
|
||
getUserMedia: function (func) {
|
||
if (!window.getUserMedia) {
|
||
window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"]
|
||
}
|
||
window.getUserMedia(func)
|
||
},
|
||
getMovementX: function (event) {
|
||
return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0
|
||
},
|
||
getMovementY: function (event) {
|
||
return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0
|
||
},
|
||
getMouseWheelDelta: function (event) {
|
||
var delta = 0;
|
||
switch (event.type) {
|
||
case "DOMMouseScroll":
|
||
delta = event.detail / 3;
|
||
break;
|
||
case "mousewheel":
|
||
delta = event.wheelDelta / 120;
|
||
break;
|
||
case "wheel":
|
||
delta = event.deltaY;
|
||
switch (event.deltaMode) {
|
||
case 0:
|
||
delta /= 100;
|
||
break;
|
||
case 1:
|
||
delta /= 3;
|
||
break;
|
||
case 2:
|
||
delta *= 80;
|
||
break;
|
||
default:
|
||
throw "unrecognized mouse wheel delta mode: " + event.deltaMode
|
||
}
|
||
break;
|
||
default:
|
||
throw "unrecognized mouse wheel event: " + event.type
|
||
}
|
||
return delta
|
||
},
|
||
mouseX: 0,
|
||
mouseY: 0,
|
||
mouseMovementX: 0,
|
||
mouseMovementY: 0,
|
||
touches: {},
|
||
lastTouches: {},
|
||
calculateMouseEvent: function (event) {
|
||
if (Browser.pointerLock) {
|
||
if (event.type != "mousemove" && "mozMovementX" in event) {
|
||
Browser.mouseMovementX = Browser.mouseMovementY = 0
|
||
} else {
|
||
Browser.mouseMovementX = Browser.getMovementX(event);
|
||
Browser.mouseMovementY = Browser.getMovementY(event)
|
||
}
|
||
if (typeof SDL != "undefined") {
|
||
Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
|
||
Browser.mouseY = SDL.mouseY + Browser.mouseMovementY
|
||
} else {
|
||
Browser.mouseX += Browser.mouseMovementX;
|
||
Browser.mouseY += Browser.mouseMovementY
|
||
}
|
||
} else {
|
||
var rect = Module["canvas"].getBoundingClientRect();
|
||
var cw = Module["canvas"].width;
|
||
var ch = Module["canvas"].height;
|
||
var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset;
|
||
var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset;
|
||
if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") {
|
||
var touch = event.touch;
|
||
if (touch === undefined) {
|
||
return
|
||
}
|
||
var adjustedX = touch.pageX - (scrollX + rect.left);
|
||
var adjustedY = touch.pageY - (scrollY + rect.top);
|
||
adjustedX = adjustedX * (cw / rect.width);
|
||
adjustedY = adjustedY * (ch / rect.height);
|
||
var coords = {
|
||
x: adjustedX,
|
||
y: adjustedY
|
||
};
|
||
if (event.type === "touchstart") {
|
||
Browser.lastTouches[touch.identifier] = coords;
|
||
Browser.touches[touch.identifier] = coords
|
||
} else if (event.type === "touchend" || event.type === "touchmove") {
|
||
var last = Browser.touches[touch.identifier];
|
||
if (!last)
|
||
last = coords;
|
||
Browser.lastTouches[touch.identifier] = last;
|
||
Browser.touches[touch.identifier] = coords
|
||
}
|
||
return
|
||
}
|
||
var x = event.pageX - (scrollX + rect.left);
|
||
var y = event.pageY - (scrollY + rect.top);
|
||
x = x * (cw / rect.width);
|
||
y = y * (ch / rect.height);
|
||
Browser.mouseMovementX = x - Browser.mouseX;
|
||
Browser.mouseMovementY = y - Browser.mouseY;
|
||
Browser.mouseX = x;
|
||
Browser.mouseY = y
|
||
}
|
||
},
|
||
asyncLoad: function (url, onload, onerror, noRunDep) {
|
||
var dep = !noRunDep ? getUniqueRunDependency("al " + url) : "";
|
||
readAsync(url, function (arrayBuffer) {
|
||
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
|
||
onload(new Uint8Array(arrayBuffer));
|
||
if (dep)
|
||
removeRunDependency(dep)
|
||
}, function (event) {
|
||
if (onerror) {
|
||
onerror()
|
||
} else {
|
||
throw 'Loading data file "' + url + '" failed.'
|
||
}
|
||
});
|
||
if (dep)
|
||
addRunDependency(dep)
|
||
},
|
||
resizeListeners: [],
|
||
updateResizeListeners: function () {
|
||
var canvas = Module["canvas"];
|
||
Browser.resizeListeners.forEach(function (listener) {
|
||
listener(canvas.width, canvas.height)
|
||
})
|
||
},
|
||
setCanvasSize: function (width, height, noUpdates) {
|
||
var canvas = Module["canvas"];
|
||
Browser.updateCanvasDimensions(canvas, width, height);
|
||
if (!noUpdates)
|
||
Browser.updateResizeListeners()
|
||
},
|
||
windowedWidth: 0,
|
||
windowedHeight: 0,
|
||
setFullscreenCanvasSize: function () {
|
||
if (typeof SDL != "undefined") {
|
||
var flags = HEAPU32[SDL.screen >> 2];
|
||
flags = flags | 8388608;
|
||
HEAP32[SDL.screen >> 2] = flags
|
||
}
|
||
Browser.updateCanvasDimensions(Module["canvas"]);
|
||
Browser.updateResizeListeners()
|
||
},
|
||
setWindowedCanvasSize: function () {
|
||
if (typeof SDL != "undefined") {
|
||
var flags = HEAPU32[SDL.screen >> 2];
|
||
flags = flags & ~8388608;
|
||
HEAP32[SDL.screen >> 2] = flags
|
||
}
|
||
Browser.updateCanvasDimensions(Module["canvas"]);
|
||
Browser.updateResizeListeners()
|
||
},
|
||
updateCanvasDimensions: function (canvas, wNative, hNative) {
|
||
if (wNative && hNative) {
|
||
canvas.widthNative = wNative;
|
||
canvas.heightNative = hNative
|
||
} else {
|
||
wNative = canvas.widthNative;
|
||
hNative = canvas.heightNative
|
||
}
|
||
var w = wNative;
|
||
var h = hNative;
|
||
if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0) {
|
||
if (w / h < Module["forcedAspectRatio"]) {
|
||
w = Math.round(h * Module["forcedAspectRatio"])
|
||
} else {
|
||
h = Math.round(w / Module["forcedAspectRatio"])
|
||
}
|
||
}
|
||
if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvas.parentNode && typeof screen != "undefined") {
|
||
var factor = Math.min(screen.width / w, screen.height / h);
|
||
w = Math.round(w * factor);
|
||
h = Math.round(h * factor)
|
||
}
|
||
if (Browser.resizeCanvas) {
|
||
if (canvas.width != w)
|
||
canvas.width = w;
|
||
if (canvas.height != h)
|
||
canvas.height = h;
|
||
if (typeof canvas.style != "undefined") {
|
||
canvas.style.removeProperty("width");
|
||
canvas.style.removeProperty("height")
|
||
}
|
||
} else {
|
||
if (canvas.width != wNative)
|
||
canvas.width = wNative;
|
||
if (canvas.height != hNative)
|
||
canvas.height = hNative;
|
||
if (typeof canvas.style != "undefined") {
|
||
if (w != wNative || h != hNative) {
|
||
canvas.style.setProperty("width", w + "px", "important");
|
||
canvas.style.setProperty("height", h + "px", "important")
|
||
} else {
|
||
canvas.style.removeProperty("width");
|
||
canvas.style.removeProperty("height")
|
||
}
|
||
}
|
||
}
|
||
},
|
||
wgetRequests: {},
|
||
nextWgetRequestHandle: 0,
|
||
getNextWgetRequestHandle: function () {
|
||
var handle = Browser.nextWgetRequestHandle;
|
||
Browser.nextWgetRequestHandle++;
|
||
return handle
|
||
}
|
||
};
|
||
function demangle(func) {
|
||
var __cxa_demangle_func = Module["___cxa_demangle"] || Module["__cxa_demangle"];
|
||
assert(__cxa_demangle_func);
|
||
try {
|
||
var s = func;
|
||
if (s.startsWith("__Z"))
|
||
s = s.substr(1);
|
||
var len = lengthBytesUTF8(s) + 1;
|
||
var buf = _malloc(len);
|
||
stringToUTF8(s, buf, len);
|
||
var status = _malloc(4);
|
||
var ret = __cxa_demangle_func(buf, 0, 0, status);
|
||
if (HEAP32[status >> 2] === 0 && ret) {
|
||
return UTF8ToString(ret)
|
||
}
|
||
} catch (e) { } finally {
|
||
if (buf)
|
||
_free(buf);
|
||
if (status)
|
||
_free(status);
|
||
if (ret)
|
||
_free(ret)
|
||
}
|
||
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) {
|
||
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)
|
||
}
|
||
function ___cxa_allocate_exception(size) {
|
||
return _malloc(size)
|
||
}
|
||
function _atexit(func, arg) {
|
||
__ATEXIT__.unshift({
|
||
func: func,
|
||
arg: arg
|
||
})
|
||
}
|
||
function ___cxa_atexit() {
|
||
return _atexit.apply(null, arguments)
|
||
}
|
||
var ___exception_infos = {};
|
||
var ___exception_last = 0;
|
||
function ___cxa_throw(ptr, type, destructor) {
|
||
___exception_infos[ptr] = {
|
||
ptr: ptr,
|
||
adjusted: [ptr],
|
||
type: type,
|
||
destructor: destructor,
|
||
refcount: 0,
|
||
caught: false,
|
||
rethrown: false
|
||
};
|
||
___exception_last = ptr;
|
||
if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
|
||
__ZSt18uncaught_exceptionv.uncaught_exceptions = 1
|
||
} else {
|
||
__ZSt18uncaught_exceptionv.uncaught_exceptions++
|
||
}
|
||
throw ptr
|
||
}
|
||
function ___lock() { }
|
||
function ___setErrNo(value) {
|
||
if (Module["___errno_location"])
|
||
HEAP32[Module["___errno_location"]() >> 2] = value;
|
||
return value
|
||
}
|
||
function ___map_file(pathname, size) {
|
||
___setErrNo(63);
|
||
return -1
|
||
}
|
||
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)
|
||
}
|
||
};
|
||
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 < 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 () { },
|
||
shutdown: function () { },
|
||
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) {
|
||
stream.tty.ops.flush(stream.tty)
|
||
},
|
||
flush: function (stream) {
|
||
stream.tty.ops.flush(stream.tty)
|
||
},
|
||
read: function (stream, buffer, offset, length, pos) {
|
||
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) {
|
||
var BUFSIZE = 256;
|
||
var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);
|
||
var bytesRead = 0;
|
||
try {
|
||
bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, null)
|
||
} catch (e) {
|
||
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") {
|
||
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(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;
|
||
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 < node.usedBytes; ++i)
|
||
arr.push(node.contents[i]);
|
||
return arr
|
||
}
|
||
return node.contents
|
||
},
|
||
getFileDataAsTypedArray: function (node) {
|
||
if (!node.contents)
|
||
return new Uint8Array;
|
||
if (node.contents.subarray)
|
||
return node.contents.subarray(0, node.usedBytes);
|
||
return new Uint8Array(node.contents)
|
||
},
|
||
expandFileStorage: function (node, newCapacity) {
|
||
var prevCapacity = node.contents ? node.contents.length : 0;
|
||
if (prevCapacity >= newCapacity)
|
||
return;
|
||
var CAPACITY_DOUBLING_MAX = 1024 * 1024;
|
||
newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) | 0);
|
||
if (prevCapacity != 0)
|
||
newCapacity = Math.max(newCapacity, 256);
|
||
var oldContents = node.contents;
|
||
node.contents = new Uint8Array(newCapacity);
|
||
if (node.usedBytes > 0)
|
||
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 < newSize)
|
||
node.contents.push(0);
|
||
node.usedBytes = newSize
|
||
},
|
||
node_ops: {
|
||
getattr: function (node) {
|
||
var attr = {};
|
||
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);
|
||
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 (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)
|
||
}
|
||
}
|
||
}
|
||
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 | 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);
|
||
if (size > 8 && contents.subarray) {
|
||
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) {
|
||
canOwn = false;
|
||
if (!length)
|
||
return 0;
|
||
var node = stream.node;
|
||
node.timestamp = Date.now();
|
||
if (buffer.subarray && (!node.contents || node.contents.subarray)) {
|
||
if (canOwn) {
|
||
node.contents = buffer.subarray(offset, offset + length);
|
||
node.usedBytes = length;
|
||
return length
|
||
} else if (node.usedBytes === 0 && position === 0) {
|
||
node.contents = new Uint8Array(buffer.subarray(offset, offset + length));
|
||
node.usedBytes = length;
|
||
return length
|
||
} else if (position + length <= node.usedBytes) {
|
||
node.contents.set(buffer.subarray(offset, offset + length), position);
|
||
return length
|
||
}
|
||
}
|
||
MEMFS.expandFileStorage(node, position + length);
|
||
if (node.contents.subarray && buffer.subarray)
|
||
node.contents.set(buffer.subarray(offset, offset + length), position);
|
||
else {
|
||
for (var i = 0; i < length; i++) {
|
||
node.contents[position + i] = buffer[offset + i]
|
||
}
|
||
}
|
||
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, buffer, offset, length, position, prot, flags) {
|
||
if (!FS.isFile(stream.node.mode)) {
|
||
throw new FS.ErrnoError(43)
|
||
}
|
||
var ptr;
|
||
var allocated;
|
||
var contents = stream.node.contents;
|
||
if (!(flags & 2) && (contents.buffer === buffer || contents.buffer === buffer.buffer)) {
|
||
allocated = false;
|
||
ptr = contents.byteOffset
|
||
} else {
|
||
if (position > 0 || position + length < stream.node.usedBytes) {
|
||
if (contents.subarray) {
|
||
contents = contents.subarray(position, position + length)
|
||
} else {
|
||
contents = Array.prototype.slice.call(contents, position, position + length)
|
||
}
|
||
}
|
||
allocated = true;
|
||
var fromHeap = buffer.buffer == HEAP8.buffer;
|
||
ptr = _malloc(length);
|
||
if (!ptr) {
|
||
throw new FS.ErrnoError(48)
|
||
}
|
||
(fromHeap ? HEAP8 : buffer).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) {
|
||
return 0
|
||
}
|
||
var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
|
||
return 0
|
||
}
|
||
}
|
||
};
|
||
var IDBFS = {
|
||
dbs: {},
|
||
indexedDB: function () {
|
||
if (typeof indexedDB !== "undefined")
|
||
return indexedDB;
|
||
var ret = null;
|
||
if (typeof window === "object")
|
||
ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
||
assert(ret, "IDBFS used, but indexedDB not supported");
|
||
return ret
|
||
},
|
||
DB_VERSION: 21,
|
||
DB_STORE_NAME: "FILE_DATA",
|
||
mount: function (mount) {
|
||
return MEMFS.mount.apply(null, arguments)
|
||
},
|
||
syncfs: function (mount, populate, callback) {
|
||
IDBFS.getLocalSet(mount, function (err, local) {
|
||
if (err)
|
||
return callback(err);
|
||
IDBFS.getRemoteSet(mount, function (err, remote) {
|
||
if (err)
|
||
return callback(err);
|
||
var src = populate ? remote : local;
|
||
var dst = populate ? local : remote;
|
||
IDBFS.reconcile(src, dst, callback)
|
||
})
|
||
})
|
||
},
|
||
getDB: function (name, callback) {
|
||
var db = IDBFS.dbs[name];
|
||
if (db) {
|
||
return callback(null, db)
|
||
}
|
||
var req;
|
||
try {
|
||
req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION)
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
if (!req) {
|
||
return callback("Unable to connect to IndexedDB")
|
||
}
|
||
req.onupgradeneeded = function (e) {
|
||
var db = e.target.result;
|
||
var transaction = e.target.transaction;
|
||
var fileStore;
|
||
if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
|
||
fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME)
|
||
} else {
|
||
fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME)
|
||
}
|
||
if (!fileStore.indexNames.contains("timestamp")) {
|
||
fileStore.createIndex("timestamp", "timestamp", {
|
||
unique: false
|
||
})
|
||
}
|
||
}
|
||
;
|
||
req.onsuccess = function () {
|
||
db = req.result;
|
||
IDBFS.dbs[name] = db;
|
||
callback(null, db)
|
||
}
|
||
;
|
||
req.onerror = function (e) {
|
||
callback(this.error);
|
||
e.preventDefault()
|
||
}
|
||
},
|
||
getLocalSet: function (mount, callback) {
|
||
var entries = {};
|
||
function isRealDir(p) {
|
||
return p !== "." && p !== ".."
|
||
}
|
||
function toAbsolute(root) {
|
||
return function (p) {
|
||
return PATH.join2(root, p)
|
||
}
|
||
}
|
||
var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
|
||
while (check.length) {
|
||
var path = check.pop();
|
||
var stat;
|
||
try {
|
||
stat = FS.stat(path)
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
if (FS.isDir(stat.mode)) {
|
||
check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))
|
||
}
|
||
entries[path] = {
|
||
timestamp: stat.mtime
|
||
}
|
||
}
|
||
return callback(null, {
|
||
type: "local",
|
||
entries: entries
|
||
})
|
||
},
|
||
getRemoteSet: function (mount, callback) {
|
||
var entries = {};
|
||
IDBFS.getDB(mount.mountpoint, function (err, db) {
|
||
if (err)
|
||
return callback(err);
|
||
try {
|
||
var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readonly");
|
||
transaction.onerror = function (e) {
|
||
callback(this.error);
|
||
e.preventDefault()
|
||
}
|
||
;
|
||
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
|
||
var index = store.index("timestamp");
|
||
index.openKeyCursor().onsuccess = function (event) {
|
||
var cursor = event.target.result;
|
||
if (!cursor) {
|
||
return callback(null, {
|
||
type: "remote",
|
||
db: db,
|
||
entries: entries
|
||
})
|
||
}
|
||
entries[cursor.primaryKey] = {
|
||
timestamp: cursor.key
|
||
};
|
||
cursor.continue()
|
||
}
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
})
|
||
},
|
||
loadLocalEntry: function (path, callback) {
|
||
var stat, node;
|
||
try {
|
||
var lookup = FS.lookupPath(path);
|
||
node = lookup.node;
|
||
stat = FS.stat(path)
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
if (FS.isDir(stat.mode)) {
|
||
return callback(null, {
|
||
timestamp: stat.mtime,
|
||
mode: stat.mode
|
||
})
|
||
} else if (FS.isFile(stat.mode)) {
|
||
node.contents = MEMFS.getFileDataAsTypedArray(node);
|
||
return callback(null, {
|
||
timestamp: stat.mtime,
|
||
mode: stat.mode,
|
||
contents: node.contents
|
||
})
|
||
} else {
|
||
return callback(new Error("node type not supported"))
|
||
}
|
||
},
|
||
storeLocalEntry: function (path, entry, callback) {
|
||
try {
|
||
if (FS.isDir(entry.mode)) {
|
||
FS.mkdir(path, entry.mode)
|
||
} else if (FS.isFile(entry.mode)) {
|
||
FS.writeFile(path, entry.contents, {
|
||
canOwn: true
|
||
})
|
||
} else {
|
||
return callback(new Error("node type not supported"))
|
||
}
|
||
FS.chmod(path, entry.mode);
|
||
FS.utime(path, entry.timestamp, entry.timestamp)
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
callback(null)
|
||
},
|
||
removeLocalEntry: function (path, callback) {
|
||
try {
|
||
var lookup = FS.lookupPath(path);
|
||
var stat = FS.stat(path);
|
||
if (FS.isDir(stat.mode)) {
|
||
FS.rmdir(path)
|
||
} else if (FS.isFile(stat.mode)) {
|
||
FS.unlink(path)
|
||
}
|
||
} catch (e) {
|
||
return callback(e)
|
||
}
|
||
callback(null)
|
||
},
|
||
loadRemoteEntry: function (store, path, callback) {
|
||
var req = store.get(path);
|
||
req.onsuccess = function (event) {
|
||
callback(null, event.target.result)
|
||
}
|
||
;
|
||
req.onerror = function (e) {
|
||
callback(this.error);
|
||
e.preventDefault()
|
||
}
|
||
},
|
||
storeRemoteEntry: function (store, path, entry, callback) {
|
||
var req = store.put(entry, path);
|
||
req.onsuccess = function () {
|
||
callback(null)
|
||
}
|
||
;
|
||
req.onerror = function (e) {
|
||
callback(this.error);
|
||
e.preventDefault()
|
||
}
|
||
},
|
||
removeRemoteEntry: function (store, path, callback) {
|
||
var req = store.delete(path);
|
||
req.onsuccess = function () {
|
||
callback(null)
|
||
}
|
||
;
|
||
req.onerror = function (e) {
|
||
callback(this.error);
|
||
e.preventDefault()
|
||
}
|
||
},
|
||
reconcile: function (src, dst, callback) {
|
||
var total = 0;
|
||
var create = [];
|
||
Object.keys(src.entries).forEach(function (key) {
|
||
var e = src.entries[key];
|
||
var e2 = dst.entries[key];
|
||
if (!e2 || e.timestamp > e2.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 ERRNO_CODES = {
|
||
EPERM: 63,
|
||
ENOENT: 44,
|
||
ESRCH: 71,
|
||
EINTR: 27,
|
||
EIO: 29,
|
||
ENXIO: 60,
|
||
E2BIG: 1,
|
||
ENOEXEC: 45,
|
||
EBADF: 8,
|
||
ECHILD: 12,
|
||
EAGAIN: 6,
|
||
EWOULDBLOCK: 6,
|
||
ENOMEM: 48,
|
||
EACCES: 2,
|
||
EFAULT: 21,
|
||
ENOTBLK: 105,
|
||
EBUSY: 10,
|
||
EEXIST: 20,
|
||
EXDEV: 75,
|
||
ENODEV: 43,
|
||
ENOTDIR: 54,
|
||
EISDIR: 31,
|
||
EINVAL: 28,
|
||
ENFILE: 41,
|
||
EMFILE: 33,
|
||
ENOTTY: 59,
|
||
ETXTBSY: 74,
|
||
EFBIG: 22,
|
||
ENOSPC: 51,
|
||
ESPIPE: 70,
|
||
EROFS: 69,
|
||
EMLINK: 34,
|
||
EPIPE: 64,
|
||
EDOM: 18,
|
||
ERANGE: 68,
|
||
ENOMSG: 49,
|
||
EIDRM: 24,
|
||
ECHRNG: 106,
|
||
EL2NSYNC: 156,
|
||
EL3HLT: 107,
|
||
EL3RST: 108,
|
||
ELNRNG: 109,
|
||
EUNATCH: 110,
|
||
ENOCSI: 111,
|
||
EL2HLT: 112,
|
||
EDEADLK: 16,
|
||
ENOLCK: 46,
|
||
EBADE: 113,
|
||
EBADR: 114,
|
||
EXFULL: 115,
|
||
ENOANO: 104,
|
||
EBADRQC: 103,
|
||
EBADSLT: 102,
|
||
EDEADLOCK: 16,
|
||
EBFONT: 101,
|
||
ENOSTR: 100,
|
||
ENODATA: 116,
|
||
ETIME: 117,
|
||
ENOSR: 118,
|
||
ENONET: 119,
|
||
ENOPKG: 120,
|
||
EREMOTE: 121,
|
||
ENOLINK: 47,
|
||
EADV: 122,
|
||
ESRMNT: 123,
|
||
ECOMM: 124,
|
||
EPROTO: 65,
|
||
EMULTIHOP: 36,
|
||
EDOTDOT: 125,
|
||
EBADMSG: 9,
|
||
ENOTUNIQ: 126,
|
||
EBADFD: 127,
|
||
EREMCHG: 128,
|
||
ELIBACC: 129,
|
||
ELIBBAD: 130,
|
||
ELIBSCN: 131,
|
||
ELIBMAX: 132,
|
||
ELIBEXEC: 133,
|
||
ENOSYS: 52,
|
||
ENOTEMPTY: 55,
|
||
ENAMETOOLONG: 37,
|
||
ELOOP: 32,
|
||
EOPNOTSUPP: 138,
|
||
EPFNOSUPPORT: 139,
|
||
ECONNRESET: 15,
|
||
ENOBUFS: 42,
|
||
EAFNOSUPPORT: 5,
|
||
EPROTOTYPE: 67,
|
||
ENOTSOCK: 57,
|
||
ENOPROTOOPT: 50,
|
||
ESHUTDOWN: 140,
|
||
ECONNREFUSED: 14,
|
||
EADDRINUSE: 3,
|
||
ECONNABORTED: 13,
|
||
ENETUNREACH: 40,
|
||
ENETDOWN: 38,
|
||
ETIMEDOUT: 73,
|
||
EHOSTDOWN: 142,
|
||
EHOSTUNREACH: 23,
|
||
EINPROGRESS: 26,
|
||
EALREADY: 7,
|
||
EDESTADDRREQ: 17,
|
||
EMSGSIZE: 35,
|
||
EPROTONOSUPPORT: 66,
|
||
ESOCKTNOSUPPORT: 137,
|
||
EADDRNOTAVAIL: 4,
|
||
ENETRESET: 39,
|
||
EISCONN: 30,
|
||
ENOTCONN: 53,
|
||
ETOOMANYREFS: 141,
|
||
EUSERS: 136,
|
||
EDQUOT: 19,
|
||
ESTALE: 72,
|
||
ENOTSUP: 138,
|
||
ENOMEDIUM: 148,
|
||
EILSEQ: 25,
|
||
EOVERFLOW: 61,
|
||
ECANCELED: 11,
|
||
ENOTRECOVERABLE: 56,
|
||
EOWNERDEAD: 62,
|
||
ESTRPIPE: 135
|
||
};
|
||
var NODEFS = {
|
||
isWindows: false,
|
||
staticInit: 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)
|
||
},
|
||
convertNodeCode: function (e) {
|
||
var code = e.code;
|
||
assert(code in ERRNO_CODES);
|
||
return ERRNO_CODES[code]
|
||
},
|
||
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(28)
|
||
}
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
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(28)
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
readdir: function (node) {
|
||
var path = NODEFS.realPath(node);
|
||
try {
|
||
return fs.readdirSync(path)
|
||
} catch (e) {
|
||
if (!e.code)
|
||
throw e;
|
||
throw new FS.ErrnoError(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
},
|
||
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(NODEFS.convertNodeCode(e))
|
||
}
|
||
}
|
||
}
|
||
if (position < 0) {
|
||
throw new FS.ErrnoError(28)
|
||
}
|
||
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 < parts.length - 1; i++) {
|
||
var curr = parts.slice(0, i + 1).join("/");
|
||
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]
|
||
}
|
||
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);
|
||
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: undefined,
|
||
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 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(32)
|
||
}
|
||
var parts = PATH.normalizeArray(path.split("/").filter(function (p) {
|
||
return !!p
|
||
}), false);
|
||
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) {
|
||
break
|
||
}
|
||
current = FS.lookupNode(current, parts[i]);
|
||
current_path = PATH.join2(current_path, parts[i]);
|
||
if (FS.isMountpoint(current)) {
|
||
if (!islast || islast && opts.follow_mount) {
|
||
current = current.mounted.root
|
||
}
|
||
}
|
||
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) {
|
||
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 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 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 err = FS.nodePermissions(dir, "x");
|
||
if (err)
|
||
return err;
|
||
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 err = FS.nodePermissions(dir, "wx");
|
||
if (err) {
|
||
return err
|
||
}
|
||
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" || flags & 512) {
|
||
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 = 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(70)
|
||
}
|
||
},
|
||
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(10)
|
||
} 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(10)
|
||
}
|
||
if (!FS.isDir(node.mode)) {
|
||
throw new FS.ErrnoError(54)
|
||
}
|
||
}
|
||
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(28)
|
||
}
|
||
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(28)
|
||
}
|
||
var err = FS.mayCreate(parent, name);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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;
|
||
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; 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
|
||
}
|
||
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 err = FS.mayCreate(parent, newname);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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);
|
||
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);
|
||
if (old_dir.mount !== new_dir.mount) {
|
||
throw new FS.ErrnoError(75)
|
||
}
|
||
var old_node = FS.lookupNode(old_dir, old_name);
|
||
var relative = PATH_FS.relative(old_path, new_dirname);
|
||
if (relative.charAt(0) !== ".") {
|
||
throw new FS.ErrnoError(28)
|
||
}
|
||
relative = PATH_FS.relative(new_path, old_dirname);
|
||
if (relative.charAt(0) !== ".") {
|
||
throw new FS.ErrnoError(55)
|
||
}
|
||
var new_node;
|
||
try {
|
||
new_node = FS.lookupNode(new_dir, new_name)
|
||
} catch (e) { }
|
||
if (old_node === new_node) {
|
||
return
|
||
}
|
||
var isdir = FS.isDir(old_node.mode);
|
||
var err = FS.mayDelete(old_dir, old_name, isdir);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
err = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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 (new_dir !== old_dir) {
|
||
err = FS.nodePermissions(old_dir, "w");
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
}
|
||
try {
|
||
if (FS.trackingDelegate["willMovePath"]) {
|
||
FS.trackingDelegate["willMovePath"](old_path, new_path)
|
||
}
|
||
} catch (e) {
|
||
console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message)
|
||
}
|
||
FS.hashRemoveNode(old_node);
|
||
try {
|
||
old_dir.node_ops.rename(old_node, new_dir, new_name)
|
||
} catch (e) {
|
||
throw e
|
||
} finally {
|
||
FS.hashAddNode(old_node)
|
||
}
|
||
try {
|
||
if (FS.trackingDelegate["onMovePath"])
|
||
FS.trackingDelegate["onMovePath"](old_path, new_path)
|
||
} catch (e) {
|
||
console.log("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 err = FS.mayDelete(parent, name, true);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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) {
|
||
console.log("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) {
|
||
console.log("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 err = FS.mayDelete(parent, name, false);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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) {
|
||
console.log("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) {
|
||
console.log("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()
|
||
})
|
||
},
|
||
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 err = FS.nodePermissions(node, "w");
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
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 : 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) { }
|
||
}
|
||
var created = false;
|
||
if (flags & 64) {
|
||
if (node) {
|
||
if (flags & 128) {
|
||
throw new FS.ErrnoError(20)
|
||
}
|
||
} else {
|
||
node = FS.mknod(path, mode, 0);
|
||
created = true
|
||
}
|
||
}
|
||
if (!node) {
|
||
throw new FS.ErrnoError(44)
|
||
}
|
||
if (FS.isChrdev(node.mode)) {
|
||
flags &= ~512
|
||
}
|
||
if (flags & 65536 && !FS.isDir(node.mode)) {
|
||
throw new FS.ErrnoError(54)
|
||
}
|
||
if (!created) {
|
||
var err = FS.mayOpen(node, flags);
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
}
|
||
if (flags & 512) {
|
||
FS.truncate(node, 0)
|
||
}
|
||
flags &= ~(128 | 512);
|
||
var stream = FS.createStream({
|
||
node: node,
|
||
path: FS.getPath(node),
|
||
flags: flags,
|
||
seekable: true,
|
||
position: 0,
|
||
stream_ops: node.stream_ops,
|
||
ungotten: [],
|
||
error: false
|
||
}, fd_start, fd_end);
|
||
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;
|
||
console.log("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) {
|
||
console.log("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;
|
||
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.flags & 1024) {
|
||
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) {
|
||
console.log("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, buffer, offset, length, position, prot, flags) {
|
||
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, buffer, offset, 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 err = FS.nodePermissions(lookup.node, "x");
|
||
if (err) {
|
||
throw new FS.ErrnoError(err)
|
||
}
|
||
FS.currentPath = lookup.path
|
||
},
|
||
createDefaultDirectories: function () {
|
||
FS.mkdir("/tmp");
|
||
FS.mkdir("/home");
|
||
FS.mkdir("/home/web_user")
|
||
},
|
||
createDefaultDevices: function () {
|
||
FS.mkdir("/dev");
|
||
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));
|
||
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));
|
||
var random_device;
|
||
if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") {
|
||
var randomBuffer = new Uint8Array(1);
|
||
random_device = function () {
|
||
crypto.getRandomValues(randomBuffer);
|
||
return randomBuffer[0]
|
||
}
|
||
} else if (ENVIRONMENT_IS_NODE) {
|
||
try {
|
||
var crypto_module = require("crypto");
|
||
random_device = function () {
|
||
return crypto_module["randomBytes"](1)[0]
|
||
}
|
||
} catch (e) { }
|
||
} else { }
|
||
if (!random_device) {
|
||
random_device = function () {
|
||
abort("random_device")
|
||
}
|
||
}
|
||
FS.createDevice("/dev", "random", random_device);
|
||
FS.createDevice("/dev", "urandom", random_device);
|
||
FS.mkdir("/dev/shm");
|
||
FS.mkdir("/dev/shm/tmp")
|
||
},
|
||
createSpecialDirectories: function () {
|
||
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, 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;
|
||
return ret
|
||
}
|
||
};
|
||
return node
|
||
}
|
||
}, {}, "/proc/self/fd")
|
||
},
|
||
createStandardStreams: function () {
|
||
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")
|
||
}
|
||
var stdin = FS.open("/dev/stdin", "r");
|
||
var stdout = FS.open("/dev/stdout", "w");
|
||
var stderr = FS.open("/dev/stderr", "w")
|
||
},
|
||
ensureErrnoError: function () {
|
||
if (FS.ErrnoError)
|
||
return;
|
||
FS.ErrnoError = function ErrnoError(errno, node) {
|
||
this.node = node;
|
||
this.setErrno = function (errno) {
|
||
this.errno = errno
|
||
}
|
||
;
|
||
this.setErrno(errno);
|
||
this.message = "FS error"
|
||
}
|
||
;
|
||
FS.ErrnoError.prototype = new Error;
|
||
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
|
||
[44].forEach(function (code) {
|
||
FS.genericErrors[code] = new FS.ErrnoError(code);
|
||
FS.genericErrors[code].stack = "<generic error, no stack>"
|
||
})
|
||
},
|
||
staticInit: function () {
|
||
FS.ensureErrnoError();
|
||
FS.nameTable = new Array(4096);
|
||
FS.mount(MEMFS, {}, "/");
|
||
FS.createDefaultDirectories();
|
||
FS.createDefaultDevices();
|
||
FS.createSpecialDirectories();
|
||
FS.filesystems = {
|
||
"MEMFS": MEMFS,
|
||
"IDBFS": IDBFS,
|
||
"NODEFS": NODEFS,
|
||
"WORKERFS": WORKERFS
|
||
}
|
||
},
|
||
init: function (input, output, error) {
|
||
FS.init.initialized = true;
|
||
FS.ensureErrnoError();
|
||
Module["stdin"] = input || Module["stdin"];
|
||
Module["stdout"] = output || Module["stdout"];
|
||
Module["stderr"] = error || Module["stderr"];
|
||
FS.createStandardStreams()
|
||
},
|
||
quit: function () {
|
||
FS.init.initialized = false;
|
||
var fflush = Module["_fflush"];
|
||
if (fflush)
|
||
fflush(0);
|
||
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) {
|
||
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) { }
|
||
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
|
||
}
|
||
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);
|
||
FS.registerDevice(dev, {
|
||
open: function (stream) {
|
||
stream.seekable = false
|
||
},
|
||
close: function (stream) {
|
||
if (output && output.buffer && output.buffer.length) {
|
||
output(10)
|
||
}
|
||
},
|
||
read: function (stream, buffer, offset, length, pos) {
|
||
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_) {
|
||
try {
|
||
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) {
|
||
function LazyUint8Array() {
|
||
this.lengthKnown = false;
|
||
this.chunks = []
|
||
}
|
||
LazyUint8Array.prototype.get = 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() {
|
||
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(29)
|
||
}
|
||
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(29)
|
||
}
|
||
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 < size; i++) {
|
||
buffer[offset + i] = contents[position + i]
|
||
}
|
||
} else {
|
||
for (var i = 0; i < size; i++) {
|
||
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();
|
||
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
|
||
var dep = getUniqueRunDependency("cp " + fullname);
|
||
function processData(byteArray) {
|
||
function finish(byteArray) {
|
||
if (preFinish)
|
||
preFinish();
|
||
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() {
|
||
console.log("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;
|
||
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 = {
|
||
DEFAULT_POLLMASK: 5,
|
||
mappings: {},
|
||
umask: 511,
|
||
calculateAt: function (dirfd, path) {
|
||
if (path[0] !== "/") {
|
||
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))) {
|
||
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 ? 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 -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);
|
||
HEAP8[buf + len] = endChar;
|
||
return len
|
||
},
|
||
doAccess: function (path, amode) {
|
||
if (amode & ~7) {
|
||
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 && 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
|
||
}
|
||
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: 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 (fd) {
|
||
if (fd === undefined)
|
||
fd = SYSCALLS.get();
|
||
var stream = FS.getStream(fd);
|
||
if (!stream)
|
||
throw new FS.ErrnoError(8);
|
||
return stream
|
||
},
|
||
get64: function () {
|
||
var low = SYSCALLS.get()
|
||
, high = SYSCALLS.get();
|
||
return low
|
||
},
|
||
getZero: function () {
|
||
SYSCALLS.get()
|
||
}
|
||
};
|
||
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 -28
|
||
}
|
||
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 -28;
|
||
case 9:
|
||
___setErrNo(28);
|
||
return -1;
|
||
default:
|
||
{
|
||
return -28
|
||
}
|
||
}
|
||
} catch (e) {
|
||
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
|
||
abort(e);
|
||
return -e.errno
|
||
}
|
||
}
|
||
function ___syscall3(which, varargs) {
|
||
SYSCALLS.varargs = varargs;
|
||
try {
|
||
var stream = SYSCALLS.getStreamFromFD()
|
||
, buf = SYSCALLS.get()
|
||
, count = SYSCALLS.get();
|
||
return FS.read(stream, HEAP8, buf, count)
|
||
} catch (e) {
|
||
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
|
||
abort(e);
|
||
return -e.errno
|
||
}
|
||
}
|
||
function ___syscall4(which, varargs) {
|
||
SYSCALLS.varargs = varargs;
|
||
try {
|
||
var stream = SYSCALLS.getStreamFromFD()
|
||
, buf = SYSCALLS.get()
|
||
, count = SYSCALLS.get();
|
||
return FS.write(stream, HEAP8, buf, count)
|
||
} 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 -59;
|
||
return 0
|
||
}
|
||
case 21510:
|
||
case 21511:
|
||
case 21512:
|
||
case 21506:
|
||
case 21507:
|
||
case 21508:
|
||
{
|
||
if (!stream.tty)
|
||
return -59;
|
||
return 0
|
||
}
|
||
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
|
||
}
|
||
case 21531:
|
||
{
|
||
var argp = SYSCALLS.get();
|
||
return FS.ioctl(stream, op, argp)
|
||
}
|
||
case 21523:
|
||
{
|
||
if (!stream.tty)
|
||
return -59;
|
||
return 0
|
||
}
|
||
case 21524:
|
||
{
|
||
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 __emscripten_syscall_munmap(addr, len) {
|
||
if (addr === -1 || len === 0) {
|
||
return -28
|
||
}
|
||
var info = SYSCALLS.mappings[addr];
|
||
if (!info)
|
||
return 0;
|
||
if (len === info.len) {
|
||
var stream = FS.getStream(info.fd);
|
||
SYSCALLS.doMsync(addr, stream, len, info.flags);
|
||
FS.munmap(stream);
|
||
SYSCALLS.mappings[addr] = null;
|
||
if (info.allocated) {
|
||
_free(info.malloc)
|
||
}
|
||
}
|
||
return 0
|
||
}
|
||
function ___syscall91(which, varargs) {
|
||
SYSCALLS.varargs = varargs;
|
||
try {
|
||
var addr = SYSCALLS.get()
|
||
, len = SYSCALLS.get();
|
||
return __emscripten_syscall_munmap(addr, len)
|
||
} catch (e) {
|
||
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
|
||
abort(e);
|
||
return -e.errno
|
||
}
|
||
}
|
||
function ___unlock() { }
|
||
var tupleRegistrations = {};
|
||
function runDestructors(destructors) {
|
||
while (destructors.length) {
|
||
var ptr = destructors.pop();
|
||
var del = destructors.pop();
|
||
del(ptr)
|
||
}
|
||
}
|
||
function simpleReadValueFromPointer(pointer) {
|
||
return this["fromWireType"](HEAPU32[pointer >> 2])
|
||
}
|
||
var awaitingDependencies = {};
|
||
var registeredTypes = {};
|
||
var typeDependencies = {};
|
||
var char_0 = 48;
|
||
var char_9 = 57;
|
||
function makeLegalFunctionName(name) {
|
||
if (undefined === name) {
|
||
return "_unknown"
|
||
}
|
||
name = name.replace(/[^a-zA-Z0-9_]/g, "$");
|
||
var f = name.charCodeAt(0);
|
||
if (f >= char_0 && f <= char_9) {
|
||
return "_" + name
|
||
} else {
|
||
return name
|
||
}
|
||
}
|
||
function createNamedFunction(name, body) {
|
||
name = makeLegalFunctionName(name);
|
||
if (IsWechat) {
|
||
var f1 = function (body) {
|
||
return function () {
|
||
"use strict";
|
||
return body.apply(this, arguments);
|
||
}
|
||
}
|
||
return f1(body)
|
||
} else {
|
||
return new Function("body", "return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body)
|
||
}
|
||
|
||
}
|
||
function extendError(baseErrorType, errorName) {
|
||
var errorClass = createNamedFunction(errorName, function (message) {
|
||
this.name = errorName;
|
||
this.message = message;
|
||
var stack = new Error(message).stack;
|
||
if (stack !== undefined) {
|
||
this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, "")
|
||
}
|
||
});
|
||
|
||
errorClass.prototype = Object.create(baseErrorType.prototype);
|
||
errorClass.prototype.constructor = errorClass;
|
||
errorClass.prototype.toString = function () {
|
||
if (this.message === undefined) {
|
||
return this.name
|
||
} else {
|
||
return this.name + ": " + this.message
|
||
}
|
||
}
|
||
;
|
||
return errorClass
|
||
}
|
||
var InternalError = undefined;
|
||
function throwInternalError(message) {
|
||
throw new InternalError(message)
|
||
}
|
||
function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) {
|
||
myTypes.forEach(function (type) {
|
||
typeDependencies[type] = dependentTypes
|
||
});
|
||
function onComplete(typeConverters) {
|
||
var myTypeConverters = getTypeConverters(typeConverters);
|
||
if (myTypeConverters.length !== myTypes.length) {
|
||
throwInternalError("Mismatched type converter count")
|
||
}
|
||
for (var i = 0; i < myTypes.length; ++i) {
|
||
registerType(myTypes[i], myTypeConverters[i])
|
||
}
|
||
}
|
||
var typeConverters = new Array(dependentTypes.length);
|
||
var unregisteredTypes = [];
|
||
var registered = 0;
|
||
dependentTypes.forEach(function (dt, i) {
|
||
if (registeredTypes.hasOwnProperty(dt)) {
|
||
typeConverters[i] = registeredTypes[dt]
|
||
} else {
|
||
unregisteredTypes.push(dt);
|
||
if (!awaitingDependencies.hasOwnProperty(dt)) {
|
||
awaitingDependencies[dt] = []
|
||
}
|
||
awaitingDependencies[dt].push(function () {
|
||
typeConverters[i] = registeredTypes[dt];
|
||
++registered;
|
||
if (registered === unregisteredTypes.length) {
|
||
onComplete(typeConverters)
|
||
}
|
||
})
|
||
}
|
||
});
|
||
if (0 === unregisteredTypes.length) {
|
||
onComplete(typeConverters)
|
||
}
|
||
}
|
||
function __embind_finalize_value_array(rawTupleType) {
|
||
var reg = tupleRegistrations[rawTupleType];
|
||
delete tupleRegistrations[rawTupleType];
|
||
var elements = reg.elements;
|
||
var elementsLength = elements.length;
|
||
var elementTypes = elements.map(function (elt) {
|
||
return elt.getterReturnType
|
||
}).concat(elements.map(function (elt) {
|
||
return elt.setterArgumentType
|
||
}));
|
||
var rawConstructor = reg.rawConstructor;
|
||
var rawDestructor = reg.rawDestructor;
|
||
whenDependentTypesAreResolved([rawTupleType], elementTypes, function (elementTypes) {
|
||
elements.forEach(function (elt, i) {
|
||
var getterReturnType = elementTypes[i];
|
||
var getter = elt.getter;
|
||
var getterContext = elt.getterContext;
|
||
var setterArgumentType = elementTypes[i + elementsLength];
|
||
var setter = elt.setter;
|
||
var setterContext = elt.setterContext;
|
||
elt.read = function (ptr) {
|
||
return getterReturnType["fromWireType"](getter(getterContext, ptr))
|
||
}
|
||
;
|
||
elt.write = function (ptr, o) {
|
||
var destructors = [];
|
||
setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o));
|
||
runDestructors(destructors)
|
||
}
|
||
});
|
||
return [{
|
||
name: reg.name,
|
||
"fromWireType": function (ptr) {
|
||
var rv = new Array(elementsLength);
|
||
for (var i = 0; i < elementsLength; ++i) {
|
||
rv[i] = elements[i].read(ptr)
|
||
}
|
||
rawDestructor(ptr);
|
||
return rv
|
||
},
|
||
"toWireType": function (destructors, o) {
|
||
if (elementsLength !== o.length) {
|
||
throw new TypeError("Incorrect number of tuple elements for " + reg.name + ": expected=" + elementsLength + ", actual=" + o.length)
|
||
}
|
||
var ptr = rawConstructor();
|
||
for (var i = 0; i < elementsLength; ++i) {
|
||
elements[i].write(ptr, o[i])
|
||
}
|
||
if (destructors !== null) {
|
||
destructors.push(rawDestructor, ptr)
|
||
}
|
||
return ptr
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": simpleReadValueFromPointer,
|
||
destructorFunction: rawDestructor
|
||
}]
|
||
})
|
||
}
|
||
var structRegistrations = {};
|
||
function __embind_finalize_value_object(structType) {
|
||
var reg = structRegistrations[structType];
|
||
delete structRegistrations[structType];
|
||
var rawConstructor = reg.rawConstructor;
|
||
var rawDestructor = reg.rawDestructor;
|
||
var fieldRecords = reg.fields;
|
||
var fieldTypes = fieldRecords.map(function (field) {
|
||
return field.getterReturnType
|
||
}).concat(fieldRecords.map(function (field) {
|
||
return field.setterArgumentType
|
||
}));
|
||
whenDependentTypesAreResolved([structType], fieldTypes, function (fieldTypes) {
|
||
var fields = {};
|
||
fieldRecords.forEach(function (field, i) {
|
||
var fieldName = field.fieldName;
|
||
var getterReturnType = fieldTypes[i];
|
||
var getter = field.getter;
|
||
var getterContext = field.getterContext;
|
||
var setterArgumentType = fieldTypes[i + fieldRecords.length];
|
||
var setter = field.setter;
|
||
var setterContext = field.setterContext;
|
||
fields[fieldName] = {
|
||
read: function (ptr) {
|
||
return getterReturnType["fromWireType"](getter(getterContext, ptr))
|
||
},
|
||
write: function (ptr, o) {
|
||
var destructors = [];
|
||
setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o));
|
||
runDestructors(destructors)
|
||
}
|
||
}
|
||
});
|
||
return [{
|
||
name: reg.name,
|
||
"fromWireType": function (ptr) {
|
||
var rv = {};
|
||
for (var i in fields) {
|
||
rv[i] = fields[i].read(ptr)
|
||
}
|
||
rawDestructor(ptr);
|
||
return rv
|
||
},
|
||
"toWireType": function (destructors, o) {
|
||
for (var fieldName in fields) {
|
||
if (!(fieldName in o)) {
|
||
throw new TypeError("Missing field")
|
||
}
|
||
}
|
||
var ptr = rawConstructor();
|
||
for (fieldName in fields) {
|
||
fields[fieldName].write(ptr, o[fieldName])
|
||
}
|
||
if (destructors !== null) {
|
||
destructors.push(rawDestructor, ptr)
|
||
}
|
||
return ptr
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": simpleReadValueFromPointer,
|
||
destructorFunction: rawDestructor
|
||
}]
|
||
})
|
||
}
|
||
function getShiftFromSize(size) {
|
||
switch (size) {
|
||
case 1:
|
||
return 0;
|
||
case 2:
|
||
return 1;
|
||
case 4:
|
||
return 2;
|
||
case 8:
|
||
return 3;
|
||
default:
|
||
throw new TypeError("Unknown type size: " + size)
|
||
}
|
||
}
|
||
function embind_init_charCodes() {
|
||
var codes = new Array(256);
|
||
for (var i = 0; i < 256; ++i) {
|
||
codes[i] = String.fromCharCode(i)
|
||
}
|
||
embind_charCodes = codes
|
||
}
|
||
var embind_charCodes = undefined;
|
||
function readLatin1String(ptr) {
|
||
var ret = "";
|
||
var c = ptr;
|
||
while (HEAPU8[c]) {
|
||
ret += embind_charCodes[HEAPU8[c++]]
|
||
}
|
||
return ret
|
||
}
|
||
var BindingError = undefined;
|
||
function throwBindingError(message) {
|
||
throw new BindingError(message)
|
||
}
|
||
function registerType(rawType, registeredInstance, options) {
|
||
options = options || {};
|
||
if (!("argPackAdvance" in registeredInstance)) {
|
||
throw new TypeError("registerType registeredInstance requires argPackAdvance")
|
||
}
|
||
var name = registeredInstance.name;
|
||
if (!rawType) {
|
||
throwBindingError('type "' + name + '" must have a positive integer typeid pointer')
|
||
}
|
||
if (registeredTypes.hasOwnProperty(rawType)) {
|
||
if (options.ignoreDuplicateRegistrations) {
|
||
return
|
||
} else {
|
||
throwBindingError("Cannot register type '" + name + "' twice")
|
||
}
|
||
}
|
||
registeredTypes[rawType] = registeredInstance;
|
||
delete typeDependencies[rawType];
|
||
if (awaitingDependencies.hasOwnProperty(rawType)) {
|
||
var callbacks = awaitingDependencies[rawType];
|
||
delete awaitingDependencies[rawType];
|
||
callbacks.forEach(function (cb) {
|
||
cb()
|
||
})
|
||
}
|
||
}
|
||
function __embind_register_bool(rawType, name, size, trueValue, falseValue) {
|
||
var shift = getShiftFromSize(size);
|
||
name = readLatin1String(name);
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": function (wt) {
|
||
return !!wt
|
||
},
|
||
"toWireType": function (destructors, o) {
|
||
return o ? trueValue : falseValue
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": function (pointer) {
|
||
var heap;
|
||
if (size === 1) {
|
||
heap = HEAP8
|
||
} else if (size === 2) {
|
||
heap = HEAP16
|
||
} else if (size === 4) {
|
||
heap = HEAP32
|
||
} else {
|
||
throw new TypeError("Unknown boolean type size: " + name)
|
||
}
|
||
return this["fromWireType"](heap[pointer >> shift])
|
||
},
|
||
destructorFunction: null
|
||
})
|
||
}
|
||
function ClassHandle_isAliasOf(other) {
|
||
if (!(this instanceof ClassHandle)) {
|
||
return false
|
||
}
|
||
if (!(other instanceof ClassHandle)) {
|
||
return false
|
||
}
|
||
var leftClass = this.$$.ptrType.registeredClass;
|
||
var left = this.$$.ptr;
|
||
var rightClass = other.$$.ptrType.registeredClass;
|
||
var right = other.$$.ptr;
|
||
while (leftClass.baseClass) {
|
||
left = leftClass.upcast(left);
|
||
leftClass = leftClass.baseClass
|
||
}
|
||
while (rightClass.baseClass) {
|
||
right = rightClass.upcast(right);
|
||
rightClass = rightClass.baseClass
|
||
}
|
||
return leftClass === rightClass && left === right
|
||
}
|
||
function shallowCopyInternalPointer(o) {
|
||
return {
|
||
count: o.count,
|
||
deleteScheduled: o.deleteScheduled,
|
||
preservePointerOnDelete: o.preservePointerOnDelete,
|
||
ptr: o.ptr,
|
||
ptrType: o.ptrType,
|
||
smartPtr: o.smartPtr,
|
||
smartPtrType: o.smartPtrType
|
||
}
|
||
}
|
||
function throwInstanceAlreadyDeleted(obj) {
|
||
function getInstanceTypeName(handle) {
|
||
return handle.$$.ptrType.registeredClass.name
|
||
}
|
||
throwBindingError(getInstanceTypeName(obj) + " instance already deleted")
|
||
}
|
||
var finalizationGroup = false;
|
||
function detachFinalizer(handle) { }
|
||
function runDestructor($$) {
|
||
if ($$.smartPtr) {
|
||
$$.smartPtrType.rawDestructor($$.smartPtr)
|
||
} else {
|
||
$$.ptrType.registeredClass.rawDestructor($$.ptr)
|
||
}
|
||
}
|
||
function releaseClassHandle($$) {
|
||
$$.count.value -= 1;
|
||
var toDelete = 0 === $$.count.value;
|
||
if (toDelete) {
|
||
runDestructor($$)
|
||
}
|
||
}
|
||
function attachFinalizer(handle) {
|
||
if ("undefined" === typeof FinalizationGroup) {
|
||
attachFinalizer = function (handle) {
|
||
return handle
|
||
}
|
||
;
|
||
return handle
|
||
}
|
||
finalizationGroup = new FinalizationGroup(function (iter) {
|
||
for (var result = iter.next(); !result.done; result = iter.next()) {
|
||
var $$ = result.value;
|
||
if (!$$.ptr) {
|
||
console.warn("object already deleted: " + $$.ptr)
|
||
} else {
|
||
releaseClassHandle($$)
|
||
}
|
||
}
|
||
}
|
||
);
|
||
attachFinalizer = function (handle) {
|
||
finalizationGroup.register(handle, handle.$$, handle.$$);
|
||
return handle
|
||
}
|
||
;
|
||
detachFinalizer = function (handle) {
|
||
finalizationGroup.unregister(handle.$$)
|
||
}
|
||
;
|
||
return attachFinalizer(handle)
|
||
}
|
||
function ClassHandle_clone() {
|
||
if (!this.$$.ptr) {
|
||
throwInstanceAlreadyDeleted(this)
|
||
}
|
||
if (this.$$.preservePointerOnDelete) {
|
||
this.$$.count.value += 1;
|
||
return this
|
||
} else {
|
||
var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), {
|
||
$$: {
|
||
value: shallowCopyInternalPointer(this.$$)
|
||
}
|
||
}));
|
||
clone.$$.count.value += 1;
|
||
clone.$$.deleteScheduled = false;
|
||
return clone
|
||
}
|
||
}
|
||
function ClassHandle_delete() {
|
||
if (!this.$$.ptr) {
|
||
throwInstanceAlreadyDeleted(this)
|
||
}
|
||
if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {
|
||
throwBindingError("Object already scheduled for deletion")
|
||
}
|
||
detachFinalizer(this);
|
||
releaseClassHandle(this.$$);
|
||
if (!this.$$.preservePointerOnDelete) {
|
||
this.$$.smartPtr = undefined;
|
||
this.$$.ptr = undefined
|
||
}
|
||
}
|
||
function ClassHandle_isDeleted() {
|
||
return !this.$$.ptr
|
||
}
|
||
var delayFunction = undefined;
|
||
var deletionQueue = [];
|
||
function flushPendingDeletes() {
|
||
while (deletionQueue.length) {
|
||
var obj = deletionQueue.pop();
|
||
obj.$$.deleteScheduled = false;
|
||
obj["delete"]()
|
||
}
|
||
}
|
||
function ClassHandle_deleteLater() {
|
||
if (!this.$$.ptr) {
|
||
throwInstanceAlreadyDeleted(this)
|
||
}
|
||
if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {
|
||
throwBindingError("Object already scheduled for deletion")
|
||
}
|
||
deletionQueue.push(this);
|
||
if (deletionQueue.length === 1 && delayFunction) {
|
||
delayFunction(flushPendingDeletes)
|
||
}
|
||
this.$$.deleteScheduled = true;
|
||
return this
|
||
}
|
||
function init_ClassHandle() {
|
||
ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf;
|
||
ClassHandle.prototype["clone"] = ClassHandle_clone;
|
||
ClassHandle.prototype["delete"] = ClassHandle_delete;
|
||
ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted;
|
||
ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater
|
||
}
|
||
function ClassHandle() { }
|
||
var registeredPointers = {};
|
||
function ensureOverloadTable(proto, methodName, humanName) {
|
||
if (undefined === proto[methodName].overloadTable) {
|
||
var prevFunc = proto[methodName];
|
||
proto[methodName] = function () {
|
||
if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) {
|
||
throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!")
|
||
}
|
||
return proto[methodName].overloadTable[arguments.length].apply(this, arguments)
|
||
}
|
||
;
|
||
proto[methodName].overloadTable = [];
|
||
proto[methodName].overloadTable[prevFunc.argCount] = prevFunc
|
||
}
|
||
}
|
||
function exposePublicSymbol(name, value, numArguments) {
|
||
if (Module.hasOwnProperty(name)) {
|
||
if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) {
|
||
throwBindingError("Cannot register public name '" + name + "' twice")
|
||
}
|
||
ensureOverloadTable(Module, name, name);
|
||
if (Module.hasOwnProperty(numArguments)) {
|
||
throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!")
|
||
}
|
||
Module[name].overloadTable[numArguments] = value
|
||
} else {
|
||
Module[name] = value;
|
||
if (undefined !== numArguments) {
|
||
Module[name].numArguments = numArguments
|
||
}
|
||
}
|
||
}
|
||
function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) {
|
||
this.name = name;
|
||
this.constructor = constructor;
|
||
this.instancePrototype = instancePrototype;
|
||
this.rawDestructor = rawDestructor;
|
||
this.baseClass = baseClass;
|
||
this.getActualType = getActualType;
|
||
this.upcast = upcast;
|
||
this.downcast = downcast;
|
||
this.pureVirtualFunctions = []
|
||
}
|
||
function upcastPointer(ptr, ptrClass, desiredClass) {
|
||
while (ptrClass !== desiredClass) {
|
||
if (!ptrClass.upcast) {
|
||
throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name)
|
||
}
|
||
ptr = ptrClass.upcast(ptr);
|
||
ptrClass = ptrClass.baseClass
|
||
}
|
||
return ptr
|
||
}
|
||
function constNoSmartPtrRawPointerToWireType(destructors, handle) {
|
||
if (handle === null) {
|
||
if (this.isReference) {
|
||
throwBindingError("null is not a valid " + this.name)
|
||
}
|
||
return 0
|
||
}
|
||
if (!handle.$$) {
|
||
throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name)
|
||
}
|
||
if (!handle.$$.ptr) {
|
||
throwBindingError("Cannot pass deleted object as a pointer of type " + this.name)
|
||
}
|
||
var handleClass = handle.$$.ptrType.registeredClass;
|
||
var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
||
return ptr
|
||
}
|
||
function genericPointerToWireType(destructors, handle) {
|
||
var ptr;
|
||
if (handle === null) {
|
||
if (this.isReference) {
|
||
throwBindingError("null is not a valid " + this.name)
|
||
}
|
||
if (this.isSmartPointer) {
|
||
ptr = this.rawConstructor();
|
||
if (destructors !== null) {
|
||
destructors.push(this.rawDestructor, ptr)
|
||
}
|
||
return ptr
|
||
} else {
|
||
return 0
|
||
}
|
||
}
|
||
if (!handle.$$) {
|
||
throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name)
|
||
}
|
||
if (!handle.$$.ptr) {
|
||
throwBindingError("Cannot pass deleted object as a pointer of type " + this.name)
|
||
}
|
||
if (!this.isConst && handle.$$.ptrType.isConst) {
|
||
throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name)
|
||
}
|
||
var handleClass = handle.$$.ptrType.registeredClass;
|
||
ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
||
if (this.isSmartPointer) {
|
||
if (undefined === handle.$$.smartPtr) {
|
||
throwBindingError("Passing raw pointer to smart pointer is illegal")
|
||
}
|
||
switch (this.sharingPolicy) {
|
||
case 0:
|
||
if (handle.$$.smartPtrType === this) {
|
||
ptr = handle.$$.smartPtr
|
||
} else {
|
||
throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name)
|
||
}
|
||
break;
|
||
case 1:
|
||
ptr = handle.$$.smartPtr;
|
||
break;
|
||
case 2:
|
||
if (handle.$$.smartPtrType === this) {
|
||
ptr = handle.$$.smartPtr
|
||
} else {
|
||
var clonedHandle = handle["clone"]();
|
||
ptr = this.rawShare(ptr, __emval_register(function () {
|
||
clonedHandle["delete"]()
|
||
}));
|
||
if (destructors !== null) {
|
||
destructors.push(this.rawDestructor, ptr)
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
throwBindingError("Unsupporting sharing policy")
|
||
}
|
||
}
|
||
return ptr
|
||
}
|
||
function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {
|
||
if (handle === null) {
|
||
if (this.isReference) {
|
||
throwBindingError("null is not a valid " + this.name)
|
||
}
|
||
return 0
|
||
}
|
||
if (!handle.$$) {
|
||
throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name)
|
||
}
|
||
if (!handle.$$.ptr) {
|
||
throwBindingError("Cannot pass deleted object as a pointer of type " + this.name)
|
||
}
|
||
if (handle.$$.ptrType.isConst) {
|
||
throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name)
|
||
}
|
||
var handleClass = handle.$$.ptrType.registeredClass;
|
||
var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
||
return ptr
|
||
}
|
||
function RegisteredPointer_getPointee(ptr) {
|
||
if (this.rawGetPointee) {
|
||
ptr = this.rawGetPointee(ptr)
|
||
}
|
||
return ptr
|
||
}
|
||
function RegisteredPointer_destructor(ptr) {
|
||
if (this.rawDestructor) {
|
||
this.rawDestructor(ptr)
|
||
}
|
||
}
|
||
function RegisteredPointer_deleteObject(handle) {
|
||
if (handle !== null) {
|
||
handle["delete"]()
|
||
}
|
||
}
|
||
function downcastPointer(ptr, ptrClass, desiredClass) {
|
||
if (ptrClass === desiredClass) {
|
||
return ptr
|
||
}
|
||
if (undefined === desiredClass.baseClass) {
|
||
return null
|
||
}
|
||
var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);
|
||
if (rv === null) {
|
||
return null
|
||
}
|
||
return desiredClass.downcast(rv)
|
||
}
|
||
function getInheritedInstanceCount() {
|
||
return Object.keys(registeredInstances).length
|
||
}
|
||
function getLiveInheritedInstances() {
|
||
var rv = [];
|
||
for (var k in registeredInstances) {
|
||
if (registeredInstances.hasOwnProperty(k)) {
|
||
rv.push(registeredInstances[k])
|
||
}
|
||
}
|
||
return rv
|
||
}
|
||
function setDelayFunction(fn) {
|
||
delayFunction = fn;
|
||
if (deletionQueue.length && delayFunction) {
|
||
delayFunction(flushPendingDeletes)
|
||
}
|
||
}
|
||
function init_embind() {
|
||
Module["getInheritedInstanceCount"] = getInheritedInstanceCount;
|
||
Module["getLiveInheritedInstances"] = getLiveInheritedInstances;
|
||
Module["flushPendingDeletes"] = flushPendingDeletes;
|
||
Module["setDelayFunction"] = setDelayFunction
|
||
}
|
||
var registeredInstances = {};
|
||
function getBasestPointer(class_, ptr) {
|
||
if (ptr === undefined) {
|
||
throwBindingError("ptr should not be undefined")
|
||
}
|
||
while (class_.baseClass) {
|
||
ptr = class_.upcast(ptr);
|
||
class_ = class_.baseClass
|
||
}
|
||
return ptr
|
||
}
|
||
function getInheritedInstance(class_, ptr) {
|
||
ptr = getBasestPointer(class_, ptr);
|
||
return registeredInstances[ptr]
|
||
}
|
||
function makeClassHandle(prototype, record) {
|
||
if (!record.ptrType || !record.ptr) {
|
||
throwInternalError("makeClassHandle requires ptr and ptrType")
|
||
}
|
||
var hasSmartPtrType = !!record.smartPtrType;
|
||
var hasSmartPtr = !!record.smartPtr;
|
||
if (hasSmartPtrType !== hasSmartPtr) {
|
||
throwInternalError("Both smartPtrType and smartPtr must be specified")
|
||
}
|
||
record.count = {
|
||
value: 1
|
||
};
|
||
return attachFinalizer(Object.create(prototype, {
|
||
$$: {
|
||
value: record
|
||
}
|
||
}))
|
||
}
|
||
function RegisteredPointer_fromWireType(ptr) {
|
||
var rawPointer = this.getPointee(ptr);
|
||
if (!rawPointer) {
|
||
this.destructor(ptr);
|
||
return null
|
||
}
|
||
var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);
|
||
if (undefined !== registeredInstance) {
|
||
if (0 === registeredInstance.$$.count.value) {
|
||
registeredInstance.$$.ptr = rawPointer;
|
||
registeredInstance.$$.smartPtr = ptr;
|
||
return registeredInstance["clone"]()
|
||
} else {
|
||
var rv = registeredInstance["clone"]();
|
||
this.destructor(ptr);
|
||
return rv
|
||
}
|
||
}
|
||
function makeDefaultHandle() {
|
||
if (this.isSmartPointer) {
|
||
return makeClassHandle(this.registeredClass.instancePrototype, {
|
||
ptrType: this.pointeeType,
|
||
ptr: rawPointer,
|
||
smartPtrType: this,
|
||
smartPtr: ptr
|
||
})
|
||
} else {
|
||
return makeClassHandle(this.registeredClass.instancePrototype, {
|
||
ptrType: this,
|
||
ptr: ptr
|
||
})
|
||
}
|
||
}
|
||
var actualType = this.registeredClass.getActualType(rawPointer);
|
||
var registeredPointerRecord = registeredPointers[actualType];
|
||
if (!registeredPointerRecord) {
|
||
return makeDefaultHandle.call(this)
|
||
}
|
||
var toType;
|
||
if (this.isConst) {
|
||
toType = registeredPointerRecord.constPointerType
|
||
} else {
|
||
toType = registeredPointerRecord.pointerType
|
||
}
|
||
var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass);
|
||
if (dp === null) {
|
||
return makeDefaultHandle.call(this)
|
||
}
|
||
if (this.isSmartPointer) {
|
||
return makeClassHandle(toType.registeredClass.instancePrototype, {
|
||
ptrType: toType,
|
||
ptr: dp,
|
||
smartPtrType: this,
|
||
smartPtr: ptr
|
||
})
|
||
} else {
|
||
return makeClassHandle(toType.registeredClass.instancePrototype, {
|
||
ptrType: toType,
|
||
ptr: dp
|
||
})
|
||
}
|
||
}
|
||
function init_RegisteredPointer() {
|
||
RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee;
|
||
RegisteredPointer.prototype.destructor = RegisteredPointer_destructor;
|
||
RegisteredPointer.prototype["argPackAdvance"] = 8;
|
||
RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer;
|
||
RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject;
|
||
RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType
|
||
}
|
||
function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) {
|
||
this.name = name;
|
||
this.registeredClass = registeredClass;
|
||
this.isReference = isReference;
|
||
this.isConst = isConst;
|
||
this.isSmartPointer = isSmartPointer;
|
||
this.pointeeType = pointeeType;
|
||
this.sharingPolicy = sharingPolicy;
|
||
this.rawGetPointee = rawGetPointee;
|
||
this.rawConstructor = rawConstructor;
|
||
this.rawShare = rawShare;
|
||
this.rawDestructor = rawDestructor;
|
||
if (!isSmartPointer && registeredClass.baseClass === undefined) {
|
||
if (isConst) {
|
||
this["toWireType"] = constNoSmartPtrRawPointerToWireType;
|
||
this.destructorFunction = null
|
||
} else {
|
||
this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType;
|
||
this.destructorFunction = null
|
||
}
|
||
} else {
|
||
this["toWireType"] = genericPointerToWireType
|
||
}
|
||
}
|
||
function replacePublicSymbol(name, value, numArguments) {
|
||
if (!Module.hasOwnProperty(name)) {
|
||
throwInternalError("Replacing nonexistant public symbol")
|
||
}
|
||
if (undefined !== Module[name].overloadTable && undefined !== numArguments) {
|
||
Module[name].overloadTable[numArguments] = value
|
||
} else {
|
||
Module[name] = value;
|
||
Module[name].argCount = numArguments
|
||
}
|
||
}
|
||
function embind__requireFunction(signature, rawFunction) {
|
||
signature = readLatin1String(signature);
|
||
function makeDynCaller(dynCall) {
|
||
|
||
if (IsWechat) {
|
||
var f1 = function (dynCall, rawFunction) {
|
||
return function () {
|
||
return dynCall(rawFunction, ...arguments);
|
||
}
|
||
}
|
||
|
||
return f1(dynCall, rawFunction)
|
||
|
||
} else {
|
||
var args = [];
|
||
for (var i = 1; i < signature.length; ++i) {
|
||
args.push("a" + i)
|
||
}
|
||
var name = "dynCall_" + signature + "_" + rawFunction;
|
||
var body = "return function " + name + "(" + args.join(", ") + ") {\n";
|
||
body += " return dynCall(rawFunction" + (args.length ? ", " : "") + args.join(", ") + ");\n";
|
||
body += "};\n";
|
||
|
||
return new Function("dynCall", "rawFunction", body)(dynCall, rawFunction)
|
||
}
|
||
|
||
|
||
}
|
||
var fp;
|
||
if (Module["FUNCTION_TABLE_" + signature] !== undefined) {
|
||
fp = Module["FUNCTION_TABLE_" + signature][rawFunction]
|
||
} else if (typeof FUNCTION_TABLE !== "undefined") {
|
||
fp = FUNCTION_TABLE[rawFunction]
|
||
} else {
|
||
var dc = Module["dynCall_" + signature];
|
||
if (dc === undefined) {
|
||
dc = Module["dynCall_" + signature.replace(/f/g, "d")];
|
||
if (dc === undefined) {
|
||
throwBindingError("No dynCall invoker for signature: " + signature)
|
||
}
|
||
}
|
||
fp = makeDynCaller(dc)
|
||
}
|
||
if (typeof fp !== "function") {
|
||
throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction)
|
||
}
|
||
return fp
|
||
}
|
||
var UnboundTypeError = undefined;
|
||
function getTypeName(type) {
|
||
var ptr = ___getTypeName(type);
|
||
var rv = readLatin1String(ptr);
|
||
_free(ptr);
|
||
return rv
|
||
}
|
||
function throwUnboundTypeError(message, types) {
|
||
var unboundTypes = [];
|
||
var seen = {};
|
||
function visit(type) {
|
||
if (seen[type]) {
|
||
return
|
||
}
|
||
if (registeredTypes[type]) {
|
||
return
|
||
}
|
||
if (typeDependencies[type]) {
|
||
typeDependencies[type].forEach(visit);
|
||
return
|
||
}
|
||
unboundTypes.push(type);
|
||
seen[type] = true
|
||
}
|
||
types.forEach(visit);
|
||
throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "]))
|
||
}
|
||
function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) {
|
||
name = readLatin1String(name);
|
||
getActualType = embind__requireFunction(getActualTypeSignature, getActualType);
|
||
if (upcast) {
|
||
upcast = embind__requireFunction(upcastSignature, upcast)
|
||
}
|
||
if (downcast) {
|
||
downcast = embind__requireFunction(downcastSignature, downcast)
|
||
}
|
||
rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
|
||
var legalFunctionName = makeLegalFunctionName(name);
|
||
exposePublicSymbol(legalFunctionName, function () {
|
||
throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType])
|
||
});
|
||
whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) {
|
||
base = base[0];
|
||
var baseClass;
|
||
var basePrototype;
|
||
if (baseClassRawType) {
|
||
baseClass = base.registeredClass;
|
||
basePrototype = baseClass.instancePrototype
|
||
} else {
|
||
basePrototype = ClassHandle.prototype
|
||
}
|
||
var constructor = createNamedFunction(legalFunctionName, function () {
|
||
if (Object.getPrototypeOf(this) !== instancePrototype) {
|
||
throw new BindingError("Use 'new' to construct " + name)
|
||
}
|
||
if (undefined === registeredClass.constructor_body) {
|
||
throw new BindingError(name + " has no accessible constructor")
|
||
}
|
||
var body = registeredClass.constructor_body[arguments.length];
|
||
if (undefined === body) {
|
||
throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!")
|
||
}
|
||
return body.apply(this, arguments)
|
||
});
|
||
var instancePrototype = Object.create(basePrototype, {
|
||
constructor: {
|
||
value: constructor
|
||
}
|
||
});
|
||
constructor.prototype = instancePrototype;
|
||
var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast);
|
||
var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false);
|
||
var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false);
|
||
var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false);
|
||
registeredPointers[rawType] = {
|
||
pointerType: pointerConverter,
|
||
constPointerType: constPointerConverter
|
||
};
|
||
replacePublicSymbol(legalFunctionName, constructor);
|
||
return [referenceConverter, pointerConverter, constPointerConverter]
|
||
})
|
||
}
|
||
function new_(constructor, argumentList) {
|
||
if (!(constructor instanceof Function)) {
|
||
throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function")
|
||
}
|
||
|
||
var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function () { });
|
||
dummy.prototype = constructor.prototype;
|
||
var obj = new dummy;
|
||
|
||
var r = constructor.apply(obj, argumentList);
|
||
return r instanceof Object ? r : obj
|
||
}
|
||
function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) {
|
||
var argCount = argTypes.length;
|
||
if (argCount < 2) {
|
||
throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")
|
||
}
|
||
|
||
var isClassMethodFunc = argTypes[1] !== null && classType !== null;
|
||
var needsDestructorStack = false;
|
||
for (var i = 1; i < argTypes.length; ++i) {
|
||
if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) {
|
||
needsDestructorStack = true;
|
||
break
|
||
}
|
||
}
|
||
var returns = argTypes[0].name !== "void";
|
||
|
||
if (IsWechat) {
|
||
var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]];
|
||
for (var i = 0; i < argCount - 2; ++i) {
|
||
args2.push(argTypes[i + 2])
|
||
}
|
||
if (isClassMethodFunc) {
|
||
for (var i = 1; i < argCount; ++i) {
|
||
if (argTypes[i].destructorFunction !== null) {
|
||
args2.push(argTypes[i].destructorFunction)
|
||
}else{
|
||
args2.push(null)
|
||
}
|
||
}
|
||
} else {
|
||
for (var i = 2; i < argCount; ++i) {
|
||
if (argTypes[i].destructorFunction !== null) {
|
||
args2.push(argTypes[i].destructorFunction)
|
||
}else{
|
||
args2.push(null)
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
function f1(throwBindingError, invoker, fn, runDestructors, retType, classParam) {
|
||
// arguments = [argType0,argType1,argType2,arg0Wired_dtor]
|
||
// argType0,argType1,argType2
|
||
const argsTypeOrigin = Array.prototype.slice.call(arguments, 6, 6 + argCount - 2)
|
||
// arg0Wired_dtor
|
||
const argsWired_dtorOrigin = Array.prototype.slice.call(arguments, 6 + argCount - 2)
|
||
|
||
return function () {
|
||
// arguments = [arg0, arg1, arg2]
|
||
if (arguments.length !== argCount - 2) {
|
||
throwBindingError('function ' + humanName + ' called with ' + arguments.length + ' arguments, expected 0 args!');
|
||
}
|
||
var thisWired;
|
||
var destructors;
|
||
if (needsDestructorStack) {
|
||
destructors = [];
|
||
}
|
||
|
||
if (isClassMethodFunc) {
|
||
if (needsDestructorStack) {
|
||
thisWired = classParam.toWireType(destructors, this);
|
||
} else {
|
||
thisWired = classParam.toWireType(null, this);
|
||
}
|
||
}
|
||
|
||
// arg0Wired,arg1Wired,arg2Wired
|
||
var argsWired = [];
|
||
for (var i = 0; i < argCount - 2; ++i) {
|
||
if (needsDestructorStack) {
|
||
argsWired.push(argsTypeOrigin[i].toWireType(destructors, arguments[i]))
|
||
}
|
||
else {
|
||
argsWired.push(argsTypeOrigin[i].toWireType(null, arguments[i]))
|
||
}
|
||
}
|
||
|
||
var rv;
|
||
if (isClassMethodFunc) {
|
||
rv = invoker(fn, thisWired, ...argsWired);
|
||
} else {
|
||
rv = invoker(fn, ...argsWired);
|
||
}
|
||
|
||
if (needsDestructorStack) {
|
||
runDestructors(destructors);
|
||
} else {
|
||
if (isClassMethodFunc) {
|
||
for (var i = 1; i < argTypes.length; ++i) {
|
||
if (argTypes[i].destructorFunction !== null) {
|
||
if (i == 1) {
|
||
argsWired_dtorOrigin[i - 1](thisWired);
|
||
} else {
|
||
argsWired_dtorOrigin[i - 1](argsWired[i - 1]);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
for (var i = 2; i < argTypes.length; ++i) {
|
||
if (argTypes[i].destructorFunction !== null) {
|
||
argsWired_dtorOrigin[i - 2](argsWired[i - 2]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (returns) {
|
||
var ret = retType.fromWireType(rv);
|
||
return ret;
|
||
}
|
||
}
|
||
}
|
||
|
||
return f1.apply(null, args2)
|
||
} else {
|
||
|
||
|
||
var argsList = "";
|
||
var argsListWired = "";
|
||
for (var i = 0; i < argCount - 2; ++i) {
|
||
argsList += (i !== 0 ? ", " : "") + "arg" + i;
|
||
argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired"
|
||
}
|
||
|
||
var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\n" + "if (arguments.length !== " + (argCount - 2) + ") {\n" + "throwBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n" + "}\n";
|
||
if (needsDestructorStack) {
|
||
invokerFnBody += "var destructors = [];\n"
|
||
}
|
||
var dtorStack = needsDestructorStack ? "destructors" : "null";
|
||
var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"];
|
||
var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]];
|
||
if (isClassMethodFunc) {
|
||
invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n"
|
||
}
|
||
for (var i = 0; i < argCount - 2; ++i) {
|
||
invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n";
|
||
args1.push("argType" + i);
|
||
args2.push(argTypes[i + 2])
|
||
}
|
||
if (isClassMethodFunc) {
|
||
argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired
|
||
}
|
||
invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n";
|
||
if (needsDestructorStack) {
|
||
invokerFnBody += "runDestructors(destructors);\n"
|
||
} else {
|
||
for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) {
|
||
var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired";
|
||
if (argTypes[i].destructorFunction !== null) {
|
||
invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n";
|
||
args1.push(paramName + "_dtor");
|
||
args2.push(argTypes[i].destructorFunction)
|
||
}
|
||
}
|
||
}
|
||
if (returns) {
|
||
invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n"
|
||
} else { }
|
||
invokerFnBody += "}\n";
|
||
args1.push(invokerFnBody);
|
||
var invokerFunction = new_(Function, args1).apply(null, args2);
|
||
|
||
return invokerFunction
|
||
}
|
||
|
||
}
|
||
function heap32VectorToArray(count, firstElement) {
|
||
var array = [];
|
||
for (var i = 0; i < count; i++) {
|
||
array.push(HEAP32[(firstElement >> 2) + i])
|
||
}
|
||
return array
|
||
}
|
||
function __embind_register_class_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, fn) {
|
||
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
||
methodName = readLatin1String(methodName);
|
||
rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);
|
||
whenDependentTypesAreResolved([], [rawClassType], function (classType) {
|
||
classType = classType[0];
|
||
var humanName = classType.name + "." + methodName;
|
||
function unboundTypesHandler() {
|
||
throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes)
|
||
}
|
||
var proto = classType.registeredClass.constructor;
|
||
if (undefined === proto[methodName]) {
|
||
unboundTypesHandler.argCount = argCount - 1;
|
||
proto[methodName] = unboundTypesHandler
|
||
} else {
|
||
ensureOverloadTable(proto, methodName, humanName);
|
||
proto[methodName].overloadTable[argCount - 1] = unboundTypesHandler
|
||
}
|
||
whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) {
|
||
var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1));
|
||
var func = craftInvokerFunction(humanName, invokerArgsArray, null, rawInvoker, fn);
|
||
if (undefined === proto[methodName].overloadTable) {
|
||
func.argCount = argCount - 1;
|
||
proto[methodName] = func
|
||
} else {
|
||
proto[methodName].overloadTable[argCount - 1] = func
|
||
}
|
||
return []
|
||
});
|
||
return []
|
||
})
|
||
}
|
||
function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) {
|
||
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
||
invoker = embind__requireFunction(invokerSignature, invoker);
|
||
whenDependentTypesAreResolved([], [rawClassType], function (classType) {
|
||
classType = classType[0];
|
||
var humanName = "constructor " + classType.name;
|
||
if (undefined === classType.registeredClass.constructor_body) {
|
||
classType.registeredClass.constructor_body = []
|
||
}
|
||
if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) {
|
||
throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!")
|
||
}
|
||
classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() {
|
||
throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes)
|
||
}
|
||
;
|
||
whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) {
|
||
classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() {
|
||
if (arguments.length !== argCount - 1) {
|
||
throwBindingError(humanName + " called with " + arguments.length + " arguments, expected " + (argCount - 1))
|
||
}
|
||
var destructors = [];
|
||
var args = new Array(argCount);
|
||
args[0] = rawConstructor;
|
||
for (var i = 1; i < argCount; ++i) {
|
||
args[i] = argTypes[i]["toWireType"](destructors, arguments[i - 1])
|
||
}
|
||
var ptr = invoker.apply(null, args);
|
||
runDestructors(destructors);
|
||
return argTypes[0]["fromWireType"](ptr)
|
||
}
|
||
;
|
||
return []
|
||
});
|
||
return []
|
||
})
|
||
}
|
||
function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) {
|
||
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
||
methodName = readLatin1String(methodName);
|
||
rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);
|
||
whenDependentTypesAreResolved([], [rawClassType], function (classType) {
|
||
classType = classType[0];
|
||
var humanName = classType.name + "." + methodName;
|
||
if (isPureVirtual) {
|
||
classType.registeredClass.pureVirtualFunctions.push(methodName)
|
||
}
|
||
function unboundTypesHandler() {
|
||
throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes)
|
||
}
|
||
var proto = classType.registeredClass.instancePrototype;
|
||
var method = proto[methodName];
|
||
if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) {
|
||
unboundTypesHandler.argCount = argCount - 2;
|
||
unboundTypesHandler.className = classType.name;
|
||
proto[methodName] = unboundTypesHandler
|
||
} else {
|
||
ensureOverloadTable(proto, methodName, humanName);
|
||
proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler
|
||
}
|
||
whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) {
|
||
var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context);
|
||
if (undefined === proto[methodName].overloadTable) {
|
||
memberFunction.argCount = argCount - 2;
|
||
proto[methodName] = memberFunction
|
||
} else {
|
||
proto[methodName].overloadTable[argCount - 2] = memberFunction
|
||
}
|
||
return []
|
||
});
|
||
return []
|
||
})
|
||
}
|
||
function validateThis(this_, classType, humanName) {
|
||
if (!(this_ instanceof Object)) {
|
||
throwBindingError(humanName + ' with invalid "this": ' + this_)
|
||
}
|
||
if (!(this_ instanceof classType.registeredClass.constructor)) {
|
||
throwBindingError(humanName + ' incompatible with "this" of type ' + this_.constructor.name)
|
||
}
|
||
if (!this_.$$.ptr) {
|
||
throwBindingError("cannot call emscripten binding method " + humanName + " on deleted object")
|
||
}
|
||
return upcastPointer(this_.$$.ptr, this_.$$.ptrType.registeredClass, classType.registeredClass)
|
||
}
|
||
function __embind_register_class_property(classType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) {
|
||
fieldName = readLatin1String(fieldName);
|
||
getter = embind__requireFunction(getterSignature, getter);
|
||
whenDependentTypesAreResolved([], [classType], function (classType) {
|
||
classType = classType[0];
|
||
var humanName = classType.name + "." + fieldName;
|
||
var desc = {
|
||
get: function () {
|
||
throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType])
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
};
|
||
if (setter) {
|
||
desc.set = function () {
|
||
throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType])
|
||
}
|
||
} else {
|
||
desc.set = function (v) {
|
||
throwBindingError(humanName + " is a read-only property")
|
||
}
|
||
}
|
||
Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc);
|
||
whenDependentTypesAreResolved([], setter ? [getterReturnType, setterArgumentType] : [getterReturnType], function (types) {
|
||
var getterReturnType = types[0];
|
||
var desc = {
|
||
get: function () {
|
||
var ptr = validateThis(this, classType, humanName + " getter");
|
||
return getterReturnType["fromWireType"](getter(getterContext, ptr))
|
||
},
|
||
enumerable: true
|
||
};
|
||
if (setter) {
|
||
setter = embind__requireFunction(setterSignature, setter);
|
||
var setterArgumentType = types[1];
|
||
desc.set = function (v) {
|
||
var ptr = validateThis(this, classType, humanName + " setter");
|
||
var destructors = [];
|
||
setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, v));
|
||
runDestructors(destructors)
|
||
}
|
||
}
|
||
Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc);
|
||
return []
|
||
});
|
||
return []
|
||
})
|
||
}
|
||
function __embind_register_constant(name, type, value) {
|
||
name = readLatin1String(name);
|
||
whenDependentTypesAreResolved([], [type], function (type) {
|
||
type = type[0];
|
||
Module[name] = type["fromWireType"](value);
|
||
return []
|
||
})
|
||
}
|
||
var emval_free_list = [];
|
||
var emval_handle_array = [{}, {
|
||
value: undefined
|
||
}, {
|
||
value: null
|
||
}, {
|
||
value: true
|
||
}, {
|
||
value: false
|
||
}];
|
||
function __emval_decref(handle) {
|
||
if (handle > 4 && 0 === --emval_handle_array[handle].refcount) {
|
||
emval_handle_array[handle] = undefined;
|
||
emval_free_list.push(handle)
|
||
}
|
||
}
|
||
function count_emval_handles() {
|
||
var count = 0;
|
||
for (var i = 5; i < emval_handle_array.length; ++i) {
|
||
if (emval_handle_array[i] !== undefined) {
|
||
++count
|
||
}
|
||
}
|
||
return count
|
||
}
|
||
function get_first_emval() {
|
||
for (var i = 5; i < emval_handle_array.length; ++i) {
|
||
if (emval_handle_array[i] !== undefined) {
|
||
return emval_handle_array[i]
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
function init_emval() {
|
||
Module["count_emval_handles"] = count_emval_handles;
|
||
Module["get_first_emval"] = get_first_emval
|
||
}
|
||
function __emval_register(value) {
|
||
switch (value) {
|
||
case undefined:
|
||
{
|
||
return 1
|
||
}
|
||
case null:
|
||
{
|
||
return 2
|
||
}
|
||
case true:
|
||
{
|
||
return 3
|
||
}
|
||
case false:
|
||
{
|
||
return 4
|
||
}
|
||
default:
|
||
{
|
||
var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length;
|
||
emval_handle_array[handle] = {
|
||
refcount: 1,
|
||
value: value
|
||
};
|
||
return handle
|
||
}
|
||
}
|
||
}
|
||
function __embind_register_emval(rawType, name) {
|
||
name = readLatin1String(name);
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": function (handle) {
|
||
var rv = emval_handle_array[handle].value;
|
||
__emval_decref(handle);
|
||
return rv
|
||
},
|
||
"toWireType": function (destructors, value) {
|
||
return __emval_register(value)
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": simpleReadValueFromPointer,
|
||
destructorFunction: null
|
||
})
|
||
}
|
||
function _embind_repr(v) {
|
||
if (v === null) {
|
||
return "null"
|
||
}
|
||
var t = typeof v;
|
||
if (t === "object" || t === "array" || t === "function") {
|
||
return v.toString()
|
||
} else {
|
||
return "" + v
|
||
}
|
||
}
|
||
function floatReadValueFromPointer(name, shift) {
|
||
switch (shift) {
|
||
case 2:
|
||
return function (pointer) {
|
||
return this["fromWireType"](HEAPF32[pointer >> 2])
|
||
}
|
||
;
|
||
case 3:
|
||
return function (pointer) {
|
||
return this["fromWireType"](HEAPF64[pointer >> 3])
|
||
}
|
||
;
|
||
default:
|
||
throw new TypeError("Unknown float type: " + name)
|
||
}
|
||
}
|
||
function __embind_register_float(rawType, name, size) {
|
||
var shift = getShiftFromSize(size);
|
||
name = readLatin1String(name);
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": function (value) {
|
||
return value
|
||
},
|
||
"toWireType": function (destructors, value) {
|
||
if (typeof value !== "number" && typeof value !== "boolean") {
|
||
throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name)
|
||
}
|
||
return value
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": floatReadValueFromPointer(name, shift),
|
||
destructorFunction: null
|
||
})
|
||
}
|
||
function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn) {
|
||
var argTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
||
name = readLatin1String(name);
|
||
rawInvoker = embind__requireFunction(signature, rawInvoker);
|
||
exposePublicSymbol(name, function () {
|
||
throwUnboundTypeError("Cannot call " + name + " due to unbound types", argTypes)
|
||
}, argCount - 1);
|
||
whenDependentTypesAreResolved([], argTypes, function (argTypes) {
|
||
var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1));
|
||
replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn), argCount - 1);
|
||
return []
|
||
})
|
||
}
|
||
function integerReadValueFromPointer(name, shift, signed) {
|
||
switch (shift) {
|
||
case 0:
|
||
return signed ? function readS8FromPointer(pointer) {
|
||
return HEAP8[pointer]
|
||
}
|
||
: function readU8FromPointer(pointer) {
|
||
return HEAPU8[pointer]
|
||
}
|
||
;
|
||
case 1:
|
||
return signed ? function readS16FromPointer(pointer) {
|
||
return HEAP16[pointer >> 1]
|
||
}
|
||
: function readU16FromPointer(pointer) {
|
||
return HEAPU16[pointer >> 1]
|
||
}
|
||
;
|
||
case 2:
|
||
return signed ? function readS32FromPointer(pointer) {
|
||
return HEAP32[pointer >> 2]
|
||
}
|
||
: function readU32FromPointer(pointer) {
|
||
return HEAPU32[pointer >> 2]
|
||
}
|
||
;
|
||
default:
|
||
throw new TypeError("Unknown integer type: " + name)
|
||
}
|
||
}
|
||
function __embind_register_integer(primitiveType, name, size, minRange, maxRange) {
|
||
name = readLatin1String(name);
|
||
if (maxRange === -1) {
|
||
maxRange = 4294967295
|
||
}
|
||
var shift = getShiftFromSize(size);
|
||
var fromWireType = function (value) {
|
||
return value
|
||
};
|
||
if (minRange === 0) {
|
||
var bitshift = 32 - 8 * size;
|
||
fromWireType = function (value) {
|
||
return value << bitshift >>> bitshift
|
||
}
|
||
}
|
||
var isUnsignedType = name.indexOf("unsigned") != -1;
|
||
registerType(primitiveType, {
|
||
name: name,
|
||
"fromWireType": fromWireType,
|
||
"toWireType": function (destructors, value) {
|
||
if (typeof value !== "number" && typeof value !== "boolean") {
|
||
throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name)
|
||
}
|
||
if (value < minRange || value > maxRange) {
|
||
throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ", " + maxRange + "]!")
|
||
}
|
||
return isUnsignedType ? value >>> 0 : value | 0
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0),
|
||
destructorFunction: null
|
||
})
|
||
}
|
||
function __embind_register_memory_view(rawType, dataTypeIndex, name) {
|
||
var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];
|
||
var TA = typeMapping[dataTypeIndex];
|
||
function decodeMemoryView(handle) {
|
||
handle = handle >> 2;
|
||
var heap = HEAPU32;
|
||
var size = heap[handle];
|
||
var data = heap[handle + 1];
|
||
return new TA(heap["buffer"], data, size)
|
||
}
|
||
name = readLatin1String(name);
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": decodeMemoryView,
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": decodeMemoryView
|
||
}, {
|
||
ignoreDuplicateRegistrations: true
|
||
})
|
||
}
|
||
function __embind_register_smart_ptr(rawType, rawPointeeType, name, sharingPolicy, getPointeeSignature, rawGetPointee, constructorSignature, rawConstructor, shareSignature, rawShare, destructorSignature, rawDestructor) {
|
||
name = readLatin1String(name);
|
||
rawGetPointee = embind__requireFunction(getPointeeSignature, rawGetPointee);
|
||
rawConstructor = embind__requireFunction(constructorSignature, rawConstructor);
|
||
rawShare = embind__requireFunction(shareSignature, rawShare);
|
||
rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
|
||
whenDependentTypesAreResolved([rawType], [rawPointeeType], function (pointeeType) {
|
||
pointeeType = pointeeType[0];
|
||
var registeredPointer = new RegisteredPointer(name, pointeeType.registeredClass, false, false, true, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor);
|
||
return [registeredPointer]
|
||
})
|
||
}
|
||
function __embind_register_std_string(rawType, name) {
|
||
name = readLatin1String(name);
|
||
var stdStringIsUTF8 = name === "std::string";
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": function (value) {
|
||
var length = HEAPU32[value >> 2];
|
||
var str;
|
||
if (stdStringIsUTF8) {
|
||
var endChar = HEAPU8[value + 4 + length];
|
||
var endCharSwap = 0;
|
||
if (endChar != 0) {
|
||
endCharSwap = endChar;
|
||
HEAPU8[value + 4 + length] = 0
|
||
}
|
||
var decodeStartPtr = value + 4;
|
||
for (var i = 0; i <= length; ++i) {
|
||
var currentBytePtr = value + 4 + i;
|
||
if (HEAPU8[currentBytePtr] == 0) {
|
||
var stringSegment = UTF8ToString(decodeStartPtr);
|
||
if (str === undefined)
|
||
str = stringSegment;
|
||
else {
|
||
str += String.fromCharCode(0);
|
||
str += stringSegment
|
||
}
|
||
decodeStartPtr = currentBytePtr + 1
|
||
}
|
||
}
|
||
if (endCharSwap != 0)
|
||
HEAPU8[value + 4 + length] = endCharSwap
|
||
} else {
|
||
var a = new Array(length);
|
||
for (var i = 0; i < length; ++i) {
|
||
a[i] = String.fromCharCode(HEAPU8[value + 4 + i])
|
||
}
|
||
str = a.join("")
|
||
}
|
||
_free(value);
|
||
return str
|
||
},
|
||
"toWireType": function (destructors, value) {
|
||
if (value instanceof ArrayBuffer) {
|
||
value = new Uint8Array(value)
|
||
}
|
||
var getLength;
|
||
var valueIsOfTypeString = typeof value === "string";
|
||
if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) {
|
||
throwBindingError("Cannot pass non-string to std::string")
|
||
}
|
||
if (stdStringIsUTF8 && valueIsOfTypeString) {
|
||
getLength = function () {
|
||
return lengthBytesUTF8(value)
|
||
}
|
||
} else {
|
||
getLength = function () {
|
||
return value.length
|
||
}
|
||
}
|
||
var length = getLength();
|
||
var ptr = _malloc(4 + length + 1);
|
||
HEAPU32[ptr >> 2] = length;
|
||
if (stdStringIsUTF8 && valueIsOfTypeString) {
|
||
stringToUTF8(value, ptr + 4, length + 1)
|
||
} else {
|
||
if (valueIsOfTypeString) {
|
||
for (var i = 0; i < length; ++i) {
|
||
var charCode = value.charCodeAt(i);
|
||
if (charCode > 255) {
|
||
_free(ptr);
|
||
throwBindingError("String has UTF-16 code units that do not fit in 8 bits")
|
||
}
|
||
HEAPU8[ptr + 4 + i] = charCode
|
||
}
|
||
} else {
|
||
for (var i = 0; i < length; ++i) {
|
||
HEAPU8[ptr + 4 + i] = value[i]
|
||
}
|
||
}
|
||
}
|
||
if (destructors !== null) {
|
||
destructors.push(_free, ptr)
|
||
}
|
||
return ptr
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": simpleReadValueFromPointer,
|
||
destructorFunction: function (ptr) {
|
||
_free(ptr)
|
||
}
|
||
})
|
||
}
|
||
function __embind_register_std_wstring(rawType, charSize, name) {
|
||
name = readLatin1String(name);
|
||
var getHeap, shift;
|
||
if (charSize === 2) {
|
||
getHeap = function () {
|
||
return HEAPU16
|
||
}
|
||
;
|
||
shift = 1
|
||
} else if (charSize === 4) {
|
||
getHeap = function () {
|
||
return HEAPU32
|
||
}
|
||
;
|
||
shift = 2
|
||
}
|
||
registerType(rawType, {
|
||
name: name,
|
||
"fromWireType": function (value) {
|
||
var HEAP = getHeap();
|
||
var length = HEAPU32[value >> 2];
|
||
var a = new Array(length);
|
||
var start = value + 4 >> shift;
|
||
for (var i = 0; i < length; ++i) {
|
||
a[i] = String.fromCharCode(HEAP[start + i])
|
||
}
|
||
_free(value);
|
||
return a.join("")
|
||
},
|
||
"toWireType": function (destructors, value) {
|
||
var length = value.length;
|
||
var ptr = _malloc(4 + length * charSize);
|
||
var HEAP = getHeap();
|
||
HEAPU32[ptr >> 2] = length;
|
||
var start = ptr + 4 >> shift;
|
||
for (var i = 0; i < length; ++i) {
|
||
HEAP[start + i] = value.charCodeAt(i)
|
||
}
|
||
if (destructors !== null) {
|
||
destructors.push(_free, ptr)
|
||
}
|
||
return ptr
|
||
},
|
||
"argPackAdvance": 8,
|
||
"readValueFromPointer": simpleReadValueFromPointer,
|
||
destructorFunction: function (ptr) {
|
||
_free(ptr)
|
||
}
|
||
})
|
||
}
|
||
function __embind_register_value_array(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) {
|
||
tupleRegistrations[rawType] = {
|
||
name: readLatin1String(name),
|
||
rawConstructor: embind__requireFunction(constructorSignature, rawConstructor),
|
||
rawDestructor: embind__requireFunction(destructorSignature, rawDestructor),
|
||
elements: []
|
||
}
|
||
}
|
||
function __embind_register_value_array_element(rawTupleType, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) {
|
||
tupleRegistrations[rawTupleType].elements.push({
|
||
getterReturnType: getterReturnType,
|
||
getter: embind__requireFunction(getterSignature, getter),
|
||
getterContext: getterContext,
|
||
setterArgumentType: setterArgumentType,
|
||
setter: embind__requireFunction(setterSignature, setter),
|
||
setterContext: setterContext
|
||
})
|
||
}
|
||
function __embind_register_value_object(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) {
|
||
structRegistrations[rawType] = {
|
||
name: readLatin1String(name),
|
||
rawConstructor: embind__requireFunction(constructorSignature, rawConstructor),
|
||
rawDestructor: embind__requireFunction(destructorSignature, rawDestructor),
|
||
fields: []
|
||
}
|
||
}
|
||
function __embind_register_value_object_field(structType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) {
|
||
structRegistrations[structType].fields.push({
|
||
fieldName: readLatin1String(fieldName),
|
||
getterReturnType: getterReturnType,
|
||
getter: embind__requireFunction(getterSignature, getter),
|
||
getterContext: getterContext,
|
||
setterArgumentType: setterArgumentType,
|
||
setter: embind__requireFunction(setterSignature, setter),
|
||
setterContext: setterContext
|
||
})
|
||
}
|
||
function __embind_register_void(rawType, name) {
|
||
name = readLatin1String(name);
|
||
registerType(rawType, {
|
||
isVoid: true,
|
||
name: name,
|
||
"argPackAdvance": 0,
|
||
"fromWireType": function () {
|
||
return undefined
|
||
},
|
||
"toWireType": function (destructors, o) {
|
||
return undefined
|
||
}
|
||
})
|
||
}
|
||
function requireHandle(handle) {
|
||
if (!handle) {
|
||
throwBindingError("Cannot use deleted val. handle = " + handle)
|
||
}
|
||
return emval_handle_array[handle].value
|
||
}
|
||
function requireRegisteredType(rawType, humanName) {
|
||
var impl = registeredTypes[rawType];
|
||
if (undefined === impl) {
|
||
throwBindingError(humanName + " has unknown type " + getTypeName(rawType))
|
||
}
|
||
return impl
|
||
}
|
||
function __emval_as(handle, returnType, destructorsRef) {
|
||
handle = requireHandle(handle);
|
||
returnType = requireRegisteredType(returnType, "emval::as");
|
||
var destructors = [];
|
||
var rd = __emval_register(destructors);
|
||
HEAP32[destructorsRef >> 2] = rd;
|
||
return returnType["toWireType"](destructors, handle)
|
||
}
|
||
var emval_symbols = {};
|
||
function getStringOrSymbol(address) {
|
||
var symbol = emval_symbols[address];
|
||
if (symbol === undefined) {
|
||
return readLatin1String(address)
|
||
} else {
|
||
return symbol
|
||
}
|
||
}
|
||
var emval_methodCallers = [];
|
||
function __emval_call_void_method(caller, handle, methodName, args) {
|
||
caller = emval_methodCallers[caller];
|
||
handle = requireHandle(handle);
|
||
methodName = getStringOrSymbol(methodName);
|
||
caller(handle, methodName, null, args)
|
||
}
|
||
function __emval_addMethodCaller(caller) {
|
||
var id = emval_methodCallers.length;
|
||
emval_methodCallers.push(caller);
|
||
return id
|
||
}
|
||
function __emval_lookupTypes(argCount, argTypes, argWireTypes) {
|
||
var a = new Array(argCount);
|
||
for (var i = 0; i < argCount; ++i) {
|
||
a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], "parameter " + i)
|
||
}
|
||
return a
|
||
}
|
||
function __emval_get_method_caller(argCount, argTypes) {
|
||
|
||
var types = __emval_lookupTypes(argCount, argTypes);
|
||
var retType = types[0];
|
||
var signatureName = retType.name + "_$" + types.slice(1).map(function (t) {
|
||
return t.name
|
||
}).join("_") + "$";
|
||
var params = ["retType"];
|
||
var args = [retType];
|
||
var argsList = "";
|
||
for (var i = 0; i < argCount - 1; ++i) {
|
||
argsList += (i !== 0 ? ", " : "") + "arg" + i;
|
||
params.push("argType" + i);
|
||
args.push(types[1 + i])
|
||
}
|
||
var functionName = makeLegalFunctionName("methodCaller_" + signatureName);
|
||
var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n";
|
||
var offset = 0;
|
||
for (var i = 0; i < argCount - 1; ++i) {
|
||
functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n";
|
||
offset += types[i + 1]["argPackAdvance"]
|
||
}
|
||
functionBody += " var rv = handle[name](" + argsList + ");\n";
|
||
for (var i = 0; i < argCount - 1; ++i) {
|
||
if (types[i + 1]["deleteObject"]) {
|
||
functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n"
|
||
}
|
||
}
|
||
if (!retType.isVoid) {
|
||
functionBody += " return retType.toWireType(destructors, rv);\n"
|
||
}
|
||
functionBody += "};\n";
|
||
params.push(functionBody);
|
||
var invokerFunction = new_(Function, params).apply(null, args);
|
||
return __emval_addMethodCaller(invokerFunction)
|
||
}
|
||
function __emval_get_property(handle, key) {
|
||
handle = requireHandle(handle);
|
||
key = requireHandle(key);
|
||
return __emval_register(handle[key])
|
||
}
|
||
function __emval_incref(handle) {
|
||
if (handle > 4) {
|
||
emval_handle_array[handle].refcount += 1
|
||
}
|
||
}
|
||
function __emval_new_array() {
|
||
return __emval_register([])
|
||
}
|
||
function __emval_new_cstring(v) {
|
||
return __emval_register(getStringOrSymbol(v))
|
||
}
|
||
function __emval_run_destructors(handle) {
|
||
var destructors = emval_handle_array[handle].value;
|
||
runDestructors(destructors);
|
||
__emval_decref(handle)
|
||
}
|
||
function __emval_set_property(handle, key, value) {
|
||
handle = requireHandle(handle);
|
||
key = requireHandle(key);
|
||
value = requireHandle(value);
|
||
handle[key] = value
|
||
}
|
||
function __emval_take_value(type, argv) {
|
||
type = requireRegisteredType(type, "_emval_take_value");
|
||
var v = type["readValueFromPointer"](argv);
|
||
return __emval_register(v)
|
||
}
|
||
function _abort() {
|
||
abort()
|
||
}
|
||
function _emscripten_get_now_is_monotonic() {
|
||
return 0 || ENVIRONMENT_IS_NODE || typeof dateNow !== "undefined" || typeof performance === "object" && performance && typeof performance["now"] === "function"
|
||
}
|
||
function _clock_gettime(clk_id, tp) {
|
||
var now;
|
||
if (clk_id === 0) {
|
||
now = Date.now()
|
||
} else if (clk_id === 1 && _emscripten_get_now_is_monotonic()) {
|
||
now = _emscripten_get_now()
|
||
} else {
|
||
___setErrNo(28);
|
||
return -1
|
||
}
|
||
HEAP32[tp >> 2] = now / 1e3 | 0;
|
||
HEAP32[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0;
|
||
return 0
|
||
}
|
||
function _emscripten_get_heap_size() {
|
||
return HEAP8.length
|
||
}
|
||
function _emscripten_get_sbrk_ptr() {
|
||
return 1275456
|
||
}
|
||
function _emscripten_memcpy_big(dest, src, num) {
|
||
HEAPU8.set(HEAPU8.subarray(src, src + num), dest)
|
||
}
|
||
function emscripten_realloc_buffer(size) {
|
||
try {
|
||
wasmMemory.grow(size - buffer.byteLength + 65535 >> 16);
|
||
updateGlobalBufferAndViews(wasmMemory.buffer);
|
||
return 1
|
||
} catch (e) { }
|
||
}
|
||
function _emscripten_resize_heap(requestedSize) {
|
||
var oldSize = _emscripten_get_heap_size();
|
||
var PAGE_MULTIPLE = 65536;
|
||
var LIMIT = 2147483648 - PAGE_MULTIPLE;
|
||
if (requestedSize > LIMIT) {
|
||
return false
|
||
}
|
||
var MIN_TOTAL_MEMORY = 16777216;
|
||
var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY);
|
||
while (newSize < requestedSize) {
|
||
if (newSize <= 536870912) {
|
||
newSize = alignUp(2 * newSize, PAGE_MULTIPLE)
|
||
} else {
|
||
newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT)
|
||
}
|
||
}
|
||
newSize = Math.min(newSize, 1073741824);
|
||
if (newSize == oldSize) {
|
||
return false
|
||
}
|
||
var replacement = emscripten_realloc_buffer(newSize);
|
||
if (!replacement) {
|
||
return false
|
||
}
|
||
return true
|
||
}
|
||
var ENV = {};
|
||
function _emscripten_get_environ() {
|
||
if (!_emscripten_get_environ.strings) {
|
||
var env = {
|
||
"USER": "web_user",
|
||
"LOGNAME": "web_user",
|
||
"PATH": "/",
|
||
"PWD": "/",
|
||
"HOME": "/home/web_user",
|
||
"LANG": (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8",
|
||
"_": thisProgram
|
||
};
|
||
for (var x in ENV) {
|
||
env[x] = ENV[x]
|
||
}
|
||
var strings = [];
|
||
for (var x in env) {
|
||
strings.push(x + "=" + env[x])
|
||
}
|
||
_emscripten_get_environ.strings = strings
|
||
}
|
||
return _emscripten_get_environ.strings
|
||
}
|
||
function _environ_get(__environ, environ_buf) {
|
||
var strings = _emscripten_get_environ();
|
||
var bufSize = 0;
|
||
strings.forEach(function (string, i) {
|
||
var ptr = environ_buf + bufSize;
|
||
HEAP32[__environ + i * 4 >> 2] = ptr;
|
||
writeAsciiToMemory(string, ptr);
|
||
bufSize += string.length + 1
|
||
});
|
||
return 0
|
||
}
|
||
function _environ_sizes_get(penviron_count, penviron_buf_size) {
|
||
var strings = _emscripten_get_environ();
|
||
HEAP32[penviron_count >> 2] = strings.length;
|
||
var bufSize = 0;
|
||
strings.forEach(function (string) {
|
||
bufSize += string.length + 1
|
||
});
|
||
HEAP32[penviron_buf_size >> 2] = bufSize;
|
||
return 0
|
||
}
|
||
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 = 4294967296;
|
||
var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);
|
||
var DOUBLE_LIMIT = 9007199254740992;
|
||
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 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)],
|
||
HEAP32[newOffset >> 2] = tempI64[0],
|
||
HEAP32[newOffset + 4 >> 2] = tempI64[1];
|
||
if (stream.getdents && offset === 0 && whence === 0)
|
||
stream.getdents = null;
|
||
return 0
|
||
} catch (e) {
|
||
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 _pthread_mutexattr_destroy() { }
|
||
function _pthread_mutexattr_init() { }
|
||
function _pthread_mutexattr_settype() { }
|
||
function _roundf(d) {
|
||
d = +d;
|
||
return d >= +0 ? +Math_floor(d + +.5) : +Math_ceil(d - +.5)
|
||
}
|
||
function _sched_yield() {
|
||
return 0
|
||
}
|
||
function _setTempRet0($i) {
|
||
setTempRet0($i | 0)
|
||
}
|
||
function __isLeapYear(year) {
|
||
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)
|
||
}
|
||
function __arraySum(array, index) {
|
||
var sum = 0;
|
||
for (var i = 0; i <= index; sum += array[i++])
|
||
;
|
||
return sum
|
||
}
|
||
var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||
var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||
function __addDays(date, days) {
|
||
var newDate = new Date(date.getTime());
|
||
while (days > 0) {
|
||
var leap = __isLeapYear(newDate.getFullYear());
|
||
var currentMonth = newDate.getMonth();
|
||
var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth];
|
||
if (days > daysInCurrentMonth - newDate.getDate()) {
|
||
days -= daysInCurrentMonth - newDate.getDate() + 1;
|
||
newDate.setDate(1);
|
||
if (currentMonth < 11) {
|
||
newDate.setMonth(currentMonth + 1)
|
||
} else {
|
||
newDate.setMonth(0);
|
||
newDate.setFullYear(newDate.getFullYear() + 1)
|
||
}
|
||
} else {
|
||
newDate.setDate(newDate.getDate() + days);
|
||
return newDate
|
||
}
|
||
}
|
||
return newDate
|
||
}
|
||
function _strftime(s, maxsize, format, tm) {
|
||
var tm_zone = HEAP32[tm + 40 >> 2];
|
||
var date = {
|
||
tm_sec: HEAP32[tm >> 2],
|
||
tm_min: HEAP32[tm + 4 >> 2],
|
||
tm_hour: HEAP32[tm + 8 >> 2],
|
||
tm_mday: HEAP32[tm + 12 >> 2],
|
||
tm_mon: HEAP32[tm + 16 >> 2],
|
||
tm_year: HEAP32[tm + 20 >> 2],
|
||
tm_wday: HEAP32[tm + 24 >> 2],
|
||
tm_yday: HEAP32[tm + 28 >> 2],
|
||
tm_isdst: HEAP32[tm + 32 >> 2],
|
||
tm_gmtoff: HEAP32[tm + 36 >> 2],
|
||
tm_zone: tm_zone ? UTF8ToString(tm_zone) : ""
|
||
};
|
||
var pattern = UTF8ToString(format);
|
||
var EXPANSION_RULES_1 = {
|
||
"%c": "%a %b %d %H:%M:%S %Y",
|
||
"%D": "%m/%d/%y",
|
||
"%F": "%Y-%m-%d",
|
||
"%h": "%b",
|
||
"%r": "%I:%M:%S %p",
|
||
"%R": "%H:%M",
|
||
"%T": "%H:%M:%S",
|
||
"%x": "%m/%d/%y",
|
||
"%X": "%H:%M:%S",
|
||
"%Ec": "%c",
|
||
"%EC": "%C",
|
||
"%Ex": "%m/%d/%y",
|
||
"%EX": "%H:%M:%S",
|
||
"%Ey": "%y",
|
||
"%EY": "%Y",
|
||
"%Od": "%d",
|
||
"%Oe": "%e",
|
||
"%OH": "%H",
|
||
"%OI": "%I",
|
||
"%Om": "%m",
|
||
"%OM": "%M",
|
||
"%OS": "%S",
|
||
"%Ou": "%u",
|
||
"%OU": "%U",
|
||
"%OV": "%V",
|
||
"%Ow": "%w",
|
||
"%OW": "%W",
|
||
"%Oy": "%y"
|
||
};
|
||
for (var rule in EXPANSION_RULES_1) {
|
||
pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule])
|
||
}
|
||
var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
||
var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
||
function leadingSomething(value, digits, character) {
|
||
var str = typeof value === "number" ? value.toString() : value || "";
|
||
while (str.length < digits) {
|
||
str = character[0] + str
|
||
}
|
||
return str
|
||
}
|
||
function leadingNulls(value, digits) {
|
||
return leadingSomething(value, digits, "0")
|
||
}
|
||
function compareByDay(date1, date2) {
|
||
function sgn(value) {
|
||
return value < 0 ? -1 : value > 0 ? 1 : 0
|
||
}
|
||
var compare;
|
||
if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) {
|
||
if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) {
|
||
compare = sgn(date1.getDate() - date2.getDate())
|
||
}
|
||
}
|
||
return compare
|
||
}
|
||
function getFirstWeekStartDate(janFourth) {
|
||
switch (janFourth.getDay()) {
|
||
case 0:
|
||
return new Date(janFourth.getFullYear() - 1, 11, 29);
|
||
case 1:
|
||
return janFourth;
|
||
case 2:
|
||
return new Date(janFourth.getFullYear(), 0, 3);
|
||
case 3:
|
||
return new Date(janFourth.getFullYear(), 0, 2);
|
||
case 4:
|
||
return new Date(janFourth.getFullYear(), 0, 1);
|
||
case 5:
|
||
return new Date(janFourth.getFullYear() - 1, 11, 31);
|
||
case 6:
|
||
return new Date(janFourth.getFullYear() - 1, 11, 30)
|
||
}
|
||
}
|
||
function getWeekBasedYear(date) {
|
||
var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday);
|
||
var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4);
|
||
var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4);
|
||
var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);
|
||
var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);
|
||
if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) {
|
||
if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) {
|
||
return thisDate.getFullYear() + 1
|
||
} else {
|
||
return thisDate.getFullYear()
|
||
}
|
||
} else {
|
||
return thisDate.getFullYear() - 1
|
||
}
|
||
}
|
||
var EXPANSION_RULES_2 = {
|
||
"%a": function (date) {
|
||
return WEEKDAYS[date.tm_wday].substring(0, 3)
|
||
},
|
||
"%A": function (date) {
|
||
return WEEKDAYS[date.tm_wday]
|
||
},
|
||
"%b": function (date) {
|
||
return MONTHS[date.tm_mon].substring(0, 3)
|
||
},
|
||
"%B": function (date) {
|
||
return MONTHS[date.tm_mon]
|
||
},
|
||
"%C": function (date) {
|
||
var year = date.tm_year + 1900;
|
||
return leadingNulls(year / 100 | 0, 2)
|
||
},
|
||
"%d": function (date) {
|
||
return leadingNulls(date.tm_mday, 2)
|
||
},
|
||
"%e": function (date) {
|
||
return leadingSomething(date.tm_mday, 2, " ")
|
||
},
|
||
"%g": function (date) {
|
||
return getWeekBasedYear(date).toString().substring(2)
|
||
},
|
||
"%G": function (date) {
|
||
return getWeekBasedYear(date)
|
||
},
|
||
"%H": function (date) {
|
||
return leadingNulls(date.tm_hour, 2)
|
||
},
|
||
"%I": function (date) {
|
||
var twelveHour = date.tm_hour;
|
||
if (twelveHour == 0)
|
||
twelveHour = 12;
|
||
else if (twelveHour > 12)
|
||
twelveHour -= 12;
|
||
return leadingNulls(twelveHour, 2)
|
||
},
|
||
"%j": function (date) {
|
||
return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3)
|
||
},
|
||
"%m": function (date) {
|
||
return leadingNulls(date.tm_mon + 1, 2)
|
||
},
|
||
"%M": function (date) {
|
||
return leadingNulls(date.tm_min, 2)
|
||
},
|
||
"%n": function () {
|
||
return "\n"
|
||
},
|
||
"%p": function (date) {
|
||
if (date.tm_hour >= 0 && date.tm_hour < 12) {
|
||
return "AM"
|
||
} else {
|
||
return "PM"
|
||
}
|
||
},
|
||
"%S": function (date) {
|
||
return leadingNulls(date.tm_sec, 2)
|
||
},
|
||
"%t": function () {
|
||
return "\t"
|
||
},
|
||
"%u": function (date) {
|
||
return date.tm_wday || 7
|
||
},
|
||
"%U": function (date) {
|
||
var janFirst = new Date(date.tm_year + 1900, 0, 1);
|
||
var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay());
|
||
var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday);
|
||
if (compareByDay(firstSunday, endDate) < 0) {
|
||
var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31;
|
||
var firstSundayUntilEndJanuary = 31 - firstSunday.getDate();
|
||
var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate();
|
||
return leadingNulls(Math.ceil(days / 7), 2)
|
||
}
|
||
return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00"
|
||
},
|
||
"%V": function (date) {
|
||
var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4);
|
||
var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4);
|
||
var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);
|
||
var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);
|
||
var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday);
|
||
if (compareByDay(endDate, firstWeekStartThisYear) < 0) {
|
||
return "53"
|
||
}
|
||
if (compareByDay(firstWeekStartNextYear, endDate) <= 0) {
|
||
return "01"
|
||
}
|
||
var daysDifference;
|
||
if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) {
|
||
daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate()
|
||
} else {
|
||
daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate()
|
||
}
|
||
return leadingNulls(Math.ceil(daysDifference / 7), 2)
|
||
},
|
||
"%w": function (date) {
|
||
return date.tm_wday
|
||
},
|
||
"%W": function (date) {
|
||
var janFirst = new Date(date.tm_year, 0, 1);
|
||
var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1);
|
||
var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday);
|
||
if (compareByDay(firstMonday, endDate) < 0) {
|
||
var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31;
|
||
var firstMondayUntilEndJanuary = 31 - firstMonday.getDate();
|
||
var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate();
|
||
return leadingNulls(Math.ceil(days / 7), 2)
|
||
}
|
||
return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00"
|
||
},
|
||
"%y": function (date) {
|
||
return (date.tm_year + 1900).toString().substring(2)
|
||
},
|
||
"%Y": function (date) {
|
||
return date.tm_year + 1900
|
||
},
|
||
"%z": function (date) {
|
||
var off = date.tm_gmtoff;
|
||
var ahead = off >= 0;
|
||
off = Math.abs(off) / 60;
|
||
off = off / 60 * 100 + off % 60;
|
||
return (ahead ? "+" : "-") + String("0000" + off).slice(-4)
|
||
},
|
||
"%Z": function (date) {
|
||
return date.tm_zone
|
||
},
|
||
"%%": function () {
|
||
return "%"
|
||
}
|
||
};
|
||
for (var rule in EXPANSION_RULES_2) {
|
||
if (pattern.indexOf(rule) >= 0) {
|
||
pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date))
|
||
}
|
||
}
|
||
var bytes = intArrayFromString(pattern, false);
|
||
if (bytes.length > maxsize) {
|
||
return 0
|
||
}
|
||
writeArrayToMemory(bytes, s);
|
||
return bytes.length - 1
|
||
}
|
||
function _strftime_l(s, maxsize, format, tm) {
|
||
return _strftime(s, maxsize, format, tm)
|
||
}
|
||
function _sysconf(name) {
|
||
switch (name) {
|
||
case 30:
|
||
return PAGE_SIZE;
|
||
case 85:
|
||
var maxHeapSize = 2 * 1024 * 1024 * 1024 - 65536;
|
||
maxHeapSize = 1073741824;
|
||
return maxHeapSize / PAGE_SIZE;
|
||
case 132:
|
||
case 133:
|
||
case 12:
|
||
case 137:
|
||
case 138:
|
||
case 15:
|
||
case 235:
|
||
case 16:
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
case 149:
|
||
case 13:
|
||
case 10:
|
||
case 236:
|
||
case 153:
|
||
case 9:
|
||
case 21:
|
||
case 22:
|
||
case 159:
|
||
case 154:
|
||
case 14:
|
||
case 77:
|
||
case 78:
|
||
case 139:
|
||
case 80:
|
||
case 81:
|
||
case 82:
|
||
case 68:
|
||
case 67:
|
||
case 164:
|
||
case 11:
|
||
case 29:
|
||
case 47:
|
||
case 48:
|
||
case 95:
|
||
case 52:
|
||
case 51:
|
||
case 46:
|
||
return 200809;
|
||
case 79:
|
||
return 0;
|
||
case 27:
|
||
case 246:
|
||
case 127:
|
||
case 128:
|
||
case 23:
|
||
case 24:
|
||
case 160:
|
||
case 161:
|
||
case 181:
|
||
case 182:
|
||
case 242:
|
||
case 183:
|
||
case 184:
|
||
case 243:
|
||
case 244:
|
||
case 245:
|
||
case 165:
|
||
case 178:
|
||
case 179:
|
||
case 49:
|
||
case 50:
|
||
case 168:
|
||
case 169:
|
||
case 175:
|
||
case 170:
|
||
case 171:
|
||
case 172:
|
||
case 97:
|
||
case 76:
|
||
case 32:
|
||
case 173:
|
||
case 35:
|
||
return -1;
|
||
case 176:
|
||
case 177:
|
||
case 7:
|
||
case 155:
|
||
case 8:
|
||
case 157:
|
||
case 125:
|
||
case 126:
|
||
case 92:
|
||
case 93:
|
||
case 129:
|
||
case 130:
|
||
case 131:
|
||
case 94:
|
||
case 91:
|
||
return 1;
|
||
case 74:
|
||
case 60:
|
||
case 69:
|
||
case 70:
|
||
case 4:
|
||
return 1024;
|
||
case 31:
|
||
case 42:
|
||
case 72:
|
||
return 32;
|
||
case 87:
|
||
case 26:
|
||
case 33:
|
||
return 2147483647;
|
||
case 34:
|
||
case 1:
|
||
return 47839;
|
||
case 38:
|
||
case 36:
|
||
return 99;
|
||
case 43:
|
||
case 37:
|
||
return 2048;
|
||
case 0:
|
||
return 2097152;
|
||
case 3:
|
||
return 65536;
|
||
case 28:
|
||
return 32768;
|
||
case 44:
|
||
return 32767;
|
||
case 75:
|
||
return 16384;
|
||
case 39:
|
||
return 1e3;
|
||
case 89:
|
||
return 700;
|
||
case 71:
|
||
return 256;
|
||
case 40:
|
||
return 255;
|
||
case 2:
|
||
return 100;
|
||
case 180:
|
||
return 64;
|
||
case 25:
|
||
return 20;
|
||
case 5:
|
||
return 16;
|
||
case 6:
|
||
return 6;
|
||
case 73:
|
||
return 4;
|
||
case 84:
|
||
{
|
||
if (typeof navigator === "object")
|
||
return navigator["hardwareConcurrency"] || 1;
|
||
return 1
|
||
}
|
||
}
|
||
___setErrNo(28);
|
||
return -1
|
||
}
|
||
Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) {
|
||
err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");
|
||
Module["requestFullScreen"] = Module["requestFullscreen"];
|
||
Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice)
|
||
}
|
||
;
|
||
Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas, vrDevice) {
|
||
Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice)
|
||
}
|
||
;
|
||
Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) {
|
||
Browser.requestAnimationFrame(func)
|
||
}
|
||
;
|
||
Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) {
|
||
Browser.setCanvasSize(width, height, noUpdates)
|
||
}
|
||
;
|
||
Module["pauseMainLoop"] = function Module_pauseMainLoop() {
|
||
Browser.mainLoop.pause()
|
||
}
|
||
;
|
||
Module["resumeMainLoop"] = function Module_resumeMainLoop() {
|
||
Browser.mainLoop.resume()
|
||
}
|
||
;
|
||
Module["getUserMedia"] = function Module_getUserMedia() {
|
||
Browser.getUserMedia()
|
||
}
|
||
;
|
||
Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) {
|
||
return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes)
|
||
}
|
||
;
|
||
if (ENVIRONMENT_IS_NODE) {
|
||
_emscripten_get_now = function _emscripten_get_now_actual() {
|
||
var t = process["hrtime"]();
|
||
return t[0] * 1e3 + t[1] / 1e6
|
||
}
|
||
} else if (typeof dateNow !== "undefined") {
|
||
_emscripten_get_now = dateNow
|
||
} else if (typeof performance === "object" && performance && typeof performance["now"] === "function") {
|
||
_emscripten_get_now = function () {
|
||
return performance["now"]()
|
||
}
|
||
} else {
|
||
_emscripten_get_now = Date.now
|
||
}
|
||
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()
|
||
}
|
||
InternalError = Module["InternalError"] = extendError(Error, "InternalError");
|
||
embind_init_charCodes();
|
||
BindingError = Module["BindingError"] = extendError(Error, "BindingError");
|
||
init_ClassHandle();
|
||
init_RegisteredPointer();
|
||
init_embind();
|
||
UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError");
|
||
init_emval();
|
||
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
|
||
}
|
||
function intArrayToString(array) {
|
||
var ret = [];
|
||
for (var i = 0; i < array.length; i++) {
|
||
var chr = array[i];
|
||
if (chr > 255) {
|
||
if (ASSERTIONS) {
|
||
assert(false, "Character code " + chr + " (" + String.fromCharCode(chr) + ") at offset " + i + " not in 0x00-0xFF.")
|
||
}
|
||
chr &= 255
|
||
}
|
||
ret.push(String.fromCharCode(chr))
|
||
}
|
||
return ret.join("")
|
||
}
|
||
var decodeBase64 = typeof atob === "function" ? atob : function (input) {
|
||
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||
var output = "";
|
||
var chr1, chr2, chr3;
|
||
var enc1, enc2, enc3, enc4;
|
||
var i = 0;
|
||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||
do {
|
||
enc1 = keyStr.indexOf(input.charAt(i++));
|
||
enc2 = keyStr.indexOf(input.charAt(i++));
|
||
enc3 = keyStr.indexOf(input.charAt(i++));
|
||
enc4 = keyStr.indexOf(input.charAt(i++));
|
||
chr1 = enc1 << 2 | enc2 >> 4;
|
||
chr2 = (enc2 & 15) << 4 | enc3 >> 2;
|
||
chr3 = (enc3 & 3) << 6 | enc4;
|
||
output = output + String.fromCharCode(chr1);
|
||
if (enc3 !== 64) {
|
||
output = output + String.fromCharCode(chr2)
|
||
}
|
||
if (enc4 !== 64) {
|
||
output = output + String.fromCharCode(chr3)
|
||
}
|
||
} while (i < input.length);
|
||
return output
|
||
}
|
||
;
|
||
function intArrayFromBase64(s) {
|
||
if (typeof ENVIRONMENT_IS_NODE === "boolean" && ENVIRONMENT_IS_NODE) {
|
||
var buf;
|
||
try {
|
||
buf = Buffer.from(s, "base64")
|
||
} catch (_) {
|
||
buf = new Buffer(s, "base64")
|
||
}
|
||
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)
|
||
}
|
||
try {
|
||
var decoded = decodeBase64(s);
|
||
var bytes = new Uint8Array(decoded.length);
|
||
for (var i = 0; i < decoded.length; ++i) {
|
||
bytes[i] = decoded.charCodeAt(i)
|
||
}
|
||
return bytes
|
||
} catch (_) {
|
||
throw new Error("Converting base64 string to bytes failed.")
|
||
}
|
||
}
|
||
function tryParseAsDataURI(filename) {
|
||
if (!isDataURI(filename)) {
|
||
return
|
||
}
|
||
return intArrayFromBase64(filename.slice(dataURIPrefix.length))
|
||
}
|
||
var asmLibraryArg = {
|
||
"__cxa_allocate_exception": ___cxa_allocate_exception,
|
||
"__cxa_atexit": ___cxa_atexit,
|
||
"__cxa_throw": ___cxa_throw,
|
||
"__lock": ___lock,
|
||
"__map_file": ___map_file,
|
||
"__syscall221": ___syscall221,
|
||
"__syscall3": ___syscall3,
|
||
"__syscall4": ___syscall4,
|
||
"__syscall5": ___syscall5,
|
||
"__syscall54": ___syscall54,
|
||
"__syscall91": ___syscall91,
|
||
"__unlock": ___unlock,
|
||
"_embind_finalize_value_array": __embind_finalize_value_array,
|
||
"_embind_finalize_value_object": __embind_finalize_value_object,
|
||
"_embind_register_bool": __embind_register_bool,
|
||
"_embind_register_class": __embind_register_class,
|
||
"_embind_register_class_class_function": __embind_register_class_class_function,
|
||
"_embind_register_class_constructor": __embind_register_class_constructor,
|
||
"_embind_register_class_function": __embind_register_class_function,
|
||
"_embind_register_class_property": __embind_register_class_property,
|
||
"_embind_register_constant": __embind_register_constant,
|
||
"_embind_register_emval": __embind_register_emval,
|
||
"_embind_register_float": __embind_register_float,
|
||
"_embind_register_function": __embind_register_function,
|
||
"_embind_register_integer": __embind_register_integer,
|
||
"_embind_register_memory_view": __embind_register_memory_view,
|
||
"_embind_register_smart_ptr": __embind_register_smart_ptr,
|
||
"_embind_register_std_string": __embind_register_std_string,
|
||
"_embind_register_std_wstring": __embind_register_std_wstring,
|
||
"_embind_register_value_array": __embind_register_value_array,
|
||
"_embind_register_value_array_element": __embind_register_value_array_element,
|
||
"_embind_register_value_object": __embind_register_value_object,
|
||
"_embind_register_value_object_field": __embind_register_value_object_field,
|
||
"_embind_register_void": __embind_register_void,
|
||
"_emval_as": __emval_as,
|
||
"_emval_call_void_method": __emval_call_void_method,
|
||
"_emval_decref": __emval_decref,
|
||
"_emval_get_method_caller": __emval_get_method_caller,
|
||
"_emval_get_property": __emval_get_property,
|
||
"_emval_incref": __emval_incref,
|
||
"_emval_new_array": __emval_new_array,
|
||
"_emval_new_cstring": __emval_new_cstring,
|
||
"_emval_run_destructors": __emval_run_destructors,
|
||
"_emval_set_property": __emval_set_property,
|
||
"_emval_take_value": __emval_take_value,
|
||
"abort": _abort,
|
||
"clock_gettime": _clock_gettime,
|
||
"emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr,
|
||
"emscripten_memcpy_big": _emscripten_memcpy_big,
|
||
"emscripten_resize_heap": _emscripten_resize_heap,
|
||
"environ_get": _environ_get,
|
||
"environ_sizes_get": _environ_sizes_get,
|
||
"fd_close": _fd_close,
|
||
"fd_read": _fd_read,
|
||
"fd_seek": _fd_seek,
|
||
"fd_write": _fd_write,
|
||
"memory": wasmMemory,
|
||
"pthread_mutexattr_destroy": _pthread_mutexattr_destroy,
|
||
"pthread_mutexattr_init": _pthread_mutexattr_init,
|
||
"pthread_mutexattr_settype": _pthread_mutexattr_settype,
|
||
"roundf": _roundf,
|
||
"sched_yield": _sched_yield,
|
||
"setTempRet0": _setTempRet0,
|
||
"strftime_l": _strftime_l,
|
||
"sysconf": _sysconf,
|
||
"table": wasmTable
|
||
};
|
||
var asm = createWasm();
|
||
Module["asm"] = asm;
|
||
var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function () {
|
||
return Module["asm"]["__wasm_call_ctors"].apply(null, arguments)
|
||
}
|
||
;
|
||
var _malloc = Module["_malloc"] = function () {
|
||
return Module["asm"]["malloc"].apply(null, arguments)
|
||
}
|
||
;
|
||
var _free = Module["_free"] = function () {
|
||
return Module["asm"]["free"].apply(null, arguments)
|
||
}
|
||
;
|
||
var ___errno_location = Module["___errno_location"] = function () {
|
||
return Module["asm"]["__errno_location"].apply(null, arguments)
|
||
}
|
||
;
|
||
var _setThrew = Module["_setThrew"] = function () {
|
||
return Module["asm"]["setThrew"].apply(null, arguments)
|
||
}
|
||
;
|
||
var __ZSt18uncaught_exceptionv = Module["__ZSt18uncaught_exceptionv"] = function () {
|
||
return Module["asm"]["_ZSt18uncaught_exceptionv"].apply(null, arguments)
|
||
}
|
||
;
|
||
var ___cxa_demangle = Module["___cxa_demangle"] = function () {
|
||
return Module["asm"]["__cxa_demangle"].apply(null, arguments)
|
||
}
|
||
;
|
||
var ___getTypeName = Module["___getTypeName"] = function () {
|
||
return Module["asm"]["__getTypeName"].apply(null, arguments)
|
||
}
|
||
;
|
||
var ___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = function () {
|
||
return Module["asm"]["__embind_register_native_and_builtin_types"].apply(null, arguments)
|
||
}
|
||
;
|
||
var stackSave = Module["stackSave"] = function () {
|
||
return Module["asm"]["stackSave"].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 __growWasmMemory = Module["__growWasmMemory"] = function () {
|
||
return Module["asm"]["__growWasmMemory"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_ii = Module["dynCall_ii"] = function () {
|
||
return Module["asm"]["dynCall_ii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vi = Module["dynCall_vi"] = function () {
|
||
return Module["asm"]["dynCall_vi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_i = Module["dynCall_i"] = function () {
|
||
return Module["asm"]["dynCall_i"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iii = Module["dynCall_iii"] = function () {
|
||
return Module["asm"]["dynCall_iii"].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_iiiiii = Module["dynCall_iiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viii = Module["dynCall_viii"] = function () {
|
||
return Module["asm"]["dynCall_viii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiii = Module["dynCall_viiii"] = function () {
|
||
return Module["asm"]["dynCall_viiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vii = Module["dynCall_vii"] = function () {
|
||
return Module["asm"]["dynCall_vii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidd = Module["dynCall_viiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidd = Module["dynCall_viiiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiid = Module["dynCall_viiid"] = function () {
|
||
return Module["asm"]["dynCall_viiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiid = Module["dynCall_viiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiii = Module["dynCall_viiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_dii = Module["dynCall_dii"] = function () {
|
||
return Module["asm"]["dynCall_dii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diii = Module["dynCall_diii"] = function () {
|
||
return Module["asm"]["dynCall_diii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiid = Module["dynCall_iiiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_fiii = Module["dynCall_fiii"] = function () {
|
||
return Module["asm"]["dynCall_fiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_fiiii = Module["dynCall_fiiii"] = function () {
|
||
return Module["asm"]["dynCall_fiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_fiiiii = Module["dynCall_fiiiii"] = function () {
|
||
return Module["asm"]["dynCall_fiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiii = Module["dynCall_diiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiii = Module["dynCall_diiii"] = function () {
|
||
return Module["asm"]["dynCall_diiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viid = Module["dynCall_viid"] = function () {
|
||
return Module["asm"]["dynCall_viid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_fii = Module["dynCall_fii"] = function () {
|
||
return Module["asm"]["dynCall_fii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viif = Module["dynCall_viif"] = function () {
|
||
return Module["asm"]["dynCall_viif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiii = Module["dynCall_iiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiif = Module["dynCall_viiif"] = function () {
|
||
return Module["asm"]["dynCall_viiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiif = Module["dynCall_iiiif"] = function () {
|
||
return Module["asm"]["dynCall_iiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddii = Module["dynCall_viiiddii"] = function () {
|
||
return Module["asm"]["dynCall_viiiddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddii = Module["dynCall_viiddii"] = function () {
|
||
return Module["asm"]["dynCall_viiddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddi = Module["dynCall_viiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddi = Module["dynCall_viiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidd = Module["dynCall_viidd"] = function () {
|
||
return Module["asm"]["dynCall_viidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddi = Module["dynCall_viiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddddii = Module["dynCall_viiiiddddii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddddii = Module["dynCall_viiiddddii"] = function () {
|
||
return Module["asm"]["dynCall_viiiddddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddddi = Module["dynCall_viiiiddddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddddi = Module["dynCall_viiiddddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiddddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidddd = Module["dynCall_viiiidddd"] = function () {
|
||
return Module["asm"]["dynCall_viiiidddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidddd = Module["dynCall_viiidddd"] = function () {
|
||
return Module["asm"]["dynCall_viiidddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddd = Module["dynCall_viiiiddd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddd = Module["dynCall_viiiddd"] = function () {
|
||
return Module["asm"]["dynCall_viiiddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddidddd = Module["dynCall_viiiddidddd"] = function () {
|
||
return Module["asm"]["dynCall_viiiddidddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddidddd = Module["dynCall_viiddidddd"] = function () {
|
||
return Module["asm"]["dynCall_viiddidddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddiddd = Module["dynCall_viiiddiddd"] = function () {
|
||
return Module["asm"]["dynCall_viiiddiddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddiddd = Module["dynCall_viiddiddd"] = function () {
|
||
return Module["asm"]["dynCall_viiddiddd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddidd = Module["dynCall_viiiddidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiddidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddidd = Module["dynCall_viiddidd"] = function () {
|
||
return Module["asm"]["dynCall_viiddidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddid = Module["dynCall_viiiddid"] = function () {
|
||
return Module["asm"]["dynCall_viiiddid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddid = Module["dynCall_viiddid"] = function () {
|
||
return Module["asm"]["dynCall_viiddid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiddi = Module["dynCall_viiiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidd = Module["dynCall_viiiiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiid = Module["dynCall_viiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiddi = Module["dynCall_viiiiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidd = Module["dynCall_viiiiiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiid = Module["dynCall_viiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiii = Module["dynCall_viiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiddi = Module["dynCall_viiiiiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiidd = Module["dynCall_viiiiiiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiid = Module["dynCall_viiiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidiiid = Module["dynCall_viiidiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiidiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidiiid = Module["dynCall_viidiiid"] = function () {
|
||
return Module["asm"]["dynCall_viidiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viididdii = Module["dynCall_viididdii"] = function () {
|
||
return Module["asm"]["dynCall_viididdii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vididdii = Module["dynCall_vididdii"] = function () {
|
||
return Module["asm"]["dynCall_vididdii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viididdi = Module["dynCall_viididdi"] = function () {
|
||
return Module["asm"]["dynCall_viididdi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vididdi = Module["dynCall_vididdi"] = function () {
|
||
return Module["asm"]["dynCall_vididdi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidi = Module["dynCall_viiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidi = Module["dynCall_viidi"] = function () {
|
||
return Module["asm"]["dynCall_viidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiii = Module["dynCall_viiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiiiidi = Module["dynCall_viiiidiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidiiiidi = Module["dynCall_viiidiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiidiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiiiid = Module["dynCall_viiiiiiiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiiid = Module["dynCall_viiiiiiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiiii = Module["dynCall_viiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiii = Module["dynCall_viiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiiiiiiiii = Module["dynCall_diiiiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiiiiiiii = Module["dynCall_diiiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiiiiiii = Module["dynCall_diiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiiiiii = Module["dynCall_diiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_di = Module["dynCall_di"] = function () {
|
||
return Module["asm"]["dynCall_di"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidi = Module["dynCall_viiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidi = Module["dynCall_viiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vidiii = Module["dynCall_vidiii"] = function () {
|
||
return Module["asm"]["dynCall_vidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vdiii = Module["dynCall_vdiii"] = function () {
|
||
return Module["asm"]["dynCall_vdiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vidii = Module["dynCall_vidii"] = function () {
|
||
return Module["asm"]["dynCall_vidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vdii = Module["dynCall_vdii"] = function () {
|
||
return Module["asm"]["dynCall_vdii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiifi = Module["dynCall_viiiiiifi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiifi = Module["dynCall_viiiiifi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiif = Module["dynCall_viiiiiif"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiif = Module["dynCall_viiiiif"] = function () {
|
||
return Module["asm"]["dynCall_viiiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiiiii = Module["dynCall_viiiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidddiiii = Module["dynCall_viiiidddiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidddiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidddiiii = Module["dynCall_viiidddiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiidddiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidddiii = Module["dynCall_viiiidddiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidddiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidddiii = Module["dynCall_viiidddiii"] = function () {
|
||
return Module["asm"]["dynCall_viiidddiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidddii = Module["dynCall_viiiidddii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidddii = Module["dynCall_viiidddii"] = function () {
|
||
return Module["asm"]["dynCall_viiidddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidddi = Module["dynCall_viiiidddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiidddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidddi = Module["dynCall_viiidddi"] = function () {
|
||
return Module["asm"]["dynCall_viiidddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiididi = Module["dynCall_iiiiiididi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiididi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiididi = Module["dynCall_viiiiididi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiididi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiidid = Module["dynCall_iiiiiidid"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiidid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidid = Module["dynCall_viiiiidid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiidi = Module["dynCall_iiiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiid = Module["dynCall_iiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidi = Module["dynCall_viiiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiidiid = Module["dynCall_iiiiidiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiiidiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiid = Module["dynCall_viiiidiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiidii = Module["dynCall_iiiiidii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidii = Module["dynCall_viiiidii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiidi = Module["dynCall_iiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiid = Module["dynCall_iiiiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiiii = Module["dynCall_diiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiiii = Module["dynCall_diiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiididii = Module["dynCall_viiididii"] = function () {
|
||
return Module["asm"]["dynCall_viiididii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viididii = Module["dynCall_viididii"] = function () {
|
||
return Module["asm"]["dynCall_viididii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiididi = Module["dynCall_viiididi"] = function () {
|
||
return Module["asm"]["dynCall_viiididi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viididi = Module["dynCall_viididi"] = function () {
|
||
return Module["asm"]["dynCall_viididi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidd = Module["dynCall_iiidd"] = function () {
|
||
return Module["asm"]["dynCall_iiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddiiid = Module["dynCall_viiiiddiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddiiid = Module["dynCall_viiiddiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiddiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddiii = Module["dynCall_viiiiddiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddiii = Module["dynCall_viiiddiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiddiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddii = Module["dynCall_viiiiddii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddiiiid = Module["dynCall_viiiiddiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddiiiid = Module["dynCall_viiiddiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiddiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddiiii = Module["dynCall_viiiiddiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiddiiii = Module["dynCall_viiiddiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiddiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiiii = Module["dynCall_diiiiii"] = function () {
|
||
return Module["asm"]["dynCall_diiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiid = Module["dynCall_diiiid"] = function () {
|
||
return Module["asm"]["dynCall_diiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiid = Module["dynCall_diiid"] = function () {
|
||
return Module["asm"]["dynCall_diiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddiii = Module["dynCall_viiddiii"] = function () {
|
||
return Module["asm"]["dynCall_viiddiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vidi = Module["dynCall_vidi"] = function () {
|
||
return Module["asm"]["dynCall_vidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiid = Module["dynCall_viiiiiiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiiii = Module["dynCall_viiiiidiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiiii = Module["dynCall_viiiidiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiii = Module["dynCall_viiiiidiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiii = Module["dynCall_viiiidiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidii = Module["dynCall_viiiiidii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiidi = Module["dynCall_viiiiiiidi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiiifdii = Module["dynCall_iiiiiiiiiifdii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiiifdii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiifdii = Module["dynCall_iiiiiiiiifdii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiifdii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiiifdi = Module["dynCall_iiiiiiiiiifdi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiiifdi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiifdi = Module["dynCall_iiiiiiiiifdi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiifdi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiiifd = Module["dynCall_iiiiiiiiiifd"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiiifd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiifd = Module["dynCall_iiiiiiiiifd"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiifd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiiif = Module["dynCall_iiiiiiiiiif"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiif = Module["dynCall_iiiiiiiiif"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiiddi = Module["dynCall_diiiddi"] = function () {
|
||
return Module["asm"]["dynCall_diiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_diiddi = Module["dynCall_diiddi"] = function () {
|
||
return Module["asm"]["dynCall_diiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidiiiii = Module["dynCall_iiidiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiidiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidiiiii = Module["dynCall_viidiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viidiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidiiii = Module["dynCall_iiidiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidiiii = Module["dynCall_viidiiii"] = function () {
|
||
return Module["asm"]["dynCall_viidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidiii = Module["dynCall_iiidiii"] = function () {
|
||
return Module["asm"]["dynCall_iiidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidiii = Module["dynCall_viidiii"] = function () {
|
||
return Module["asm"]["dynCall_viidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidii = Module["dynCall_iiidii"] = function () {
|
||
return Module["asm"]["dynCall_iiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viidii = Module["dynCall_viidii"] = function () {
|
||
return Module["asm"]["dynCall_viidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiidi = Module["dynCall_iiidi"] = function () {
|
||
return Module["asm"]["dynCall_iiidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiid = Module["dynCall_iiid"] = function () {
|
||
return Module["asm"]["dynCall_iiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiifiii = Module["dynCall_iiiiifiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiifiii = Module["dynCall_viiiifiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiifii = Module["dynCall_iiiiifii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiifii = Module["dynCall_viiiifii"] = function () {
|
||
return Module["asm"]["dynCall_viiiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiifi = Module["dynCall_iiiiifi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiifi = Module["dynCall_viiiifi"] = function () {
|
||
return Module["asm"]["dynCall_viiiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiif = Module["dynCall_iiiiif"] = function () {
|
||
return Module["asm"]["dynCall_iiiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiif = Module["dynCall_viiiif"] = function () {
|
||
return Module["asm"]["dynCall_viiiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vid = Module["dynCall_vid"] = function () {
|
||
return Module["asm"]["dynCall_vid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiffi = Module["dynCall_iiiiffi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiffi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiffi = Module["dynCall_viiiffi"] = function () {
|
||
return Module["asm"]["dynCall_viiiffi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiff = Module["dynCall_iiiiff"] = function () {
|
||
return Module["asm"]["dynCall_iiiiff"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiff = Module["dynCall_viiiff"] = function () {
|
||
return Module["asm"]["dynCall_viiiff"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiffi = Module["dynCall_iiiiiiffi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiffi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiffi = Module["dynCall_viiiiiffi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiffi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiff = Module["dynCall_iiiiiiff"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiff"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiff = Module["dynCall_viiiiiff"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiff"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iidi = Module["dynCall_iidi"] = function () {
|
||
return Module["asm"]["dynCall_iidi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iid = Module["dynCall_iid"] = function () {
|
||
return Module["asm"]["dynCall_iid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidiiii = Module["dynCall_viiidiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidiii = Module["dynCall_viiidiii"] = function () {
|
||
return Module["asm"]["dynCall_viiidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidii = Module["dynCall_viiidii"] = function () {
|
||
return Module["asm"]["dynCall_viiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiiiii = Module["dynCall_viiiiidiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidiiiii = Module["dynCall_viiiiiidiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidiiii = Module["dynCall_viiiiiidiiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidiii = Module["dynCall_viiiiiidiii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiidii = Module["dynCall_viiiiiidii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiidii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiifii = Module["dynCall_viiiiifii"] = function () {
|
||
return Module["asm"]["dynCall_viiiiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiifii = Module["dynCall_viiifii"] = function () {
|
||
return Module["asm"]["dynCall_viiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiifi = Module["dynCall_viiifi"] = function () {
|
||
return Module["asm"]["dynCall_viiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiddiid = Module["dynCall_iiiddiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiddiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddiid = Module["dynCall_viiddiid"] = function () {
|
||
return Module["asm"]["dynCall_viiddiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiddii = Module["dynCall_iiiddii"] = function () {
|
||
return Module["asm"]["dynCall_iiiddii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiddi = Module["dynCall_iiiddi"] = function () {
|
||
return Module["asm"]["dynCall_iiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiddiiid = Module["dynCall_iiiddiiid"] = function () {
|
||
return Module["asm"]["dynCall_iiiddiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiddiiid = Module["dynCall_viiddiiid"] = function () {
|
||
return Module["asm"]["dynCall_viiddiiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiididiii = Module["dynCall_iiiiiiiididiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiididiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiiiiiiiii = Module["dynCall_iiiiiiiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiiiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiiddi = Module["dynCall_viiiidiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiiddi = Module["dynCall_viiiiidiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiidiidd = Module["dynCall_viiiidiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiidiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiidd = Module["dynCall_viiiiidiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiidiid = Module["dynCall_viiiiidiid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiidiid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiifiii = Module["dynCall_iiiifiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiifiii = Module["dynCall_viiifiii"] = function () {
|
||
return Module["asm"]["dynCall_viiifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiifii = Module["dynCall_iiiifii"] = function () {
|
||
return Module["asm"]["dynCall_iiiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiifi = Module["dynCall_iiiifi"] = function () {
|
||
return Module["asm"]["dynCall_iiiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiddiddi = Module["dynCall_iiiiiddiddi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiddiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddiddi = Module["dynCall_viiiiddiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiddidd = Module["dynCall_iiiiiddidd"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiddidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddidd = Module["dynCall_viiiiddidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiddid = Module["dynCall_iiiiiddid"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiddid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiddid = Module["dynCall_viiiiddid"] = function () {
|
||
return Module["asm"]["dynCall_viiiiddid"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiddi = Module["dynCall_iiiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiidd = Module["dynCall_iiiiidd"] = function () {
|
||
return Module["asm"]["dynCall_iiiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifiiiiiii = Module["dynCall_iiifiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiifiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifiiiiiii = Module["dynCall_viifiiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viifiiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifiiiiii = Module["dynCall_iiifiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiifiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifiiiiii = Module["dynCall_viifiiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viifiiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifiiiii = Module["dynCall_iiifiiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiifiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifiiiii = Module["dynCall_viifiiiii"] = function () {
|
||
return Module["asm"]["dynCall_viifiiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifiiii = Module["dynCall_iiifiiii"] = function () {
|
||
return Module["asm"]["dynCall_iiifiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifiiii = Module["dynCall_viifiiii"] = function () {
|
||
return Module["asm"]["dynCall_viifiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifiii = Module["dynCall_iiifiii"] = function () {
|
||
return Module["asm"]["dynCall_iiifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifiii = Module["dynCall_viifiii"] = function () {
|
||
return Module["asm"]["dynCall_viifiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifii = Module["dynCall_iiifii"] = function () {
|
||
return Module["asm"]["dynCall_iiifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifii = Module["dynCall_viifii"] = function () {
|
||
return Module["asm"]["dynCall_viifii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiifi = Module["dynCall_iiifi"] = function () {
|
||
return Module["asm"]["dynCall_iiifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viifi = Module["dynCall_viifi"] = function () {
|
||
return Module["asm"]["dynCall_viifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiif = Module["dynCall_iiif"] = function () {
|
||
return Module["asm"]["dynCall_iiif"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viijii = Module["dynCall_viijii"] = function () {
|
||
return Module["asm"]["dynCall_viijii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_ji = Module["dynCall_ji"] = function () {
|
||
return Module["asm"]["dynCall_ji"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiiiddi = Module["dynCall_viiiiiiiiiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_v = Module["dynCall_v"] = function () {
|
||
return Module["asm"]["dynCall_v"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiiiiiiidd = Module["dynCall_viiiiiiiiidd"] = function () {
|
||
return Module["asm"]["dynCall_viiiiiiiiidd"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_jiii = Module["dynCall_jiii"] = function () {
|
||
return Module["asm"]["dynCall_jiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vij = Module["dynCall_vij"] = function () {
|
||
return Module["asm"]["dynCall_vij"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiifiididiii = Module["dynCall_iiiiiifiididiii"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiifiididiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiidiiddi = Module["dynCall_viiidiiddi"] = function () {
|
||
return Module["asm"]["dynCall_viiidiiddi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiij = Module["dynCall_viiij"] = function () {
|
||
return Module["asm"]["dynCall_viiij"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_jiiii = Module["dynCall_jiiii"] = function () {
|
||
return Module["asm"]["dynCall_jiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viiiij = Module["dynCall_viiiij"] = function () {
|
||
return Module["asm"]["dynCall_viiiij"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_jii = Module["dynCall_jii"] = function () {
|
||
return Module["asm"]["dynCall_jii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_viji = Module["dynCall_viji"] = function () {
|
||
return Module["asm"]["dynCall_viji"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_vifi = Module["dynCall_vifi"] = function () {
|
||
return Module["asm"]["dynCall_vifi"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_jiji = Module["dynCall_jiji"] = function () {
|
||
return Module["asm"]["dynCall_jiji"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iidiiii = Module["dynCall_iidiiii"] = function () {
|
||
return Module["asm"]["dynCall_iidiiii"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiij = Module["dynCall_iiiiij"] = function () {
|
||
return Module["asm"]["dynCall_iiiiij"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiijj = Module["dynCall_iiiiijj"] = function () {
|
||
return Module["asm"]["dynCall_iiiiijj"].apply(null, arguments)
|
||
}
|
||
;
|
||
var dynCall_iiiiiijj = Module["dynCall_iiiiiijj"] = function () {
|
||
return Module["asm"]["dynCall_iiiiiijj"].apply(null, arguments)
|
||
}
|
||
;
|
||
Module["asm"] = asm;
|
||
Module["getMemory"] = getMemory;
|
||
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;
|
||
Module["calledRun"] = calledRun;
|
||
var calledRun;
|
||
Module["then"] = function (func) {
|
||
if (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
|
||
}
|
||
dependenciesFulfilled = function runCaller() {
|
||
if (!calledRun)
|
||
run();
|
||
if (!calledRun)
|
||
dependenciesFulfilled = runCaller
|
||
}
|
||
;
|
||
function run(args) {
|
||
args = args || arguments_;
|
||
if (runDependencies > 0) {
|
||
return
|
||
}
|
||
preRun();
|
||
if (runDependencies > 0)
|
||
return;
|
||
function doRun() {
|
||
if (calledRun)
|
||
return;
|
||
calledRun = true;
|
||
Module["calledRun"] = true;
|
||
if (ABORT)
|
||
return;
|
||
initRuntime();
|
||
preMain();
|
||
if (Module["onRuntimeInitialized"])
|
||
Module["onRuntimeInitialized"]();
|
||
postRun()
|
||
}
|
||
if (Module["setStatus"]) {
|
||
Module["setStatus"]("Running...");
|
||
setTimeout(function () {
|
||
setTimeout(function () {
|
||
Module["setStatus"]("")
|
||
}, 1);
|
||
doRun()
|
||
}, 1)
|
||
} else {
|
||
doRun()
|
||
}
|
||
}
|
||
Module["run"] = run;
|
||
if (Module["preInit"]) {
|
||
if (typeof Module["preInit"] == "function")
|
||
Module["preInit"] = [Module["preInit"]];
|
||
while (Module["preInit"].length > 0) {
|
||
Module["preInit"].pop()()
|
||
}
|
||
}
|
||
noExitRuntime = true;
|
||
run();
|
||
if (typeof Module.FS === "undefined" && typeof FS !== "undefined") {
|
||
Module.FS = FS
|
||
}
|
||
|
||
if (!IsWechat) {
|
||
// 在微信里不执行
|
||
Module["imread"] = function (imageSource) {
|
||
var img = null;
|
||
if (typeof imageSource === "string") {
|
||
img = document.getElementById(imageSource)
|
||
} else {
|
||
img = imageSource
|
||
}
|
||
var canvas = null;
|
||
var ctx = null;
|
||
if (img instanceof HTMLImageElement) {
|
||
canvas = document.createElement("canvas");
|
||
canvas.width = img.width;
|
||
canvas.height = img.height;
|
||
ctx = canvas.getContext("2d");
|
||
ctx.drawImage(img, 0, 0, img.width, img.height)
|
||
} else if (img instanceof HTMLCanvasElement) {
|
||
canvas = img;
|
||
ctx = canvas.getContext("2d")
|
||
} else {
|
||
throw new Error("Please input the valid canvas or img id.");
|
||
return
|
||
}
|
||
var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||
return cv.matFromImageData(imgData)
|
||
|
||
};
|
||
// 在微信里不执行
|
||
Module["imshow"] = function (canvasSource, mat) {
|
||
var canvas = null;
|
||
if (typeof canvasSource === "string") {
|
||
canvas = document.getElementById(canvasSource)
|
||
} else {
|
||
canvas = canvasSource
|
||
}
|
||
if (!(canvas instanceof HTMLCanvasElement)) {
|
||
throw new Error("Please input the valid canvas element or id.");
|
||
return
|
||
}
|
||
if (!(mat instanceof cv.Mat)) {
|
||
throw new Error("Please input the valid cv.Mat instance.");
|
||
return
|
||
}
|
||
var img = new cv.Mat;
|
||
var depth = mat.type() % 8;
|
||
var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255;
|
||
var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0;
|
||
mat.convertTo(img, cv.CV_8U, scale, shift);
|
||
switch (img.type()) {
|
||
case cv.CV_8UC1:
|
||
cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA);
|
||
break;
|
||
case cv.CV_8UC3:
|
||
cv.cvtColor(img, img, cv.COLOR_RGB2RGBA);
|
||
break;
|
||
case cv.CV_8UC4:
|
||
break;
|
||
default:
|
||
throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)");
|
||
return
|
||
}
|
||
var imgData = new ImageData(new Uint8ClampedArray(img.data), img.cols, img.rows);
|
||
var ctx = canvas.getContext("2d");
|
||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||
canvas.width = imgData.width;
|
||
canvas.height = imgData.height;
|
||
ctx.putImageData(imgData, 0, 0);
|
||
img.delete()
|
||
|
||
};
|
||
} else {
|
||
Module["imread"] = function (imgData) {
|
||
return cv.matFromImageData(imgData)
|
||
}
|
||
;
|
||
Module["imshow"] = function (canvas, mat) {
|
||
if (!(mat instanceof cv.Mat)) {
|
||
throw new Error("Please input the valid cv.Mat instance.");
|
||
return
|
||
}
|
||
var img = new cv.Mat;
|
||
var depth = mat.type() % 8;
|
||
var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255;
|
||
var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0;
|
||
mat.convertTo(img, cv.CV_8U, scale, shift);
|
||
switch (img.type()) {
|
||
case cv.CV_8UC1:
|
||
cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA);
|
||
break;
|
||
case cv.CV_8UC3:
|
||
cv.cvtColor(img, img, cv.COLOR_RGB2RGBA);
|
||
break;
|
||
case cv.CV_8UC4:
|
||
break;
|
||
default:
|
||
throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)");
|
||
return
|
||
}
|
||
|
||
var ctx = canvas.getContext("2d");
|
||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||
|
||
// 创建ImageData对象
|
||
var imgData = ctx.createImageData(img.cols, img.rows);
|
||
// imgData.data是只读对象,但是imgData.data.set()方法可修改imgData.data。
|
||
imgData.data.set(new Uint8ClampedArray(img.data))
|
||
// 画布canvas的宽度和高度,不能比图像imgData小。
|
||
canvas.width = imgData.width;
|
||
canvas.height = imgData.height;
|
||
// 需要传递ImageData类型,但小程序无法通过new ImageData()创建该类型。
|
||
ctx.putImageData(imgData, 0, 0);
|
||
img.delete()
|
||
};
|
||
|
||
}
|
||
|
||
|
||
Module["VideoCapture"] = function (videoSource) {
|
||
var video = null;
|
||
if (typeof videoSource === "string") {
|
||
video = document.getElementById(videoSource)
|
||
} else {
|
||
video = videoSource
|
||
}
|
||
if (!(video instanceof HTMLVideoElement)) {
|
||
throw new Error("Please input the valid video element or id.");
|
||
return
|
||
}
|
||
var canvas = document.createElement("canvas");
|
||
canvas.width = video.width;
|
||
canvas.height = video.height;
|
||
var ctx = canvas.getContext("2d");
|
||
this.video = video;
|
||
this.read = function (frame) {
|
||
if (!(frame instanceof cv.Mat)) {
|
||
throw new Error("Please input the valid cv.Mat instance.");
|
||
return
|
||
}
|
||
if (frame.type() !== cv.CV_8UC4) {
|
||
throw new Error("Bad type of input mat: the type should be cv.CV_8UC4.");
|
||
return
|
||
}
|
||
if (frame.cols !== video.width || frame.rows !== video.height) {
|
||
throw new Error("Bad size of input mat: the size should be same as the video.");
|
||
return
|
||
}
|
||
ctx.drawImage(video, 0, 0, video.width, video.height);
|
||
frame.data.set(ctx.getImageData(0, 0, video.width, video.height).data)
|
||
}
|
||
}
|
||
;
|
||
function Range(start, end) {
|
||
this.start = typeof start === "undefined" ? 0 : start;
|
||
this.end = typeof end === "undefined" ? 0 : end
|
||
}
|
||
Module["Range"] = Range;
|
||
function Point(x, y) {
|
||
this.x = typeof x === "undefined" ? 0 : x;
|
||
this.y = typeof y === "undefined" ? 0 : y
|
||
}
|
||
Module["Point"] = Point;
|
||
function Size(width, height) {
|
||
this.width = typeof width === "undefined" ? 0 : width;
|
||
this.height = typeof height === "undefined" ? 0 : height
|
||
}
|
||
Module["Size"] = Size;
|
||
function Rect() {
|
||
switch (arguments.length) {
|
||
case 0:
|
||
{
|
||
this.x = 0;
|
||
this.y = 0;
|
||
this.width = 0;
|
||
this.height = 0;
|
||
break
|
||
}
|
||
case 1:
|
||
{
|
||
var rect = arguments[0];
|
||
this.x = rect.x;
|
||
this.y = rect.y;
|
||
this.width = rect.width;
|
||
this.height = rect.height;
|
||
break
|
||
}
|
||
case 2:
|
||
{
|
||
var point = arguments[0];
|
||
var size = arguments[1];
|
||
this.x = point.x;
|
||
this.y = point.y;
|
||
this.width = size.width;
|
||
this.height = size.height;
|
||
break
|
||
}
|
||
case 4:
|
||
{
|
||
this.x = arguments[0];
|
||
this.y = arguments[1];
|
||
this.width = arguments[2];
|
||
this.height = arguments[3];
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Invalid arguments")
|
||
}
|
||
}
|
||
}
|
||
Module["Rect"] = Rect;
|
||
function RotatedRect() {
|
||
switch (arguments.length) {
|
||
case 0:
|
||
{
|
||
this.center = {
|
||
x: 0,
|
||
y: 0
|
||
};
|
||
this.size = {
|
||
width: 0,
|
||
height: 0
|
||
};
|
||
this.angle = 0;
|
||
break
|
||
}
|
||
case 3:
|
||
{
|
||
this.center = arguments[0];
|
||
this.size = arguments[1];
|
||
this.angle = arguments[2];
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Invalid arguments")
|
||
}
|
||
}
|
||
}
|
||
RotatedRect.points = function (obj) {
|
||
return Module.rotatedRectPoints(obj)
|
||
}
|
||
;
|
||
RotatedRect.boundingRect = function (obj) {
|
||
return Module.rotatedRectBoundingRect(obj)
|
||
}
|
||
;
|
||
RotatedRect.boundingRect2f = function (obj) {
|
||
return Module.rotatedRectBoundingRect2f(obj)
|
||
}
|
||
;
|
||
Module["RotatedRect"] = RotatedRect;
|
||
function Scalar(v0, v1, v2, v3) {
|
||
this.push(typeof v0 === "undefined" ? 0 : v0);
|
||
this.push(typeof v1 === "undefined" ? 0 : v1);
|
||
this.push(typeof v2 === "undefined" ? 0 : v2);
|
||
this.push(typeof v3 === "undefined" ? 0 : v3)
|
||
}
|
||
Scalar.prototype = new Array;
|
||
Scalar.all = function (v) {
|
||
return new Scalar(v, v, v, v)
|
||
}
|
||
;
|
||
Module["Scalar"] = Scalar;
|
||
function MinMaxLoc() {
|
||
switch (arguments.length) {
|
||
case 0:
|
||
{
|
||
this.minVal = 0;
|
||
this.maxVal = 0;
|
||
this.minLoc = new Point;
|
||
this.maxLoc = new Point;
|
||
break
|
||
}
|
||
case 4:
|
||
{
|
||
this.minVal = arguments[0];
|
||
this.maxVal = arguments[1];
|
||
this.minLoc = arguments[2];
|
||
this.maxLoc = arguments[3];
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Invalid arguments")
|
||
}
|
||
}
|
||
}
|
||
Module["MinMaxLoc"] = MinMaxLoc;
|
||
function Circle() {
|
||
switch (arguments.length) {
|
||
case 0:
|
||
{
|
||
this.center = new Point;
|
||
this.radius = 0;
|
||
break
|
||
}
|
||
case 2:
|
||
{
|
||
this.center = arguments[0];
|
||
this.radius = arguments[1];
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Invalid arguments")
|
||
}
|
||
}
|
||
}
|
||
Module["Circle"] = Circle;
|
||
function TermCriteria() {
|
||
switch (arguments.length) {
|
||
case 0:
|
||
{
|
||
this.type = 0;
|
||
this.maxCount = 0;
|
||
this.epsilon = 0;
|
||
break
|
||
}
|
||
case 3:
|
||
{
|
||
this.type = arguments[0];
|
||
this.maxCount = arguments[1];
|
||
this.epsilon = arguments[2];
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Invalid arguments")
|
||
}
|
||
}
|
||
}
|
||
Module["TermCriteria"] = TermCriteria;
|
||
Module["matFromArray"] = function (rows, cols, type, array) {
|
||
var mat = new cv.Mat(rows, cols, type);
|
||
switch (type) {
|
||
case cv.CV_8U:
|
||
case cv.CV_8UC1:
|
||
case cv.CV_8UC2:
|
||
case cv.CV_8UC3:
|
||
case cv.CV_8UC4:
|
||
{
|
||
mat.data.set(array);
|
||
break
|
||
}
|
||
case cv.CV_8S:
|
||
case cv.CV_8SC1:
|
||
case cv.CV_8SC2:
|
||
case cv.CV_8SC3:
|
||
case cv.CV_8SC4:
|
||
{
|
||
mat.data8S.set(array);
|
||
break
|
||
}
|
||
case cv.CV_16U:
|
||
case cv.CV_16UC1:
|
||
case cv.CV_16UC2:
|
||
case cv.CV_16UC3:
|
||
case cv.CV_16UC4:
|
||
{
|
||
mat.data16U.set(array);
|
||
break
|
||
}
|
||
case cv.CV_16S:
|
||
case cv.CV_16SC1:
|
||
case cv.CV_16SC2:
|
||
case cv.CV_16SC3:
|
||
case cv.CV_16SC4:
|
||
{
|
||
mat.data16S.set(array);
|
||
break
|
||
}
|
||
case cv.CV_32S:
|
||
case cv.CV_32SC1:
|
||
case cv.CV_32SC2:
|
||
case cv.CV_32SC3:
|
||
case cv.CV_32SC4:
|
||
{
|
||
mat.data32S.set(array);
|
||
break
|
||
}
|
||
case cv.CV_32F:
|
||
case cv.CV_32FC1:
|
||
case cv.CV_32FC2:
|
||
case cv.CV_32FC3:
|
||
case cv.CV_32FC4:
|
||
{
|
||
mat.data32F.set(array);
|
||
break
|
||
}
|
||
case cv.CV_64F:
|
||
case cv.CV_64FC1:
|
||
case cv.CV_64FC2:
|
||
case cv.CV_64FC3:
|
||
case cv.CV_64FC4:
|
||
{
|
||
mat.data64F.set(array);
|
||
break
|
||
}
|
||
default:
|
||
{
|
||
throw new Error("Type is unsupported")
|
||
}
|
||
}
|
||
return mat
|
||
}
|
||
;
|
||
Module["matFromImageData"] = function (imageData) {
|
||
var mat = new cv.Mat(imageData.height, imageData.width, cv.CV_8UC4);
|
||
mat.data.set(imageData.data);
|
||
return mat
|
||
}
|
||
;
|
||
|
||
return cv
|
||
}
|
||
);
|
||
}
|
||
)();
|
||
if (typeof exports === 'object' && typeof module === 'object')
|
||
module.exports = cv;
|
||
else if (typeof define === 'function' && define['amd'])
|
||
define([], function () {
|
||
return cv;
|
||
});
|
||
else if (typeof exports === 'object')
|
||
exports["cv"] = cv;
|
||
|
||
if (typeof Module === 'undefined')
|
||
Module = {};
|
||
return cv(Module);
|
||
}));
|