@aislamov/onnxruntime-web64
Version:
A Javascript library for running ONNX models on browsers
1,863 lines (1,649 loc) • 159 kB
JavaScript
var ortWasm = (() => {
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
return (
function(ortWasm = {}) {
var Module = typeof ortWasm != "undefined" ? ortWasm : {};
var readyPromiseResolve, readyPromiseReject;
Module["ready"] = new Promise((resolve, reject) => {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
var moduleOverrides = Object.assign({}, Module);
var arguments_ = [];
var thisProgram = "./this.program";
var quit_ = (status, toThrow) => {
throw toThrow;
};
var ENVIRONMENT_IS_WEB = typeof window == "object";
var ENVIRONMENT_IS_WORKER = typeof importScripts == "function";
var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string";
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
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) {
var fs = require("fs");
var nodePath = require("path");
if (ENVIRONMENT_IS_WORKER) {
scriptDirectory = nodePath.dirname(scriptDirectory) + "/";
} else {
scriptDirectory = __dirname + "/";
}
read_ = (filename, binary) => {
filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
return fs.readFileSync(filename, binary ? undefined : "utf8");
};
readBinary = filename => {
var ret = read_(filename, true);
if (!ret.buffer) {
ret = new Uint8Array(ret);
}
return ret;
};
readAsync = (filename, onload, onerror, binary = true) => {
filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
fs.readFile(filename, binary ? undefined : "utf8", (err, data) => {
if (err) onerror(err); else onload(binary ? data.buffer : data);
});
};
if (!Module["thisProgram"] && process.argv.length > 1) {
thisProgram = process.argv[1].replace(/\\/g, "/");
}
arguments_ = process.argv.slice(2);
quit_ = (status, toThrow) => {
process.exitCode = status;
throw toThrow;
};
Module["inspect"] = () => "[Emscripten Module object]";
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
if (ENVIRONMENT_IS_WORKER) {
scriptDirectory = self.location.href;
} else if (typeof document != "undefined" && document.currentScript) {
scriptDirectory = document.currentScript.src;
}
if (_scriptDir) {
scriptDirectory = _scriptDir;
}
if (scriptDirectory.indexOf("blob:") !== 0) {
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1);
} else {
scriptDirectory = "";
}
{
read_ = url => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.send(null);
return xhr.responseText;
};
if (ENVIRONMENT_IS_WORKER) {
readBinary = url => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.responseType = "arraybuffer";
xhr.send(null);
return new Uint8Array(xhr.response);
};
}
readAsync = (url, onload, onerror) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = () => {
if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
onload(xhr.response);
return;
}
onerror();
};
xhr.onerror = onerror;
xhr.send(null);
};
}
setWindowTitle = title => document.title = title;
} else {}
var out = Module["print"] || console.log.bind(console);
var err = Module["printErr"] || console.error.bind(console);
Object.assign(Module, moduleOverrides);
moduleOverrides = null;
if (Module["arguments"]) arguments_ = Module["arguments"];
if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
if (Module["quit"]) quit_ = Module["quit"];
var wasmBinary;
if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
var noExitRuntime = Module["noExitRuntime"] || true;
if (typeof WebAssembly != "object") {
abort("no native wasm support detected");
}
var wasmMemory;
var ABORT = false;
var EXITSTATUS;
function assert(condition, text) {
if (!condition) {
abort(text);
}
}
var HEAP, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAP64, HEAPU64, HEAPF64;
const getHeapBlock = (type, offset, byteLength) => {
const maxMemory = 4 * 1024 * 1024 * 1e3;
const maxSize = Math.min(wasmMemory.buffer.byteLength, maxMemory);
const heap = wasmMemory.buffer;
switch (type) {
case "i1":
case "i8":
return new Int8Array(heap, offset, byteLength || maxSize / Int8Array.BYTES_PER_ELEMENT);
case "u1":
case "u8":
return new Uint8Array(heap, offset, byteLength || maxSize / Uint8Array.BYTES_PER_ELEMENT);
case "i16":
return new Int16Array(heap, offset, byteLength || maxSize / Int16Array.BYTES_PER_ELEMENT);
case "u16":
return new Uint16Array(heap, offset, byteLength || maxSize / Uint16Array.BYTES_PER_ELEMENT);
case "i32":
return new Int32Array(heap, offset, byteLength || maxSize / Int32Array.BYTES_PER_ELEMENT);
case "u32":
return new Uint32Array(heap, offset, byteLength || maxSize / Uint32Array.BYTES_PER_ELEMENT);
case "f32":
return new Float32Array(heap, offset, byteLength || maxSize / Float32Array.BYTES_PER_ELEMENT);
case "f64":
return new Float64Array(heap, offset, byteLength || maxSize / Float64Array.BYTES_PER_ELEMENT);
case "i64":
return new BigInt64Array(heap, offset, byteLength || maxSize / BigInt64Array.BYTES_PER_ELEMENT);
case "*":
case "u64":
return new BigUint64Array(heap, offset, byteLength || maxSize / BigUint64Array.BYTES_PER_ELEMENT);
default:
throw new Error("Invalid type");
}
};
function updateMemoryViews() {
var b = wasmMemory.buffer;
var maxSize = Math.min(b.byteLength, 4 * 1024 * 1024 * 1e3);
const maxMemory = 4 * 1024 * 1024 * 1e3;
var proxyHandler = (type, hb) => ({
heapBlock: hb,
copyWithin: function(target, start, end) {
const bpe = hb.BYTES_PER_ELEMENT;
if (target * bpe >= maxSize || start * bpe >= maxSize || end && end * bpe >= maxSize) {
// console.log("copy within overridden", target, start, end, maxSize);
const len = (end - start) * bpe;
const targetArray = getHeapBlock(type, target * bpe, len);
const sourceArray = getHeapBlock(type, start * bpe, len);
targetArray.set(sourceArray);
return hb;
} else {
return hb.copyWithin(target, start, end);
}
},
setOverridden: function(array, offset) {
const offsetReal = (offset || 0) * hb.BYTES_PER_ELEMENT;
if (offsetReal >= maxSize || array.byteLength + offsetReal >= maxSize) {
// console.log("set overridden", offset);
const targetArray = getHeapBlock(type, offsetReal, array.byteLength);
targetArray.set(array);
} else {
hb.set(array, offset);
}
},
get: function(target, property) {
if (typeof property === "number" || typeof property === "bigint") {
var memoryOffset = Number(property) * target.BYTES_PER_ELEMENT;
if (memoryOffset >= maxMemory) {
// console.log("get overridden", property);
var heap = getHeapBlock(type, memoryOffset, target.BYTES_PER_ELEMENT * 2);
return heap[0 >>> 0];
} else {
return this.heapBlock[property];
}
}
if (property === "copyWithin") {
return this.copyWithin;
}
if (property === "set") {
return this.setOverridden;
}
if (property === "subarray") {
const subarray = (start, end) => {
const startReal = (start || 0) * this.heapBlock.BYTES_PER_ELEMENT;
const endReal = end ? end * this.heapBlock.BYTES_PER_ELEMENT : wasmMemory.byteLength;
if (startReal >= maxSize || endReal >= maxSize) {
// console.log("subarray overridden", start, end);
return getHeapBlock(type, startReal, endReal - startReal);
} else {
return this.heapBlock.subarray(start, end);
}
};
return subarray;
}
console.log("returning default", property);
return this.heapBlock[property];
},
set: function(target, property, value) {
if (typeof property === "number" || typeof property === "bigint") {
var memoryOffset = Number(property) * target.BYTES_PER_ELEMENT;
if (memoryOffset >= maxMemory) {
// console.log("set overridden", property);
var heap = getHeapBlock(type, memoryOffset, target.BYTES_PER_ELEMENT);
heap[0 >>> 0] = value;
return true;
}
}
this.heapBlock[property] = value;
return true;
}
});
console.log("max size", maxSize, b.byteLength);
function createMemoryProxy(type) {
const block = getHeapBlock(type, 0);
return new Proxy(block, proxyHandler(type, block));
}
try {
Module["HEAP8"] = HEAP8 = createMemoryProxy("i8");
} catch (e) {
console.error(e);
throw e;
}
Module["HEAP16"] = HEAP16 = createMemoryProxy("i16");
Module["HEAP32"] = HEAP32 = createMemoryProxy("i32");
Module["HEAPU8"] = HEAPU8 = createMemoryProxy("u8");
Module["HEAPU16"] = HEAPU16 = createMemoryProxy("u16");
Module["HEAPU32"] = HEAPU32 = createMemoryProxy("u32");
Module["HEAPF32"] = HEAPF32 = createMemoryProxy("f32");
Module["HEAPF64"] = HEAPF64 = createMemoryProxy("f64");
Module["HEAP64"] = HEAP64 = createMemoryProxy("i64");
Module["HEAPU64"] = HEAPU64 = createMemoryProxy("u64");
Module["MEMORY"] = b;
}
var wasmTable;
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATEXIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
var runtimeKeepaliveCounter = 0;
function keepRuntimeAlive() {
return noExitRuntime || runtimeKeepaliveCounter > 0;
}
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;
callRuntimeCallbacks(__ATINIT__);
}
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 addOnInit(cb) {
__ATINIT__.unshift(cb);
}
function addOnExit(cb) {}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
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();
}
}
}
function abort(what) {
if (Module["onAbort"]) {
Module["onAbort"](what);
}
what = "Aborted(" + what + ")";
err(what);
ABORT = true;
EXITSTATUS = 1;
what += ". Build with -sASSERTIONS for more info.";
var e = new WebAssembly.RuntimeError(what);
readyPromiseReject(e);
throw e;
}
var dataURIPrefix = "data:application/octet-stream;base64,";
function isDataURI(filename) {
return filename.startsWith(dataURIPrefix);
}
function isFileURI(filename) {
return filename.startsWith("file://");
}
var wasmBinaryFile;
wasmBinaryFile = "ort-wasm-simd.wasm";
if (!isDataURI(wasmBinaryFile)) {
wasmBinaryFile = locateFile(wasmBinaryFile);
}
function getBinary(file) {
try {
if (file == wasmBinaryFile && wasmBinary) {
return new Uint8Array(wasmBinary);
}
if (readBinary) {
return readBinary(file);
}
throw "both async and sync fetching of the wasm failed";
} catch (err) {
abort(err);
}
}
function getBinaryPromise(binaryFile) {
if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
if (typeof fetch == "function" && !isFileURI(binaryFile)) {
return fetch(binaryFile, {
credentials: "same-origin"
}).then(response => {
if (!response["ok"]) {
throw "failed to load wasm binary file at '" + binaryFile + "'";
}
return response["arrayBuffer"]();
}).catch(() => getBinary(binaryFile));
} else {
if (readAsync) {
return new Promise((resolve, reject) => {
readAsync(binaryFile, response => resolve(new Uint8Array(response)), reject);
});
}
}
}
return Promise.resolve().then(() => getBinary(binaryFile));
}
function instantiateArrayBuffer(binaryFile, imports, receiver) {
return getBinaryPromise(binaryFile).then(binary => {
return WebAssembly.instantiate(binary, imports);
}).then(instance => {
return instance;
}).then(receiver, reason => {
err("failed to asynchronously prepare wasm: " + reason);
abort(reason);
});
}
function instantiateAsync(binary, binaryFile, imports, callback) {
if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") {
return fetch(binaryFile, {
credentials: "same-origin"
}).then(response => {
var result = WebAssembly.instantiateStreaming(response, imports);
return result.then(callback, function(reason) {
err("wasm streaming compile failed: " + reason);
err("falling back to ArrayBuffer instantiation");
return instantiateArrayBuffer(binaryFile, imports, callback);
});
});
} else {
return instantiateArrayBuffer(binaryFile, imports, callback);
}
}
function createWasm() {
var info = {
"env": wasmImports,
"wasi_snapshot_preview1": wasmImports
};
function receiveInstance(instance, module) {
var exports = instance.exports;
exports = instrumentWasmExportsForMemory64(exports);
Module["asm"] = exports;
wasmMemory = Module["asm"]["memory"];
updateMemoryViews();
wasmTable = Module["asm"]["__indirect_function_table"];
addOnInit(Module["asm"]["__wasm_call_ctors"]);
removeRunDependency("wasm-instantiate");
return exports;
}
addRunDependency("wasm-instantiate");
function receiveInstantiationResult(result) {
receiveInstance(result["instance"]);
}
if (Module["instantiateWasm"]) {
try {
return Module["instantiateWasm"](info, receiveInstance);
} catch (e) {
err("Module.instantiateWasm callback failed with error: " + e);
readyPromiseReject(e);
}
}
instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject);
return {};
}
function ExitStatus(status) {
this.name = "ExitStatus";
this.message = `Program terminated with exit(${status})`;
this.status = status;
}
function callRuntimeCallbacks(callbacks) {
while (callbacks.length > 0) {
callbacks.shift()(Module);
}
}
function getValue(ptr, type = "i8") {
if (type.endsWith("*")) type = "*";
switch (type) {
case "i1":
return HEAP8[ptr / 2 ** 0 >>> 0];
case "i8":
return HEAP8[ptr / 2 ** 0 >>> 0];
case "i16":
return HEAP16[ptr / 2 ** 1 >>> 0];
case "i32":
return HEAP32[ptr / 2 ** 2 >>> 0];
case "i64":
return HEAP64[ptr / 2 ** 3];
case "float":
return HEAPF32[ptr / 2 ** 2 >>> 0];
case "double":
return HEAPF64[ptr / 2 ** 3 >>> 0];
case "*":
return Number(HEAPU64[ptr / 2 ** 3]);
default:
abort(`invalid type for getValue: ${type}`);
}
}
function setValue(ptr, value, type = "i8") {
if (type.endsWith("*")) type = "*";
switch (type) {
case "i1":
HEAP8[ptr / 2 ** 0 >>> 0] = value;
break;
case "i8":
HEAP8[ptr / 2 ** 0 >>> 0] = value;
break;
case "i16":
HEAP16[ptr / 2 ** 1 >>> 0] = value;
break;
case "i32":
HEAP32[ptr / 2 ** 2 >>> 0] = value;
break;
case "i64":
HEAP64[ptr / 2 ** 3] = BigInt(value);
break;
case "float":
HEAPF32[ptr / 2 ** 2 >>> 0] = value;
break;
case "double":
HEAPF64[ptr / 2 ** 3 >>> 0] = value;
break;
case "*":
HEAPU64[ptr / 2 ** 3] = BigInt(value);
break;
default:
abort(`invalid type for setValue: ${type}`);
}
}
var exceptionCaught = [];
var uncaughtExceptionCount = 0;
function ___cxa_begin_catch(ptr) {
var ret = (ptr => {
var info = new ExceptionInfo(ptr);
if (!info.get_caught()) {
info.set_caught(true);
uncaughtExceptionCount--;
}
info.set_rethrown(false);
exceptionCaught.push(info);
___cxa_increment_exception_refcount(info.excPtr);
return info.get_exception_ptr();
})(Number(ptr));
return BigInt(ret);
}
var exceptionLast = 0;
function ___cxa_end_catch() {
_setThrew(0);
var info = exceptionCaught.pop();
___cxa_decrement_exception_refcount(info.excPtr);
exceptionLast = 0;
}
function ExceptionInfo(excPtr) {
this.excPtr = excPtr;
this.ptr = excPtr - 48;
this.set_type = function(type) {
HEAPU64[(this.ptr + 8) / 2 ** 3] = BigInt(type);
};
this.get_type = function() {
return Number(HEAPU64[(this.ptr + 8) / 2 ** 3]);
};
this.set_destructor = function(destructor) {
HEAPU64[(this.ptr + 16) / 2 ** 3] = BigInt(destructor);
};
this.get_destructor = function() {
return Number(HEAPU64[(this.ptr + 16) / 2 ** 3]);
};
this.set_caught = function(caught) {
caught = caught ? 1 : 0;
HEAP8[(this.ptr + 24) / 2 ** 0 >>> 0] = caught;
};
this.get_caught = function() {
return HEAP8[(this.ptr + 24) / 2 ** 0 >>> 0] != 0;
};
this.set_rethrown = function(rethrown) {
rethrown = rethrown ? 1 : 0;
HEAP8[(this.ptr + 25) / 2 ** 0 >>> 0] = rethrown;
};
this.get_rethrown = function() {
return HEAP8[(this.ptr + 25) / 2 ** 0 >>> 0] != 0;
};
this.init = function(type, destructor) {
this.set_adjusted_ptr(0);
this.set_type(type);
this.set_destructor(destructor);
};
this.set_adjusted_ptr = function(adjustedPtr) {
HEAPU64[(this.ptr + 32) / 2 ** 3] = BigInt(adjustedPtr);
};
this.get_adjusted_ptr = function() {
return Number(HEAPU64[(this.ptr + 32) / 2 ** 3]);
};
this.get_exception_ptr = function() {
var isPointer = ___cxa_is_pointer_type(this.get_type());
if (isPointer) {
return Number(HEAPU64[this.excPtr / 2 ** 3]);
}
var adjusted = this.get_adjusted_ptr();
if (adjusted !== 0) return adjusted;
return this.excPtr;
};
}
function ___resumeException(ptr) {
ptr = Number(ptr);
if (!exceptionLast) {
exceptionLast = ptr;
}
throw exceptionLast;
}
function ___cxa_find_matching_catch() {
var thrown = exceptionLast;
if (!thrown) {
setTempRet0(0);
return BigInt(0);
}
var info = new ExceptionInfo(thrown);
info.set_adjusted_ptr(thrown);
var thrownType = info.get_type();
if (!thrownType) {
setTempRet0(0);
return BigInt(thrown);
}
for (var i = 0; i < arguments.length; i++) {
var caughtType = arguments[i];
caughtType = Number(caughtType);
if (caughtType === 0 || caughtType === thrownType) {
break;
}
var adjusted_ptr_addr = info.ptr + 32;
if (___cxa_can_catch(caughtType, thrownType, adjusted_ptr_addr)) {
setTempRet0(caughtType);
return BigInt(thrown);
}
}
setTempRet0(thrownType);
return BigInt(thrown);
}
var ___cxa_find_matching_catch_2 = ___cxa_find_matching_catch;
var ___cxa_find_matching_catch_3 = ___cxa_find_matching_catch;
var ___cxa_find_matching_catch_4 = ___cxa_find_matching_catch;
var ___cxa_find_matching_catch_5 = ___cxa_find_matching_catch;
function ___cxa_rethrow() {
var info = exceptionCaught.pop();
if (!info) {
abort("no exception to throw");
}
var ptr = info.excPtr;
if (!info.get_rethrown()) {
exceptionCaught.push(info);
info.set_rethrown(true);
info.set_caught(false);
uncaughtExceptionCount++;
}
exceptionLast = ptr;
throw exceptionLast;
}
function ___cxa_throw(ptr, type, destructor) {
ptr = Number(ptr);
type = Number(type);
destructor = Number(destructor);
var info = new ExceptionInfo(ptr);
info.init(type, destructor);
exceptionLast = ptr;
uncaughtExceptionCount++;
throw exceptionLast;
}
function ___cxa_uncaught_exceptions() {
return uncaughtExceptionCount;
}
var dlopenMissingError = "To use dlopen, you need enable dynamic linking, see https://emscripten.org/docs/compiling/Dynamic-Linking.html";
function ___dlsym(handle, symbol, ra) {
var ret = ((handle, symbol, ra) => {
abort(dlopenMissingError);
})(Number(handle), Number(symbol), Number(ra));
return BigInt(ret);
}
function setErrNo(value) {
HEAP32[___errno_location() / 2 ** 2 >>> 0] = value;
return value;
}
var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined;
function fixPointer (idx) {
if (idx < 0) {
return idx >>> 0
}
return idx;
}
function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
idx = fixPointer(idx);
var endIdx = idx + maxBytesToRead;
var endPtr = idx;
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
}
var str = "";
while (idx < endPtr) {
var u0 = heapOrArray[idx++];
if (!(u0 & 128)) {
str += String.fromCharCode(u0);
continue;
}
var u1 = heapOrArray[idx++] & 63;
if ((u0 & 224) == 192) {
str += String.fromCharCode((u0 & 31) << 6 | u1);
continue;
}
var u2 = heapOrArray[idx++] & 63;
if ((u0 & 240) == 224) {
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
} else {
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
}
if (u0 < 65536) {
str += String.fromCharCode(u0);
} else {
var ch = u0 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
}
}
return str;
}
function UTF8ToString(ptr, maxBytesToRead) {
if (typeof ptr !== "bigint") {
ptr = fixPointer(ptr);
} else {
ptr = Number(ptr);
}
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
}
var SYSCALLS = {
varargs: undefined,
get: function() {
SYSCALLS.varargs += 4;
var ret = HEAP32[(SYSCALLS.varargs - 4) / 2 ** 2 >>> 0];
return ret;
},
getStr: function(ptr) {
var ret = UTF8ToString(ptr);
return ret;
}
};
function ___syscall_fcntl64(fd, cmd, varargs) {
varargs = Number(varargs);
SYSCALLS.varargs = varargs;
return 0;
}
function ___syscall_fstat64(fd, buf) {
buf = Number(buf);
}
function lengthBytesUTF8(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
var c = str.charCodeAt(i);
if (c <= 127) {
len++;
} else if (c <= 2047) {
len += 2;
} else if (c >= 55296 && c <= 57343) {
len += 4;
++i;
} else {
len += 3;
}
}
return len;
}
function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
outIdx = fixPointer(outIdx);
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;
heap[outIdx++] = u;
} else if (u <= 2047) {
if (outIdx + 1 >= endIdx) break;
heap[outIdx++] = 192 | u >> 6;
heap[outIdx++] = 128 | u & 63;
} else if (u <= 65535) {
if (outIdx + 2 >= endIdx) break;
heap[outIdx++] = 224 | u >> 12;
heap[outIdx++] = 128 | u >> 6 & 63;
heap[outIdx++] = 128 | u & 63;
} else {
if (outIdx + 3 >= endIdx) break;
heap[outIdx++] = 240 | u >> 18;
heap[outIdx++] = 128 | u >> 12 & 63;
heap[outIdx++] = 128 | u >> 6 & 63;
heap[outIdx++] = 128 | u & 63;
}
}
heap[outIdx] = 0;
return outIdx - startIdx;
}
function stringToUTF8(str, outPtr, maxBytesToWrite) {
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
}
function ___syscall_getcwd(buf, size) {
buf = Number(buf);
size = Number(size);
}
function ___syscall_getdents64(fd, dirp, count) {
dirp = Number(dirp);
count = Number(count);
}
function ___syscall_ioctl(fd, op, varargs) {
varargs = Number(varargs);
SYSCALLS.varargs = varargs;
return 0;
}
function ___syscall_lstat64(path, buf) {
path = Number(path);
buf = Number(buf);
}
function ___syscall_mkdirat(dirfd, path, mode) {
path = Number(path);
}
function ___syscall_newfstatat(dirfd, path, buf, flags) {
path = Number(path);
buf = Number(buf);
}
function ___syscall_openat(dirfd, path, flags, varargs) {
path = Number(path);
varargs = Number(varargs);
SYSCALLS.varargs = varargs;
}
function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
path = Number(path);
buf = Number(buf);
bufsize = Number(bufsize);
}
function ___syscall_rmdir(path) {
path = Number(path);
}
function ___syscall_stat64(path, buf) {
path = Number(path);
buf = Number(buf);
}
function ___syscall_unlinkat(dirfd, path, flags) {
path = Number(path);
}
function embindRepr(v) {
if (v === null) {
return "null";
}
var t = typeof v;
if (t === "object" || t === "array" || t === "function") {
return v.toString();
} else {
return "" + v;
}
}
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 >>> 0]) {
ret += embind_charCodes[HEAPU8[c++ >>> 0]];
}
return ret;
}
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}`;
}
return name;
}
function createNamedFunction(name, body) {
name = makeLegalFunctionName(name);
return {
[name]: function() {
return body.apply(this, arguments);
}
}[name];
}
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 BindingError = undefined;
function throwBindingError(message) {
throw new BindingError(message);
}
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((dt, i) => {
if (registeredTypes.hasOwnProperty(dt)) {
typeConverters[i] = registeredTypes[dt];
} else {
unregisteredTypes.push(dt);
if (!awaitingDependencies.hasOwnProperty(dt)) {
awaitingDependencies[dt] = [];
}
awaitingDependencies[dt].push(() => {
typeConverters[i] = registeredTypes[dt];
++registered;
if (registered === unregisteredTypes.length) {
onComplete(typeConverters);
}
});
}
});
if (0 === unregisteredTypes.length) {
onComplete(typeConverters);
}
}
function registerType(rawType, registeredInstance, 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(cb => cb());
}
}
function integerReadValueFromPointer(name, shift, signed) {
switch (shift) {
case 0:
return signed ? function readS8FromPointer(pointer) {
return HEAP8[pointer >>> 0];
} : function readU8FromPointer(pointer) {
return HEAPU8[pointer >>> 0];
};
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];
};
case 3:
return signed ? function readS64FromPointer(pointer) {
return HEAP64[pointer >> 3];
} : function readU64FromPointer(pointer) {
return HEAPU64[pointer >> 3];
};
default:
throw new TypeError("Unknown integer type: " + name);
}
}
function __embind_register_bigint(primitiveType, name, size, minRange, maxRange) {
primitiveType = Number(primitiveType);
name = Number(name);
size = Number(size);
name = readLatin1String(name);
var shift = getShiftFromSize(size);
var isUnsignedType = name.indexOf("u") != -1;
if (isUnsignedType) {
maxRange = (1n << 64n) - 1n;
}
registerType(primitiveType, {
name: name,
"fromWireType": function(value) {
return value;
},
"toWireType": function(destructors, value) {
if (typeof value != "bigint" && typeof value != "number") {
throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`);
}
if (value < minRange || value > maxRange) {
throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${name}", which is outside the valid range [${minRange}, ${maxRange}]!`);
}
return value;
},
"argPackAdvance": 8,
"readValueFromPointer": integerReadValueFromPointer(name, shift, !isUnsignedType),
destructorFunction: null
});
}
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_register_bool(rawType, name, size, trueValue, falseValue) {
rawType = Number(rawType);
name = Number(name);
size = Number(size);
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 HandleAllocator() {
this.allocated = [ undefined ];
this.freelist = [];
this.get = function(id) {
return this.allocated[id];
};
this.has = function(id) {
return this.allocated[id] !== undefined;
};
this.allocate = function(handle) {
var id = this.freelist.pop() || this.allocated.length;
this.allocated[id] = handle;
return id;
};
this.free = function(id) {
this.allocated[id] = undefined;
this.freelist.push(id);
};
}
var emval_handles = new HandleAllocator();
function __emval_decref(handle) {
handle = Number(handle);
if (handle >= emval_handles.reserved && 0 === --emval_handles.get(handle).refcount) {
emval_handles.free(handle);
}
}
function count_emval_handles() {
var count = 0;
for (var i = emval_handles.reserved; i < emval_handles.allocated.length; ++i) {
if (emval_handles.allocated[i] !== undefined) {
++count;
}
}
return count;
}
function init_emval() {
emval_handles.allocated.push({
value: undefined
}, {
value: null
}, {
value: true
}, {
value: false
});
emval_handles.reserved = emval_handles.allocated.length;
Module["count_emval_handles"] = count_emval_handles;
}
var Emval = {
toValue: handle => {
if (!handle) {
throwBindingError("Cannot use deleted val. handle = " + handle);
}
return emval_handles.get(handle).value;
},
toHandle: value => {
switch (value) {
case undefined:
return 1;
case null:
return 2;
case true:
return 3;
case false:
return 4;
default:
{
return emval_handles.allocate({
refcount: 1,
value: value
});
}
}
}
};
function simpleReadValueFromPointer(pointer) {
return this["fromWireType"](HEAP32[pointer / 2 ** 2 >>> 0]);
}
function __embind_register_emval(rawType, name) {
rawType = Number(rawType);
name = Number(name);
name = readLatin1String(name);
registerType(rawType, {
name: name,
"fromWireType": function(handle) {
var rv = Emval.toValue(handle);
__emval_decref(handle);
return rv;
},
"toWireType": function(destructors, value) {
return Emval.toHandle(value);
},
"argPackAdvance": 8,
"readValueFromPointer": simpleReadValueFromPointer,
destructorFunction: null
});
}
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) {
rawType = Number(rawType);
name = Number(name);
size = Number(size);
var shift = getShiftFromSize(size);
name = readLatin1String(name);
registerType(rawType, {
name: name,
"fromWireType": function(value) {
return value;
},
"toWireType": function(destructors, value) {
return value;
},
"argPackAdvance": 8,
"readValueFromPointer": floatReadValueFromPointer(name, shift),
destructorFunction: null
});
}
function __embind_register_integer(primitiveType, name, size, minRange, maxRange) {
primitiveType = Number(primitiveType);
name = Number(name);
size = Number(size);
name = readLatin1String(name);
if (maxRange === -1) {
maxRange = 4294967295;
}
var shift = getShiftFromSize(size);
var fromWireType = value => value;
if (minRange === 0) {
var bitshift = 32 - 8 * size;
fromWireType = value => value << bitshift >>> bitshift;
}
var isUnsignedType = name.includes("unsigned");
var checkAssertions = (value, toTypeName) => {};
var toWireType;
if (isUnsignedType) {
toWireType = function(destructors, value) {
checkAssertions(value, this.name);
return value >>> 0;
};
} else {
toWireType = function(destructors, value) {
checkAssertions(value, this.name);
return value;
};
}
registerType(primitiveType, {
name: name,
"fromWireType": fromWireType,
"toWireType": toWireType,
"argPackAdvance": 8,
"readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0),
destructorFunction: null
});
}
function __embind_register_memory_view(rawType, dataTypeIndex, name) {
rawType = Number(rawType);
name = Number(name);
var typeMapping = [ Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, BigInt64Array, BigUint64Array ];
var TA = typeMapping[dataTypeIndex];
function decodeMemoryView(handle) {
handle = handle >> 2;
var heap = HEAPU32;
var size = heap[handle >>> 0];
var data = heap[handle + 1 >>> 0];
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_std_string(rawType, name) {
rawType = Number(rawType);
name = Number(name);
name = readLatin1String(name);
var stdStringIsUTF8 = name === "std::string";
registerType(rawType, {
name: name,
"fromWireType": function(value) {
var length = HEAPU64[value / 2 ** 3];
var payload = value + 8;
var str;
if (stdStringIsUTF8) {
var decodeStartPtr = payload;
for (var i = 0; i <= length; ++i) {
var currentBytePtr = payload + i;
if (i == length || HEAPU8[currentBytePtr >>> 0] == 0) {
var maxRead = currentBytePtr - decodeStartPtr;
var stringSegment = UTF8ToString(decodeStartPtr, maxRead);
if (str === undefined) {
str = stringSegment;
} else {
str += String.fromCharCode(0);
str += stringSegment;
}
decodeStartPtr = currentBytePtr + 1;
}
}
} else {
var a = new Array(length);
for (var i = 0; i < length; ++i) {
a[i] = String.fromCharCode(HEAPU8[payload + i >>> 0]);
}
str = a.join("");
}
_free(value);
return str;
},
"toWireType": function(destructors, value) {
if (value instanceof ArrayBuffer) {
value = new Uint8Array(value);
}
var length;
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) {
length = lengthBytesUTF8(value);
} else {
length = value.length;
}
var base = _malloc(8 + length + 1);
var ptr = base + 8;
ptr >>>= 0;
HEAPU64[base / 2 ** 3] = BigInt(length);
if (stdStringIsUTF8 && valueIsOfTypeString) {
stringToUTF8(value, ptr, 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 + i >>> 0] = charCode;
}
} else {
for (var i = 0; i < length; ++i) {
HEAPU8[ptr + i >>> 0] = value[i];
}
}
}
if (destructors !== null) {
destructors.push(_free, base);
}
return base;
},
"argPackAdvance": 8,
"readValueFromPointer": simpleReadValueFromPointer,
destructorFunction: function(ptr) {
_free(ptr);
}
});
}
var UTF16Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf-16le") : undefined;
function UTF16ToString(ptr, maxBytesToRead) {
var endPtr = ptr;
var idx = endPtr >> 1;
var maxIdx = idx + maxBytesToRead / 2;
while (!(idx >= maxIdx) && HEAPU16[idx >>> 0]) ++idx;
endPtr = idx << 1;
if (endPtr - ptr > 32 && UTF16Decoder) return UTF16Decoder.decode(HEAPU8.subarray(ptr >>> 0, endPtr >>> 0));
var str = "";
for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {
var codeUnit = HEAP16[(ptr + i * 2) / 2 ** 1 >>> 0];
if (codeUnit == 0) break;
str += String.fromCharCode(codeUnit);
}
return str;
}
function stringToUTF16(str, outPtr, maxBytesToWrite) {
if (maxBytesToWrite === undefined) {
maxBytesToWrite = 2147483647;
}
if (maxBytesToWrite < 2) return 0;
maxBytesToWrite -= 2;
var startPtr = outPtr;
var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;
for (var i = 0; i < numCharsToWrite; ++i) {
var codeUnit = str.charCodeAt(i);
HEAP16[outPtr / 2 ** 1 >>> 0] = codeUnit;
outPtr += 2;
}
HEAP16[outPtr / 2 ** 1 >>> 0] = 0;
return outPtr - startPtr;
}
function lengthBytesUTF16(str) {
return str.length * 2;
}
function UTF32ToString(ptr, maxBytesToRead) {
var i = 0;
var str = "";
while (!(i >= maxBytesToRead / 4)) {
var utf32 = HEAP32[(ptr + i * 4) / 2 ** 2 >>> 0];
if (utf32 == 0) break;
++i;
if (utf32 >= 65536) {
var ch = utf32 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
} else {
str += String.fromCharCode(utf32);
}
}
return str;
}
function stringToUTF32(str, outPtr, maxBytesToWrite) {
outPtr >>>= 0;
if (maxBytesToWrite === undefined) {
maxBytesToWrite = 2147483647;
}
if (maxBytesToWrite < 4) return 0;
var startPtr = outPtr;
var endPtr = startPtr + maxBytesToWrite - 4;
for (var i = 0; i < str.length; ++i) {
var codeUnit = str.charCodeAt(i);
if (codeUnit >= 55296 && codeUnit <= 57343) {
var trailSurrogate = str.charCodeAt(++i);
codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023;
}
HEAP32[outPtr / 2 ** 2 >>> 0] = codeUnit;
outPtr += 4;
if (outPtr + 4 > endPtr) break;
}
HEAP32[outPtr / 2 ** 2 >>> 0] = 0;
return outPtr - startPtr;
}
function lengthBytesUTF32(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
var codeUnit = str.charCodeAt(i);
if (codeUnit >= 55296 && codeUnit <= 57343) ++i;
len += 4;
}
return len;
}
function __embind_register_std_wstring(rawType, charSize, name) {
rawType = Number(rawType);
charSize = Number(charSize);
name = Number(name);
name = readLatin1String(name);
var decodeString, encodeString, getHeap, lengthBytesUTF, shift;
if (charSize === 2) {
decodeString = UTF16ToString;
encodeString = stringToUTF16;
lengthBytesUTF = lengthBytesUTF16;
getHeap = () => HEAPU16;
shift = 1;
} else if (charSize === 4) {
decodeString = UTF32ToString;
encodeString = stringToUTF32;
lengthBytesUTF = lengthBytesUTF32;
getHeap = () => HEAPU32;
shift = 2;
}
registerType(rawType, {
name: name,
"fromWireType": function(value) {
var length = HEAPU32[value >>> 2];
var HEAP = getHeap();
var str;
var decodeStartPtr = value + 4;
for (var i = 0; i <= length; ++i) {
var currentBytePtr = value + 4 + i * charSize;
if (i == length || HEAP[currentBytePtr >>> shift] == 0) {
var maxReadBytes = currentBytePtr - decodeStartPtr;
var stringSegment = decodeString(decodeStartPtr, maxReadBytes);
if (str === undefined) {
str = stringSegment;
} else {
str += String.fromCharCode(0);
str += stringSegment;
}
decodeStartPtr = currentBytePtr + charSize;
}
}
_free(value);
return str;
},
"toWireType": function(destructors, value) {
if (!(typeof value == "string")) {
throwBindingError(`Cannot pass non-string to C++ string type ${name}`);
}
var length = lengthBytesUTF(value);
var ptr = _malloc(4 + length + charSize);
ptr >>>= 0;
HEAPU32[ptr >>> 2] = length >> shift;
encodeString(value, ptr + 4, length + charSize);
if (destructors !== null) {
destructors.push(_free, ptr);
}
return ptr;
},
"argPackAdvance": 8,
"readValueFromPointer": simpleReadValueFromPointer,
destructorFunction: function(ptr) {
_free(ptr);
}
});
}
function __embind_register_void(rawType, name) {
rawType = Number(rawType);
name = Number(name);
name = readLatin1String(name);
registerType(rawType, {
isVoid: true,
name: name,
"argPackAdvance": 0,
"fromWireType": function() {
return undefined;
},
"toWireType": function(destructors, o) {
return undefined;
}
});
}
var nowIsMonotonic = true;
function __emscripten_get_now_is_monotonic() {
return nowIsMonotonic;
}
function getTypeName(type) {
var ptr = ___getTypeName(type);
var rv = readLatin1String(ptr);
_free(ptr);
return rv;
}
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 = Number(handle);
returnType = Number(returnType);
destructorsRef = Number(destructorsRef);
handle = Emval.toValue(handle);
returnType = requireRegisteredType(returnType, "emval::as");
var destructors = [];
var rd = Emval.toHandle(destructors);
HEAPU64[destructorsRef / 2 ** 3] = BigInt(rd);
return returnType["toWireType"](destructors, handle);
}
function emval_allocateDestructors(destructorsRef) {
var destructors = [];
HEAPU64[destructorsRef / 2 ** 3] = BigInt(Emval.toHandle(destructors));
return destructors;
}
var emval_symbols = {};
function getStringOrSymbol(address) {
var symbol = emval_symbols[address];
if (symbol === undefined) {
return readLatin1String(address);
}
return symbol;
}
var emval_methodCallers = [];
function __emval_call_method(caller, handle, methodName, destructorsRef, args) {
caller = Number(caller);
handle = Number(handle);
methodName = Number(methodName);
destructorsRef = Number(destructorsRef);
args = Number(args);
caller = emval_methodCallers[caller];
handle = Emval.toValue(handle);
methodName = getStringOrSymbol(methodName);
return caller(handle, methodName, emval_allocateDestructors(destructorsRef), args);
}
function __emval_call_void_method(caller, handle, methodName, args) {
caller = Number(caller);
handle = Number(handle);
methodName = Number(methodName);
args = Number(args);
caller = emval_methodCallers[caller];
handle = Emval.toValue(handle);
methodName = getStringOrSymbol(methodName);
caller(handle, methodName, null, args);
}
function __emval_equals(first, second) {
first = Number(first);
second = Number(second);
first = Emval.toValue(first);
second = Emval.toValue(second);
return first == second;
}
function emval_get_global() {
if (typeof globalThis == "object") {
return globalThis;
}
return function() {
return Function;
}()("return this")();
}
function __emval_get_global(name) {
var ret = (name => {
if (name === 0) {
return Emval.toHandle(emval_get_global());
} else {
name = getStringOrSymbol(name);
return Emval.toHandle(emval_get_global()[name]);
}
})(Number(name));
return BigInt(ret);
}
function emval_addMethodCaller(caller) {
var id = emval_methodCallers.length;
emval_methodCallers.push(caller);
return id;
}
function emval_lookupTypes(argCount, argTypes) {
var a = new Array(argCount);
for (var i = 0; i < argCount; ++i) {
a[i] = requireRegisteredType(Number(HEAPU64[(argTypes + i * 8) / 2 ** 3]), "parameter " + i);
}
return a;
}
var emval_registeredMethods = [];
function newFunc(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 __emval_get_method_caller(argCount, argTypes) {
var ret = ((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 returnId = emval_registeredMethods[signatureName];
if (returnId !== undefined) {
return returnId;
}
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 + ");\