@swmansion/popcorn 0.2.0-rc.1 → 0.2.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AtomVM.mjs +945 -806
- package/dist/AtomVM.wasm +0 -0
- package/package.json +14 -14
package/dist/AtomVM.mjs
CHANGED
|
@@ -1,48 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// so the outer function needs to be marked as async.
|
|
6
|
-
async function Module(moduleArg = {}) {
|
|
1
|
+
var Module = (() => {
|
|
2
|
+
|
|
3
|
+
return (
|
|
4
|
+
async function(moduleArg = {}) {
|
|
7
5
|
var moduleRtn;
|
|
8
6
|
|
|
9
7
|
// include: shell.js
|
|
10
|
-
// include: minimum_runtime_check.js
|
|
11
|
-
(function() {
|
|
12
|
-
// "30.0.0" -> 300000
|
|
13
|
-
function humanReadableVersionToPacked(str) {
|
|
14
|
-
str = str.split("-")[0];
|
|
15
|
-
// Remove any trailing part from e.g. "12.53.3-alpha"
|
|
16
|
-
var vers = str.split(".").slice(0, 3);
|
|
17
|
-
while (vers.length < 3) vers.push("00");
|
|
18
|
-
vers = vers.map((n, i, arr) => n.padStart(2, "0"));
|
|
19
|
-
return vers.join("");
|
|
20
|
-
}
|
|
21
|
-
// 300000 -> "30.0.0"
|
|
22
|
-
var packedVersionToHumanReadable = n => [ n / 1e4 | 0, (n / 100 | 0) % 100, n % 100 ].join(".");
|
|
23
|
-
var TARGET_NOT_SUPPORTED = 2147483647;
|
|
24
|
-
var currentNodeVersion = typeof process !== "undefined" && process?.versions?.node ? humanReadableVersionToPacked(process.versions.node) : TARGET_NOT_SUPPORTED;
|
|
25
|
-
if (currentNodeVersion < TARGET_NOT_SUPPORTED) {
|
|
26
|
-
throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");
|
|
27
|
-
}
|
|
28
|
-
if (currentNodeVersion < 2147483647) {
|
|
29
|
-
throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(2147483647)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`);
|
|
30
|
-
}
|
|
31
|
-
var currentSafariVersion = typeof navigator !== "undefined" && navigator?.userAgent?.includes("Safari/") && navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/) ? humanReadableVersionToPacked(navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]) : TARGET_NOT_SUPPORTED;
|
|
32
|
-
if (currentSafariVersion < 15e4) {
|
|
33
|
-
throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`);
|
|
34
|
-
}
|
|
35
|
-
var currentFirefoxVersion = typeof navigator !== "undefined" && navigator?.userAgent?.match(/Firefox\/(\d+(?:\.\d+)?)/) ? parseFloat(navigator.userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]) : TARGET_NOT_SUPPORTED;
|
|
36
|
-
if (currentFirefoxVersion < 114) {
|
|
37
|
-
throw new Error(`This emscripten-generated code requires Firefox v114 (detected v${currentFirefoxVersion})`);
|
|
38
|
-
}
|
|
39
|
-
var currentChromeVersion = typeof navigator !== "undefined" && navigator?.userAgent?.match(/Chrome\/(\d+(?:\.\d+)?)/) ? parseFloat(navigator.userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]) : TARGET_NOT_SUPPORTED;
|
|
40
|
-
if (currentChromeVersion < 85) {
|
|
41
|
-
throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`);
|
|
42
|
-
}
|
|
43
|
-
})();
|
|
44
|
-
|
|
45
|
-
// end include: minimum_runtime_check.js
|
|
46
8
|
// The Module object: Our interface to the outside world. We import
|
|
47
9
|
// and export values on it. There are various ways Module can be used:
|
|
48
10
|
// 1. Not defined. We create it here
|
|
@@ -58,16 +20,24 @@ async function Module(moduleArg = {}) {
|
|
|
58
20
|
// can continue to use Module afterwards as well.
|
|
59
21
|
var Module = moduleArg;
|
|
60
22
|
|
|
23
|
+
// Set up the promise that indicates the Module is initialized
|
|
24
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
25
|
+
|
|
26
|
+
var readyPromise = new Promise((resolve, reject) => {
|
|
27
|
+
readyPromiseResolve = resolve;
|
|
28
|
+
readyPromiseReject = reject;
|
|
29
|
+
});
|
|
30
|
+
|
|
61
31
|
// Determine the runtime environment we are in. You can customize this by
|
|
62
32
|
// setting the ENVIRONMENT setting at compile time (see settings.js).
|
|
63
33
|
// Attempt to auto-detect the environment
|
|
64
|
-
var ENVIRONMENT_IS_WEB =
|
|
34
|
+
var ENVIRONMENT_IS_WEB = typeof window == "object";
|
|
65
35
|
|
|
66
|
-
var ENVIRONMENT_IS_WORKER =
|
|
36
|
+
var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
|
|
67
37
|
|
|
68
38
|
// N.b. Electron.js environment is simultaneously a NODE-environment, but
|
|
69
39
|
// also a web environment.
|
|
70
|
-
var ENVIRONMENT_IS_NODE =
|
|
40
|
+
var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
|
|
71
41
|
|
|
72
42
|
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
|
|
73
43
|
|
|
@@ -86,7 +56,7 @@ if (ENVIRONMENT_IS_PTHREAD) {
|
|
|
86
56
|
|
|
87
57
|
// --pre-jses are emitted after the Module integration code, so that they can
|
|
88
58
|
// refer to Module (if they choose; they can also define Module)
|
|
89
|
-
// include: /
|
|
59
|
+
// include: /tmp/popcorn-swm.J66P2Dx/atomvm/src/platforms/emscripten/src/atomvm.pre.js
|
|
90
60
|
/*
|
|
91
61
|
* This file is part of AtomVM.
|
|
92
62
|
*
|
|
@@ -158,7 +128,7 @@ function ensureValidResult(result) {
|
|
|
158
128
|
throw new Error(message);
|
|
159
129
|
}
|
|
160
130
|
|
|
161
|
-
// end include: /
|
|
131
|
+
// end include: /tmp/popcorn-swm.J66P2Dx/atomvm/src/platforms/emscripten/src/atomvm.pre.js
|
|
162
132
|
var arguments_ = [];
|
|
163
133
|
|
|
164
134
|
var thisProgram = "./this.program";
|
|
@@ -182,14 +152,16 @@ function locateFile(path) {
|
|
|
182
152
|
// Hooks that are implemented differently in different runtime environments.
|
|
183
153
|
var readAsync, readBinary;
|
|
184
154
|
|
|
185
|
-
if (ENVIRONMENT_IS_SHELL)
|
|
155
|
+
if (ENVIRONMENT_IS_SHELL) {
|
|
156
|
+
if ((typeof process == "object" && typeof require === "function") || typeof window == "object" || typeof WorkerGlobalScope != "undefined") throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");
|
|
157
|
+
} else // Note that this includes Node.js workers when relevant (pthreads is enabled).
|
|
186
158
|
// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
|
|
187
159
|
// ENVIRONMENT_IS_NODE.
|
|
188
160
|
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
189
161
|
try {
|
|
190
162
|
scriptDirectory = new URL(".", _scriptName).href;
|
|
191
163
|
} catch {}
|
|
192
|
-
if (!(
|
|
164
|
+
if (!(typeof window == "object" || typeof WorkerGlobalScope != "undefined")) throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");
|
|
193
165
|
{
|
|
194
166
|
// include: web_or_worker_shell_read.js
|
|
195
167
|
if (ENVIRONMENT_IS_WORKER) {
|
|
@@ -220,6 +192,8 @@ var out = console.log.bind(console);
|
|
|
220
192
|
|
|
221
193
|
var err = console.error.bind(console);
|
|
222
194
|
|
|
195
|
+
var WORKERFS = "WORKERFS is no longer included by default; build with -lworkerfs.js";
|
|
196
|
+
|
|
223
197
|
// perform assertions in shell.js after we set up out() and err(), as otherwise
|
|
224
198
|
// if an assertion fails it cannot print the message
|
|
225
199
|
assert(ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER || ENVIRONMENT_IS_NODE, "Pthreads do not work in this environment yet (need Web Workers, or an alternative to them)");
|
|
@@ -240,11 +214,13 @@ assert(!ENVIRONMENT_IS_SHELL, "shell environment detected but not enabled at bui
|
|
|
240
214
|
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
|
|
241
215
|
var wasmBinary;
|
|
242
216
|
|
|
243
|
-
if (
|
|
217
|
+
if (typeof WebAssembly != "object") {
|
|
244
218
|
err("no native wasm support detected");
|
|
245
219
|
}
|
|
246
220
|
|
|
247
221
|
// Wasm globals
|
|
222
|
+
var wasmMemory;
|
|
223
|
+
|
|
248
224
|
// For sending to workers.
|
|
249
225
|
var wasmModule;
|
|
250
226
|
|
|
@@ -272,12 +248,18 @@ var EXITSTATUS;
|
|
|
272
248
|
|
|
273
249
|
// We used to include malloc/free by default in the past. Show a helpful error in
|
|
274
250
|
// builds with assertions.
|
|
251
|
+
// Memory management
|
|
252
|
+
var /** @type {!Int8Array} */ HEAP8, /** @type {!Uint8Array} */ HEAPU8, /** @type {!Int16Array} */ HEAP16, /** @type {!Int32Array} */ HEAP32, /** @type {!Uint32Array} */ HEAPU32, /** @type {!Float32Array} */ HEAPF32, /* BigInt64Array type is not correctly defined in closure
|
|
253
|
+
/** not-@type {!BigInt64Array} */ HEAP64, /** @type {!Float64Array} */ HEAPF64;
|
|
254
|
+
|
|
255
|
+
var runtimeInitialized = false;
|
|
256
|
+
|
|
275
257
|
/**
|
|
276
258
|
* Indicates whether filename is delivered via file protocol (as opposed to http/https)
|
|
277
259
|
* @noinline
|
|
278
260
|
*/ var isFileURI = filename => filename.startsWith("file://");
|
|
279
261
|
|
|
280
|
-
// include:
|
|
262
|
+
// include: runtime_shared.js
|
|
281
263
|
// include: runtime_stack_check.js
|
|
282
264
|
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
|
|
283
265
|
function writeStackCookie() {
|
|
@@ -292,9 +274,9 @@ function writeStackCookie() {
|
|
|
292
274
|
// The stack grow downwards towards _emscripten_stack_get_end.
|
|
293
275
|
// We write cookies to the final two words in the stack and detect if they are
|
|
294
276
|
// ever overwritten.
|
|
295
|
-
|
|
277
|
+
SAFE_HEAP_STORE(((max) >> 2) * 4, 34821223, 4);
|
|
296
278
|
checkInt32(34821223);
|
|
297
|
-
|
|
279
|
+
SAFE_HEAP_STORE((((max) + (4)) >> 2) * 4, 2310721022, 4);
|
|
298
280
|
checkInt32(2310721022);
|
|
299
281
|
}
|
|
300
282
|
|
|
@@ -305,8 +287,8 @@ function checkStackCookie() {
|
|
|
305
287
|
if (max == 0) {
|
|
306
288
|
max += 4;
|
|
307
289
|
}
|
|
308
|
-
var cookie1 =
|
|
309
|
-
var cookie2 =
|
|
290
|
+
var cookie1 = SAFE_HEAP_LOAD(((max) >> 2) * 4, 4, 1);
|
|
291
|
+
var cookie2 = SAFE_HEAP_LOAD((((max) + (4)) >> 2) * 4, 4, 1);
|
|
310
292
|
if (cookie1 != 34821223 || cookie2 != 2310721022) {
|
|
311
293
|
abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`);
|
|
312
294
|
}
|
|
@@ -325,7 +307,7 @@ function dbg(...args) {
|
|
|
325
307
|
var h16 = new Int16Array(1);
|
|
326
308
|
var h8 = new Int8Array(h16.buffer);
|
|
327
309
|
h16[0] = 25459;
|
|
328
|
-
if (h8[0] !== 115 || h8[1] !== 99)
|
|
310
|
+
if (h8[0] !== 115 || h8[1] !== 99) throw "Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)";
|
|
329
311
|
})();
|
|
330
312
|
|
|
331
313
|
function consumedModuleProp(prop) {
|
|
@@ -339,10 +321,6 @@ function consumedModuleProp(prop) {
|
|
|
339
321
|
}
|
|
340
322
|
}
|
|
341
323
|
|
|
342
|
-
function makeInvalidEarlyAccess(name) {
|
|
343
|
-
return () => assert(false, `call to '${name}' via reference taken before Wasm module initialization`);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
324
|
function ignoredModuleProp(prop) {
|
|
347
325
|
if (Object.getOwnPropertyDescriptor(Module, prop)) {
|
|
348
326
|
abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`);
|
|
@@ -351,11 +329,54 @@ function ignoredModuleProp(prop) {
|
|
|
351
329
|
|
|
352
330
|
// forcing the filesystem exports a few things by default
|
|
353
331
|
function isExportedByForceFilesystem(name) {
|
|
354
|
-
return name === "FS_createPath" || name === "FS_createDataFile" || name === "FS_createPreloadedFile" || name === "
|
|
332
|
+
return name === "FS_createPath" || name === "FS_createDataFile" || name === "FS_createPreloadedFile" || name === "FS_unlink" || name === "addRunDependency" || // The old FS has some functionality that WasmFS lacks.
|
|
355
333
|
name === "FS_createLazyFile" || name === "FS_createDevice" || name === "removeRunDependency";
|
|
356
334
|
}
|
|
357
335
|
|
|
336
|
+
/**
|
|
337
|
+
* Intercept access to a global symbol. This enables us to give informative
|
|
338
|
+
* warnings/errors when folks attempt to use symbols they did not include in
|
|
339
|
+
* their build, or no symbols that no longer exist.
|
|
340
|
+
*/ function hookGlobalSymbolAccess(sym, func) {
|
|
341
|
+
if (typeof globalThis != "undefined" && !Object.getOwnPropertyDescriptor(globalThis, sym)) {
|
|
342
|
+
Object.defineProperty(globalThis, sym, {
|
|
343
|
+
configurable: true,
|
|
344
|
+
get() {
|
|
345
|
+
func();
|
|
346
|
+
return undefined;
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
function missingGlobal(sym, msg) {
|
|
353
|
+
hookGlobalSymbolAccess(sym, () => {
|
|
354
|
+
warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
missingGlobal("buffer", "Please use HEAP8.buffer or wasmMemory.buffer");
|
|
359
|
+
|
|
360
|
+
missingGlobal("asm", "Please use wasmExports instead");
|
|
361
|
+
|
|
358
362
|
function missingLibrarySymbol(sym) {
|
|
363
|
+
hookGlobalSymbolAccess(sym, () => {
|
|
364
|
+
// Can't `abort()` here because it would break code that does runtime
|
|
365
|
+
// checks. e.g. `if (typeof SDL === 'undefined')`.
|
|
366
|
+
var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;
|
|
367
|
+
// DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in
|
|
368
|
+
// library.js, which means $name for a JS name with no prefix, or name
|
|
369
|
+
// for a JS name like _name.
|
|
370
|
+
var librarySymbol = sym;
|
|
371
|
+
if (!librarySymbol.startsWith("_")) {
|
|
372
|
+
librarySymbol = "$" + sym;
|
|
373
|
+
}
|
|
374
|
+
msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;
|
|
375
|
+
if (isExportedByForceFilesystem(sym)) {
|
|
376
|
+
msg += ". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you";
|
|
377
|
+
}
|
|
378
|
+
warnOnce(msg);
|
|
379
|
+
});
|
|
359
380
|
// Any symbol that is not included from the JS library is also (by definition)
|
|
360
381
|
// not exported on the Module object.
|
|
361
382
|
unexportedRuntimeSymbol(sym);
|
|
@@ -427,19 +448,64 @@ var checkInt32 = value => checkInt(value, 32, MIN_INT32, MAX_UINT32);
|
|
|
427
448
|
var checkInt64 = value => checkInt(value, 64, MIN_INT64, MAX_UINT64);
|
|
428
449
|
|
|
429
450
|
// end include: runtime_debug.js
|
|
451
|
+
// include: memoryprofiler.js
|
|
452
|
+
// end include: memoryprofiler.js
|
|
430
453
|
// include: runtime_safe_heap.js
|
|
431
|
-
function
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
454
|
+
/** @param {number|boolean=} isFloat */ function getSafeHeapType(bytes, isFloat) {
|
|
455
|
+
switch (bytes) {
|
|
456
|
+
case 1:
|
|
457
|
+
return "i8";
|
|
458
|
+
|
|
459
|
+
case 2:
|
|
460
|
+
return "i16";
|
|
461
|
+
|
|
462
|
+
case 4:
|
|
463
|
+
return isFloat ? "float" : "i32";
|
|
464
|
+
|
|
465
|
+
case 8:
|
|
466
|
+
return isFloat ? "double" : "i64";
|
|
467
|
+
|
|
468
|
+
default:
|
|
469
|
+
abort(`getSafeHeapType() invalid bytes=${bytes}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/** @param {number|boolean=} isFloat */ function SAFE_HEAP_STORE(dest, value, bytes, isFloat) {
|
|
474
|
+
if (dest <= 0) abort(`segmentation fault storing ${bytes} bytes to address ${dest}`);
|
|
475
|
+
if (dest % bytes !== 0) abort(`alignment error storing to address ${dest}, which was expected to be aligned to a multiple of ${bytes}`);
|
|
435
476
|
if (runtimeInitialized) {
|
|
436
477
|
var brk = _sbrk(0);
|
|
437
|
-
if (dest + bytes > brk) abort(`segmentation fault, exceeded the top of the available dynamic heap when
|
|
478
|
+
if (dest + bytes > brk) abort(`segmentation fault, exceeded the top of the available dynamic heap when storing ${bytes} bytes to address ${dest}. DYNAMICTOP=${brk}`);
|
|
438
479
|
if (brk < _emscripten_stack_get_base()) abort(`brk >= _emscripten_stack_get_base() (brk=${brk}, _emscripten_stack_get_base()=${_emscripten_stack_get_base()})`);
|
|
439
480
|
// sbrk-managed memory must be above the stack
|
|
440
481
|
if (brk > wasmMemory.buffer.byteLength) abort(`brk <= wasmMemory.buffer.byteLength (brk=${brk}, wasmMemory.buffer.byteLength=${wasmMemory.buffer.byteLength})`);
|
|
441
482
|
}
|
|
442
|
-
|
|
483
|
+
setValue_safe(dest, value, getSafeHeapType(bytes, isFloat));
|
|
484
|
+
return value;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
function SAFE_HEAP_STORE_D(dest, value, bytes) {
|
|
488
|
+
return SAFE_HEAP_STORE(dest, value, bytes, true);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/** @param {number|boolean=} isFloat */ function SAFE_HEAP_LOAD(dest, bytes, unsigned, isFloat) {
|
|
492
|
+
if (dest <= 0) abort(`segmentation fault loading ${bytes} bytes from address ${dest}`);
|
|
493
|
+
if (dest % bytes !== 0) abort(`alignment error loading from address ${dest}, which was expected to be aligned to a multiple of ${bytes}`);
|
|
494
|
+
if (runtimeInitialized) {
|
|
495
|
+
var brk = _sbrk(0);
|
|
496
|
+
if (dest + bytes > brk) abort(`segmentation fault, exceeded the top of the available dynamic heap when loading ${bytes} bytes from address ${dest}. DYNAMICTOP=${brk}`);
|
|
497
|
+
if (brk < _emscripten_stack_get_base()) abort(`brk >= _emscripten_stack_get_base() (brk=${brk}, _emscripten_stack_get_base()=${_emscripten_stack_get_base()})`);
|
|
498
|
+
// sbrk-managed memory must be above the stack
|
|
499
|
+
if (brk > wasmMemory.buffer.byteLength) abort(`brk <= wasmMemory.buffer.byteLength (brk=${brk}, wasmMemory.buffer.byteLength=${wasmMemory.buffer.byteLength})`);
|
|
500
|
+
}
|
|
501
|
+
var type = getSafeHeapType(bytes, isFloat);
|
|
502
|
+
var ret = getValue_safe(dest, type);
|
|
503
|
+
if (unsigned) ret = unSign(ret, parseInt(type.slice(1), 10));
|
|
504
|
+
return ret;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
function SAFE_HEAP_LOAD_D(dest, bytes, unsigned) {
|
|
508
|
+
return SAFE_HEAP_LOAD(dest, bytes, unsigned, true);
|
|
443
509
|
}
|
|
444
510
|
|
|
445
511
|
function segfault() {
|
|
@@ -451,7 +517,7 @@ function alignfault() {
|
|
|
451
517
|
}
|
|
452
518
|
|
|
453
519
|
// end include: runtime_safe_heap.js
|
|
454
|
-
var
|
|
520
|
+
var wasmModuleReceived;
|
|
455
521
|
|
|
456
522
|
// include: runtime_pthread.js
|
|
457
523
|
// Pthread Web Worker handling code.
|
|
@@ -461,8 +527,6 @@ var readyPromiseResolve, readyPromiseReject;
|
|
|
461
527
|
// including the main thread).
|
|
462
528
|
var workerID = 0;
|
|
463
529
|
|
|
464
|
-
var startWorker;
|
|
465
|
-
|
|
466
530
|
if (ENVIRONMENT_IS_PTHREAD) {
|
|
467
531
|
// Thread-local guard variable for one-time init of the JS state
|
|
468
532
|
var initializedJS = false;
|
|
@@ -483,7 +547,7 @@ if (ENVIRONMENT_IS_PTHREAD) {
|
|
|
483
547
|
let messageQueue = [];
|
|
484
548
|
self.onmessage = e => messageQueue.push(e);
|
|
485
549
|
// And add a callback for when the runtime is initialized.
|
|
486
|
-
startWorker =
|
|
550
|
+
self.startWorker = instance => {
|
|
487
551
|
// Notify the main thread that this thread has loaded.
|
|
488
552
|
postMessage({
|
|
489
553
|
cmd: "loaded"
|
|
@@ -516,9 +580,7 @@ if (ENVIRONMENT_IS_PTHREAD) {
|
|
|
516
580
|
}
|
|
517
581
|
wasmMemory = msgData.wasmMemory;
|
|
518
582
|
updateMemoryViews();
|
|
519
|
-
|
|
520
|
-
createWasm();
|
|
521
|
-
run();
|
|
583
|
+
wasmModuleReceived(msgData.wasmModule);
|
|
522
584
|
} else if (cmd === "run") {
|
|
523
585
|
assert(msgData.pthread_ptr);
|
|
524
586
|
// Call inside JS module to set up the stack frame for this pthread in JS module scope.
|
|
@@ -567,14 +629,6 @@ if (ENVIRONMENT_IS_PTHREAD) {
|
|
|
567
629
|
|
|
568
630
|
// ENVIRONMENT_IS_PTHREAD
|
|
569
631
|
// end include: runtime_pthread.js
|
|
570
|
-
// Memory management
|
|
571
|
-
var /** @type {!Int8Array} */ HEAP8, /** @type {!Uint8Array} */ HEAPU8, /** @type {!Int16Array} */ HEAP16, /** @type {!Int32Array} */ HEAP32, /** @type {!Uint32Array} */ HEAPU32, /** @type {!Float64Array} */ HEAPF64;
|
|
572
|
-
|
|
573
|
-
// BigInt64Array type is not correctly defined in closure
|
|
574
|
-
var /** not-@type {!BigInt64Array} */ HEAP64;
|
|
575
|
-
|
|
576
|
-
var runtimeInitialized = false;
|
|
577
|
-
|
|
578
632
|
function updateMemoryViews() {
|
|
579
633
|
var b = wasmMemory.buffer;
|
|
580
634
|
HEAP8 = new Int8Array(b);
|
|
@@ -582,16 +636,18 @@ function updateMemoryViews() {
|
|
|
582
636
|
HEAPU8 = new Uint8Array(b);
|
|
583
637
|
HEAP32 = new Int32Array(b);
|
|
584
638
|
HEAPU32 = new Uint32Array(b);
|
|
639
|
+
HEAPF32 = new Float32Array(b);
|
|
585
640
|
HEAPF64 = new Float64Array(b);
|
|
586
641
|
HEAP64 = new BigInt64Array(b);
|
|
587
642
|
new BigUint64Array(b);
|
|
588
643
|
}
|
|
589
644
|
|
|
645
|
+
// end include: runtime_shared.js
|
|
646
|
+
assert(typeof Int32Array != "undefined" && typeof Float64Array !== "undefined" && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, "JS engine does not provide full typed array support");
|
|
647
|
+
|
|
590
648
|
// In non-standalone/normal mode, we create the memory here.
|
|
591
649
|
// include: runtime_init_memory.js
|
|
592
650
|
// Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined)
|
|
593
|
-
var wasmMemory;
|
|
594
|
-
|
|
595
651
|
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
|
|
596
652
|
function initMemory() {
|
|
597
653
|
if ((ENVIRONMENT_IS_PTHREAD)) {
|
|
@@ -612,11 +668,6 @@ function initMemory() {
|
|
|
612
668
|
}
|
|
613
669
|
|
|
614
670
|
// end include: runtime_init_memory.js
|
|
615
|
-
// include: memoryprofiler.js
|
|
616
|
-
// end include: memoryprofiler.js
|
|
617
|
-
// end include: runtime_common.js
|
|
618
|
-
assert(globalThis.Int32Array && globalThis.Float64Array && Int32Array.prototype.subarray && Int32Array.prototype.set, "JS engine does not provide full typed array support");
|
|
619
|
-
|
|
620
671
|
function preRun() {
|
|
621
672
|
assert(!ENVIRONMENT_IS_PTHREAD);
|
|
622
673
|
// PThreads reuse the runtime from the main thread.
|
|
@@ -634,7 +685,7 @@ function preRun() {
|
|
|
634
685
|
function initRuntime() {
|
|
635
686
|
assert(!runtimeInitialized);
|
|
636
687
|
runtimeInitialized = true;
|
|
637
|
-
if (ENVIRONMENT_IS_PTHREAD) return startWorker();
|
|
688
|
+
if (ENVIRONMENT_IS_PTHREAD) return startWorker(Module);
|
|
638
689
|
checkStackCookie();
|
|
639
690
|
// Begin ATINITS hooks
|
|
640
691
|
if (!Module["noFSInit"] && !FS.initialized) FS.init();
|
|
@@ -666,6 +717,84 @@ function postRun() {
|
|
|
666
717
|
callRuntimeCallbacks(onPostRuns);
|
|
667
718
|
}
|
|
668
719
|
|
|
720
|
+
// A counter of dependencies for calling run(). If we need to
|
|
721
|
+
// do asynchronous work before running, increment this and
|
|
722
|
+
// decrement it. Incrementing must happen in a place like
|
|
723
|
+
// Module.preRun (used by emcc to add file preloading).
|
|
724
|
+
// Note that you can add dependencies in preRun, even though
|
|
725
|
+
// it happens right before run - run will be postponed until
|
|
726
|
+
// the dependencies are met.
|
|
727
|
+
var runDependencies = 0;
|
|
728
|
+
|
|
729
|
+
var dependenciesFulfilled = null;
|
|
730
|
+
|
|
731
|
+
// overridden to take different actions when all run dependencies are fulfilled
|
|
732
|
+
var runDependencyTracking = {};
|
|
733
|
+
|
|
734
|
+
var runDependencyWatcher = null;
|
|
735
|
+
|
|
736
|
+
function getUniqueRunDependency(id) {
|
|
737
|
+
var orig = id;
|
|
738
|
+
while (1) {
|
|
739
|
+
if (!runDependencyTracking[id]) return id;
|
|
740
|
+
id = orig + Math.random();
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
function addRunDependency(id) {
|
|
745
|
+
runDependencies++;
|
|
746
|
+
Module["monitorRunDependencies"]?.(runDependencies);
|
|
747
|
+
if (id) {
|
|
748
|
+
assert(!runDependencyTracking[id]);
|
|
749
|
+
runDependencyTracking[id] = 1;
|
|
750
|
+
if (runDependencyWatcher === null && typeof setInterval != "undefined") {
|
|
751
|
+
// Check for missing dependencies every few seconds
|
|
752
|
+
runDependencyWatcher = setInterval(() => {
|
|
753
|
+
if (ABORT) {
|
|
754
|
+
clearInterval(runDependencyWatcher);
|
|
755
|
+
runDependencyWatcher = null;
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
758
|
+
var shown = false;
|
|
759
|
+
for (var dep in runDependencyTracking) {
|
|
760
|
+
if (!shown) {
|
|
761
|
+
shown = true;
|
|
762
|
+
err("still waiting on run dependencies:");
|
|
763
|
+
}
|
|
764
|
+
err(`dependency: ${dep}`);
|
|
765
|
+
}
|
|
766
|
+
if (shown) {
|
|
767
|
+
err("(end of list)");
|
|
768
|
+
}
|
|
769
|
+
}, 1e4);
|
|
770
|
+
}
|
|
771
|
+
} else {
|
|
772
|
+
err("warning: run dependency added without ID");
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
function removeRunDependency(id) {
|
|
777
|
+
runDependencies--;
|
|
778
|
+
Module["monitorRunDependencies"]?.(runDependencies);
|
|
779
|
+
if (id) {
|
|
780
|
+
assert(runDependencyTracking[id]);
|
|
781
|
+
delete runDependencyTracking[id];
|
|
782
|
+
} else {
|
|
783
|
+
err("warning: run dependency removed without ID");
|
|
784
|
+
}
|
|
785
|
+
if (runDependencies == 0) {
|
|
786
|
+
if (runDependencyWatcher !== null) {
|
|
787
|
+
clearInterval(runDependencyWatcher);
|
|
788
|
+
runDependencyWatcher = null;
|
|
789
|
+
}
|
|
790
|
+
if (dependenciesFulfilled) {
|
|
791
|
+
var callback = dependenciesFulfilled;
|
|
792
|
+
dependenciesFulfilled = null;
|
|
793
|
+
callback();
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
|
|
669
798
|
/** @param {string|number=} what */ function abort(what) {
|
|
670
799
|
Module["onAbort"]?.(what);
|
|
671
800
|
what = "Aborted(" + what + ")";
|
|
@@ -686,7 +815,7 @@ function postRun() {
|
|
|
686
815
|
// though it can.
|
|
687
816
|
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
|
|
688
817
|
/** @suppress {checkTypes} */ var e = new WebAssembly.RuntimeError(what);
|
|
689
|
-
readyPromiseReject
|
|
818
|
+
readyPromiseReject(e);
|
|
690
819
|
// Throw the error whether or not MODULARIZE is set because abort is used
|
|
691
820
|
// in code paths apart from instantiation where an exception is expected
|
|
692
821
|
// to be thrown when abort is called.
|
|
@@ -721,8 +850,6 @@ function getBinarySync(file) {
|
|
|
721
850
|
if (readBinary) {
|
|
722
851
|
return readBinary(file);
|
|
723
852
|
}
|
|
724
|
-
// Throwing a plain string here, even though it not normally adviables since
|
|
725
|
-
// this gets turning into an `abort` in instantiateArrayBuffer.
|
|
726
853
|
throw "both async and sync fetching of the wasm failed";
|
|
727
854
|
}
|
|
728
855
|
|
|
@@ -747,15 +874,15 @@ async function instantiateArrayBuffer(binaryFile, imports) {
|
|
|
747
874
|
} catch (reason) {
|
|
748
875
|
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
749
876
|
// Warn on some common problems.
|
|
750
|
-
if (isFileURI(
|
|
751
|
-
err(`warning: Loading from a file URI (${
|
|
877
|
+
if (isFileURI(wasmBinaryFile)) {
|
|
878
|
+
err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`);
|
|
752
879
|
}
|
|
753
880
|
abort(reason);
|
|
754
881
|
}
|
|
755
882
|
}
|
|
756
883
|
|
|
757
884
|
async function instantiateAsync(binary, binaryFile, imports) {
|
|
758
|
-
if (!binary) {
|
|
885
|
+
if (!binary && typeof WebAssembly.instantiateStreaming == "function") {
|
|
759
886
|
try {
|
|
760
887
|
var response = fetch(binaryFile, {
|
|
761
888
|
credentials: "same-origin"
|
|
@@ -790,11 +917,13 @@ async function createWasm() {
|
|
|
790
917
|
/** @param {WebAssembly.Module=} module*/ function receiveInstance(instance, module) {
|
|
791
918
|
wasmExports = instance.exports;
|
|
792
919
|
registerTLSInit(wasmExports["_emscripten_tls_init"]);
|
|
793
|
-
assignWasmExports(wasmExports);
|
|
794
920
|
// We now have the Wasm module loaded up, keep a reference to the compiled module so we can post it to the workers.
|
|
795
921
|
wasmModule = module;
|
|
922
|
+
removeRunDependency("wasm-instantiate");
|
|
796
923
|
return wasmExports;
|
|
797
924
|
}
|
|
925
|
+
// wait for the pthread pool (if any)
|
|
926
|
+
addRunDependency("wasm-instantiate");
|
|
798
927
|
// Prefer streaming instantiation if available.
|
|
799
928
|
// Async compilation can be confusing when an error on the page overwrites Module
|
|
800
929
|
// (for example, if the order of elements is wrong, and the one defining Module is
|
|
@@ -817,8 +946,8 @@ async function createWasm() {
|
|
|
817
946
|
if (Module["instantiateWasm"]) {
|
|
818
947
|
return new Promise((resolve, reject) => {
|
|
819
948
|
try {
|
|
820
|
-
Module["instantiateWasm"](info, (
|
|
821
|
-
resolve(receiveInstance(
|
|
949
|
+
Module["instantiateWasm"](info, (mod, inst) => {
|
|
950
|
+
resolve(receiveInstance(mod, inst));
|
|
822
951
|
});
|
|
823
952
|
} catch (e) {
|
|
824
953
|
err(`Module.instantiateWasm callback failed with error: ${e}`);
|
|
@@ -827,16 +956,25 @@ async function createWasm() {
|
|
|
827
956
|
});
|
|
828
957
|
}
|
|
829
958
|
if ((ENVIRONMENT_IS_PTHREAD)) {
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
959
|
+
return new Promise(resolve => {
|
|
960
|
+
wasmModuleReceived = module => {
|
|
961
|
+
// Instantiate from the module posted from the main thread.
|
|
962
|
+
// We can just use sync instantiation in the worker.
|
|
963
|
+
var instance = new WebAssembly.Instance(module, getWasmImports());
|
|
964
|
+
resolve(receiveInstance(instance, module));
|
|
965
|
+
};
|
|
966
|
+
});
|
|
835
967
|
}
|
|
836
968
|
wasmBinaryFile ??= findWasmBinary();
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
969
|
+
try {
|
|
970
|
+
var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
|
|
971
|
+
var exports$1 = receiveInstantiationResult(result);
|
|
972
|
+
return exports$1;
|
|
973
|
+
} catch (e) {
|
|
974
|
+
// If instantiation fails, reject the module ready promise.
|
|
975
|
+
readyPromiseReject(e);
|
|
976
|
+
return Promise.reject(e);
|
|
977
|
+
}
|
|
840
978
|
}
|
|
841
979
|
|
|
842
980
|
// end include: preamble.js
|
|
@@ -940,15 +1078,15 @@ var stackAlloc = sz => __emscripten_stack_alloc(sz);
|
|
|
940
1078
|
var arg = callArgs[i];
|
|
941
1079
|
if (typeof arg == "bigint") {
|
|
942
1080
|
// The prefix is non-zero to indicate a bigint.
|
|
943
|
-
HEAP64[
|
|
944
|
-
HEAP64[
|
|
1081
|
+
HEAP64[b + 2 * i] = 1n;
|
|
1082
|
+
HEAP64[b + 2 * i + 1] = arg;
|
|
945
1083
|
} else {
|
|
946
1084
|
// The prefix is zero to indicate a JS Number.
|
|
947
|
-
HEAP64[
|
|
948
|
-
|
|
1085
|
+
HEAP64[b + 2 * i] = 0n;
|
|
1086
|
+
SAFE_HEAP_STORE_D((b + 2 * i + 1) * 8, arg, 8);
|
|
949
1087
|
}
|
|
950
1088
|
}
|
|
951
|
-
var rtn =
|
|
1089
|
+
var rtn = __emscripten_run_on_main_thread_js(funcIndex, emAsmAddr, serializedNumCallArgs, args, sync);
|
|
952
1090
|
stackRestore(sp);
|
|
953
1091
|
return rtn;
|
|
954
1092
|
};
|
|
@@ -991,7 +1129,7 @@ function exitOnMainThread(returnCode) {
|
|
|
991
1129
|
// if exit() was called explicitly, warn the user if the runtime isn't actually being shut down
|
|
992
1130
|
if (keepRuntimeAlive() && !implicit) {
|
|
993
1131
|
var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;
|
|
994
|
-
readyPromiseReject
|
|
1132
|
+
readyPromiseReject(msg);
|
|
995
1133
|
err(msg);
|
|
996
1134
|
}
|
|
997
1135
|
_proc_exit(status);
|
|
@@ -1000,8 +1138,8 @@ function exitOnMainThread(returnCode) {
|
|
|
1000
1138
|
var _exit = exitJS;
|
|
1001
1139
|
|
|
1002
1140
|
var ptrToString = ptr => {
|
|
1003
|
-
assert(typeof ptr === "number"
|
|
1004
|
-
//
|
|
1141
|
+
assert(typeof ptr === "number");
|
|
1142
|
+
// With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
|
|
1005
1143
|
ptr >>>= 0;
|
|
1006
1144
|
return "0x" + ptr.toString(16).padStart(8, "0");
|
|
1007
1145
|
};
|
|
@@ -1013,8 +1151,18 @@ var PThread = {
|
|
|
1013
1151
|
pthreads: {},
|
|
1014
1152
|
nextWorkerID: 1,
|
|
1015
1153
|
init() {
|
|
1154
|
+
if ((!(ENVIRONMENT_IS_PTHREAD))) {
|
|
1155
|
+
PThread.initMainThread();
|
|
1156
|
+
}
|
|
1157
|
+
},
|
|
1158
|
+
initMainThread() {
|
|
1159
|
+
// MINIMAL_RUNTIME takes care of calling loadWasmModuleToAllWorkers
|
|
1160
|
+
// in postamble_minimal.js
|
|
1161
|
+
addOnPreRun(() => {
|
|
1162
|
+
addRunDependency("loading-workers");
|
|
1163
|
+
PThread.loadWasmModuleToAllWorkers(() => removeRunDependency("loading-workers"));
|
|
1164
|
+
});
|
|
1016
1165
|
},
|
|
1017
|
-
initMainThread() {},
|
|
1018
1166
|
terminateAllThreads: () => {
|
|
1019
1167
|
assert(!ENVIRONMENT_IS_PTHREAD, "Internal Error! terminateAllThreads() can only ever be called from main application thread!");
|
|
1020
1168
|
// Attempt to kill all workers. Sadly (at least on the web) there is no
|
|
@@ -1079,10 +1227,7 @@ var PThread = {
|
|
|
1079
1227
|
} else if (cmd === "spawnThread") {
|
|
1080
1228
|
spawnThread(d);
|
|
1081
1229
|
} else if (cmd === "cleanupThread") {
|
|
1082
|
-
|
|
1083
|
-
// back into user code to free thread data. Without this it's possible
|
|
1084
|
-
// the unwind or ExitStatus exception could escape here.
|
|
1085
|
-
callUserCallback(() => cleanupThread(d.thread));
|
|
1230
|
+
cleanupThread(d.thread);
|
|
1086
1231
|
} else if (cmd === "loaded") {
|
|
1087
1232
|
worker.loaded = true;
|
|
1088
1233
|
onFinishedLoading(worker);
|
|
@@ -1127,6 +1272,9 @@ var PThread = {
|
|
|
1127
1272
|
"workerID": worker.workerID
|
|
1128
1273
|
});
|
|
1129
1274
|
}),
|
|
1275
|
+
loadWasmModuleToAllWorkers(onMaybeReady) {
|
|
1276
|
+
onMaybeReady();
|
|
1277
|
+
},
|
|
1130
1278
|
allocateUnusedWorker() {
|
|
1131
1279
|
var worker;
|
|
1132
1280
|
// If we're using module output, use bundler-friendly pattern.
|
|
@@ -1169,9 +1317,9 @@ var onPostRuns = [];
|
|
|
1169
1317
|
|
|
1170
1318
|
var addOnPostRun = cb => onPostRuns.push(cb);
|
|
1171
1319
|
|
|
1172
|
-
|
|
1173
|
-
var stackHigh =
|
|
1174
|
-
var stackSize =
|
|
1320
|
+
var establishStackSpace = pthread_ptr => {
|
|
1321
|
+
var stackHigh = SAFE_HEAP_LOAD((((pthread_ptr) + (52)) >> 2) * 4, 4, 1);
|
|
1322
|
+
var stackSize = SAFE_HEAP_LOAD((((pthread_ptr) + (56)) >> 2) * 4, 4, 1);
|
|
1175
1323
|
var stackLow = stackHigh - stackSize;
|
|
1176
1324
|
assert(stackHigh != 0);
|
|
1177
1325
|
assert(stackLow != 0);
|
|
@@ -1184,6 +1332,38 @@ function establishStackSpace(pthread_ptr) {
|
|
|
1184
1332
|
// Write the stack cookie last, after we have set up the proper bounds and
|
|
1185
1333
|
// current position of the stack.
|
|
1186
1334
|
writeStackCookie();
|
|
1335
|
+
};
|
|
1336
|
+
|
|
1337
|
+
function getValue_safe(ptr, type = "i8") {
|
|
1338
|
+
if (type.endsWith("*")) type = "*";
|
|
1339
|
+
switch (type) {
|
|
1340
|
+
case "i1":
|
|
1341
|
+
return HEAP8[ptr];
|
|
1342
|
+
|
|
1343
|
+
case "i8":
|
|
1344
|
+
return HEAP8[ptr];
|
|
1345
|
+
|
|
1346
|
+
case "i16":
|
|
1347
|
+
return HEAP16[((ptr) >> 1)];
|
|
1348
|
+
|
|
1349
|
+
case "i32":
|
|
1350
|
+
return HEAP32[((ptr) >> 2)];
|
|
1351
|
+
|
|
1352
|
+
case "i64":
|
|
1353
|
+
return HEAP64[((ptr) >> 3)];
|
|
1354
|
+
|
|
1355
|
+
case "float":
|
|
1356
|
+
return HEAPF32[((ptr) >> 2)];
|
|
1357
|
+
|
|
1358
|
+
case "double":
|
|
1359
|
+
return HEAPF64[((ptr) >> 3)];
|
|
1360
|
+
|
|
1361
|
+
case "*":
|
|
1362
|
+
return HEAPU32[((ptr) >> 2)];
|
|
1363
|
+
|
|
1364
|
+
default:
|
|
1365
|
+
abort(`invalid type for getValue: ${type}`);
|
|
1366
|
+
}
|
|
1187
1367
|
}
|
|
1188
1368
|
|
|
1189
1369
|
var invokeEntryPoint = (ptr, arg) => {
|
|
@@ -1210,14 +1390,11 @@ var invokeEntryPoint = (ptr, arg) => {
|
|
|
1210
1390
|
var result = (a1 => dynCall_ii(ptr, a1))(arg);
|
|
1211
1391
|
checkStackCookie();
|
|
1212
1392
|
function finish(result) {
|
|
1213
|
-
// In MINIMAL_RUNTIME the noExitRuntime concept does not apply to
|
|
1214
|
-
// pthreads. To exit a pthread with live runtime, use the function
|
|
1215
|
-
// emscripten_unwind_to_js_event_loop() in the pthread body.
|
|
1216
1393
|
if (keepRuntimeAlive()) {
|
|
1217
1394
|
EXITSTATUS = result;
|
|
1218
|
-
|
|
1395
|
+
} else {
|
|
1396
|
+
__emscripten_thread_exit(result);
|
|
1219
1397
|
}
|
|
1220
|
-
__emscripten_thread_exit(result);
|
|
1221
1398
|
}
|
|
1222
1399
|
finish(result);
|
|
1223
1400
|
};
|
|
@@ -1230,6 +1407,60 @@ var runtimeKeepalivePush = () => {
|
|
|
1230
1407
|
runtimeKeepaliveCounter += 1;
|
|
1231
1408
|
};
|
|
1232
1409
|
|
|
1410
|
+
function setValue_safe(ptr, value, type = "i8") {
|
|
1411
|
+
if (type.endsWith("*")) type = "*";
|
|
1412
|
+
switch (type) {
|
|
1413
|
+
case "i1":
|
|
1414
|
+
HEAP8[ptr] = value;
|
|
1415
|
+
checkInt8(value);
|
|
1416
|
+
break;
|
|
1417
|
+
|
|
1418
|
+
case "i8":
|
|
1419
|
+
HEAP8[ptr] = value;
|
|
1420
|
+
checkInt8(value);
|
|
1421
|
+
break;
|
|
1422
|
+
|
|
1423
|
+
case "i16":
|
|
1424
|
+
HEAP16[((ptr) >> 1)] = value;
|
|
1425
|
+
checkInt16(value);
|
|
1426
|
+
break;
|
|
1427
|
+
|
|
1428
|
+
case "i32":
|
|
1429
|
+
HEAP32[((ptr) >> 2)] = value;
|
|
1430
|
+
checkInt32(value);
|
|
1431
|
+
break;
|
|
1432
|
+
|
|
1433
|
+
case "i64":
|
|
1434
|
+
HEAP64[((ptr) >> 3)] = BigInt(value);
|
|
1435
|
+
checkInt64(value);
|
|
1436
|
+
break;
|
|
1437
|
+
|
|
1438
|
+
case "float":
|
|
1439
|
+
HEAPF32[((ptr) >> 2)] = value;
|
|
1440
|
+
break;
|
|
1441
|
+
|
|
1442
|
+
case "double":
|
|
1443
|
+
HEAPF64[((ptr) >> 3)] = value;
|
|
1444
|
+
break;
|
|
1445
|
+
|
|
1446
|
+
case "*":
|
|
1447
|
+
HEAPU32[((ptr) >> 2)] = value;
|
|
1448
|
+
break;
|
|
1449
|
+
|
|
1450
|
+
default:
|
|
1451
|
+
abort(`invalid type for setValue: ${type}`);
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
var unSign = (value, bits) => {
|
|
1456
|
+
if (value >= 0) {
|
|
1457
|
+
return value;
|
|
1458
|
+
}
|
|
1459
|
+
// Need some trickery, since if bits == 32, we are right at the limit of the
|
|
1460
|
+
// bits JS uses in bitshifts
|
|
1461
|
+
return bits <= 32 ? 2 * Math.abs(1 << (bits - 1)) + value : Math.pow(2, bits) + value;
|
|
1462
|
+
};
|
|
1463
|
+
|
|
1233
1464
|
var warnOnce = text => {
|
|
1234
1465
|
warnOnce.shown ||= {};
|
|
1235
1466
|
if (!warnOnce.shown[text]) {
|
|
@@ -1238,17 +1469,7 @@ var warnOnce = text => {
|
|
|
1238
1469
|
}
|
|
1239
1470
|
};
|
|
1240
1471
|
|
|
1241
|
-
var UTF8Decoder =
|
|
1242
|
-
|
|
1243
|
-
var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
|
|
1244
|
-
var maxIdx = idx + maxBytesToRead;
|
|
1245
|
-
// TextDecoder needs to know the byte length in advance, it doesn't stop on
|
|
1246
|
-
// null terminator by itself.
|
|
1247
|
-
// As a tiny code save trick, compare idx against maxIdx using a negation,
|
|
1248
|
-
// so that maxBytesToRead=undefined/NaN means Infinity.
|
|
1249
|
-
while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;
|
|
1250
|
-
return idx;
|
|
1251
|
-
};
|
|
1472
|
+
var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder : undefined;
|
|
1252
1473
|
|
|
1253
1474
|
/**
|
|
1254
1475
|
* Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given
|
|
@@ -1257,15 +1478,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
|
|
|
1257
1478
|
* heapOrArray is either a regular array, or a JavaScript typed array view.
|
|
1258
1479
|
* @param {number=} idx
|
|
1259
1480
|
* @param {number=} maxBytesToRead
|
|
1260
|
-
* @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character.
|
|
1261
1481
|
* @return {string}
|
|
1262
|
-
*/ var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead
|
|
1263
|
-
var
|
|
1264
|
-
|
|
1482
|
+
*/ var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {
|
|
1483
|
+
var endIdx = idx + maxBytesToRead;
|
|
1484
|
+
var endPtr = idx;
|
|
1485
|
+
// TextDecoder needs to know the byte length in advance, it doesn't stop on
|
|
1486
|
+
// null terminator by itself. Also, use the length info to avoid running tiny
|
|
1487
|
+
// strings through TextDecoder, since .subarray() allocates garbage.
|
|
1488
|
+
// (As a tiny code save trick, compare endPtr against endIdx using a negation,
|
|
1489
|
+
// so that undefined/NaN means Infinity)
|
|
1490
|
+
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
|
|
1265
1491
|
if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
|
|
1266
1492
|
return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer ? heapOrArray.subarray(idx, endPtr) : heapOrArray.slice(idx, endPtr));
|
|
1267
1493
|
}
|
|
1268
1494
|
var str = "";
|
|
1495
|
+
// If building with TextDecoder, we have already computed the string length
|
|
1496
|
+
// above, so test loop end condition against that
|
|
1269
1497
|
while (idx < endPtr) {
|
|
1270
1498
|
// For UTF8 byte structure, see:
|
|
1271
1499
|
// http://en.wikipedia.org/wiki/UTF-8#Description
|
|
@@ -1307,10 +1535,12 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
|
|
|
1307
1535
|
* maximum number of bytes to read. You can omit this parameter to scan the
|
|
1308
1536
|
* string until the first 0 byte. If maxBytesToRead is passed, and the string
|
|
1309
1537
|
* at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the
|
|
1310
|
-
* string will cut short at that byte index.
|
|
1311
|
-
*
|
|
1538
|
+
* string will cut short at that byte index (i.e. maxBytesToRead will not
|
|
1539
|
+
* produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing
|
|
1540
|
+
* frequent uses of UTF8ToString() with and without maxBytesToRead may throw
|
|
1541
|
+
* JS JIT optimizations off, so it is worth to consider consistently using one
|
|
1312
1542
|
* @return {string}
|
|
1313
|
-
*/ var UTF8ToString = (ptr, maxBytesToRead
|
|
1543
|
+
*/ var UTF8ToString = (ptr, maxBytesToRead) => {
|
|
1314
1544
|
assert(typeof ptr == "number", `UTF8ToString expects a number (got ${typeof ptr})`);
|
|
1315
1545
|
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
|
1316
1546
|
};
|
|
@@ -1322,7 +1552,7 @@ function pthreadCreateProxied(pthread_ptr, attr, startRoutine, arg) {
|
|
|
1322
1552
|
return ___pthread_create_js(pthread_ptr, attr, startRoutine, arg);
|
|
1323
1553
|
}
|
|
1324
1554
|
|
|
1325
|
-
var _emscripten_has_threading_support = () =>
|
|
1555
|
+
var _emscripten_has_threading_support = () => typeof SharedArrayBuffer != "undefined";
|
|
1326
1556
|
|
|
1327
1557
|
var ___pthread_create_js = (pthread_ptr, attr, startRoutine, arg) => {
|
|
1328
1558
|
if (!_emscripten_has_threading_support()) {
|
|
@@ -1511,10 +1741,19 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1511
1741
|
var endIdx = outIdx + maxBytesToWrite - 1;
|
|
1512
1742
|
// -1 for string null terminator.
|
|
1513
1743
|
for (var i = 0; i < str.length; ++i) {
|
|
1744
|
+
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
|
|
1745
|
+
// unit, not a Unicode code point of the character! So decode
|
|
1746
|
+
// UTF16->UTF32->UTF8.
|
|
1747
|
+
// See http://unicode.org/faq/utf_bom.html#utf16-3
|
|
1514
1748
|
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description
|
|
1515
1749
|
// and https://www.ietf.org/rfc/rfc2279.txt
|
|
1516
1750
|
// and https://tools.ietf.org/html/rfc3629
|
|
1517
|
-
var u = str.
|
|
1751
|
+
var u = str.charCodeAt(i);
|
|
1752
|
+
// possibly a lead surrogate
|
|
1753
|
+
if (u >= 55296 && u <= 57343) {
|
|
1754
|
+
var u1 = str.charCodeAt(++i);
|
|
1755
|
+
u = 65536 + ((u & 1023) << 10) | (u1 & 1023);
|
|
1756
|
+
}
|
|
1518
1757
|
if (u <= 127) {
|
|
1519
1758
|
if (outIdx >= endIdx) break;
|
|
1520
1759
|
heap[outIdx++] = u;
|
|
@@ -1534,9 +1773,6 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1534
1773
|
heap[outIdx++] = 128 | ((u >> 12) & 63);
|
|
1535
1774
|
heap[outIdx++] = 128 | ((u >> 6) & 63);
|
|
1536
1775
|
heap[outIdx++] = 128 | (u & 63);
|
|
1537
|
-
// Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16.
|
|
1538
|
-
// We need to manually skip over the second code unit for correct iteration.
|
|
1539
|
-
i++;
|
|
1540
1776
|
}
|
|
1541
1777
|
}
|
|
1542
1778
|
// Null-terminate the pointer to the buffer.
|
|
@@ -1555,7 +1791,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1555
1791
|
var FS_stdin_getChar = () => {
|
|
1556
1792
|
if (!FS_stdin_getChar_buffer.length) {
|
|
1557
1793
|
var result = null;
|
|
1558
|
-
if (
|
|
1794
|
+
if (typeof window != "undefined" && typeof window.prompt == "function") {
|
|
1559
1795
|
// Browser.
|
|
1560
1796
|
result = window.prompt("Input: ");
|
|
1561
1797
|
// returns null on cancel
|
|
@@ -2022,6 +2258,61 @@ var MEMFS = {
|
|
|
2022
2258
|
}
|
|
2023
2259
|
};
|
|
2024
2260
|
|
|
2261
|
+
var asyncLoad = async url => {
|
|
2262
|
+
var arrayBuffer = await readAsync(url);
|
|
2263
|
+
assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`);
|
|
2264
|
+
return new Uint8Array(arrayBuffer);
|
|
2265
|
+
};
|
|
2266
|
+
|
|
2267
|
+
var FS_createDataFile = (...args) => FS.createDataFile(...args);
|
|
2268
|
+
|
|
2269
|
+
var preloadPlugins = [];
|
|
2270
|
+
|
|
2271
|
+
var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {
|
|
2272
|
+
// Ensure plugins are ready.
|
|
2273
|
+
if (typeof Browser != "undefined") Browser.init();
|
|
2274
|
+
var handled = false;
|
|
2275
|
+
preloadPlugins.forEach(plugin => {
|
|
2276
|
+
if (handled) return;
|
|
2277
|
+
if (plugin["canHandle"](fullname)) {
|
|
2278
|
+
plugin["handle"](byteArray, fullname, finish, onerror);
|
|
2279
|
+
handled = true;
|
|
2280
|
+
}
|
|
2281
|
+
});
|
|
2282
|
+
return handled;
|
|
2283
|
+
};
|
|
2284
|
+
|
|
2285
|
+
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
|
|
2286
|
+
// TODO we should allow people to just pass in a complete filename instead
|
|
2287
|
+
// of parent and name being that we just join them anyways
|
|
2288
|
+
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
|
|
2289
|
+
var dep = getUniqueRunDependency(`cp ${fullname}`);
|
|
2290
|
+
// might have several active requests for the same fullname
|
|
2291
|
+
function processData(byteArray) {
|
|
2292
|
+
function finish(byteArray) {
|
|
2293
|
+
preFinish?.();
|
|
2294
|
+
if (!dontCreateFile) {
|
|
2295
|
+
FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
|
2296
|
+
}
|
|
2297
|
+
onload?.();
|
|
2298
|
+
removeRunDependency(dep);
|
|
2299
|
+
}
|
|
2300
|
+
if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {
|
|
2301
|
+
onerror?.();
|
|
2302
|
+
removeRunDependency(dep);
|
|
2303
|
+
})) {
|
|
2304
|
+
return;
|
|
2305
|
+
}
|
|
2306
|
+
finish(byteArray);
|
|
2307
|
+
}
|
|
2308
|
+
addRunDependency(dep);
|
|
2309
|
+
if (typeof url == "string") {
|
|
2310
|
+
asyncLoad(url).then(processData, onerror);
|
|
2311
|
+
} else {
|
|
2312
|
+
processData(url);
|
|
2313
|
+
}
|
|
2314
|
+
};
|
|
2315
|
+
|
|
2025
2316
|
var FS_modeStringToFlags = str => {
|
|
2026
2317
|
var flagModes = {
|
|
2027
2318
|
"r": 0,
|
|
@@ -2316,120 +2607,6 @@ var ERRNO_CODES = {
|
|
|
2316
2607
|
"ESTRPIPE": 135
|
|
2317
2608
|
};
|
|
2318
2609
|
|
|
2319
|
-
var asyncLoad = async url => {
|
|
2320
|
-
var arrayBuffer = await readAsync(url);
|
|
2321
|
-
assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`);
|
|
2322
|
-
return new Uint8Array(arrayBuffer);
|
|
2323
|
-
};
|
|
2324
|
-
|
|
2325
|
-
var FS_createDataFile = (...args) => FS.createDataFile(...args);
|
|
2326
|
-
|
|
2327
|
-
var getUniqueRunDependency = id => {
|
|
2328
|
-
var orig = id;
|
|
2329
|
-
while (1) {
|
|
2330
|
-
if (!runDependencyTracking[id]) return id;
|
|
2331
|
-
id = orig + Math.random();
|
|
2332
|
-
}
|
|
2333
|
-
};
|
|
2334
|
-
|
|
2335
|
-
var runDependencies = 0;
|
|
2336
|
-
|
|
2337
|
-
var dependenciesFulfilled = null;
|
|
2338
|
-
|
|
2339
|
-
var runDependencyTracking = {};
|
|
2340
|
-
|
|
2341
|
-
var runDependencyWatcher = null;
|
|
2342
|
-
|
|
2343
|
-
var removeRunDependency = id => {
|
|
2344
|
-
runDependencies--;
|
|
2345
|
-
Module["monitorRunDependencies"]?.(runDependencies);
|
|
2346
|
-
assert(id, "removeRunDependency requires an ID");
|
|
2347
|
-
assert(runDependencyTracking[id]);
|
|
2348
|
-
delete runDependencyTracking[id];
|
|
2349
|
-
if (runDependencies == 0) {
|
|
2350
|
-
if (runDependencyWatcher !== null) {
|
|
2351
|
-
clearInterval(runDependencyWatcher);
|
|
2352
|
-
runDependencyWatcher = null;
|
|
2353
|
-
}
|
|
2354
|
-
if (dependenciesFulfilled) {
|
|
2355
|
-
var callback = dependenciesFulfilled;
|
|
2356
|
-
dependenciesFulfilled = null;
|
|
2357
|
-
callback();
|
|
2358
|
-
}
|
|
2359
|
-
}
|
|
2360
|
-
};
|
|
2361
|
-
|
|
2362
|
-
var addRunDependency = id => {
|
|
2363
|
-
runDependencies++;
|
|
2364
|
-
Module["monitorRunDependencies"]?.(runDependencies);
|
|
2365
|
-
assert(id, "addRunDependency requires an ID");
|
|
2366
|
-
assert(!runDependencyTracking[id]);
|
|
2367
|
-
runDependencyTracking[id] = 1;
|
|
2368
|
-
if (runDependencyWatcher === null && globalThis.setInterval) {
|
|
2369
|
-
// Check for missing dependencies every few seconds
|
|
2370
|
-
runDependencyWatcher = setInterval(() => {
|
|
2371
|
-
if (ABORT) {
|
|
2372
|
-
clearInterval(runDependencyWatcher);
|
|
2373
|
-
runDependencyWatcher = null;
|
|
2374
|
-
return;
|
|
2375
|
-
}
|
|
2376
|
-
var shown = false;
|
|
2377
|
-
for (var dep in runDependencyTracking) {
|
|
2378
|
-
if (!shown) {
|
|
2379
|
-
shown = true;
|
|
2380
|
-
err("still waiting on run dependencies:");
|
|
2381
|
-
}
|
|
2382
|
-
err(`dependency: ${dep}`);
|
|
2383
|
-
}
|
|
2384
|
-
if (shown) {
|
|
2385
|
-
err("(end of list)");
|
|
2386
|
-
}
|
|
2387
|
-
}, 1e4);
|
|
2388
|
-
}
|
|
2389
|
-
};
|
|
2390
|
-
|
|
2391
|
-
var preloadPlugins = [];
|
|
2392
|
-
|
|
2393
|
-
var FS_handledByPreloadPlugin = async (byteArray, fullname) => {
|
|
2394
|
-
// Ensure plugins are ready.
|
|
2395
|
-
if (typeof Browser != "undefined") Browser.init();
|
|
2396
|
-
for (var plugin of preloadPlugins) {
|
|
2397
|
-
if (plugin["canHandle"](fullname)) {
|
|
2398
|
-
assert(plugin["handle"].constructor.name === "AsyncFunction", "Filesystem plugin handlers must be async functions (See #24914)");
|
|
2399
|
-
return plugin["handle"](byteArray, fullname);
|
|
2400
|
-
}
|
|
2401
|
-
}
|
|
2402
|
-
// In no plugin handled this file then return the original/unmodified
|
|
2403
|
-
// byteArray.
|
|
2404
|
-
return byteArray;
|
|
2405
|
-
};
|
|
2406
|
-
|
|
2407
|
-
var FS_preloadFile = async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => {
|
|
2408
|
-
// TODO we should allow people to just pass in a complete filename instead
|
|
2409
|
-
// of parent and name being that we just join them anyways
|
|
2410
|
-
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
|
|
2411
|
-
var dep = getUniqueRunDependency(`cp ${fullname}`);
|
|
2412
|
-
// might have several active requests for the same fullname
|
|
2413
|
-
addRunDependency(dep);
|
|
2414
|
-
try {
|
|
2415
|
-
var byteArray = url;
|
|
2416
|
-
if (typeof url == "string") {
|
|
2417
|
-
byteArray = await asyncLoad(url);
|
|
2418
|
-
}
|
|
2419
|
-
byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);
|
|
2420
|
-
preFinish?.();
|
|
2421
|
-
if (!dontCreateFile) {
|
|
2422
|
-
FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
|
2423
|
-
}
|
|
2424
|
-
} finally {
|
|
2425
|
-
removeRunDependency(dep);
|
|
2426
|
-
}
|
|
2427
|
-
};
|
|
2428
|
-
|
|
2429
|
-
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
|
|
2430
|
-
FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror);
|
|
2431
|
-
};
|
|
2432
|
-
|
|
2433
2610
|
var FS = {
|
|
2434
2611
|
root: null,
|
|
2435
2612
|
mounts: [],
|
|
@@ -2557,9 +2734,6 @@ var FS = {
|
|
|
2557
2734
|
current_path = PATH.dirname(current_path);
|
|
2558
2735
|
if (FS.isRoot(current)) {
|
|
2559
2736
|
path = current_path + "/" + parts.slice(i + 1).join("/");
|
|
2560
|
-
// We're making progress here, don't let many consecutive ..'s
|
|
2561
|
-
// lead to ELOOP
|
|
2562
|
-
nlinks--;
|
|
2563
2737
|
continue linkloop;
|
|
2564
2738
|
} else {
|
|
2565
2739
|
current = current.parent;
|
|
@@ -3568,29 +3742,33 @@ var FS = {
|
|
|
3568
3742
|
opts.flags = opts.flags || 0;
|
|
3569
3743
|
opts.encoding = opts.encoding || "binary";
|
|
3570
3744
|
if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
|
|
3571
|
-
|
|
3745
|
+
throw new Error(`Invalid encoding type "${opts.encoding}"`);
|
|
3572
3746
|
}
|
|
3747
|
+
var ret;
|
|
3573
3748
|
var stream = FS.open(path, opts.flags);
|
|
3574
3749
|
var stat = FS.stat(path);
|
|
3575
3750
|
var length = stat.size;
|
|
3576
3751
|
var buf = new Uint8Array(length);
|
|
3577
3752
|
FS.read(stream, buf, 0, length, 0);
|
|
3578
3753
|
if (opts.encoding === "utf8") {
|
|
3579
|
-
|
|
3754
|
+
ret = UTF8ArrayToString(buf);
|
|
3755
|
+
} else if (opts.encoding === "binary") {
|
|
3756
|
+
ret = buf;
|
|
3580
3757
|
}
|
|
3581
3758
|
FS.close(stream);
|
|
3582
|
-
return
|
|
3759
|
+
return ret;
|
|
3583
3760
|
},
|
|
3584
3761
|
writeFile(path, data, opts = {}) {
|
|
3585
3762
|
opts.flags = opts.flags || 577;
|
|
3586
3763
|
var stream = FS.open(path, opts.flags, opts.mode);
|
|
3587
3764
|
if (typeof data == "string") {
|
|
3588
|
-
|
|
3589
|
-
|
|
3590
|
-
|
|
3765
|
+
var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
|
|
3766
|
+
var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
|
|
3767
|
+
FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);
|
|
3768
|
+
} else if (ArrayBuffer.isView(data)) {
|
|
3591
3769
|
FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);
|
|
3592
3770
|
} else {
|
|
3593
|
-
|
|
3771
|
+
throw new Error("Unsupported data type");
|
|
3594
3772
|
}
|
|
3595
3773
|
FS.close(stream);
|
|
3596
3774
|
},
|
|
@@ -3896,12 +4074,13 @@ var FS = {
|
|
|
3896
4074
|
},
|
|
3897
4075
|
forceLoadFile(obj) {
|
|
3898
4076
|
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
|
|
3899
|
-
if (
|
|
3900
|
-
|
|
4077
|
+
if (typeof XMLHttpRequest != "undefined") {
|
|
4078
|
+
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.");
|
|
3901
4079
|
} else {
|
|
3902
4080
|
// Command-line.
|
|
3903
4081
|
try {
|
|
3904
4082
|
obj.contents = readBinary(obj.url);
|
|
4083
|
+
obj.usedBytes = obj.contents.length;
|
|
3905
4084
|
} catch (e) {
|
|
3906
4085
|
throw new FS.ErrnoError(29);
|
|
3907
4086
|
}
|
|
@@ -3930,7 +4109,7 @@ var FS = {
|
|
|
3930
4109
|
var xhr = new XMLHttpRequest;
|
|
3931
4110
|
xhr.open("HEAD", url, false);
|
|
3932
4111
|
xhr.send(null);
|
|
3933
|
-
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
4112
|
+
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
|
3934
4113
|
var datalength = Number(xhr.getResponseHeader("Content-length"));
|
|
3935
4114
|
var header;
|
|
3936
4115
|
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
|
|
@@ -3940,8 +4119,8 @@ var FS = {
|
|
|
3940
4119
|
if (!hasByteServing) chunkSize = datalength;
|
|
3941
4120
|
// Function to get a range from the remote URL.
|
|
3942
4121
|
var doXHR = (from, to) => {
|
|
3943
|
-
if (from > to)
|
|
3944
|
-
if (to > datalength - 1)
|
|
4122
|
+
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
|
|
4123
|
+
if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!");
|
|
3945
4124
|
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
|
|
3946
4125
|
var xhr = new XMLHttpRequest;
|
|
3947
4126
|
xhr.open("GET", url, false);
|
|
@@ -3952,7 +4131,7 @@ var FS = {
|
|
|
3952
4131
|
xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
|
3953
4132
|
}
|
|
3954
4133
|
xhr.send(null);
|
|
3955
|
-
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
4134
|
+
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
|
3956
4135
|
if (xhr.response !== undefined) {
|
|
3957
4136
|
return new Uint8Array(/** @type{Array<number>} */ (xhr.response || []));
|
|
3958
4137
|
}
|
|
@@ -3968,7 +4147,7 @@ var FS = {
|
|
|
3968
4147
|
if (typeof lazyArray.chunks[chunkNum] == "undefined") {
|
|
3969
4148
|
lazyArray.chunks[chunkNum] = doXHR(start, end);
|
|
3970
4149
|
}
|
|
3971
|
-
if (typeof lazyArray.chunks[chunkNum] == "undefined")
|
|
4150
|
+
if (typeof lazyArray.chunks[chunkNum] == "undefined") throw new Error("doXHR failed!");
|
|
3972
4151
|
return lazyArray.chunks[chunkNum];
|
|
3973
4152
|
});
|
|
3974
4153
|
if (usesGzip || !datalength) {
|
|
@@ -3996,8 +4175,8 @@ var FS = {
|
|
|
3996
4175
|
return this._chunkSize;
|
|
3997
4176
|
}
|
|
3998
4177
|
}
|
|
3999
|
-
if (
|
|
4000
|
-
if (!ENVIRONMENT_IS_WORKER)
|
|
4178
|
+
if (typeof XMLHttpRequest != "undefined") {
|
|
4179
|
+
if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
|
|
4001
4180
|
var lazyArray = new LazyUint8Array;
|
|
4002
4181
|
var properties = {
|
|
4003
4182
|
isDevice: false,
|
|
@@ -4119,64 +4298,64 @@ var SYSCALLS = {
|
|
|
4119
4298
|
return dir + "/" + path;
|
|
4120
4299
|
},
|
|
4121
4300
|
writeStat(buf, stat) {
|
|
4122
|
-
|
|
4301
|
+
SAFE_HEAP_STORE(((buf) >> 2) * 4, stat.dev, 4);
|
|
4123
4302
|
checkInt32(stat.dev);
|
|
4124
|
-
|
|
4303
|
+
SAFE_HEAP_STORE((((buf) + (4)) >> 2) * 4, stat.mode, 4);
|
|
4125
4304
|
checkInt32(stat.mode);
|
|
4126
|
-
|
|
4305
|
+
SAFE_HEAP_STORE((((buf) + (8)) >> 2) * 4, stat.nlink, 4);
|
|
4127
4306
|
checkInt32(stat.nlink);
|
|
4128
|
-
|
|
4307
|
+
SAFE_HEAP_STORE((((buf) + (12)) >> 2) * 4, stat.uid, 4);
|
|
4129
4308
|
checkInt32(stat.uid);
|
|
4130
|
-
|
|
4309
|
+
SAFE_HEAP_STORE((((buf) + (16)) >> 2) * 4, stat.gid, 4);
|
|
4131
4310
|
checkInt32(stat.gid);
|
|
4132
|
-
|
|
4311
|
+
SAFE_HEAP_STORE((((buf) + (20)) >> 2) * 4, stat.rdev, 4);
|
|
4133
4312
|
checkInt32(stat.rdev);
|
|
4134
|
-
HEAP64[
|
|
4313
|
+
HEAP64[(((buf) + (24)) >> 3)] = BigInt(stat.size);
|
|
4135
4314
|
checkInt64(stat.size);
|
|
4136
|
-
|
|
4315
|
+
SAFE_HEAP_STORE((((buf) + (32)) >> 2) * 4, 4096, 4);
|
|
4137
4316
|
checkInt32(4096);
|
|
4138
|
-
|
|
4317
|
+
SAFE_HEAP_STORE((((buf) + (36)) >> 2) * 4, stat.blocks, 4);
|
|
4139
4318
|
checkInt32(stat.blocks);
|
|
4140
4319
|
var atime = stat.atime.getTime();
|
|
4141
4320
|
var mtime = stat.mtime.getTime();
|
|
4142
4321
|
var ctime = stat.ctime.getTime();
|
|
4143
|
-
HEAP64[
|
|
4322
|
+
HEAP64[(((buf) + (40)) >> 3)] = BigInt(Math.floor(atime / 1e3));
|
|
4144
4323
|
checkInt64(Math.floor(atime / 1e3));
|
|
4145
|
-
|
|
4324
|
+
SAFE_HEAP_STORE((((buf) + (48)) >> 2) * 4, (atime % 1e3) * 1e3 * 1e3, 4);
|
|
4146
4325
|
checkInt32((atime % 1e3) * 1e3 * 1e3);
|
|
4147
|
-
HEAP64[
|
|
4326
|
+
HEAP64[(((buf) + (56)) >> 3)] = BigInt(Math.floor(mtime / 1e3));
|
|
4148
4327
|
checkInt64(Math.floor(mtime / 1e3));
|
|
4149
|
-
|
|
4328
|
+
SAFE_HEAP_STORE((((buf) + (64)) >> 2) * 4, (mtime % 1e3) * 1e3 * 1e3, 4);
|
|
4150
4329
|
checkInt32((mtime % 1e3) * 1e3 * 1e3);
|
|
4151
|
-
HEAP64[
|
|
4330
|
+
HEAP64[(((buf) + (72)) >> 3)] = BigInt(Math.floor(ctime / 1e3));
|
|
4152
4331
|
checkInt64(Math.floor(ctime / 1e3));
|
|
4153
|
-
|
|
4332
|
+
SAFE_HEAP_STORE((((buf) + (80)) >> 2) * 4, (ctime % 1e3) * 1e3 * 1e3, 4);
|
|
4154
4333
|
checkInt32((ctime % 1e3) * 1e3 * 1e3);
|
|
4155
|
-
HEAP64[
|
|
4334
|
+
HEAP64[(((buf) + (88)) >> 3)] = BigInt(stat.ino);
|
|
4156
4335
|
checkInt64(stat.ino);
|
|
4157
4336
|
return 0;
|
|
4158
4337
|
},
|
|
4159
4338
|
writeStatFs(buf, stats) {
|
|
4160
|
-
|
|
4339
|
+
SAFE_HEAP_STORE((((buf) + (4)) >> 2) * 4, stats.bsize, 4);
|
|
4161
4340
|
checkInt32(stats.bsize);
|
|
4162
|
-
|
|
4341
|
+
SAFE_HEAP_STORE((((buf) + (40)) >> 2) * 4, stats.bsize, 4);
|
|
4163
4342
|
checkInt32(stats.bsize);
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
|
|
4167
|
-
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4343
|
+
SAFE_HEAP_STORE((((buf) + (8)) >> 2) * 4, stats.blocks, 4);
|
|
4344
|
+
checkInt32(stats.blocks);
|
|
4345
|
+
SAFE_HEAP_STORE((((buf) + (12)) >> 2) * 4, stats.bfree, 4);
|
|
4346
|
+
checkInt32(stats.bfree);
|
|
4347
|
+
SAFE_HEAP_STORE((((buf) + (16)) >> 2) * 4, stats.bavail, 4);
|
|
4348
|
+
checkInt32(stats.bavail);
|
|
4349
|
+
SAFE_HEAP_STORE((((buf) + (20)) >> 2) * 4, stats.files, 4);
|
|
4350
|
+
checkInt32(stats.files);
|
|
4351
|
+
SAFE_HEAP_STORE((((buf) + (24)) >> 2) * 4, stats.ffree, 4);
|
|
4352
|
+
checkInt32(stats.ffree);
|
|
4353
|
+
SAFE_HEAP_STORE((((buf) + (28)) >> 2) * 4, stats.fsid, 4);
|
|
4175
4354
|
checkInt32(stats.fsid);
|
|
4176
|
-
|
|
4355
|
+
SAFE_HEAP_STORE((((buf) + (44)) >> 2) * 4, stats.flags, 4);
|
|
4177
4356
|
checkInt32(stats.flags);
|
|
4178
4357
|
// ST_NOSUID
|
|
4179
|
-
|
|
4358
|
+
SAFE_HEAP_STORE((((buf) + (36)) >> 2) * 4, stats.namelen, 4);
|
|
4180
4359
|
checkInt32(stats.namelen);
|
|
4181
4360
|
},
|
|
4182
4361
|
doMsync(addr, stream, len, flags, offset) {
|
|
@@ -4221,7 +4400,7 @@ function ___syscall_dup3(fd, newfd, flags) {
|
|
|
4221
4400
|
/** @suppress {duplicate } */ var syscallGetVarargI = () => {
|
|
4222
4401
|
assert(SYSCALLS.varargs != undefined);
|
|
4223
4402
|
// the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
|
|
4224
|
-
var ret =
|
|
4403
|
+
var ret = SAFE_HEAP_LOAD(((+SYSCALLS.varargs) >> 2) * 4, 4, 0);
|
|
4225
4404
|
SYSCALLS.varargs += 4;
|
|
4226
4405
|
return ret;
|
|
4227
4406
|
};
|
|
@@ -4268,7 +4447,7 @@ function ___syscall_fcntl64(fd, cmd, varargs) {
|
|
|
4268
4447
|
var arg = syscallGetVarargP();
|
|
4269
4448
|
var offset = 0;
|
|
4270
4449
|
// We're always unlocked.
|
|
4271
|
-
|
|
4450
|
+
SAFE_HEAP_STORE((((arg) + (offset)) >> 1) * 2, 2, 2);
|
|
4272
4451
|
checkInt16(2);
|
|
4273
4452
|
return 0;
|
|
4274
4453
|
}
|
|
@@ -4350,13 +4529,13 @@ function ___syscall_getdents64(fd, dirp, count) {
|
|
|
4350
4529
|
8;
|
|
4351
4530
|
}
|
|
4352
4531
|
assert(id);
|
|
4353
|
-
HEAP64[
|
|
4532
|
+
HEAP64[((dirp + pos) >> 3)] = BigInt(id);
|
|
4354
4533
|
checkInt64(id);
|
|
4355
|
-
HEAP64[
|
|
4534
|
+
HEAP64[(((dirp + pos) + (8)) >> 3)] = BigInt((idx + 1) * struct_size);
|
|
4356
4535
|
checkInt64((idx + 1) * struct_size);
|
|
4357
|
-
|
|
4536
|
+
SAFE_HEAP_STORE((((dirp + pos) + (16)) >> 1) * 2, 280, 2);
|
|
4358
4537
|
checkInt16(280);
|
|
4359
|
-
|
|
4538
|
+
SAFE_HEAP_STORE((dirp + pos) + (18), type, 1);
|
|
4360
4539
|
checkInt8(type);
|
|
4361
4540
|
stringToUTF8(name, dirp + pos + 19, 256);
|
|
4362
4541
|
pos += struct_size;
|
|
@@ -4387,16 +4566,16 @@ function ___syscall_ioctl(fd, op, varargs) {
|
|
|
4387
4566
|
if (stream.tty.ops.ioctl_tcgets) {
|
|
4388
4567
|
var termios = stream.tty.ops.ioctl_tcgets(stream);
|
|
4389
4568
|
var argp = syscallGetVarargP();
|
|
4390
|
-
|
|
4569
|
+
SAFE_HEAP_STORE(((argp) >> 2) * 4, termios.c_iflag || 0, 4);
|
|
4391
4570
|
checkInt32(termios.c_iflag || 0);
|
|
4392
|
-
|
|
4571
|
+
SAFE_HEAP_STORE((((argp) + (4)) >> 2) * 4, termios.c_oflag || 0, 4);
|
|
4393
4572
|
checkInt32(termios.c_oflag || 0);
|
|
4394
|
-
|
|
4573
|
+
SAFE_HEAP_STORE((((argp) + (8)) >> 2) * 4, termios.c_cflag || 0, 4);
|
|
4395
4574
|
checkInt32(termios.c_cflag || 0);
|
|
4396
|
-
|
|
4575
|
+
SAFE_HEAP_STORE((((argp) + (12)) >> 2) * 4, termios.c_lflag || 0, 4);
|
|
4397
4576
|
checkInt32(termios.c_lflag || 0);
|
|
4398
4577
|
for (var i = 0; i < 32; i++) {
|
|
4399
|
-
|
|
4578
|
+
SAFE_HEAP_STORE((argp + i) + (17), termios.c_cc[i] || 0, 1);
|
|
4400
4579
|
checkInt8(termios.c_cc[i] || 0);
|
|
4401
4580
|
}
|
|
4402
4581
|
return 0;
|
|
@@ -4419,13 +4598,13 @@ function ___syscall_ioctl(fd, op, varargs) {
|
|
|
4419
4598
|
if (!stream.tty) return -59;
|
|
4420
4599
|
if (stream.tty.ops.ioctl_tcsets) {
|
|
4421
4600
|
var argp = syscallGetVarargP();
|
|
4422
|
-
var c_iflag =
|
|
4423
|
-
var c_oflag =
|
|
4424
|
-
var c_cflag =
|
|
4425
|
-
var c_lflag =
|
|
4601
|
+
var c_iflag = SAFE_HEAP_LOAD(((argp) >> 2) * 4, 4, 0);
|
|
4602
|
+
var c_oflag = SAFE_HEAP_LOAD((((argp) + (4)) >> 2) * 4, 4, 0);
|
|
4603
|
+
var c_cflag = SAFE_HEAP_LOAD((((argp) + (8)) >> 2) * 4, 4, 0);
|
|
4604
|
+
var c_lflag = SAFE_HEAP_LOAD((((argp) + (12)) >> 2) * 4, 4, 0);
|
|
4426
4605
|
var c_cc = [];
|
|
4427
4606
|
for (var i = 0; i < 32; i++) {
|
|
4428
|
-
c_cc.push(
|
|
4607
|
+
c_cc.push(SAFE_HEAP_LOAD((argp + i) + (17), 1, 0));
|
|
4429
4608
|
}
|
|
4430
4609
|
return stream.tty.ops.ioctl_tcsets(stream.tty, op, {
|
|
4431
4610
|
c_iflag,
|
|
@@ -4442,7 +4621,7 @@ function ___syscall_ioctl(fd, op, varargs) {
|
|
|
4442
4621
|
{
|
|
4443
4622
|
if (!stream.tty) return -59;
|
|
4444
4623
|
var argp = syscallGetVarargP();
|
|
4445
|
-
|
|
4624
|
+
SAFE_HEAP_STORE(((argp) >> 2) * 4, 0, 4);
|
|
4446
4625
|
checkInt32(0);
|
|
4447
4626
|
return 0;
|
|
4448
4627
|
}
|
|
@@ -4453,7 +4632,6 @@ function ___syscall_ioctl(fd, op, varargs) {
|
|
|
4453
4632
|
return -28;
|
|
4454
4633
|
}
|
|
4455
4634
|
|
|
4456
|
-
case 21537:
|
|
4457
4635
|
case 21531:
|
|
4458
4636
|
{
|
|
4459
4637
|
var argp = syscallGetVarargP();
|
|
@@ -4468,9 +4646,9 @@ function ___syscall_ioctl(fd, op, varargs) {
|
|
|
4468
4646
|
if (stream.tty.ops.ioctl_tiocgwinsz) {
|
|
4469
4647
|
var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
|
|
4470
4648
|
var argp = syscallGetVarargP();
|
|
4471
|
-
|
|
4649
|
+
SAFE_HEAP_STORE(((argp) >> 1) * 2, winsize[0], 2);
|
|
4472
4650
|
checkInt16(winsize[0]);
|
|
4473
|
-
|
|
4651
|
+
SAFE_HEAP_STORE((((argp) + (2)) >> 1) * 2, winsize[1], 2);
|
|
4474
4652
|
checkInt16(winsize[1]);
|
|
4475
4653
|
}
|
|
4476
4654
|
return 0;
|
|
@@ -4751,9 +4929,9 @@ function ___syscall_pipe(fdPtr) {
|
|
|
4751
4929
|
throw new FS.ErrnoError(21);
|
|
4752
4930
|
}
|
|
4753
4931
|
var res = PIPEFS.createPipe();
|
|
4754
|
-
|
|
4932
|
+
SAFE_HEAP_STORE(((fdPtr) >> 2) * 4, res.readable_fd, 4);
|
|
4755
4933
|
checkInt32(res.readable_fd);
|
|
4756
|
-
|
|
4934
|
+
SAFE_HEAP_STORE((((fdPtr) + (4)) >> 2) * 4, res.writable_fd, 4);
|
|
4757
4935
|
checkInt32(res.writable_fd);
|
|
4758
4936
|
return 0;
|
|
4759
4937
|
} catch (e) {
|
|
@@ -4767,12 +4945,12 @@ function ___syscall_unlinkat(dirfd, path, flags) {
|
|
|
4767
4945
|
try {
|
|
4768
4946
|
path = SYSCALLS.getStr(path);
|
|
4769
4947
|
path = SYSCALLS.calculateAt(dirfd, path);
|
|
4770
|
-
if (
|
|
4948
|
+
if (flags === 0) {
|
|
4771
4949
|
FS.unlink(path);
|
|
4772
4950
|
} else if (flags === 512) {
|
|
4773
4951
|
FS.rmdir(path);
|
|
4774
4952
|
} else {
|
|
4775
|
-
|
|
4953
|
+
abort("Invalid flags passed to unlinkat");
|
|
4776
4954
|
}
|
|
4777
4955
|
return 0;
|
|
4778
4956
|
} catch (e) {
|
|
@@ -4812,14 +4990,7 @@ var handleException = e => {
|
|
|
4812
4990
|
var maybeExit = () => {
|
|
4813
4991
|
if (!keepRuntimeAlive()) {
|
|
4814
4992
|
try {
|
|
4815
|
-
if (ENVIRONMENT_IS_PTHREAD)
|
|
4816
|
-
// exit the current thread, but only if there is one active.
|
|
4817
|
-
// TODO(https://github.com/emscripten-core/emscripten/issues/25076):
|
|
4818
|
-
// Unify this check with the runtimeExited check above
|
|
4819
|
-
if (_pthread_self()) __emscripten_thread_exit(EXITSTATUS);
|
|
4820
|
-
return;
|
|
4821
|
-
}
|
|
4822
|
-
_exit(EXITSTATUS);
|
|
4993
|
+
if (ENVIRONMENT_IS_PTHREAD) __emscripten_thread_exit(EXITSTATUS); else _exit(EXITSTATUS);
|
|
4823
4994
|
} catch (e) {
|
|
4824
4995
|
handleException(e);
|
|
4825
4996
|
}
|
|
@@ -4840,7 +5011,7 @@ var callUserCallback = func => {
|
|
|
4840
5011
|
};
|
|
4841
5012
|
|
|
4842
5013
|
var __emscripten_thread_mailbox_await = pthread_ptr => {
|
|
4843
|
-
if (Atomics.waitAsync) {
|
|
5014
|
+
if (typeof Atomics.waitAsync === "function") {
|
|
4844
5015
|
// Wait on the pthread's initial self-pointer field because it is easy and
|
|
4845
5016
|
// safe to access from sending threads that need to notify the waiting
|
|
4846
5017
|
// thread.
|
|
@@ -4853,13 +5024,9 @@ var __emscripten_thread_mailbox_await = pthread_ptr => {
|
|
|
4853
5024
|
}
|
|
4854
5025
|
};
|
|
4855
5026
|
|
|
4856
|
-
var checkMailbox = () =>
|
|
5027
|
+
var checkMailbox = () => {
|
|
4857
5028
|
// Only check the mailbox if we have a live pthread runtime. We implement
|
|
4858
5029
|
// pthread_self to return 0 if there is no live runtime.
|
|
4859
|
-
// TODO(https://github.com/emscripten-core/emscripten/issues/25076):
|
|
4860
|
-
// Is this check still needed? `callUserCallback` is supposed to
|
|
4861
|
-
// ensure the runtime is alive, and if `_pthread_self` is NULL then the
|
|
4862
|
-
// runtime certainly is *not* alive, so this should be a redundant check.
|
|
4863
5030
|
var pthread_ptr = _pthread_self();
|
|
4864
5031
|
if (pthread_ptr) {
|
|
4865
5032
|
// If we are using Atomics.waitAsync as our notification mechanism, wait
|
|
@@ -4867,9 +5034,9 @@ var checkMailbox = () => callUserCallback(() => {
|
|
|
4867
5034
|
// work that could otherwise arrive after we've finished processing the
|
|
4868
5035
|
// mailbox and before we're ready for the next notification.
|
|
4869
5036
|
__emscripten_thread_mailbox_await(pthread_ptr);
|
|
4870
|
-
__emscripten_check_mailbox
|
|
5037
|
+
callUserCallback(__emscripten_check_mailbox);
|
|
4871
5038
|
}
|
|
4872
|
-
}
|
|
5039
|
+
};
|
|
4873
5040
|
|
|
4874
5041
|
var __emscripten_notify_mailbox_postmessage = (targetThread, currThreadId) => {
|
|
4875
5042
|
if (targetThread == currThreadId) {
|
|
@@ -4902,12 +5069,12 @@ var __emscripten_receive_on_main_thread_js = (funcIndex, emAsmAddr, callingThrea
|
|
|
4902
5069
|
proxiedJSCallArgs.length = numCallArgs;
|
|
4903
5070
|
var b = ((args) >> 3);
|
|
4904
5071
|
for (var i = 0; i < numCallArgs; i++) {
|
|
4905
|
-
if (HEAP64[
|
|
5072
|
+
if (HEAP64[b + 2 * i]) {
|
|
4906
5073
|
// It's a BigInt.
|
|
4907
|
-
proxiedJSCallArgs[i] = HEAP64[
|
|
5074
|
+
proxiedJSCallArgs[i] = HEAP64[b + 2 * i + 1];
|
|
4908
5075
|
} else {
|
|
4909
5076
|
// It's a Number.
|
|
4910
|
-
proxiedJSCallArgs[i] =
|
|
5077
|
+
proxiedJSCallArgs[i] = SAFE_HEAP_LOAD_D((b + 2 * i + 1) * 8, 8, 0);
|
|
4911
5078
|
}
|
|
4912
5079
|
}
|
|
4913
5080
|
// Proxied JS library funcs use funcIndex and EM_ASM functions use emAsmAddr
|
|
@@ -4947,23 +5114,23 @@ var bigintToI53Checked = num => (num < INT53_MIN || num > INT53_MAX) ? NaN : Num
|
|
|
4947
5114
|
function __gmtime_js(time, tmPtr) {
|
|
4948
5115
|
time = bigintToI53Checked(time);
|
|
4949
5116
|
var date = new Date(time * 1e3);
|
|
4950
|
-
|
|
5117
|
+
SAFE_HEAP_STORE(((tmPtr) >> 2) * 4, date.getUTCSeconds(), 4);
|
|
4951
5118
|
checkInt32(date.getUTCSeconds());
|
|
4952
|
-
|
|
5119
|
+
SAFE_HEAP_STORE((((tmPtr) + (4)) >> 2) * 4, date.getUTCMinutes(), 4);
|
|
4953
5120
|
checkInt32(date.getUTCMinutes());
|
|
4954
|
-
|
|
5121
|
+
SAFE_HEAP_STORE((((tmPtr) + (8)) >> 2) * 4, date.getUTCHours(), 4);
|
|
4955
5122
|
checkInt32(date.getUTCHours());
|
|
4956
|
-
|
|
5123
|
+
SAFE_HEAP_STORE((((tmPtr) + (12)) >> 2) * 4, date.getUTCDate(), 4);
|
|
4957
5124
|
checkInt32(date.getUTCDate());
|
|
4958
|
-
|
|
5125
|
+
SAFE_HEAP_STORE((((tmPtr) + (16)) >> 2) * 4, date.getUTCMonth(), 4);
|
|
4959
5126
|
checkInt32(date.getUTCMonth());
|
|
4960
|
-
|
|
5127
|
+
SAFE_HEAP_STORE((((tmPtr) + (20)) >> 2) * 4, date.getUTCFullYear() - 1900, 4);
|
|
4961
5128
|
checkInt32(date.getUTCFullYear() - 1900);
|
|
4962
|
-
|
|
5129
|
+
SAFE_HEAP_STORE((((tmPtr) + (24)) >> 2) * 4, date.getUTCDay(), 4);
|
|
4963
5130
|
checkInt32(date.getUTCDay());
|
|
4964
5131
|
var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
|
|
4965
5132
|
var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0;
|
|
4966
|
-
|
|
5133
|
+
SAFE_HEAP_STORE((((tmPtr) + (28)) >> 2) * 4, yday, 4);
|
|
4967
5134
|
checkInt32(yday);
|
|
4968
5135
|
}
|
|
4969
5136
|
|
|
@@ -4984,31 +5151,31 @@ var ydayFromDate = date => {
|
|
|
4984
5151
|
function __localtime_js(time, tmPtr) {
|
|
4985
5152
|
time = bigintToI53Checked(time);
|
|
4986
5153
|
var date = new Date(time * 1e3);
|
|
4987
|
-
|
|
5154
|
+
SAFE_HEAP_STORE(((tmPtr) >> 2) * 4, date.getSeconds(), 4);
|
|
4988
5155
|
checkInt32(date.getSeconds());
|
|
4989
|
-
|
|
5156
|
+
SAFE_HEAP_STORE((((tmPtr) + (4)) >> 2) * 4, date.getMinutes(), 4);
|
|
4990
5157
|
checkInt32(date.getMinutes());
|
|
4991
|
-
|
|
5158
|
+
SAFE_HEAP_STORE((((tmPtr) + (8)) >> 2) * 4, date.getHours(), 4);
|
|
4992
5159
|
checkInt32(date.getHours());
|
|
4993
|
-
|
|
5160
|
+
SAFE_HEAP_STORE((((tmPtr) + (12)) >> 2) * 4, date.getDate(), 4);
|
|
4994
5161
|
checkInt32(date.getDate());
|
|
4995
|
-
|
|
5162
|
+
SAFE_HEAP_STORE((((tmPtr) + (16)) >> 2) * 4, date.getMonth(), 4);
|
|
4996
5163
|
checkInt32(date.getMonth());
|
|
4997
|
-
|
|
5164
|
+
SAFE_HEAP_STORE((((tmPtr) + (20)) >> 2) * 4, date.getFullYear() - 1900, 4);
|
|
4998
5165
|
checkInt32(date.getFullYear() - 1900);
|
|
4999
|
-
|
|
5166
|
+
SAFE_HEAP_STORE((((tmPtr) + (24)) >> 2) * 4, date.getDay(), 4);
|
|
5000
5167
|
checkInt32(date.getDay());
|
|
5001
5168
|
var yday = ydayFromDate(date) | 0;
|
|
5002
|
-
|
|
5169
|
+
SAFE_HEAP_STORE((((tmPtr) + (28)) >> 2) * 4, yday, 4);
|
|
5003
5170
|
checkInt32(yday);
|
|
5004
|
-
|
|
5171
|
+
SAFE_HEAP_STORE((((tmPtr) + (36)) >> 2) * 4, -(date.getTimezoneOffset() * 60), 4);
|
|
5005
5172
|
checkInt32(-(date.getTimezoneOffset() * 60));
|
|
5006
5173
|
// Attention: DST is in December in South, and some regions don't have DST at all.
|
|
5007
5174
|
var start = new Date(date.getFullYear(), 0, 1);
|
|
5008
5175
|
var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
|
|
5009
5176
|
var winterOffset = start.getTimezoneOffset();
|
|
5010
5177
|
var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;
|
|
5011
|
-
|
|
5178
|
+
SAFE_HEAP_STORE((((tmPtr) + (32)) >> 2) * 4, dst, 4);
|
|
5012
5179
|
checkInt32(dst);
|
|
5013
5180
|
}
|
|
5014
5181
|
|
|
@@ -5031,8 +5198,9 @@ var __tzset_js = (timezone, daylight, std_name, dst_name) => {
|
|
|
5031
5198
|
// Coordinated Universal Time (UTC) and local standard time."), the same
|
|
5032
5199
|
// as returned by stdTimezoneOffset.
|
|
5033
5200
|
// See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html
|
|
5034
|
-
|
|
5035
|
-
|
|
5201
|
+
SAFE_HEAP_STORE(((timezone) >> 2) * 4, stdTimezoneOffset * 60, 4);
|
|
5202
|
+
checkInt32(stdTimezoneOffset * 60);
|
|
5203
|
+
SAFE_HEAP_STORE(((daylight) >> 2) * 4, Number(winterOffset != summerOffset), 4);
|
|
5036
5204
|
checkInt32(Number(winterOffset != summerOffset));
|
|
5037
5205
|
var extractZone = timezoneOffset => {
|
|
5038
5206
|
// Why inverse sign?
|
|
@@ -5078,7 +5246,7 @@ function _clock_time_get(clk_id, ignored_precision, ptime) {
|
|
|
5078
5246
|
}
|
|
5079
5247
|
// "now" is in ms, and wasi times are in ns.
|
|
5080
5248
|
var nsec = Math.round(now * 1e3 * 1e3);
|
|
5081
|
-
HEAP64[
|
|
5249
|
+
HEAP64[((ptime) >> 3)] = BigInt(nsec);
|
|
5082
5250
|
checkInt64(nsec);
|
|
5083
5251
|
return 0;
|
|
5084
5252
|
}
|
|
@@ -5094,7 +5262,7 @@ var readEmAsmArgs = (sigPtr, buf) => {
|
|
|
5094
5262
|
var ch;
|
|
5095
5263
|
// Most arguments are i32s, so shift the buffer pointer so it is a plain
|
|
5096
5264
|
// index into HEAP32.
|
|
5097
|
-
while (ch =
|
|
5265
|
+
while (ch = SAFE_HEAP_LOAD(sigPtr++, 1, 1)) {
|
|
5098
5266
|
var chr = String.fromCharCode(ch);
|
|
5099
5267
|
var validChars = [ "d", "f", "i", "p" ];
|
|
5100
5268
|
// In WASM_BIGINT mode we support passing i64 values as bigint.
|
|
@@ -5106,7 +5274,7 @@ var readEmAsmArgs = (sigPtr, buf) => {
|
|
|
5106
5274
|
wide &= (ch != 112);
|
|
5107
5275
|
buf += wide && (buf % 8) ? 4 : 0;
|
|
5108
5276
|
readEmAsmArgsArray.push(// Special case for pointers under wasm64 or CAN_ADDRESS_2GB mode.
|
|
5109
|
-
ch == 112 ?
|
|
5277
|
+
ch == 112 ? SAFE_HEAP_LOAD(((buf) >> 2) * 4, 4, 1) : ch == 106 ? HEAP64[((buf) >> 3)] : ch == 105 ? SAFE_HEAP_LOAD(((buf) >> 2) * 4, 4, 0) : SAFE_HEAP_LOAD_D(((buf) >> 3) * 8, 8, 0));
|
|
5110
5278
|
buf += wide ? 8 : 4;
|
|
5111
5279
|
}
|
|
5112
5280
|
return readEmAsmArgsArray;
|
|
@@ -5342,24 +5510,36 @@ var JSEvents = {
|
|
|
5342
5510
|
}
|
|
5343
5511
|
};
|
|
5344
5512
|
|
|
5345
|
-
var fillBatteryEventData = (eventStruct,
|
|
5346
|
-
|
|
5347
|
-
|
|
5348
|
-
|
|
5349
|
-
|
|
5350
|
-
checkInt8(
|
|
5513
|
+
var fillBatteryEventData = (eventStruct, e) => {
|
|
5514
|
+
SAFE_HEAP_STORE_D(((eventStruct) >> 3) * 8, e.chargingTime, 8);
|
|
5515
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (8)) >> 3) * 8, e.dischargingTime, 8);
|
|
5516
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (16)) >> 3) * 8, e.level, 8);
|
|
5517
|
+
SAFE_HEAP_STORE((eventStruct) + (24), e.charging, 1);
|
|
5518
|
+
checkInt8(e.charging);
|
|
5519
|
+
};
|
|
5520
|
+
|
|
5521
|
+
var battery = () => navigator.battery || navigator.mozBattery || navigator.webkitBattery;
|
|
5522
|
+
|
|
5523
|
+
var maybeCStringToJsString = cString => cString > 2 ? UTF8ToString(cString) : cString;
|
|
5524
|
+
|
|
5525
|
+
/** @type {Object} */ var specialHTMLTargets = [ 0, typeof document != "undefined" ? document : 0, typeof window != "undefined" ? window : 0 ];
|
|
5526
|
+
|
|
5527
|
+
var findEventTarget = target => {
|
|
5528
|
+
target = maybeCStringToJsString(target);
|
|
5529
|
+
var domElement = specialHTMLTargets[target] || (typeof document != "undefined" ? document.querySelector(target) : null);
|
|
5530
|
+
return domElement;
|
|
5351
5531
|
};
|
|
5352
5532
|
|
|
5353
|
-
var registerBatteryEventCallback = (
|
|
5533
|
+
var registerBatteryEventCallback = (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
|
|
5354
5534
|
targetThread = JSEvents.getTargetThreadForEventCallback(targetThread);
|
|
5355
5535
|
JSEvents.batteryEvent ||= _malloc(32);
|
|
5356
5536
|
var batteryEventHandlerFunc = (e = event) => {
|
|
5357
5537
|
var batteryEvent = targetThread ? _malloc(32) : JSEvents.batteryEvent;
|
|
5358
|
-
fillBatteryEventData(batteryEvent, battery);
|
|
5538
|
+
fillBatteryEventData(batteryEvent, battery());
|
|
5359
5539
|
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, batteryEvent, userData); else if (((a1, a2, a3) => dynCall_iiii(callbackfunc, a1, a2, a3))(eventTypeId, batteryEvent, userData)) e.preventDefault();
|
|
5360
5540
|
};
|
|
5361
5541
|
var eventHandler = {
|
|
5362
|
-
target:
|
|
5542
|
+
target: findEventTarget(target),
|
|
5363
5543
|
eventTypeString,
|
|
5364
5544
|
callbackfunc,
|
|
5365
5545
|
handlerFunc: batteryEventHandlerFunc,
|
|
@@ -5368,33 +5548,17 @@ var registerBatteryEventCallback = (battery, userData, useCapture, callbackfunc,
|
|
|
5368
5548
|
return JSEvents.registerOrRemoveHandler(eventHandler);
|
|
5369
5549
|
};
|
|
5370
5550
|
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
var _emscripten_set_batterychargingchange_callback_on_thread = function(userData, callbackfunc, targetThread) {
|
|
5551
|
+
function _emscripten_set_batterychargingchange_callback_on_thread(userData, callbackfunc, targetThread) {
|
|
5374
5552
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(12, 0, 1, userData, callbackfunc, targetThread);
|
|
5375
|
-
if (!
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
});
|
|
5379
|
-
};
|
|
5553
|
+
if (!battery()) return -1;
|
|
5554
|
+
return registerBatteryEventCallback(battery(), userData, true, callbackfunc, 29, "chargingchange", targetThread);
|
|
5555
|
+
}
|
|
5380
5556
|
|
|
5381
|
-
|
|
5557
|
+
function _emscripten_set_batterylevelchange_callback_on_thread(userData, callbackfunc, targetThread) {
|
|
5382
5558
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(13, 0, 1, userData, callbackfunc, targetThread);
|
|
5383
|
-
if (!
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
});
|
|
5387
|
-
};
|
|
5388
|
-
|
|
5389
|
-
var maybeCStringToJsString = cString => cString > 2 ? UTF8ToString(cString) : cString;
|
|
5390
|
-
|
|
5391
|
-
/** @type {Object} */ var specialHTMLTargets = [ 0, typeof document != "undefined" ? document : 0, typeof window != "undefined" ? window : 0 ];
|
|
5392
|
-
|
|
5393
|
-
var findEventTarget = target => {
|
|
5394
|
-
target = maybeCStringToJsString(target);
|
|
5395
|
-
var domElement = specialHTMLTargets[target] || (typeof document != "undefined" ? document.querySelector(target) : null);
|
|
5396
|
-
return domElement;
|
|
5397
|
-
};
|
|
5559
|
+
if (!battery()) return -1;
|
|
5560
|
+
return registerBatteryEventCallback(battery(), userData, true, callbackfunc, 30, "levelchange", targetThread);
|
|
5561
|
+
}
|
|
5398
5562
|
|
|
5399
5563
|
var registerBeforeUnloadEventCallback = (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString) => {
|
|
5400
5564
|
var beforeUnloadEventHandlerFunc = (e = event) => {
|
|
@@ -5461,24 +5625,24 @@ var getBoundingClientRect = e => specialHTMLTargets.indexOf(e) < 0 ? e.getBoundi
|
|
|
5461
5625
|
|
|
5462
5626
|
var fillMouseEventData = (eventStruct, e, target) => {
|
|
5463
5627
|
assert(eventStruct % 4 == 0);
|
|
5464
|
-
|
|
5628
|
+
SAFE_HEAP_STORE_D(((eventStruct) >> 3) * 8, e.timeStamp, 8);
|
|
5465
5629
|
var idx = ((eventStruct) >> 2);
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5630
|
+
SAFE_HEAP_STORE((idx + 2) * 4, e.screenX, 4);
|
|
5631
|
+
SAFE_HEAP_STORE((idx + 3) * 4, e.screenY, 4);
|
|
5632
|
+
SAFE_HEAP_STORE((idx + 4) * 4, e.clientX, 4);
|
|
5633
|
+
SAFE_HEAP_STORE((idx + 5) * 4, e.clientY, 4);
|
|
5634
|
+
SAFE_HEAP_STORE(eventStruct + 24, e.ctrlKey, 1);
|
|
5635
|
+
SAFE_HEAP_STORE(eventStruct + 25, e.shiftKey, 1);
|
|
5636
|
+
SAFE_HEAP_STORE(eventStruct + 26, e.altKey, 1);
|
|
5637
|
+
SAFE_HEAP_STORE(eventStruct + 27, e.metaKey, 1);
|
|
5638
|
+
SAFE_HEAP_STORE((idx * 2 + 14) * 2, e.button, 2);
|
|
5639
|
+
SAFE_HEAP_STORE((idx * 2 + 15) * 2, e.buttons, 2);
|
|
5640
|
+
SAFE_HEAP_STORE((idx + 8) * 4, e["movementX"], 4);
|
|
5641
|
+
SAFE_HEAP_STORE((idx + 9) * 4, e["movementY"], 4);
|
|
5478
5642
|
// Note: rect contains doubles (truncated to placate SAFE_HEAP, which is the same behaviour when writing to HEAP32 anyway)
|
|
5479
5643
|
var rect = getBoundingClientRect(target);
|
|
5480
|
-
|
|
5481
|
-
|
|
5644
|
+
SAFE_HEAP_STORE((idx + 10) * 4, e.clientX - (rect.left | 0), 4);
|
|
5645
|
+
SAFE_HEAP_STORE((idx + 11) * 4, e.clientY - (rect.top | 0), 4);
|
|
5482
5646
|
};
|
|
5483
5647
|
|
|
5484
5648
|
var registerMouseEventCallback = (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
|
|
@@ -5524,15 +5688,15 @@ var fillDeviceMotionEventData = (eventStruct, e, target) => {
|
|
|
5524
5688
|
a = a || {};
|
|
5525
5689
|
ag = ag || {};
|
|
5526
5690
|
rr = rr || {};
|
|
5527
|
-
|
|
5528
|
-
|
|
5529
|
-
|
|
5530
|
-
|
|
5531
|
-
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
|
|
5691
|
+
SAFE_HEAP_STORE_D(((eventStruct) >> 3) * 8, a["x"], 8);
|
|
5692
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (8)) >> 3) * 8, a["y"], 8);
|
|
5693
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (16)) >> 3) * 8, a["z"], 8);
|
|
5694
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (24)) >> 3) * 8, ag["x"], 8);
|
|
5695
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (32)) >> 3) * 8, ag["y"], 8);
|
|
5696
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (40)) >> 3) * 8, ag["z"], 8);
|
|
5697
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (48)) >> 3) * 8, rr["alpha"], 8);
|
|
5698
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (56)) >> 3) * 8, rr["beta"], 8);
|
|
5699
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (64)) >> 3) * 8, rr["gamma"], 8);
|
|
5536
5700
|
};
|
|
5537
5701
|
|
|
5538
5702
|
var registerDeviceMotionEventCallback = (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) => {
|
|
@@ -5563,10 +5727,10 @@ function _emscripten_set_devicemotion_callback_on_thread(userData, useCapture, c
|
|
|
5563
5727
|
}
|
|
5564
5728
|
|
|
5565
5729
|
var fillDeviceOrientationEventData = (eventStruct, e, target) => {
|
|
5566
|
-
|
|
5567
|
-
|
|
5568
|
-
|
|
5569
|
-
|
|
5730
|
+
SAFE_HEAP_STORE_D(((eventStruct) >> 3) * 8, e.alpha, 8);
|
|
5731
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (8)) >> 3) * 8, e.beta, 8);
|
|
5732
|
+
SAFE_HEAP_STORE_D((((eventStruct) + (16)) >> 3) * 8, e.gamma, 8);
|
|
5733
|
+
SAFE_HEAP_STORE((eventStruct) + (24), e.absolute, 1);
|
|
5570
5734
|
checkInt8(e.absolute);
|
|
5571
5735
|
};
|
|
5572
5736
|
|
|
@@ -5612,17 +5776,12 @@ function _emscripten_set_focusout_callback_on_thread(target, userData, useCaptur
|
|
|
5612
5776
|
return registerFocusEventCallback(target, userData, useCapture, callbackfunc, 15, "focusout", targetThread);
|
|
5613
5777
|
}
|
|
5614
5778
|
|
|
5615
|
-
function getFullscreenElement() {
|
|
5616
|
-
return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.webkitCurrentFullScreenElement || document.msFullscreenElement;
|
|
5617
|
-
}
|
|
5618
|
-
|
|
5619
5779
|
var fillFullscreenChangeEventData = eventStruct => {
|
|
5620
|
-
var fullscreenElement =
|
|
5780
|
+
var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
|
|
5621
5781
|
var isFullscreen = !!fullscreenElement;
|
|
5622
|
-
|
|
5623
|
-
/** @suppress{checkTypes} */ HEAP8[SAFE_HEAP_INDEX(HEAP8, eventStruct, "storing")] = isFullscreen;
|
|
5782
|
+
SAFE_HEAP_STORE(eventStruct, isFullscreen, 1);
|
|
5624
5783
|
checkInt8(isFullscreen);
|
|
5625
|
-
|
|
5784
|
+
SAFE_HEAP_STORE((eventStruct) + (1), JSEvents.fullscreenEnabled(), 1);
|
|
5626
5785
|
checkInt8(JSEvents.fullscreenEnabled());
|
|
5627
5786
|
// If transitioning to fullscreen, report info about the element that is now fullscreen.
|
|
5628
5787
|
// If transitioning to windowed mode, report info about the element that just was fullscreen.
|
|
@@ -5631,13 +5790,13 @@ var fillFullscreenChangeEventData = eventStruct => {
|
|
|
5631
5790
|
var id = reportedElement?.id || "";
|
|
5632
5791
|
stringToUTF8(nodeName, eventStruct + 2, 128);
|
|
5633
5792
|
stringToUTF8(id, eventStruct + 130, 128);
|
|
5634
|
-
|
|
5793
|
+
SAFE_HEAP_STORE((((eventStruct) + (260)) >> 2) * 4, reportedElement ? reportedElement.clientWidth : 0, 4);
|
|
5635
5794
|
checkInt32(reportedElement ? reportedElement.clientWidth : 0);
|
|
5636
|
-
|
|
5795
|
+
SAFE_HEAP_STORE((((eventStruct) + (264)) >> 2) * 4, reportedElement ? reportedElement.clientHeight : 0, 4);
|
|
5637
5796
|
checkInt32(reportedElement ? reportedElement.clientHeight : 0);
|
|
5638
|
-
|
|
5797
|
+
SAFE_HEAP_STORE((((eventStruct) + (268)) >> 2) * 4, screen.width, 4);
|
|
5639
5798
|
checkInt32(screen.width);
|
|
5640
|
-
|
|
5799
|
+
SAFE_HEAP_STORE((((eventStruct) + (272)) >> 2) * 4, screen.height, 4);
|
|
5641
5800
|
checkInt32(screen.height);
|
|
5642
5801
|
if (isFullscreen) {
|
|
5643
5802
|
JSEvents.previousFullscreenElement = fullscreenElement;
|
|
@@ -5667,40 +5826,40 @@ function _emscripten_set_fullscreenchange_callback_on_thread(target, userData, u
|
|
|
5667
5826
|
if (!JSEvents.fullscreenEnabled()) return -1;
|
|
5668
5827
|
target = findEventTarget(target);
|
|
5669
5828
|
if (!target) return -4;
|
|
5829
|
+
// Unprefixed Fullscreen API shipped in Chromium 71 (https://bugs.chromium.org/p/chromium/issues/detail?id=383813)
|
|
5670
5830
|
// As of Safari 13.0.3 on macOS Catalina 10.15.1 still ships with prefixed webkitfullscreenchange. TODO: revisit this check once Safari ships unprefixed version.
|
|
5671
5831
|
registerFullscreenChangeEventCallback(target, userData, useCapture, callbackfunc, 19, "webkitfullscreenchange", targetThread);
|
|
5672
5832
|
return registerFullscreenChangeEventCallback(target, userData, useCapture, callbackfunc, 19, "fullscreenchange", targetThread);
|
|
5673
5833
|
}
|
|
5674
5834
|
|
|
5675
5835
|
var fillGamepadEventData = (eventStruct, e) => {
|
|
5676
|
-
|
|
5836
|
+
SAFE_HEAP_STORE_D(((eventStruct) >> 3) * 8, e.timestamp, 8);
|
|
5677
5837
|
for (var i = 0; i < e.axes.length; ++i) {
|
|
5678
|
-
|
|
5838
|
+
SAFE_HEAP_STORE_D((((eventStruct + i * 8) + (16)) >> 3) * 8, e.axes[i], 8);
|
|
5679
5839
|
}
|
|
5680
5840
|
for (var i = 0; i < e.buttons.length; ++i) {
|
|
5681
5841
|
if (typeof e.buttons[i] == "object") {
|
|
5682
|
-
|
|
5842
|
+
SAFE_HEAP_STORE_D((((eventStruct + i * 8) + (528)) >> 3) * 8, e.buttons[i].value, 8);
|
|
5683
5843
|
} else {
|
|
5684
|
-
|
|
5844
|
+
SAFE_HEAP_STORE_D((((eventStruct + i * 8) + (528)) >> 3) * 8, e.buttons[i], 8);
|
|
5685
5845
|
}
|
|
5686
5846
|
}
|
|
5687
5847
|
for (var i = 0; i < e.buttons.length; ++i) {
|
|
5688
5848
|
if (typeof e.buttons[i] == "object") {
|
|
5689
|
-
|
|
5849
|
+
SAFE_HEAP_STORE((eventStruct + i) + (1040), e.buttons[i].pressed, 1);
|
|
5690
5850
|
checkInt8(e.buttons[i].pressed);
|
|
5691
5851
|
} else {
|
|
5692
|
-
|
|
5693
|
-
/** @suppress {checkTypes} */ HEAP8[SAFE_HEAP_INDEX(HEAP8, (eventStruct + i) + (1040), "storing")] = e.buttons[i] == 1;
|
|
5852
|
+
SAFE_HEAP_STORE((eventStruct + i) + (1040), e.buttons[i] == 1, 1);
|
|
5694
5853
|
checkInt8(e.buttons[i] == 1);
|
|
5695
5854
|
}
|
|
5696
5855
|
}
|
|
5697
|
-
|
|
5856
|
+
SAFE_HEAP_STORE((eventStruct) + (1104), e.connected, 1);
|
|
5698
5857
|
checkInt8(e.connected);
|
|
5699
|
-
|
|
5858
|
+
SAFE_HEAP_STORE((((eventStruct) + (1108)) >> 2) * 4, e.index, 4);
|
|
5700
5859
|
checkInt32(e.index);
|
|
5701
|
-
|
|
5860
|
+
SAFE_HEAP_STORE((((eventStruct) + (8)) >> 2) * 4, e.axes.length, 4);
|
|
5702
5861
|
checkInt32(e.axes.length);
|
|
5703
|
-
|
|
5862
|
+
SAFE_HEAP_STORE((((eventStruct) + (12)) >> 2) * 4, e.buttons.length, 4);
|
|
5704
5863
|
checkInt32(e.buttons.length);
|
|
5705
5864
|
stringToUTF8(e.id, eventStruct + 1112, 64);
|
|
5706
5865
|
stringToUTF8(e.mapping, eventStruct + 1176, 64);
|
|
@@ -5755,17 +5914,17 @@ var registerKeyEventCallback = (target, userData, useCapture, callbackfunc, even
|
|
|
5755
5914
|
assert(e);
|
|
5756
5915
|
var keyEventData = targetThread ? _malloc(160) : JSEvents.keyEvent;
|
|
5757
5916
|
// This allocated block is passed as satellite data to the proxied function call, so the call frees up the data block when done.
|
|
5758
|
-
|
|
5917
|
+
SAFE_HEAP_STORE_D(((keyEventData) >> 3) * 8, e.timeStamp, 8);
|
|
5759
5918
|
var idx = ((keyEventData) >> 2);
|
|
5760
|
-
|
|
5761
|
-
|
|
5762
|
-
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5767
|
-
|
|
5768
|
-
|
|
5919
|
+
SAFE_HEAP_STORE((idx + 2) * 4, e.location, 4);
|
|
5920
|
+
SAFE_HEAP_STORE(keyEventData + 12, e.ctrlKey, 1);
|
|
5921
|
+
SAFE_HEAP_STORE(keyEventData + 13, e.shiftKey, 1);
|
|
5922
|
+
SAFE_HEAP_STORE(keyEventData + 14, e.altKey, 1);
|
|
5923
|
+
SAFE_HEAP_STORE(keyEventData + 15, e.metaKey, 1);
|
|
5924
|
+
SAFE_HEAP_STORE(keyEventData + 16, e.repeat, 1);
|
|
5925
|
+
SAFE_HEAP_STORE((idx + 5) * 4, e.charCode, 4);
|
|
5926
|
+
SAFE_HEAP_STORE((idx + 6) * 4, e.keyCode, 4);
|
|
5927
|
+
SAFE_HEAP_STORE((idx + 7) * 4, e.which, 4);
|
|
5769
5928
|
stringToUTF8(e.key || "", keyEventData + 32, 32);
|
|
5770
5929
|
stringToUTF8(e.code || "", keyEventData + 64, 32);
|
|
5771
5930
|
stringToUTF8(e.char || "", keyEventData + 96, 32);
|
|
@@ -5858,9 +6017,9 @@ var fillOrientationChangeEventData = eventStruct => {
|
|
|
5858
6017
|
// fallback for Safari earlier than 16.4 (March 2023)
|
|
5859
6018
|
orientationAngle = window.orientation;
|
|
5860
6019
|
}
|
|
5861
|
-
|
|
6020
|
+
SAFE_HEAP_STORE(((eventStruct) >> 2) * 4, orientationIndex, 4);
|
|
5862
6021
|
checkInt32(orientationIndex);
|
|
5863
|
-
|
|
6022
|
+
SAFE_HEAP_STORE((((eventStruct) + (4)) >> 2) * 4, orientationAngle, 4);
|
|
5864
6023
|
checkInt32(orientationAngle);
|
|
5865
6024
|
};
|
|
5866
6025
|
|
|
@@ -5889,10 +6048,9 @@ function _emscripten_set_orientationchange_callback_on_thread(userData, useCaptu
|
|
|
5889
6048
|
}
|
|
5890
6049
|
|
|
5891
6050
|
var fillPointerlockChangeEventData = eventStruct => {
|
|
5892
|
-
var pointerLockElement = document.pointerLockElement;
|
|
6051
|
+
var pointerLockElement = document.pointerLockElement || document.mozPointerLockElement || document.webkitPointerLockElement || document.msPointerLockElement;
|
|
5893
6052
|
var isPointerlocked = !!pointerLockElement;
|
|
5894
|
-
|
|
5895
|
-
/** @suppress{checkTypes} */ HEAP8[SAFE_HEAP_INDEX(HEAP8, eventStruct, "storing")] = isPointerlocked;
|
|
6053
|
+
SAFE_HEAP_STORE(eventStruct, isPointerlocked, 1);
|
|
5896
6054
|
checkInt8(isPointerlocked);
|
|
5897
6055
|
var nodeName = JSEvents.getNodeNameForTarget(pointerLockElement);
|
|
5898
6056
|
var id = pointerLockElement?.id || "";
|
|
@@ -5918,13 +6076,17 @@ var registerPointerlockChangeEventCallback = (target, userData, useCapture, call
|
|
|
5918
6076
|
return JSEvents.registerOrRemoveHandler(eventHandler);
|
|
5919
6077
|
};
|
|
5920
6078
|
|
|
5921
|
-
function _emscripten_set_pointerlockchange_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) {
|
|
6079
|
+
/** @suppress {missingProperties} */ function _emscripten_set_pointerlockchange_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) {
|
|
5922
6080
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(38, 0, 1, target, userData, useCapture, callbackfunc, targetThread);
|
|
5923
|
-
|
|
6081
|
+
// TODO: Currently not supported in pthreads or in --proxy-to-worker mode. (In pthreads mode, document object is not defined)
|
|
6082
|
+
if (!document || !document.body || (!document.body.requestPointerLock && !document.body.mozRequestPointerLock && !document.body.webkitRequestPointerLock && !document.body.msRequestPointerLock)) {
|
|
5924
6083
|
return -1;
|
|
5925
6084
|
}
|
|
5926
6085
|
target = findEventTarget(target);
|
|
5927
6086
|
if (!target) return -4;
|
|
6087
|
+
registerPointerlockChangeEventCallback(target, userData, useCapture, callbackfunc, 20, "mozpointerlockchange", targetThread);
|
|
6088
|
+
registerPointerlockChangeEventCallback(target, userData, useCapture, callbackfunc, 20, "webkitpointerlockchange", targetThread);
|
|
6089
|
+
registerPointerlockChangeEventCallback(target, userData, useCapture, callbackfunc, 20, "mspointerlockchange", targetThread);
|
|
5928
6090
|
return registerPointerlockChangeEventCallback(target, userData, useCapture, callbackfunc, 20, "pointerlockchange", targetThread);
|
|
5929
6091
|
}
|
|
5930
6092
|
|
|
@@ -5943,13 +6105,17 @@ var registerPointerlockErrorEventCallback = (target, userData, useCapture, callb
|
|
|
5943
6105
|
return JSEvents.registerOrRemoveHandler(eventHandler);
|
|
5944
6106
|
};
|
|
5945
6107
|
|
|
5946
|
-
function _emscripten_set_pointerlockerror_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) {
|
|
6108
|
+
/** @suppress {missingProperties} */ function _emscripten_set_pointerlockerror_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) {
|
|
5947
6109
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(39, 0, 1, target, userData, useCapture, callbackfunc, targetThread);
|
|
5948
|
-
|
|
6110
|
+
// TODO: Currently not supported in pthreads or in --proxy-to-worker mode. (In pthreads mode, document object is not defined)
|
|
6111
|
+
if (!document || !document.body.requestPointerLock && !document.body.mozRequestPointerLock && !document.body.webkitRequestPointerLock && !document.body.msRequestPointerLock) {
|
|
5949
6112
|
return -1;
|
|
5950
6113
|
}
|
|
5951
6114
|
target = findEventTarget(target);
|
|
5952
6115
|
if (!target) return -4;
|
|
6116
|
+
registerPointerlockErrorEventCallback(target, userData, useCapture, callbackfunc, 38, "mozpointerlockerror", targetThread);
|
|
6117
|
+
registerPointerlockErrorEventCallback(target, userData, useCapture, callbackfunc, 38, "webkitpointerlockerror", targetThread);
|
|
6118
|
+
registerPointerlockErrorEventCallback(target, userData, useCapture, callbackfunc, 38, "mspointerlockerror", targetThread);
|
|
5953
6119
|
return registerPointerlockErrorEventCallback(target, userData, useCapture, callbackfunc, 38, "pointerlockerror", targetThread);
|
|
5954
6120
|
}
|
|
5955
6121
|
|
|
@@ -5972,25 +6138,25 @@ var registerUiEventCallback = (target, userData, useCapture, callbackfunc, event
|
|
|
5972
6138
|
return;
|
|
5973
6139
|
}
|
|
5974
6140
|
var uiEvent = targetThread ? _malloc(36) : JSEvents.uiEvent;
|
|
5975
|
-
|
|
6141
|
+
SAFE_HEAP_STORE(((uiEvent) >> 2) * 4, 0, 4);
|
|
5976
6142
|
checkInt32(0);
|
|
5977
6143
|
// always zero for resize and scroll
|
|
5978
|
-
|
|
6144
|
+
SAFE_HEAP_STORE((((uiEvent) + (4)) >> 2) * 4, b.clientWidth, 4);
|
|
5979
6145
|
checkInt32(b.clientWidth);
|
|
5980
|
-
|
|
6146
|
+
SAFE_HEAP_STORE((((uiEvent) + (8)) >> 2) * 4, b.clientHeight, 4);
|
|
5981
6147
|
checkInt32(b.clientHeight);
|
|
5982
|
-
|
|
6148
|
+
SAFE_HEAP_STORE((((uiEvent) + (12)) >> 2) * 4, innerWidth, 4);
|
|
5983
6149
|
checkInt32(innerWidth);
|
|
5984
|
-
|
|
6150
|
+
SAFE_HEAP_STORE((((uiEvent) + (16)) >> 2) * 4, innerHeight, 4);
|
|
5985
6151
|
checkInt32(innerHeight);
|
|
5986
|
-
|
|
6152
|
+
SAFE_HEAP_STORE((((uiEvent) + (20)) >> 2) * 4, outerWidth, 4);
|
|
5987
6153
|
checkInt32(outerWidth);
|
|
5988
|
-
|
|
6154
|
+
SAFE_HEAP_STORE((((uiEvent) + (24)) >> 2) * 4, outerHeight, 4);
|
|
5989
6155
|
checkInt32(outerHeight);
|
|
5990
|
-
|
|
6156
|
+
SAFE_HEAP_STORE((((uiEvent) + (28)) >> 2) * 4, pageXOffset | 0, 4);
|
|
5991
6157
|
checkInt32(pageXOffset | 0);
|
|
5992
6158
|
// scroll offsets are float
|
|
5993
|
-
|
|
6159
|
+
SAFE_HEAP_STORE((((uiEvent) + (32)) >> 2) * 4, pageYOffset | 0, 4);
|
|
5994
6160
|
checkInt32(pageYOffset | 0);
|
|
5995
6161
|
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, uiEvent, userData); else if (((a1, a2, a3) => dynCall_iiii(callbackfunc, a1, a2, a3))(eventTypeId, uiEvent, userData)) e.preventDefault();
|
|
5996
6162
|
};
|
|
@@ -6040,34 +6206,34 @@ var registerTouchEventCallback = (target, userData, useCapture, callbackfunc, ev
|
|
|
6040
6206
|
touches[t.identifier].onTarget = 1;
|
|
6041
6207
|
}
|
|
6042
6208
|
var touchEvent = targetThread ? _malloc(1552) : JSEvents.touchEvent;
|
|
6043
|
-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6209
|
+
SAFE_HEAP_STORE_D(((touchEvent) >> 3) * 8, e.timeStamp, 8);
|
|
6210
|
+
SAFE_HEAP_STORE(touchEvent + 12, e.ctrlKey, 1);
|
|
6211
|
+
SAFE_HEAP_STORE(touchEvent + 13, e.shiftKey, 1);
|
|
6212
|
+
SAFE_HEAP_STORE(touchEvent + 14, e.altKey, 1);
|
|
6213
|
+
SAFE_HEAP_STORE(touchEvent + 15, e.metaKey, 1);
|
|
6048
6214
|
var idx = touchEvent + 16;
|
|
6049
6215
|
var targetRect = getBoundingClientRect(target);
|
|
6050
6216
|
var numTouches = 0;
|
|
6051
6217
|
for (let t of Object.values(touches)) {
|
|
6052
6218
|
var idx32 = ((idx) >> 2);
|
|
6053
6219
|
// Pre-shift the ptr to index to HEAP32 to save code size
|
|
6054
|
-
|
|
6055
|
-
|
|
6056
|
-
|
|
6057
|
-
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
6062
|
-
|
|
6063
|
-
|
|
6064
|
-
|
|
6220
|
+
SAFE_HEAP_STORE((idx32 + 0) * 4, t.identifier, 4);
|
|
6221
|
+
SAFE_HEAP_STORE((idx32 + 1) * 4, t.screenX, 4);
|
|
6222
|
+
SAFE_HEAP_STORE((idx32 + 2) * 4, t.screenY, 4);
|
|
6223
|
+
SAFE_HEAP_STORE((idx32 + 3) * 4, t.clientX, 4);
|
|
6224
|
+
SAFE_HEAP_STORE((idx32 + 4) * 4, t.clientY, 4);
|
|
6225
|
+
SAFE_HEAP_STORE((idx32 + 5) * 4, t.pageX, 4);
|
|
6226
|
+
SAFE_HEAP_STORE((idx32 + 6) * 4, t.pageY, 4);
|
|
6227
|
+
SAFE_HEAP_STORE(idx + 28, t.isChanged, 1);
|
|
6228
|
+
SAFE_HEAP_STORE(idx + 29, t.onTarget, 1);
|
|
6229
|
+
SAFE_HEAP_STORE((idx32 + 8) * 4, t.clientX - (targetRect.left | 0), 4);
|
|
6230
|
+
SAFE_HEAP_STORE((idx32 + 9) * 4, t.clientY - (targetRect.top | 0), 4);
|
|
6065
6231
|
idx += 48;
|
|
6066
6232
|
if (++numTouches > 31) {
|
|
6067
6233
|
break;
|
|
6068
6234
|
}
|
|
6069
6235
|
}
|
|
6070
|
-
|
|
6236
|
+
SAFE_HEAP_STORE((((touchEvent) + (8)) >> 2) * 4, numTouches, 4);
|
|
6071
6237
|
checkInt32(numTouches);
|
|
6072
6238
|
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, touchEvent, userData); else if (((a1, a2, a3) => dynCall_iiii(callbackfunc, a1, a2, a3))(eventTypeId, touchEvent, userData)) e.preventDefault();
|
|
6073
6239
|
};
|
|
@@ -6105,10 +6271,9 @@ function _emscripten_set_touchstart_callback_on_thread(target, userData, useCapt
|
|
|
6105
6271
|
var fillVisibilityChangeEventData = eventStruct => {
|
|
6106
6272
|
var visibilityStates = [ "hidden", "visible", "prerender", "unloaded" ];
|
|
6107
6273
|
var visibilityState = visibilityStates.indexOf(document.visibilityState);
|
|
6108
|
-
|
|
6109
|
-
/** @suppress{checkTypes} */ HEAP8[SAFE_HEAP_INDEX(HEAP8, eventStruct, "storing")] = document.hidden;
|
|
6274
|
+
SAFE_HEAP_STORE(eventStruct, document.hidden, 1);
|
|
6110
6275
|
checkInt8(document.hidden);
|
|
6111
|
-
|
|
6276
|
+
SAFE_HEAP_STORE((((eventStruct) + (4)) >> 2) * 4, visibilityState, 4);
|
|
6112
6277
|
checkInt32(visibilityState);
|
|
6113
6278
|
};
|
|
6114
6279
|
|
|
@@ -6146,10 +6311,10 @@ var registerWheelEventCallback = (target, userData, useCapture, callbackfunc, ev
|
|
|
6146
6311
|
var wheelEvent = targetThread ? _malloc(96) : JSEvents.wheelEvent;
|
|
6147
6312
|
// This allocated block is passed as satellite data to the proxied function call, so the call frees up the data block when done.
|
|
6148
6313
|
fillMouseEventData(wheelEvent, e, target);
|
|
6149
|
-
|
|
6150
|
-
|
|
6151
|
-
|
|
6152
|
-
|
|
6314
|
+
SAFE_HEAP_STORE_D((((wheelEvent) + (64)) >> 3) * 8, e["deltaX"], 8);
|
|
6315
|
+
SAFE_HEAP_STORE_D((((wheelEvent) + (72)) >> 3) * 8, e["deltaY"], 8);
|
|
6316
|
+
SAFE_HEAP_STORE_D((((wheelEvent) + (80)) >> 3) * 8, e["deltaZ"], 8);
|
|
6317
|
+
SAFE_HEAP_STORE((((wheelEvent) + (88)) >> 2) * 4, e["deltaMode"], 4);
|
|
6153
6318
|
checkInt32(e["deltaMode"]);
|
|
6154
6319
|
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, wheelEvent, userData); else if (((a1, a2, a3) => dynCall_iiii(callbackfunc, a1, a2, a3))(eventTypeId, wheelEvent, userData)) e.preventDefault();
|
|
6155
6320
|
};
|
|
@@ -6176,64 +6341,63 @@ function _emscripten_set_wheel_callback_on_thread(target, userData, useCapture,
|
|
|
6176
6341
|
}
|
|
6177
6342
|
|
|
6178
6343
|
var Fetch = {
|
|
6179
|
-
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
6184
|
-
|
|
6344
|
+
openDatabase(dbname, dbversion, onsuccess, onerror) {
|
|
6345
|
+
try {
|
|
6346
|
+
var openRequest = indexedDB.open(dbname, dbversion);
|
|
6347
|
+
} catch (e) {
|
|
6348
|
+
return onerror(e);
|
|
6349
|
+
}
|
|
6350
|
+
openRequest.onupgradeneeded = event => {
|
|
6351
|
+
var db = /** @type {IDBDatabase} */ (event.target.result);
|
|
6352
|
+
if (db.objectStoreNames.contains("FILES")) {
|
|
6353
|
+
db.deleteObjectStore("FILES");
|
|
6185
6354
|
}
|
|
6186
|
-
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
|
|
6190
|
-
}
|
|
6191
|
-
db.createObjectStore("FILES");
|
|
6192
|
-
};
|
|
6193
|
-
openRequest.onsuccess = event => resolve(event.target.result);
|
|
6194
|
-
openRequest.onerror = reject;
|
|
6195
|
-
});
|
|
6355
|
+
db.createObjectStore("FILES");
|
|
6356
|
+
};
|
|
6357
|
+
openRequest.onsuccess = event => onsuccess(event.target.result);
|
|
6358
|
+
openRequest.onerror = onerror;
|
|
6196
6359
|
},
|
|
6197
|
-
|
|
6360
|
+
init() {
|
|
6198
6361
|
Fetch.xhrs = new HandleAllocator;
|
|
6199
6362
|
if (ENVIRONMENT_IS_PTHREAD) return;
|
|
6200
|
-
|
|
6201
|
-
try {
|
|
6202
|
-
var db = await Fetch.openDatabase("emscripten_filesystem", 1);
|
|
6363
|
+
var onsuccess = db => {
|
|
6203
6364
|
Fetch.dbInstance = db;
|
|
6204
|
-
|
|
6365
|
+
removeRunDependency("library_fetch_init");
|
|
6366
|
+
};
|
|
6367
|
+
var onerror = () => {
|
|
6205
6368
|
Fetch.dbInstance = false;
|
|
6206
|
-
} finally {
|
|
6207
6369
|
removeRunDependency("library_fetch_init");
|
|
6208
|
-
}
|
|
6370
|
+
};
|
|
6371
|
+
addRunDependency("library_fetch_init");
|
|
6372
|
+
Fetch.openDatabase("emscripten_filesystem", 1, onsuccess, onerror);
|
|
6209
6373
|
}
|
|
6210
6374
|
};
|
|
6211
6375
|
|
|
6212
6376
|
function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
6213
|
-
var url =
|
|
6377
|
+
var url = SAFE_HEAP_LOAD((((fetch) + (8)) >> 2) * 4, 4, 1);
|
|
6214
6378
|
if (!url) {
|
|
6215
|
-
onerror(fetch, "no url specified!");
|
|
6379
|
+
onerror(fetch, 0, "no url specified!");
|
|
6216
6380
|
return;
|
|
6217
6381
|
}
|
|
6218
6382
|
var url_ = UTF8ToString(url);
|
|
6219
6383
|
var fetch_attr = fetch + 108;
|
|
6220
6384
|
var requestMethod = UTF8ToString(fetch_attr + 0);
|
|
6221
6385
|
requestMethod ||= "GET";
|
|
6222
|
-
var timeoutMsecs =
|
|
6223
|
-
var userName =
|
|
6224
|
-
var password =
|
|
6225
|
-
var requestHeaders =
|
|
6226
|
-
var overriddenMimeType =
|
|
6227
|
-
var dataPtr =
|
|
6228
|
-
var dataLength =
|
|
6229
|
-
var fetchAttributes =
|
|
6386
|
+
var timeoutMsecs = SAFE_HEAP_LOAD((((fetch_attr) + (56)) >> 2) * 4, 4, 1);
|
|
6387
|
+
var userName = SAFE_HEAP_LOAD((((fetch_attr) + (68)) >> 2) * 4, 4, 1);
|
|
6388
|
+
var password = SAFE_HEAP_LOAD((((fetch_attr) + (72)) >> 2) * 4, 4, 1);
|
|
6389
|
+
var requestHeaders = SAFE_HEAP_LOAD((((fetch_attr) + (76)) >> 2) * 4, 4, 1);
|
|
6390
|
+
var overriddenMimeType = SAFE_HEAP_LOAD((((fetch_attr) + (80)) >> 2) * 4, 4, 1);
|
|
6391
|
+
var dataPtr = SAFE_HEAP_LOAD((((fetch_attr) + (84)) >> 2) * 4, 4, 1);
|
|
6392
|
+
var dataLength = SAFE_HEAP_LOAD((((fetch_attr) + (88)) >> 2) * 4, 4, 1);
|
|
6393
|
+
var fetchAttributes = SAFE_HEAP_LOAD((((fetch_attr) + (52)) >> 2) * 4, 4, 1);
|
|
6230
6394
|
var fetchAttrLoadToMemory = !!(fetchAttributes & 1);
|
|
6231
6395
|
var fetchAttrStreamData = !!(fetchAttributes & 2);
|
|
6232
6396
|
var fetchAttrSynchronous = !!(fetchAttributes & 64);
|
|
6233
6397
|
var userNameStr = userName ? UTF8ToString(userName) : undefined;
|
|
6234
6398
|
var passwordStr = password ? UTF8ToString(password) : undefined;
|
|
6235
6399
|
var xhr = new XMLHttpRequest;
|
|
6236
|
-
xhr.withCredentials = !!
|
|
6400
|
+
xhr.withCredentials = !!SAFE_HEAP_LOAD((fetch_attr) + (60), 1, 1);
|
|
6237
6401
|
xhr.open(requestMethod, url_, !fetchAttrSynchronous, userNameStr, passwordStr);
|
|
6238
6402
|
if (!fetchAttrSynchronous) xhr.timeout = timeoutMsecs;
|
|
6239
6403
|
// XHR timeout field is only accessible in async XHRs, and must be set after .open() but before .send().
|
|
@@ -6247,9 +6411,9 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6247
6411
|
}
|
|
6248
6412
|
if (requestHeaders) {
|
|
6249
6413
|
for (;;) {
|
|
6250
|
-
var key =
|
|
6414
|
+
var key = SAFE_HEAP_LOAD(((requestHeaders) >> 2) * 4, 4, 1);
|
|
6251
6415
|
if (!key) break;
|
|
6252
|
-
var value =
|
|
6416
|
+
var value = SAFE_HEAP_LOAD((((requestHeaders) + (4)) >> 2) * 4, 4, 1);
|
|
6253
6417
|
if (!value) break;
|
|
6254
6418
|
requestHeaders += 8;
|
|
6255
6419
|
var keyStr = UTF8ToString(key);
|
|
@@ -6258,7 +6422,7 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6258
6422
|
}
|
|
6259
6423
|
}
|
|
6260
6424
|
var id = Fetch.xhrs.allocate(xhr);
|
|
6261
|
-
|
|
6425
|
+
SAFE_HEAP_STORE(((fetch) >> 2) * 4, id, 4);
|
|
6262
6426
|
checkInt32(id);
|
|
6263
6427
|
var data = (dataPtr && dataLength) ? HEAPU8.slice(dataPtr, dataPtr + dataLength) : null;
|
|
6264
6428
|
// TODO: Support specifying custom headers to the request.
|
|
@@ -6269,7 +6433,7 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6269
6433
|
function saveResponseAndStatus() {
|
|
6270
6434
|
var ptr = 0;
|
|
6271
6435
|
var ptrLen = 0;
|
|
6272
|
-
if (xhr.response && fetchAttrLoadToMemory &&
|
|
6436
|
+
if (xhr.response && fetchAttrLoadToMemory && SAFE_HEAP_LOAD((((fetch) + (12)) >> 2) * 4, 4, 1) === 0) {
|
|
6273
6437
|
ptrLen = xhr.response.byteLength;
|
|
6274
6438
|
}
|
|
6275
6439
|
if (ptrLen > 0) {
|
|
@@ -6278,7 +6442,7 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6278
6442
|
ptr = _malloc(ptrLen);
|
|
6279
6443
|
HEAPU8.set(new Uint8Array(/** @type{Array<number>} */ (xhr.response)), ptr);
|
|
6280
6444
|
}
|
|
6281
|
-
|
|
6445
|
+
SAFE_HEAP_STORE((((fetch) + (12)) >> 2) * 4, ptr, 4);
|
|
6282
6446
|
writeI53ToI64(fetch + 16, ptrLen);
|
|
6283
6447
|
writeI53ToI64(fetch + 24, 0);
|
|
6284
6448
|
var len = xhr.response ? xhr.response.byteLength : 0;
|
|
@@ -6288,17 +6452,11 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6288
6452
|
// the most recent XHR.onprogress handler.
|
|
6289
6453
|
writeI53ToI64(fetch + 32, len);
|
|
6290
6454
|
}
|
|
6291
|
-
|
|
6455
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, xhr.readyState, 2);
|
|
6292
6456
|
checkInt16(xhr.readyState);
|
|
6293
|
-
|
|
6457
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, xhr.status, 2);
|
|
6294
6458
|
checkInt16(xhr.status);
|
|
6295
6459
|
if (xhr.statusText) stringToUTF8(xhr.statusText, fetch + 44, 64);
|
|
6296
|
-
if (fetchAttrSynchronous) {
|
|
6297
|
-
// The response url pointer malloc()ed here has the same lifetime as the emscripten_fetch_t structure itself has, and is
|
|
6298
|
-
// freed when emscripten_fetch_close() is called.
|
|
6299
|
-
var ruPtr = stringToNewUTF8(xhr.responseURL);
|
|
6300
|
-
HEAPU32[SAFE_HEAP_INDEX(HEAPU32, (((fetch) + (200)) >> 2), "storing")] = ruPtr;
|
|
6301
|
-
}
|
|
6302
6460
|
}
|
|
6303
6461
|
xhr.onload = e => {
|
|
6304
6462
|
// check if xhr was aborted by user and don't try to call back
|
|
@@ -6307,9 +6465,9 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6307
6465
|
}
|
|
6308
6466
|
saveResponseAndStatus();
|
|
6309
6467
|
if (xhr.status >= 200 && xhr.status < 300) {
|
|
6310
|
-
onsuccess(fetch, xhr, e);
|
|
6468
|
+
onsuccess?.(fetch, xhr, e);
|
|
6311
6469
|
} else {
|
|
6312
|
-
onerror(fetch, e);
|
|
6470
|
+
onerror?.(fetch, xhr, e);
|
|
6313
6471
|
}
|
|
6314
6472
|
};
|
|
6315
6473
|
xhr.onerror = e => {
|
|
@@ -6318,14 +6476,14 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6318
6476
|
return;
|
|
6319
6477
|
}
|
|
6320
6478
|
saveResponseAndStatus();
|
|
6321
|
-
onerror(fetch, e);
|
|
6479
|
+
onerror?.(fetch, xhr, e);
|
|
6322
6480
|
};
|
|
6323
6481
|
xhr.ontimeout = e => {
|
|
6324
6482
|
// check if xhr was aborted by user and don't try to call back
|
|
6325
6483
|
if (!Fetch.xhrs.has(id)) {
|
|
6326
6484
|
return;
|
|
6327
6485
|
}
|
|
6328
|
-
onerror(fetch, e);
|
|
6486
|
+
onerror?.(fetch, xhr, e);
|
|
6329
6487
|
};
|
|
6330
6488
|
xhr.onprogress = e => {
|
|
6331
6489
|
// check if xhr was aborted by user and don't try to call back
|
|
@@ -6340,20 +6498,21 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6340
6498
|
ptr = _malloc(ptrLen);
|
|
6341
6499
|
HEAPU8.set(new Uint8Array(/** @type{Array<number>} */ (xhr.response)), ptr);
|
|
6342
6500
|
}
|
|
6343
|
-
|
|
6501
|
+
SAFE_HEAP_STORE((((fetch) + (12)) >> 2) * 4, ptr, 4);
|
|
6344
6502
|
writeI53ToI64(fetch + 16, ptrLen);
|
|
6345
6503
|
writeI53ToI64(fetch + 24, e.loaded - ptrLen);
|
|
6346
6504
|
writeI53ToI64(fetch + 32, e.total);
|
|
6347
|
-
|
|
6505
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, xhr.readyState, 2);
|
|
6348
6506
|
checkInt16(xhr.readyState);
|
|
6349
|
-
var status = xhr.status;
|
|
6350
6507
|
// If loading files from a source that does not give HTTP status code, assume success if we get data bytes
|
|
6351
|
-
if (xhr.readyState >= 3 && xhr.status === 0 && e.loaded > 0) status = 200;
|
|
6352
|
-
|
|
6353
|
-
checkInt16(status);
|
|
6508
|
+
if (xhr.readyState >= 3 && xhr.status === 0 && e.loaded > 0) xhr.status = 200;
|
|
6509
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, xhr.status, 2);
|
|
6510
|
+
checkInt16(xhr.status);
|
|
6354
6511
|
if (xhr.statusText) stringToUTF8(xhr.statusText, fetch + 44, 64);
|
|
6355
|
-
onprogress(fetch, e);
|
|
6356
|
-
|
|
6512
|
+
onprogress?.(fetch, xhr, e);
|
|
6513
|
+
if (ptr) {
|
|
6514
|
+
_free(ptr);
|
|
6515
|
+
}
|
|
6357
6516
|
};
|
|
6358
6517
|
xhr.onreadystatechange = e => {
|
|
6359
6518
|
// check if xhr was aborted by user and don't try to call back
|
|
@@ -6361,47 +6520,34 @@ function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
|
|
|
6361
6520
|
runtimeKeepalivePop();
|
|
6362
6521
|
return;
|
|
6363
6522
|
}
|
|
6364
|
-
|
|
6523
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, xhr.readyState, 2);
|
|
6365
6524
|
checkInt16(xhr.readyState);
|
|
6366
6525
|
if (xhr.readyState >= 2) {
|
|
6367
|
-
|
|
6526
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, xhr.status, 2);
|
|
6368
6527
|
checkInt16(xhr.status);
|
|
6369
6528
|
}
|
|
6370
|
-
|
|
6371
|
-
// The response url pointer malloc()ed here has the same lifetime as the emscripten_fetch_t structure itself has, and is
|
|
6372
|
-
// freed when emscripten_fetch_close() is called.
|
|
6373
|
-
var ruPtr = stringToNewUTF8(xhr.responseURL);
|
|
6374
|
-
HEAPU32[SAFE_HEAP_INDEX(HEAPU32, (((fetch) + (200)) >> 2), "storing")] = ruPtr;
|
|
6375
|
-
}
|
|
6376
|
-
onreadystatechange(fetch, e);
|
|
6529
|
+
onreadystatechange?.(fetch, xhr, e);
|
|
6377
6530
|
};
|
|
6378
6531
|
try {
|
|
6379
6532
|
xhr.send(data);
|
|
6380
6533
|
} catch (e) {
|
|
6381
|
-
onerror(fetch, e);
|
|
6534
|
+
onerror?.(fetch, xhr, e);
|
|
6382
6535
|
}
|
|
6383
6536
|
}
|
|
6384
6537
|
|
|
6385
|
-
var readI53FromI64 = ptr =>
|
|
6538
|
+
var readI53FromI64 = ptr => SAFE_HEAP_LOAD(((ptr) >> 2) * 4, 4, 1) + SAFE_HEAP_LOAD((((ptr) + (4)) >> 2) * 4, 4, 0) * 4294967296;
|
|
6386
6539
|
|
|
6387
|
-
var readI53FromU64 = ptr =>
|
|
6540
|
+
var readI53FromU64 = ptr => SAFE_HEAP_LOAD(((ptr) >> 2) * 4, 4, 1) + SAFE_HEAP_LOAD((((ptr) + (4)) >> 2) * 4, 4, 1) * 4294967296;
|
|
6388
6541
|
|
|
6389
6542
|
var writeI53ToI64 = (ptr, num) => {
|
|
6390
|
-
|
|
6543
|
+
SAFE_HEAP_STORE(((ptr) >> 2) * 4, num, 4);
|
|
6391
6544
|
checkInt32(num);
|
|
6392
|
-
var lower =
|
|
6393
|
-
|
|
6545
|
+
var lower = SAFE_HEAP_LOAD(((ptr) >> 2) * 4, 4, 1);
|
|
6546
|
+
SAFE_HEAP_STORE((((ptr) + (4)) >> 2) * 4, (num - lower) / 4294967296, 4);
|
|
6394
6547
|
checkInt32((num - lower) / 4294967296);
|
|
6395
6548
|
var deserialized = (num >= 0) ? readI53FromU64(ptr) : readI53FromI64(ptr);
|
|
6396
6549
|
var offset = ((ptr) >> 2);
|
|
6397
|
-
if (deserialized != num) warnOnce(`writeI53ToI64() out of range: serialized JS Number ${num} to Wasm heap as bytes lo=${ptrToString(
|
|
6398
|
-
};
|
|
6399
|
-
|
|
6400
|
-
var stringToNewUTF8 = str => {
|
|
6401
|
-
var size = lengthBytesUTF8(str) + 1;
|
|
6402
|
-
var ret = _malloc(size);
|
|
6403
|
-
if (ret) stringToUTF8(str, ret, size);
|
|
6404
|
-
return ret;
|
|
6550
|
+
if (deserialized != num) warnOnce(`writeI53ToI64() out of range: serialized JS Number ${num} to Wasm heap as bytes lo=${ptrToString(SAFE_HEAP_LOAD(offset * 4, 4, 1))}, hi=${ptrToString(SAFE_HEAP_LOAD((offset + 1) * 4, 4, 1))}, which deserializes back to ${deserialized} instead!`);
|
|
6405
6551
|
};
|
|
6406
6552
|
|
|
6407
6553
|
function fetchCacheData(/** @type {IDBDatabase} */ db, fetch, data, onsuccess, onerror) {
|
|
@@ -6410,18 +6556,18 @@ function fetchCacheData(/** @type {IDBDatabase} */ db, fetch, data, onsuccess, o
|
|
|
6410
6556
|
return;
|
|
6411
6557
|
}
|
|
6412
6558
|
var fetch_attr = fetch + 108;
|
|
6413
|
-
var destinationPath =
|
|
6414
|
-
destinationPath ||=
|
|
6559
|
+
var destinationPath = SAFE_HEAP_LOAD((((fetch_attr) + (64)) >> 2) * 4, 4, 1);
|
|
6560
|
+
destinationPath ||= SAFE_HEAP_LOAD((((fetch) + (8)) >> 2) * 4, 4, 1);
|
|
6415
6561
|
var destinationPathStr = UTF8ToString(destinationPath);
|
|
6416
6562
|
try {
|
|
6417
6563
|
var transaction = db.transaction([ "FILES" ], "readwrite");
|
|
6418
6564
|
var packages = transaction.objectStore("FILES");
|
|
6419
6565
|
var putRequest = packages.put(data, destinationPathStr);
|
|
6420
6566
|
putRequest.onsuccess = event => {
|
|
6421
|
-
|
|
6567
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6422
6568
|
checkInt16(4);
|
|
6423
6569
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6424
|
-
|
|
6570
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 200, 2);
|
|
6425
6571
|
checkInt16(200);
|
|
6426
6572
|
// Mimic XHR HTTP status code 200 "OK"
|
|
6427
6573
|
stringToUTF8("OK", fetch + 44, 64);
|
|
@@ -6431,10 +6577,10 @@ function fetchCacheData(/** @type {IDBDatabase} */ db, fetch, data, onsuccess, o
|
|
|
6431
6577
|
// Most likely we got an error if IndexedDB is unwilling to store any more data for this page.
|
|
6432
6578
|
// TODO: Can we identify and break down different IndexedDB-provided errors and convert those
|
|
6433
6579
|
// to more HTTP status codes for more information?
|
|
6434
|
-
|
|
6580
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6435
6581
|
checkInt16(4);
|
|
6436
6582
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6437
|
-
|
|
6583
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 413, 2);
|
|
6438
6584
|
checkInt16(413);
|
|
6439
6585
|
// Mimic XHR HTTP status code 413 "Payload Too Large"
|
|
6440
6586
|
stringToUTF8("Payload Too Large", fetch + 44, 64);
|
|
@@ -6451,8 +6597,8 @@ function fetchLoadCachedData(db, fetch, onsuccess, onerror) {
|
|
|
6451
6597
|
return;
|
|
6452
6598
|
}
|
|
6453
6599
|
var fetch_attr = fetch + 108;
|
|
6454
|
-
var path =
|
|
6455
|
-
path ||=
|
|
6600
|
+
var path = SAFE_HEAP_LOAD((((fetch_attr) + (64)) >> 2) * 4, 4, 1);
|
|
6601
|
+
path ||= SAFE_HEAP_LOAD((((fetch) + (8)) >> 2) * 4, 4, 1);
|
|
6456
6602
|
var pathStr = UTF8ToString(path);
|
|
6457
6603
|
try {
|
|
6458
6604
|
var transaction = db.transaction([ "FILES" ], "readonly");
|
|
@@ -6466,24 +6612,24 @@ function fetchLoadCachedData(db, fetch, onsuccess, onerror) {
|
|
|
6466
6612
|
// freed when emscripten_fetch_close() is called.
|
|
6467
6613
|
var ptr = _malloc(len);
|
|
6468
6614
|
HEAPU8.set(new Uint8Array(value), ptr);
|
|
6469
|
-
|
|
6615
|
+
SAFE_HEAP_STORE((((fetch) + (12)) >> 2) * 4, ptr, 4);
|
|
6470
6616
|
writeI53ToI64(fetch + 16, len);
|
|
6471
6617
|
writeI53ToI64(fetch + 24, 0);
|
|
6472
6618
|
writeI53ToI64(fetch + 32, len);
|
|
6473
|
-
|
|
6619
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6474
6620
|
checkInt16(4);
|
|
6475
6621
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6476
|
-
|
|
6622
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 200, 2);
|
|
6477
6623
|
checkInt16(200);
|
|
6478
6624
|
// Mimic XHR HTTP status code 200 "OK"
|
|
6479
6625
|
stringToUTF8("OK", fetch + 44, 64);
|
|
6480
6626
|
onsuccess(fetch, 0, value);
|
|
6481
6627
|
} else {
|
|
6482
6628
|
// Succeeded to load, but the load came back with the value of undefined, treat that as an error since we never store undefined in db.
|
|
6483
|
-
|
|
6629
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6484
6630
|
checkInt16(4);
|
|
6485
6631
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6486
|
-
|
|
6632
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 404, 2);
|
|
6487
6633
|
checkInt16(404);
|
|
6488
6634
|
// Mimic XHR HTTP status code 404 "Not Found"
|
|
6489
6635
|
stringToUTF8("Not Found", fetch + 44, 64);
|
|
@@ -6491,10 +6637,10 @@ function fetchLoadCachedData(db, fetch, onsuccess, onerror) {
|
|
|
6491
6637
|
}
|
|
6492
6638
|
};
|
|
6493
6639
|
getRequest.onerror = error => {
|
|
6494
|
-
|
|
6640
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6495
6641
|
checkInt16(4);
|
|
6496
6642
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6497
|
-
|
|
6643
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 404, 2);
|
|
6498
6644
|
checkInt16(404);
|
|
6499
6645
|
// Mimic XHR HTTP status code 404 "Not Found"
|
|
6500
6646
|
stringToUTF8("Not Found", fetch + 44, 64);
|
|
@@ -6511,8 +6657,8 @@ function fetchDeleteCachedData(db, fetch, onsuccess, onerror) {
|
|
|
6511
6657
|
return;
|
|
6512
6658
|
}
|
|
6513
6659
|
var fetch_attr = fetch + 108;
|
|
6514
|
-
var path =
|
|
6515
|
-
path ||=
|
|
6660
|
+
var path = SAFE_HEAP_LOAD((((fetch_attr) + (64)) >> 2) * 4, 4, 1);
|
|
6661
|
+
path ||= SAFE_HEAP_LOAD((((fetch) + (8)) >> 2) * 4, 4, 1);
|
|
6516
6662
|
var pathStr = UTF8ToString(path);
|
|
6517
6663
|
try {
|
|
6518
6664
|
var transaction = db.transaction([ "FILES" ], "readwrite");
|
|
@@ -6520,24 +6666,24 @@ function fetchDeleteCachedData(db, fetch, onsuccess, onerror) {
|
|
|
6520
6666
|
var request = packages.delete(pathStr);
|
|
6521
6667
|
request.onsuccess = event => {
|
|
6522
6668
|
var value = event.target.result;
|
|
6523
|
-
|
|
6669
|
+
SAFE_HEAP_STORE((((fetch) + (12)) >> 2) * 4, 0, 4);
|
|
6524
6670
|
writeI53ToI64(fetch + 16, 0);
|
|
6525
6671
|
writeI53ToI64(fetch + 24, 0);
|
|
6526
6672
|
writeI53ToI64(fetch + 32, 0);
|
|
6527
6673
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6528
|
-
|
|
6674
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6529
6675
|
checkInt16(4);
|
|
6530
6676
|
// Mimic XHR HTTP status code 200 "OK"
|
|
6531
|
-
|
|
6677
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 200, 2);
|
|
6532
6678
|
checkInt16(200);
|
|
6533
6679
|
stringToUTF8("OK", fetch + 44, 64);
|
|
6534
6680
|
onsuccess(fetch, 0, value);
|
|
6535
6681
|
};
|
|
6536
6682
|
request.onerror = error => {
|
|
6537
|
-
|
|
6683
|
+
SAFE_HEAP_STORE((((fetch) + (40)) >> 1) * 2, 4, 2);
|
|
6538
6684
|
checkInt16(4);
|
|
6539
6685
|
// Mimic XHR readyState 4 === 'DONE: The operation is complete'
|
|
6540
|
-
|
|
6686
|
+
SAFE_HEAP_STORE((((fetch) + (42)) >> 1) * 2, 404, 2);
|
|
6541
6687
|
checkInt16(404);
|
|
6542
6688
|
// Mimic XHR HTTP status code 404 "Not Found"
|
|
6543
6689
|
stringToUTF8("Not Found", fetch + 44, 64);
|
|
@@ -6553,11 +6699,11 @@ function _emscripten_start_fetch(fetch, successcb, errorcb, progresscb, readysta
|
|
|
6553
6699
|
// response.
|
|
6554
6700
|
runtimeKeepalivePush();
|
|
6555
6701
|
var fetch_attr = fetch + 108;
|
|
6556
|
-
var onsuccess =
|
|
6557
|
-
var onerror =
|
|
6558
|
-
var onprogress =
|
|
6559
|
-
var onreadystatechange =
|
|
6560
|
-
var fetchAttributes =
|
|
6702
|
+
var onsuccess = SAFE_HEAP_LOAD((((fetch_attr) + (36)) >> 2) * 4, 4, 1);
|
|
6703
|
+
var onerror = SAFE_HEAP_LOAD((((fetch_attr) + (40)) >> 2) * 4, 4, 1);
|
|
6704
|
+
var onprogress = SAFE_HEAP_LOAD((((fetch_attr) + (44)) >> 2) * 4, 4, 1);
|
|
6705
|
+
var onreadystatechange = SAFE_HEAP_LOAD((((fetch_attr) + (48)) >> 2) * 4, 4, 1);
|
|
6706
|
+
var fetchAttributes = SAFE_HEAP_LOAD((((fetch_attr) + (52)) >> 2) * 4, 4, 1);
|
|
6561
6707
|
var fetchAttrSynchronous = !!(fetchAttributes & 64);
|
|
6562
6708
|
function doCallback(f) {
|
|
6563
6709
|
if (fetchAttrSynchronous) {
|
|
@@ -6572,18 +6718,18 @@ function _emscripten_start_fetch(fetch, successcb, errorcb, progresscb, readysta
|
|
|
6572
6718
|
if (onsuccess) (a1 => dynCall_vi(onsuccess, a1))(fetch); else successcb?.(fetch);
|
|
6573
6719
|
});
|
|
6574
6720
|
};
|
|
6575
|
-
var reportProgress = (fetch, e) => {
|
|
6721
|
+
var reportProgress = (fetch, xhr, e) => {
|
|
6576
6722
|
doCallback(() => {
|
|
6577
6723
|
if (onprogress) (a1 => dynCall_vi(onprogress, a1))(fetch); else progresscb?.(fetch);
|
|
6578
6724
|
});
|
|
6579
6725
|
};
|
|
6580
|
-
var reportError = (fetch, e) => {
|
|
6726
|
+
var reportError = (fetch, xhr, e) => {
|
|
6581
6727
|
runtimeKeepalivePop();
|
|
6582
6728
|
doCallback(() => {
|
|
6583
6729
|
if (onerror) (a1 => dynCall_vi(onerror, a1))(fetch); else errorcb?.(fetch);
|
|
6584
6730
|
});
|
|
6585
6731
|
};
|
|
6586
|
-
var reportReadyStateChange = (fetch, e) => {
|
|
6732
|
+
var reportReadyStateChange = (fetch, xhr, e) => {
|
|
6587
6733
|
doCallback(() => {
|
|
6588
6734
|
if (onreadystatechange) (a1 => dynCall_vi(onreadystatechange, a1))(fetch); else readystatechangecb?.(fetch);
|
|
6589
6735
|
});
|
|
@@ -6615,8 +6761,8 @@ function _emscripten_start_fetch(fetch, successcb, errorcb, progresscb, readysta
|
|
|
6615
6761
|
var fetchAttrNoDownload = !!(fetchAttributes & 32);
|
|
6616
6762
|
if (requestMethod === "EM_IDB_STORE") {
|
|
6617
6763
|
// TODO(?): Here we perform a clone of the data, because storing shared typed arrays to IndexedDB does not seem to be allowed.
|
|
6618
|
-
var ptr =
|
|
6619
|
-
var size =
|
|
6764
|
+
var ptr = SAFE_HEAP_LOAD((((fetch_attr) + (84)) >> 2) * 4, 4, 1);
|
|
6765
|
+
var size = SAFE_HEAP_LOAD((((fetch_attr) + (88)) >> 2) * 4, 4, 1);
|
|
6620
6766
|
fetchCacheData(Fetch.dbInstance, fetch, HEAPU8.slice(ptr, ptr + size), reportSuccess, reportError);
|
|
6621
6767
|
} else if (requestMethod === "EM_IDB_DELETE") {
|
|
6622
6768
|
fetchDeleteCachedData(Fetch.dbInstance, fetch, reportSuccess, reportError);
|
|
@@ -6644,7 +6790,7 @@ var WS = {
|
|
|
6644
6790
|
// Singleton event pointer. Use EmscriptenWebSocketCloseEvent, which is
|
|
6645
6791
|
// the largest event struct
|
|
6646
6792
|
this.socketEvent ||= _malloc(520);
|
|
6647
|
-
|
|
6793
|
+
SAFE_HEAP_STORE(((this.socketEvent) >> 2) * 4, socketId, 4);
|
|
6648
6794
|
checkInt32(socketId);
|
|
6649
6795
|
return this.socketEvent;
|
|
6650
6796
|
}
|
|
@@ -6683,7 +6829,7 @@ function _emscripten_websocket_get_buffered_amount(socketId, bufferedAmount) {
|
|
|
6683
6829
|
if (!socket) {
|
|
6684
6830
|
return -3;
|
|
6685
6831
|
}
|
|
6686
|
-
|
|
6832
|
+
SAFE_HEAP_STORE(((bufferedAmount) >> 2) * 4, socket.bufferedAmount, 4);
|
|
6687
6833
|
return 0;
|
|
6688
6834
|
}
|
|
6689
6835
|
|
|
@@ -6705,7 +6851,7 @@ function _emscripten_websocket_get_extensions_length(socketId, extensionsLength)
|
|
|
6705
6851
|
return -3;
|
|
6706
6852
|
}
|
|
6707
6853
|
if (!extensionsLength) return -5;
|
|
6708
|
-
|
|
6854
|
+
SAFE_HEAP_STORE(((extensionsLength) >> 2) * 4, lengthBytesUTF8(socket.extensions) + 1, 4);
|
|
6709
6855
|
checkInt32(lengthBytesUTF8(socket.extensions) + 1);
|
|
6710
6856
|
return 0;
|
|
6711
6857
|
}
|
|
@@ -6728,7 +6874,7 @@ function _emscripten_websocket_get_protocol_length(socketId, protocolLength) {
|
|
|
6728
6874
|
return -3;
|
|
6729
6875
|
}
|
|
6730
6876
|
if (!protocolLength) return -5;
|
|
6731
|
-
|
|
6877
|
+
SAFE_HEAP_STORE(((protocolLength) >> 2) * 4, lengthBytesUTF8(socket.protocol) + 1, 4);
|
|
6732
6878
|
checkInt32(lengthBytesUTF8(socket.protocol) + 1);
|
|
6733
6879
|
return 0;
|
|
6734
6880
|
}
|
|
@@ -6739,7 +6885,7 @@ function _emscripten_websocket_get_ready_state(socketId, readyState) {
|
|
|
6739
6885
|
if (!socket) {
|
|
6740
6886
|
return -3;
|
|
6741
6887
|
}
|
|
6742
|
-
|
|
6888
|
+
SAFE_HEAP_STORE(((readyState) >> 1) * 2, socket.readyState, 2);
|
|
6743
6889
|
checkInt16(socket.readyState);
|
|
6744
6890
|
return 0;
|
|
6745
6891
|
}
|
|
@@ -6762,7 +6908,7 @@ function _emscripten_websocket_get_url_length(socketId, urlLength) {
|
|
|
6762
6908
|
return -3;
|
|
6763
6909
|
}
|
|
6764
6910
|
if (!urlLength) return -5;
|
|
6765
|
-
|
|
6911
|
+
SAFE_HEAP_STORE(((urlLength) >> 2) * 4, lengthBytesUTF8(socket.url) + 1, 4);
|
|
6766
6912
|
checkInt32(lengthBytesUTF8(socket.url) + 1);
|
|
6767
6913
|
return 0;
|
|
6768
6914
|
}
|
|
@@ -6774,14 +6920,14 @@ function _emscripten_websocket_is_supported() {
|
|
|
6774
6920
|
|
|
6775
6921
|
function _emscripten_websocket_new(createAttributes) {
|
|
6776
6922
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(59, 0, 1, createAttributes);
|
|
6777
|
-
if (
|
|
6923
|
+
if (typeof WebSocket == "undefined") {
|
|
6778
6924
|
return -1;
|
|
6779
6925
|
}
|
|
6780
6926
|
if (!createAttributes) {
|
|
6781
6927
|
return -5;
|
|
6782
6928
|
}
|
|
6783
|
-
var url = UTF8ToString(
|
|
6784
|
-
var protocols =
|
|
6929
|
+
var url = UTF8ToString(SAFE_HEAP_LOAD(((createAttributes) >> 2) * 4, 4, 1));
|
|
6930
|
+
var protocols = SAFE_HEAP_LOAD((((createAttributes) + (4)) >> 2) * 4, 4, 1);
|
|
6785
6931
|
// TODO: Add support for createOnMainThread==false; currently all WebSocket connections are created on the main thread.
|
|
6786
6932
|
// var createOnMainThread = HEAP8[createAttributes+2];
|
|
6787
6933
|
var socket = protocols ? new WebSocket(url, UTF8ToString(protocols).split(",")) : new WebSocket(url);
|
|
@@ -6823,8 +6969,8 @@ function _emscripten_websocket_set_onclose_callback_on_thread(socketId, userData
|
|
|
6823
6969
|
}
|
|
6824
6970
|
socket.onclose = function(e) {
|
|
6825
6971
|
var eventPtr = WS.getSocketEvent(socketId);
|
|
6826
|
-
|
|
6827
|
-
checkInt8(e.wasClean),
|
|
6972
|
+
SAFE_HEAP_STORE((eventPtr) + (4), e.wasClean, 1);
|
|
6973
|
+
checkInt8(e.wasClean), SAFE_HEAP_STORE((((eventPtr) + (6)) >> 1) * 2, e.code, 2);
|
|
6828
6974
|
checkInt16(e.code), stringToUTF8(e.reason, eventPtr + 8, 512);
|
|
6829
6975
|
((a1, a2, a3) => dynCall_iiii(callbackFunc, a1, a2, a3))(0, eventPtr, userData);
|
|
6830
6976
|
};
|
|
@@ -6844,6 +6990,13 @@ function _emscripten_websocket_set_onerror_callback_on_thread(socketId, userData
|
|
|
6844
6990
|
return 0;
|
|
6845
6991
|
}
|
|
6846
6992
|
|
|
6993
|
+
var stringToNewUTF8 = str => {
|
|
6994
|
+
var size = lengthBytesUTF8(str) + 1;
|
|
6995
|
+
var ret = _malloc(size);
|
|
6996
|
+
if (ret) stringToUTF8(str, ret, size);
|
|
6997
|
+
return ret;
|
|
6998
|
+
};
|
|
6999
|
+
|
|
6847
7000
|
function _emscripten_websocket_set_onmessage_callback_on_thread(socketId, userData, callbackFunc, thread) {
|
|
6848
7001
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(64, 0, 1, socketId, userData, callbackFunc, thread);
|
|
6849
7002
|
var socket = WS.getSocket(socketId);
|
|
@@ -6861,8 +7014,8 @@ function _emscripten_websocket_set_onmessage_callback_on_thread(socketId, userDa
|
|
|
6861
7014
|
HEAP8.set(new Uint8Array(e.data), buf);
|
|
6862
7015
|
}
|
|
6863
7016
|
var eventPtr = WS.getSocketEvent(socketId);
|
|
6864
|
-
|
|
6865
|
-
checkInt32(len),
|
|
7017
|
+
SAFE_HEAP_STORE((((eventPtr) + (4)) >> 2) * 4, buf, 4), SAFE_HEAP_STORE((((eventPtr) + (8)) >> 2) * 4, len, 4);
|
|
7018
|
+
checkInt32(len), SAFE_HEAP_STORE((eventPtr) + (12), isText, 1);
|
|
6866
7019
|
checkInt8(isText), ((a1, a2, a3) => dynCall_iiii(callbackFunc, a1, a2, a3))(0, eventPtr, userData);
|
|
6867
7020
|
_free(buf);
|
|
6868
7021
|
};
|
|
@@ -6893,7 +7046,7 @@ var getEnvStrings = () => {
|
|
|
6893
7046
|
if (!getEnvStrings.strings) {
|
|
6894
7047
|
// Default values.
|
|
6895
7048
|
// Browser language detection #8751
|
|
6896
|
-
var lang = ((typeof navigator == "object" && navigator.
|
|
7049
|
+
var lang = ((typeof navigator == "object" && navigator.languages && navigator.languages[0]) || "C").replace("-", "_") + ".UTF-8";
|
|
6897
7050
|
var env = {
|
|
6898
7051
|
"USER": "web_user",
|
|
6899
7052
|
"LOGNAME": "web_user",
|
|
@@ -6925,7 +7078,8 @@ function _environ_get(__environ, environ_buf) {
|
|
|
6925
7078
|
var envp = 0;
|
|
6926
7079
|
for (var string of getEnvStrings()) {
|
|
6927
7080
|
var ptr = environ_buf + bufSize;
|
|
6928
|
-
|
|
7081
|
+
SAFE_HEAP_STORE((((__environ) + (envp)) >> 2) * 4, ptr, 4);
|
|
7082
|
+
checkInt32(ptr);
|
|
6929
7083
|
bufSize += stringToUTF8(string, ptr, Infinity) + 1;
|
|
6930
7084
|
envp += 4;
|
|
6931
7085
|
}
|
|
@@ -6935,13 +7089,13 @@ function _environ_get(__environ, environ_buf) {
|
|
|
6935
7089
|
function _environ_sizes_get(penviron_count, penviron_buf_size) {
|
|
6936
7090
|
if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(67, 0, 1, penviron_count, penviron_buf_size);
|
|
6937
7091
|
var strings = getEnvStrings();
|
|
6938
|
-
|
|
7092
|
+
SAFE_HEAP_STORE(((penviron_count) >> 2) * 4, strings.length, 4);
|
|
6939
7093
|
checkInt32(strings.length);
|
|
6940
7094
|
var bufSize = 0;
|
|
6941
7095
|
for (var string of strings) {
|
|
6942
7096
|
bufSize += lengthBytesUTF8(string) + 1;
|
|
6943
7097
|
}
|
|
6944
|
-
|
|
7098
|
+
SAFE_HEAP_STORE(((penviron_buf_size) >> 2) * 4, bufSize, 4);
|
|
6945
7099
|
checkInt32(bufSize);
|
|
6946
7100
|
return 0;
|
|
6947
7101
|
}
|
|
@@ -6970,13 +7124,13 @@ function _fd_fdstat_get(fd, pbuf) {
|
|
|
6970
7124
|
// assume is a character device, like the mouse, we have special APIs for).
|
|
6971
7125
|
var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4;
|
|
6972
7126
|
}
|
|
6973
|
-
|
|
7127
|
+
SAFE_HEAP_STORE(pbuf, type, 1);
|
|
6974
7128
|
checkInt8(type);
|
|
6975
|
-
|
|
7129
|
+
SAFE_HEAP_STORE((((pbuf) + (2)) >> 1) * 2, flags, 2);
|
|
6976
7130
|
checkInt16(flags);
|
|
6977
|
-
HEAP64[
|
|
7131
|
+
HEAP64[(((pbuf) + (8)) >> 3)] = BigInt(rightsBase);
|
|
6978
7132
|
checkInt64(rightsBase);
|
|
6979
|
-
HEAP64[
|
|
7133
|
+
HEAP64[(((pbuf) + (16)) >> 3)] = BigInt(rightsInheriting);
|
|
6980
7134
|
checkInt64(rightsInheriting);
|
|
6981
7135
|
return 0;
|
|
6982
7136
|
} catch (e) {
|
|
@@ -6988,8 +7142,8 @@ function _fd_fdstat_get(fd, pbuf) {
|
|
|
6988
7142
|
/** @param {number=} offset */ var doReadv = (stream, iov, iovcnt, offset) => {
|
|
6989
7143
|
var ret = 0;
|
|
6990
7144
|
for (var i = 0; i < iovcnt; i++) {
|
|
6991
|
-
var ptr =
|
|
6992
|
-
var len =
|
|
7145
|
+
var ptr = SAFE_HEAP_LOAD(((iov) >> 2) * 4, 4, 1);
|
|
7146
|
+
var len = SAFE_HEAP_LOAD((((iov) + (4)) >> 2) * 4, 4, 1);
|
|
6993
7147
|
iov += 8;
|
|
6994
7148
|
var curr = FS.read(stream, HEAP8, ptr, len, offset);
|
|
6995
7149
|
if (curr < 0) return -1;
|
|
@@ -7004,7 +7158,7 @@ function _fd_read(fd, iov, iovcnt, pnum) {
|
|
|
7004
7158
|
try {
|
|
7005
7159
|
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
7006
7160
|
var num = doReadv(stream, iov, iovcnt);
|
|
7007
|
-
|
|
7161
|
+
SAFE_HEAP_STORE(((pnum) >> 2) * 4, num, 4);
|
|
7008
7162
|
checkInt32(num);
|
|
7009
7163
|
return 0;
|
|
7010
7164
|
} catch (e) {
|
|
@@ -7020,7 +7174,7 @@ function _fd_seek(fd, offset, whence, newOffset) {
|
|
|
7020
7174
|
if (isNaN(offset)) return 61;
|
|
7021
7175
|
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
7022
7176
|
FS.llseek(stream, offset, whence);
|
|
7023
|
-
HEAP64[
|
|
7177
|
+
HEAP64[((newOffset) >> 3)] = BigInt(stream.position);
|
|
7024
7178
|
checkInt64(stream.position);
|
|
7025
7179
|
if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
|
|
7026
7180
|
// reset readdir state
|
|
@@ -7034,8 +7188,8 @@ function _fd_seek(fd, offset, whence, newOffset) {
|
|
|
7034
7188
|
/** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => {
|
|
7035
7189
|
var ret = 0;
|
|
7036
7190
|
for (var i = 0; i < iovcnt; i++) {
|
|
7037
|
-
var ptr =
|
|
7038
|
-
var len =
|
|
7191
|
+
var ptr = SAFE_HEAP_LOAD(((iov) >> 2) * 4, 4, 1);
|
|
7192
|
+
var len = SAFE_HEAP_LOAD((((iov) + (4)) >> 2) * 4, 4, 1);
|
|
7039
7193
|
iov += 8;
|
|
7040
7194
|
var curr = FS.write(stream, HEAP8, ptr, len, offset);
|
|
7041
7195
|
if (curr < 0) return -1;
|
|
@@ -7053,7 +7207,7 @@ function _fd_write(fd, iov, iovcnt, pnum) {
|
|
|
7053
7207
|
try {
|
|
7054
7208
|
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
7055
7209
|
var num = doWritev(stream, iov, iovcnt);
|
|
7056
|
-
|
|
7210
|
+
SAFE_HEAP_STORE(((pnum) >> 2) * 4, num, 4);
|
|
7057
7211
|
checkInt32(num);
|
|
7058
7212
|
return 0;
|
|
7059
7213
|
} catch (e) {
|
|
@@ -7084,7 +7238,7 @@ var writeArrayToMemory = (array, buffer) => {
|
|
|
7084
7238
|
/**
|
|
7085
7239
|
* @param {string|null=} returnType
|
|
7086
7240
|
* @param {Array=} argTypes
|
|
7087
|
-
* @param {Array=} args
|
|
7241
|
+
* @param {Arguments|Array=} args
|
|
7088
7242
|
* @param {Object=} opts
|
|
7089
7243
|
*/ var ccall = (ident, returnType, argTypes, args, opts) => {
|
|
7090
7244
|
// For fast lookup of conversion functions
|
|
@@ -7140,9 +7294,9 @@ var writeArrayToMemory = (array, buffer) => {
|
|
|
7140
7294
|
* @param {Object=} opts
|
|
7141
7295
|
*/ var cwrap = (ident, returnType, argTypes, opts) => (...args) => ccall(ident, returnType, argTypes, args);
|
|
7142
7296
|
|
|
7143
|
-
|
|
7297
|
+
PThread.init();
|
|
7144
7298
|
|
|
7145
|
-
FS.
|
|
7299
|
+
FS.createPreloadedFile = FS_createPreloadedFile;
|
|
7146
7300
|
|
|
7147
7301
|
FS.staticInit();
|
|
7148
7302
|
|
|
@@ -7178,13 +7332,6 @@ Fetch.init();
|
|
|
7178
7332
|
assert(typeof Module["TOTAL_MEMORY"] == "undefined", "Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");
|
|
7179
7333
|
assert(typeof Module["ENVIRONMENT"] == "undefined", "Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");
|
|
7180
7334
|
assert(typeof Module["STACK_SIZE"] == "undefined", "STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");
|
|
7181
|
-
if (Module["preInit"]) {
|
|
7182
|
-
if (typeof Module["preInit"] == "function") Module["preInit"] = [ Module["preInit"] ];
|
|
7183
|
-
while (Module["preInit"].length > 0) {
|
|
7184
|
-
Module["preInit"].shift()();
|
|
7185
|
-
}
|
|
7186
|
-
}
|
|
7187
|
-
consumedModuleProp("preInit");
|
|
7188
7335
|
}
|
|
7189
7336
|
|
|
7190
7337
|
// Begin runtime exports
|
|
@@ -7196,11 +7343,11 @@ Module["stringToNewUTF8"] = stringToNewUTF8;
|
|
|
7196
7343
|
|
|
7197
7344
|
Module["FS"] = FS;
|
|
7198
7345
|
|
|
7199
|
-
var missingLibrarySymbols = [ "writeI53ToI64Clamped", "writeI53ToI64Signaling", "writeI53ToU64Clamped", "writeI53ToU64Signaling", "convertI32PairToI53", "convertI32PairToI53Checked", "convertU32PairToI53", "getTempRet0", "setTempRet0", "
|
|
7346
|
+
var missingLibrarySymbols = [ "writeI53ToI64Clamped", "writeI53ToI64Signaling", "writeI53ToU64Clamped", "writeI53ToU64Signaling", "convertI32PairToI53", "convertI32PairToI53Checked", "convertU32PairToI53", "getTempRet0", "setTempRet0", "zeroMemory", "growMemory", "inetPton4", "inetNtop4", "inetPton6", "inetNtop6", "readSockaddr", "writeSockaddr", "emscriptenLog", "runMainThreadEmAsm", "jstoi_q", "listenOnce", "autoResumeAudioContext", "dynCallLegacy", "getDynCaller", "dynCall", "asmjsMangle", "alignMemory", "getNativeTypeSize", "addOnInit", "addOnPostCtor", "addOnPreMain", "STACK_SIZE", "STACK_ALIGN", "POINTER_SIZE", "ASSERTIONS", "uleb128Encode", "sigToWasmTypes", "generateFuncType", "convertJsFunctionToWasm", "getEmptyTableSlot", "updateTableMap", "getFunctionAddress", "addFunction", "removeFunction", "reallyNegative", "strLen", "reSign", "formatString", "intArrayToString", "AsciiToString", "stringToAscii", "UTF16ToString", "stringToUTF16", "lengthBytesUTF16", "UTF32ToString", "stringToUTF32", "lengthBytesUTF32", "JSEvents_requestFullscreen", "JSEvents_resizeCanvasForFullscreen", "registerRestoreOldStyle", "hideEverythingExceptGivenElement", "restoreHiddenElements", "setLetterbox", "softFullscreenResizeWebGLRenderTarget", "doRequestFullscreen", "requestPointerLock", "setCanvasElementSizeCallingThread", "setCanvasElementSizeMainThread", "setCanvasElementSize", "getCanvasSizeCallingThread", "getCanvasSizeMainThread", "getCanvasElementSize", "jsStackTrace", "getCallstack", "convertPCtoSourceLocation", "wasiRightsToMuslOFlags", "wasiOFlagsToMuslOFlags", "safeSetTimeout", "setImmediateWrapped", "safeRequestAnimationFrame", "clearImmediateWrapped", "registerPostMainLoop", "registerPreMainLoop", "getPromise", "idsToPromises", "makePromiseCallback", "ExceptionInfo", "findMatchingCatch", "Browser_asyncPrepareDataCounter", "arraySum", "addDays", "getSocketFromFD", "getSocketAddress", "FS_mkdirTree", "_setNetworkCallback", "heapObjectForWebGLType", "toTypedArrayIndex", "webgl_enable_ANGLE_instanced_arrays", "webgl_enable_OES_vertex_array_object", "webgl_enable_WEBGL_draw_buffers", "webgl_enable_WEBGL_multi_draw", "webgl_enable_EXT_polygon_offset_clamp", "webgl_enable_EXT_clip_control", "webgl_enable_WEBGL_polygon_mode", "emscriptenWebGLGet", "computeUnpackAlignedImageSize", "colorChannelsInGlTextureFormat", "emscriptenWebGLGetTexPixelData", "emscriptenWebGLGetUniform", "webglGetUniformLocation", "webglPrepareUniformLocationsBeforeFirstUse", "webglGetLeftBracePos", "emscriptenWebGLGetVertexAttrib", "__glGetActiveAttribOrUniform", "writeGLArray", "emscripten_webgl_destroy_context_before_on_calling_thread", "registerWebGlEventCallback", "runAndAbortIfError", "ALLOC_NORMAL", "ALLOC_STACK", "allocate", "writeStringToMemory", "writeAsciiToMemory", "demangle", "stackTrace" ];
|
|
7200
7347
|
|
|
7201
7348
|
missingLibrarySymbols.forEach(missingLibrarySymbol);
|
|
7202
7349
|
|
|
7203
|
-
var unexportedSymbols = [ "run", "out", "err", "callMain", "abort", "wasmMemory", "wasmExports", "HEAPF32", "HEAPF64", "HEAP8", "HEAPU8", "HEAP16", "HEAPU16", "HEAP32", "HEAPU32", "HEAP64", "HEAPU64", "writeStackCookie", "checkStackCookie", "writeI53ToI64", "readI53FromI64", "readI53FromU64", "INT53_MAX", "INT53_MIN", "bigintToI53Checked", "stackSave", "stackRestore", "stackAlloc", "ptrToString", "exitJS", "getHeapMax", "abortOnCannotGrowMemory", "ENV", "ERRNO_CODES", "strError", "DNS", "Protocols", "Sockets", "timers", "warnOnce", "readEmAsmArgsArray", "readEmAsmArgs", "runEmAsmFunction", "getExecutableName", "handleException", "keepRuntimeAlive", "runtimeKeepalivePush", "runtimeKeepalivePop", "callUserCallback", "maybeExit", "asyncLoad", "mmapAlloc", "HandleAllocator", "wasmTable", "
|
|
7350
|
+
var unexportedSymbols = [ "run", "addRunDependency", "removeRunDependency", "out", "err", "callMain", "abort", "wasmMemory", "wasmExports", "HEAPF32", "HEAPF64", "HEAP8", "HEAPU8", "HEAP16", "HEAPU16", "HEAP32", "HEAPU32", "HEAP64", "HEAPU64", "writeStackCookie", "checkStackCookie", "writeI53ToI64", "readI53FromI64", "readI53FromU64", "INT53_MAX", "INT53_MIN", "bigintToI53Checked", "stackSave", "stackRestore", "stackAlloc", "ptrToString", "exitJS", "getHeapMax", "abortOnCannotGrowMemory", "ENV", "ERRNO_CODES", "strError", "DNS", "Protocols", "Sockets", "timers", "warnOnce", "readEmAsmArgsArray", "readEmAsmArgs", "runEmAsmFunction", "getExecutableName", "handleException", "keepRuntimeAlive", "runtimeKeepalivePush", "runtimeKeepalivePop", "callUserCallback", "maybeExit", "asyncLoad", "mmapAlloc", "HandleAllocator", "wasmTable", "noExitRuntime", "addOnPreRun", "addOnExit", "addOnPostRun", "getCFunc", "freeTableIndexes", "functionsInTableMap", "unSign", "setValue", "getValue", "PATH", "PATH_FS", "UTF8Decoder", "UTF8ArrayToString", "UTF8ToString", "stringToUTF8Array", "stringToUTF8", "lengthBytesUTF8", "intArrayFromString", "UTF16Decoder", "stringToUTF8OnStack", "writeArrayToMemory", "JSEvents", "registerKeyEventCallback", "specialHTMLTargets", "maybeCStringToJsString", "findEventTarget", "findCanvasEventTarget", "getBoundingClientRect", "fillMouseEventData", "registerMouseEventCallback", "registerWheelEventCallback", "registerUiEventCallback", "registerFocusEventCallback", "fillDeviceOrientationEventData", "registerDeviceOrientationEventCallback", "fillDeviceMotionEventData", "registerDeviceMotionEventCallback", "screenOrientation", "fillOrientationChangeEventData", "registerOrientationChangeEventCallback", "fillFullscreenChangeEventData", "registerFullscreenChangeEventCallback", "currentFullscreenStrategy", "restoreOldWindowedStyle", "fillPointerlockChangeEventData", "registerPointerlockChangeEventCallback", "registerPointerlockErrorEventCallback", "fillVisibilityChangeEventData", "registerVisibilityChangeEventCallback", "registerTouchEventCallback", "fillGamepadEventData", "registerGamepadEventCallback", "registerBeforeUnloadEventCallback", "fillBatteryEventData", "battery", "registerBatteryEventCallback", "UNWIND_CACHE", "ExitStatus", "getEnvStrings", "checkWasiClock", "doReadv", "doWritev", "initRandomFill", "randomFill", "emSetImmediate", "emClearImmediate_deps", "emClearImmediate", "promiseMap", "makePromise", "uncaughtExceptionCount", "exceptionLast", "exceptionCaught", "Browser", "getPreloadedImageData__data", "wget", "MONTH_DAYS_REGULAR", "MONTH_DAYS_LEAP", "MONTH_DAYS_REGULAR_CUMULATIVE", "MONTH_DAYS_LEAP_CUMULATIVE", "isLeapYear", "ydayFromDate", "SYSCALLS", "preloadPlugins", "FS_createPreloadedFile", "FS_modeStringToFlags", "FS_getMode", "FS_stdin_getChar_buffer", "FS_stdin_getChar", "FS_unlink", "FS_createPath", "FS_createDevice", "FS_readFile", "FS_root", "FS_mounts", "FS_devices", "FS_streams", "FS_nextInode", "FS_nameTable", "FS_currentPath", "FS_initialized", "FS_ignorePermissions", "FS_filesystems", "FS_syncFSRequests", "FS_readFiles", "FS_lookupPath", "FS_getPath", "FS_hashName", "FS_hashAddNode", "FS_hashRemoveNode", "FS_lookupNode", "FS_createNode", "FS_destroyNode", "FS_isRoot", "FS_isMountpoint", "FS_isFile", "FS_isDir", "FS_isLink", "FS_isChrdev", "FS_isBlkdev", "FS_isFIFO", "FS_isSocket", "FS_flagsToPermissionString", "FS_nodePermissions", "FS_mayLookup", "FS_mayCreate", "FS_mayDelete", "FS_mayOpen", "FS_checkOpExists", "FS_nextfd", "FS_getStreamChecked", "FS_getStream", "FS_createStream", "FS_closeStream", "FS_dupStream", "FS_doSetAttr", "FS_chrdev_stream_ops", "FS_major", "FS_minor", "FS_makedev", "FS_registerDevice", "FS_getDevice", "FS_getMounts", "FS_syncfs", "FS_mount", "FS_unmount", "FS_lookup", "FS_mknod", "FS_statfs", "FS_statfsStream", "FS_statfsNode", "FS_create", "FS_mkdir", "FS_mkdev", "FS_symlink", "FS_rename", "FS_rmdir", "FS_readdir", "FS_readlink", "FS_stat", "FS_fstat", "FS_lstat", "FS_doChmod", "FS_chmod", "FS_lchmod", "FS_fchmod", "FS_doChown", "FS_chown", "FS_lchown", "FS_fchown", "FS_doTruncate", "FS_truncate", "FS_ftruncate", "FS_utime", "FS_open", "FS_close", "FS_isClosed", "FS_llseek", "FS_read", "FS_write", "FS_mmap", "FS_msync", "FS_ioctl", "FS_writeFile", "FS_cwd", "FS_chdir", "FS_createDefaultDirectories", "FS_createDefaultDevices", "FS_createSpecialDirectories", "FS_createStandardStreams", "FS_staticInit", "FS_init", "FS_quit", "FS_findObject", "FS_analyzePath", "FS_createFile", "FS_createDataFile", "FS_forceLoadFile", "FS_createLazyFile", "FS_absolutePath", "FS_createFolder", "FS_createLink", "FS_joinPath", "FS_mmapAlloc", "FS_standardizePath", "MEMFS", "TTY", "PIPEFS", "SOCKFS", "tempFixedLengthArray", "miniTempWebGLFloatBuffers", "miniTempWebGLIntBuffers", "GL", "AL", "GLUT", "EGL", "GLEW", "IDBStore", "SDL", "SDL_gfx", "allocateUTF8", "allocateUTF8OnStack", "print", "printErr", "jstoi_s", "PThread", "terminateWorker", "cleanupThread", "registerTLSInit", "spawnThread", "exitOnMainThread", "proxyToMainThread", "proxiedJSCallArgs", "invokeEntryPoint", "checkMailbox", "webSockets", "WS", "WORKERFS", "Fetch", "fetchDeleteCachedData", "fetchLoadCachedData", "fetchCacheData", "fetchXHR" ];
|
|
7204
7351
|
|
|
7205
7352
|
unexportedSymbols.forEach(unexportedRuntimeSymbol);
|
|
7206
7353
|
|
|
@@ -7219,19 +7366,19 @@ function checkIncomingModuleAPI() {
|
|
|
7219
7366
|
}
|
|
7220
7367
|
|
|
7221
7368
|
var ASM_CONSTS = {
|
|
7222
|
-
|
|
7369
|
+
77551: ($0, $1) => {
|
|
7223
7370
|
promiseMap.get($0).resolve($1);
|
|
7224
7371
|
},
|
|
7225
|
-
|
|
7372
|
+
77587: ($0, $1) => {
|
|
7226
7373
|
promiseMap.get($0).reject($1);
|
|
7227
7374
|
},
|
|
7228
|
-
|
|
7375
|
+
77622: ($0, $1) => {
|
|
7229
7376
|
promiseMap.get($0).resolve(UTF8ToString($1));
|
|
7230
7377
|
},
|
|
7231
|
-
|
|
7378
|
+
77672: ($0, $1) => {
|
|
7232
7379
|
promiseMap.get($0).reject(UTF8ToString($1));
|
|
7233
7380
|
},
|
|
7234
|
-
|
|
7381
|
+
77721: $0 => {
|
|
7235
7382
|
Module["onTrackedObjectDelete"]($0);
|
|
7236
7383
|
}
|
|
7237
7384
|
};
|
|
@@ -7240,11 +7387,11 @@ function js_tracked_eval(code, size, debug) {
|
|
|
7240
7387
|
const keys = Module["onRunTrackedJs"](UTF8ToString(code), debug);
|
|
7241
7388
|
const error = keys === null;
|
|
7242
7389
|
if (error) {
|
|
7243
|
-
|
|
7390
|
+
SAFE_HEAP_STORE(size / HEAPU32.BYTES_PER_ELEMENT * 4, 0, 4);
|
|
7244
7391
|
return 0;
|
|
7245
7392
|
}
|
|
7246
7393
|
const ptr = Module["_malloc"](keys.length * HEAPU32.BYTES_PER_ELEMENT);
|
|
7247
|
-
|
|
7394
|
+
SAFE_HEAP_STORE(size / HEAPU32.BYTES_PER_ELEMENT * 4, keys.length, 4);
|
|
7248
7395
|
HEAPU32.set(keys, ptr / HEAPU32.BYTES_PER_ELEMENT);
|
|
7249
7396
|
return ptr;
|
|
7250
7397
|
}
|
|
@@ -7279,120 +7426,30 @@ function js_get_tracked_objects(keys_ptr, keys_n, sizes, statuses, objects_n, st
|
|
|
7279
7426
|
byteSize = lengthBytesUTF8(object);
|
|
7280
7427
|
stringsN += 1;
|
|
7281
7428
|
}
|
|
7282
|
-
|
|
7283
|
-
|
|
7429
|
+
SAFE_HEAP_STORE(statusPtr / HEAPU8.BYTES_PER_ELEMENT + i, status, 1);
|
|
7430
|
+
SAFE_HEAP_STORE((sizesPtr / HEAPU32.BYTES_PER_ELEMENT + i) * 4, byteSize, 4);
|
|
7284
7431
|
allByteSize += byteSize;
|
|
7285
7432
|
}
|
|
7286
7433
|
const stringsPtr = Module["_malloc"](allByteSize * HEAPU8.BYTES_PER_ELEMENT);
|
|
7287
7434
|
let currentStringsPtr = stringsPtr;
|
|
7288
7435
|
for (let i = 0; i < n; ++i) {
|
|
7289
|
-
const status =
|
|
7436
|
+
const status = SAFE_HEAP_LOAD(statusPtr / HEAPU8.BYTES_PER_ELEMENT + i, 1, 1);
|
|
7290
7437
|
if (status !== OK) {
|
|
7291
7438
|
continue;
|
|
7292
7439
|
}
|
|
7293
7440
|
const string = objects[i];
|
|
7294
|
-
const size =
|
|
7441
|
+
const size = SAFE_HEAP_LOAD((sizesPtr / HEAPU32.BYTES_PER_ELEMENT + i) * 4, 4, 1);
|
|
7295
7442
|
stringToUTF8(string, currentStringsPtr, size + 1);
|
|
7296
7443
|
currentStringsPtr += size;
|
|
7297
7444
|
}
|
|
7298
|
-
|
|
7299
|
-
|
|
7300
|
-
|
|
7301
|
-
|
|
7302
|
-
|
|
7445
|
+
SAFE_HEAP_STORE(statuses / HEAPU32.BYTES_PER_ELEMENT * 4, statusPtr, 4);
|
|
7446
|
+
SAFE_HEAP_STORE(sizes / HEAPU32.BYTES_PER_ELEMENT * 4, sizesPtr, 4);
|
|
7447
|
+
SAFE_HEAP_STORE(objects_n / HEAPU32.BYTES_PER_ELEMENT * 4, n, 4);
|
|
7448
|
+
SAFE_HEAP_STORE(strings_n / HEAPU32.BYTES_PER_ELEMENT * 4, stringsN, 4);
|
|
7449
|
+
SAFE_HEAP_STORE(all_byte_size / HEAPU32.BYTES_PER_ELEMENT * 4, allByteSize, 4);
|
|
7303
7450
|
return stringsPtr;
|
|
7304
7451
|
}
|
|
7305
7452
|
|
|
7306
|
-
// Imports from the Wasm binary.
|
|
7307
|
-
Module["_cast"] = makeInvalidEarlyAccess("_cast");
|
|
7308
|
-
|
|
7309
|
-
Module["_call"] = makeInvalidEarlyAccess("_call");
|
|
7310
|
-
|
|
7311
|
-
Module["_next_tracked_object_key"] = makeInvalidEarlyAccess("_next_tracked_object_key");
|
|
7312
|
-
|
|
7313
|
-
Module["_main"] = makeInvalidEarlyAccess("_main");
|
|
7314
|
-
|
|
7315
|
-
var _free = makeInvalidEarlyAccess("_free");
|
|
7316
|
-
|
|
7317
|
-
var _malloc = Module["_malloc"] = makeInvalidEarlyAccess("_malloc");
|
|
7318
|
-
|
|
7319
|
-
var _fflush = makeInvalidEarlyAccess("_fflush");
|
|
7320
|
-
|
|
7321
|
-
var _pthread_self = makeInvalidEarlyAccess("_pthread_self");
|
|
7322
|
-
|
|
7323
|
-
var __emscripten_proxy_main = Module["__emscripten_proxy_main"] = makeInvalidEarlyAccess("__emscripten_proxy_main");
|
|
7324
|
-
|
|
7325
|
-
var _emscripten_stack_get_base = makeInvalidEarlyAccess("_emscripten_stack_get_base");
|
|
7326
|
-
|
|
7327
|
-
var _emscripten_stack_get_end = makeInvalidEarlyAccess("_emscripten_stack_get_end");
|
|
7328
|
-
|
|
7329
|
-
var __emscripten_run_callback_on_thread = makeInvalidEarlyAccess("__emscripten_run_callback_on_thread");
|
|
7330
|
-
|
|
7331
|
-
var __emscripten_thread_init = makeInvalidEarlyAccess("__emscripten_thread_init");
|
|
7332
|
-
|
|
7333
|
-
var __emscripten_thread_crashed = makeInvalidEarlyAccess("__emscripten_thread_crashed");
|
|
7334
|
-
|
|
7335
|
-
var __emscripten_run_js_on_main_thread = makeInvalidEarlyAccess("__emscripten_run_js_on_main_thread");
|
|
7336
|
-
|
|
7337
|
-
var __emscripten_thread_free_data = makeInvalidEarlyAccess("__emscripten_thread_free_data");
|
|
7338
|
-
|
|
7339
|
-
var __emscripten_thread_exit = makeInvalidEarlyAccess("__emscripten_thread_exit");
|
|
7340
|
-
|
|
7341
|
-
var _strerror = makeInvalidEarlyAccess("_strerror");
|
|
7342
|
-
|
|
7343
|
-
var __emscripten_check_mailbox = makeInvalidEarlyAccess("__emscripten_check_mailbox");
|
|
7344
|
-
|
|
7345
|
-
var _sbrk = makeInvalidEarlyAccess("_sbrk");
|
|
7346
|
-
|
|
7347
|
-
var _emscripten_stack_init = makeInvalidEarlyAccess("_emscripten_stack_init");
|
|
7348
|
-
|
|
7349
|
-
var _emscripten_stack_set_limits = makeInvalidEarlyAccess("_emscripten_stack_set_limits");
|
|
7350
|
-
|
|
7351
|
-
var __emscripten_stack_restore = makeInvalidEarlyAccess("__emscripten_stack_restore");
|
|
7352
|
-
|
|
7353
|
-
var __emscripten_stack_alloc = makeInvalidEarlyAccess("__emscripten_stack_alloc");
|
|
7354
|
-
|
|
7355
|
-
var _emscripten_stack_get_current = makeInvalidEarlyAccess("_emscripten_stack_get_current");
|
|
7356
|
-
|
|
7357
|
-
var dynCall_iiii = makeInvalidEarlyAccess("dynCall_iiii");
|
|
7358
|
-
|
|
7359
|
-
var dynCall_ii = makeInvalidEarlyAccess("dynCall_ii");
|
|
7360
|
-
|
|
7361
|
-
var dynCall_vi = makeInvalidEarlyAccess("dynCall_vi");
|
|
7362
|
-
|
|
7363
|
-
function assignWasmExports(wasmExports) {
|
|
7364
|
-
Module["_cast"] = createExportWrapper("cast", 2);
|
|
7365
|
-
Module["_call"] = createExportWrapper("call", 2);
|
|
7366
|
-
Module["_next_tracked_object_key"] = createExportWrapper("next_tracked_object_key", 0);
|
|
7367
|
-
Module["_main"] = createExportWrapper("__main_argc_argv", 2);
|
|
7368
|
-
_free = createExportWrapper("free", 1);
|
|
7369
|
-
_malloc = Module["_malloc"] = createExportWrapper("malloc", 1);
|
|
7370
|
-
_fflush = createExportWrapper("fflush", 1);
|
|
7371
|
-
_pthread_self = createExportWrapper("pthread_self", 0);
|
|
7372
|
-
__emscripten_proxy_main = Module["__emscripten_proxy_main"] = createExportWrapper("_emscripten_proxy_main", 2);
|
|
7373
|
-
_emscripten_stack_get_base = wasmExports["emscripten_stack_get_base"];
|
|
7374
|
-
_emscripten_stack_get_end = wasmExports["emscripten_stack_get_end"];
|
|
7375
|
-
__emscripten_run_callback_on_thread = createExportWrapper("_emscripten_run_callback_on_thread", 5);
|
|
7376
|
-
__emscripten_thread_init = createExportWrapper("_emscripten_thread_init", 6);
|
|
7377
|
-
__emscripten_thread_crashed = createExportWrapper("_emscripten_thread_crashed", 0);
|
|
7378
|
-
__emscripten_run_js_on_main_thread = createExportWrapper("_emscripten_run_js_on_main_thread", 5);
|
|
7379
|
-
__emscripten_thread_free_data = createExportWrapper("_emscripten_thread_free_data", 1);
|
|
7380
|
-
__emscripten_thread_exit = createExportWrapper("_emscripten_thread_exit", 1);
|
|
7381
|
-
_strerror = createExportWrapper("strerror", 1);
|
|
7382
|
-
__emscripten_check_mailbox = createExportWrapper("_emscripten_check_mailbox", 0);
|
|
7383
|
-
_sbrk = createExportWrapper("sbrk", 1);
|
|
7384
|
-
_emscripten_stack_init = wasmExports["emscripten_stack_init"];
|
|
7385
|
-
_emscripten_stack_set_limits = wasmExports["emscripten_stack_set_limits"];
|
|
7386
|
-
wasmExports["emscripten_stack_get_free"];
|
|
7387
|
-
__emscripten_stack_restore = wasmExports["_emscripten_stack_restore"];
|
|
7388
|
-
__emscripten_stack_alloc = wasmExports["_emscripten_stack_alloc"];
|
|
7389
|
-
_emscripten_stack_get_current = wasmExports["emscripten_stack_get_current"];
|
|
7390
|
-
dynCall_iiii = createExportWrapper("dynCall_iiii", 4);
|
|
7391
|
-
dynCall_ii = createExportWrapper("dynCall_ii", 2);
|
|
7392
|
-
dynCall_vi = createExportWrapper("dynCall_vi", 2);
|
|
7393
|
-
wasmExports["__indirect_function_table"];
|
|
7394
|
-
}
|
|
7395
|
-
|
|
7396
7453
|
var wasmImports;
|
|
7397
7454
|
|
|
7398
7455
|
function assignWasmImports() {
|
|
@@ -7502,6 +7559,96 @@ function assignWasmImports() {
|
|
|
7502
7559
|
};
|
|
7503
7560
|
}
|
|
7504
7561
|
|
|
7562
|
+
var wasmExports = await createWasm();
|
|
7563
|
+
|
|
7564
|
+
Module["_cast"] = createExportWrapper("cast", 2);
|
|
7565
|
+
|
|
7566
|
+
Module["_call"] = createExportWrapper("call", 2);
|
|
7567
|
+
|
|
7568
|
+
Module["_next_tracked_object_key"] = createExportWrapper("next_tracked_object_key", 0);
|
|
7569
|
+
|
|
7570
|
+
Module["_main"] = createExportWrapper("__main_argc_argv", 2);
|
|
7571
|
+
|
|
7572
|
+
var _free = createExportWrapper("free", 1);
|
|
7573
|
+
|
|
7574
|
+
var _malloc = Module["_malloc"] = createExportWrapper("malloc", 1);
|
|
7575
|
+
|
|
7576
|
+
var _fflush = createExportWrapper("fflush", 1);
|
|
7577
|
+
|
|
7578
|
+
var _pthread_self = () => (_pthread_self = wasmExports["pthread_self"])();
|
|
7579
|
+
|
|
7580
|
+
var __emscripten_proxy_main = Module["__emscripten_proxy_main"] = createExportWrapper("_emscripten_proxy_main", 2);
|
|
7581
|
+
|
|
7582
|
+
var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports["emscripten_stack_get_base"])();
|
|
7583
|
+
|
|
7584
|
+
var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports["emscripten_stack_get_end"])();
|
|
7585
|
+
|
|
7586
|
+
var __emscripten_run_callback_on_thread = createExportWrapper("_emscripten_run_callback_on_thread", 5);
|
|
7587
|
+
|
|
7588
|
+
var __emscripten_thread_init = createExportWrapper("_emscripten_thread_init", 6);
|
|
7589
|
+
|
|
7590
|
+
var __emscripten_thread_crashed = createExportWrapper("_emscripten_thread_crashed", 0);
|
|
7591
|
+
|
|
7592
|
+
var __emscripten_run_on_main_thread_js = createExportWrapper("_emscripten_run_on_main_thread_js", 5);
|
|
7593
|
+
|
|
7594
|
+
var __emscripten_thread_free_data = createExportWrapper("_emscripten_thread_free_data", 1);
|
|
7595
|
+
|
|
7596
|
+
var __emscripten_thread_exit = createExportWrapper("_emscripten_thread_exit", 1);
|
|
7597
|
+
|
|
7598
|
+
var _strerror = createExportWrapper("strerror", 1);
|
|
7599
|
+
|
|
7600
|
+
var __emscripten_check_mailbox = createExportWrapper("_emscripten_check_mailbox", 0);
|
|
7601
|
+
|
|
7602
|
+
var _sbrk = createExportWrapper("sbrk", 1);
|
|
7603
|
+
|
|
7604
|
+
var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports["emscripten_stack_init"])();
|
|
7605
|
+
|
|
7606
|
+
var _emscripten_stack_set_limits = (a0, a1) => (_emscripten_stack_set_limits = wasmExports["emscripten_stack_set_limits"])(a0, a1);
|
|
7607
|
+
|
|
7608
|
+
var __emscripten_stack_restore = a0 => (__emscripten_stack_restore = wasmExports["_emscripten_stack_restore"])(a0);
|
|
7609
|
+
|
|
7610
|
+
var __emscripten_stack_alloc = a0 => (__emscripten_stack_alloc = wasmExports["_emscripten_stack_alloc"])(a0);
|
|
7611
|
+
|
|
7612
|
+
var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports["emscripten_stack_get_current"])();
|
|
7613
|
+
|
|
7614
|
+
Module["dynCall_vii"] = createExportWrapper("dynCall_vii", 3);
|
|
7615
|
+
|
|
7616
|
+
Module["dynCall_iii"] = createExportWrapper("dynCall_iii", 3);
|
|
7617
|
+
|
|
7618
|
+
Module["dynCall_jjj"] = createExportWrapper("dynCall_jjj", 3);
|
|
7619
|
+
|
|
7620
|
+
Module["dynCall_iiiiiiiii"] = createExportWrapper("dynCall_iiiiiiiii", 9);
|
|
7621
|
+
|
|
7622
|
+
Module["dynCall_iiiiii"] = createExportWrapper("dynCall_iiiiii", 6);
|
|
7623
|
+
|
|
7624
|
+
var dynCall_iiii = Module["dynCall_iiii"] = createExportWrapper("dynCall_iiii", 4);
|
|
7625
|
+
|
|
7626
|
+
Module["dynCall_iiiii"] = createExportWrapper("dynCall_iiiii", 5);
|
|
7627
|
+
|
|
7628
|
+
Module["dynCall_iiiiiii"] = createExportWrapper("dynCall_iiiiiii", 7);
|
|
7629
|
+
|
|
7630
|
+
var dynCall_ii = Module["dynCall_ii"] = createExportWrapper("dynCall_ii", 2);
|
|
7631
|
+
|
|
7632
|
+
Module["dynCall_viiii"] = createExportWrapper("dynCall_viiii", 5);
|
|
7633
|
+
|
|
7634
|
+
Module["dynCall_dd"] = createExportWrapper("dynCall_dd", 2);
|
|
7635
|
+
|
|
7636
|
+
Module["dynCall_ddd"] = createExportWrapper("dynCall_ddd", 3);
|
|
7637
|
+
|
|
7638
|
+
var dynCall_vi = Module["dynCall_vi"] = createExportWrapper("dynCall_vi", 2);
|
|
7639
|
+
|
|
7640
|
+
Module["dynCall_viii"] = createExportWrapper("dynCall_viii", 4);
|
|
7641
|
+
|
|
7642
|
+
Module["dynCall_iiiiiiii"] = createExportWrapper("dynCall_iiiiiiii", 8);
|
|
7643
|
+
|
|
7644
|
+
Module["dynCall_i"] = createExportWrapper("dynCall_i", 1);
|
|
7645
|
+
|
|
7646
|
+
Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji", 4);
|
|
7647
|
+
|
|
7648
|
+
Module["dynCall_v"] = createExportWrapper("dynCall_v", 1);
|
|
7649
|
+
|
|
7650
|
+
Module["dynCall_iidiiii"] = createExportWrapper("dynCall_iidiiii", 7);
|
|
7651
|
+
|
|
7505
7652
|
// include: postamble.js
|
|
7506
7653
|
// === Auto-generated postamble setup entry stuff ===
|
|
7507
7654
|
var calledRun;
|
|
@@ -7518,10 +7665,10 @@ function callMain(args = []) {
|
|
|
7518
7665
|
var argv = stackAlloc((argc + 1) * 4);
|
|
7519
7666
|
var argv_ptr = argv;
|
|
7520
7667
|
args.forEach(arg => {
|
|
7521
|
-
|
|
7668
|
+
SAFE_HEAP_STORE(((argv_ptr) >> 2) * 4, stringToUTF8OnStack(arg), 4);
|
|
7522
7669
|
argv_ptr += 4;
|
|
7523
7670
|
});
|
|
7524
|
-
|
|
7671
|
+
SAFE_HEAP_STORE(((argv_ptr) >> 2) * 4, 0, 4);
|
|
7525
7672
|
try {
|
|
7526
7673
|
var ret = entryFunction(argc, argv);
|
|
7527
7674
|
// if we're not running an evented main loop, it's time to exit
|
|
@@ -7549,7 +7696,7 @@ function run(args = arguments_) {
|
|
|
7549
7696
|
return;
|
|
7550
7697
|
}
|
|
7551
7698
|
if ((ENVIRONMENT_IS_PTHREAD)) {
|
|
7552
|
-
readyPromiseResolve
|
|
7699
|
+
readyPromiseResolve(Module);
|
|
7553
7700
|
initRuntime();
|
|
7554
7701
|
return;
|
|
7555
7702
|
}
|
|
@@ -7569,7 +7716,7 @@ function run(args = arguments_) {
|
|
|
7569
7716
|
if (ABORT) return;
|
|
7570
7717
|
initRuntime();
|
|
7571
7718
|
preMain();
|
|
7572
|
-
readyPromiseResolve
|
|
7719
|
+
readyPromiseResolve(Module);
|
|
7573
7720
|
Module["onRuntimeInitialized"]?.();
|
|
7574
7721
|
consumedModuleProp("onRuntimeInitialized");
|
|
7575
7722
|
var noInitialRun = Module["noInitialRun"] || false;
|
|
@@ -7628,32 +7775,27 @@ function checkUnflushedContent() {
|
|
|
7628
7775
|
}
|
|
7629
7776
|
}
|
|
7630
7777
|
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
if (
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
|
|
7638
|
-
|
|
7639
|
-
run();
|
|
7778
|
+
function preInit() {
|
|
7779
|
+
if (Module["preInit"]) {
|
|
7780
|
+
if (typeof Module["preInit"] == "function") Module["preInit"] = [ Module["preInit"] ];
|
|
7781
|
+
while (Module["preInit"].length > 0) {
|
|
7782
|
+
Module["preInit"].shift()();
|
|
7783
|
+
}
|
|
7784
|
+
}
|
|
7785
|
+
consumedModuleProp("preInit");
|
|
7640
7786
|
}
|
|
7641
7787
|
|
|
7788
|
+
preInit();
|
|
7789
|
+
|
|
7790
|
+
run();
|
|
7791
|
+
|
|
7642
7792
|
// end include: postamble.js
|
|
7643
7793
|
// include: postamble_modularize.js
|
|
7644
7794
|
// In MODULARIZE mode we wrap the generated code in a factory function
|
|
7645
7795
|
// and return either the Module itself, or a promise of the module.
|
|
7646
7796
|
// We assign to the `moduleRtn` global here and configure closure to see
|
|
7647
7797
|
// this as and extern so it won't get minified.
|
|
7648
|
-
|
|
7649
|
-
moduleRtn = Module;
|
|
7650
|
-
} else {
|
|
7651
|
-
// Set up the promise that indicates the Module is initialized
|
|
7652
|
-
moduleRtn = new Promise((resolve, reject) => {
|
|
7653
|
-
readyPromiseResolve = resolve;
|
|
7654
|
-
readyPromiseReject = reject;
|
|
7655
|
-
});
|
|
7656
|
-
}
|
|
7798
|
+
moduleRtn = readyPromise;
|
|
7657
7799
|
|
|
7658
7800
|
// Assertion for attempting to access module properties on the incoming
|
|
7659
7801
|
// moduleArg. In the past we used this object as the prototype of the module
|
|
@@ -7674,13 +7816,10 @@ for (const prop of Object.keys(Module)) {
|
|
|
7674
7816
|
|
|
7675
7817
|
return moduleRtn;
|
|
7676
7818
|
}
|
|
7677
|
-
|
|
7678
|
-
|
|
7679
|
-
// Normally this detection is done when the module is itself run but
|
|
7680
|
-
// when running in MODULARIZE mode we need use this to know if we should
|
|
7681
|
-
// run the module constructor on startup (true only for pthreads).
|
|
7819
|
+
);
|
|
7820
|
+
})();
|
|
7682
7821
|
var isPthread = globalThis.self?.name?.startsWith('em-pthread');
|
|
7683
|
-
|
|
7822
|
+
// When running as a pthread, construct a new instance on startup
|
|
7684
7823
|
isPthread && Module();
|
|
7685
7824
|
|
|
7686
7825
|
export { Module as default };
|