funicular 0.4.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +473 -1
- data/demo/local_notes.html +207 -0
- data/docs/architecture.md +181 -3
- data/docs/local_database.md +1035 -0
- data/lib/funicular/assets/funicular.rb +14 -0
- data/lib/funicular/configuration.rb +65 -0
- data/lib/funicular/epoch_header.rb +69 -0
- data/lib/funicular/epoch_stamping.rb +66 -0
- data/lib/funicular/helpers/picoruby_helper.rb +96 -1
- data/lib/funicular/railtie.rb +30 -0
- data/lib/funicular/schema.rb +45 -12
- data/lib/funicular/session_epoch.rb +110 -0
- data/lib/funicular/ssr/runtime.rb +57 -12
- data/lib/funicular/ssr.rb +25 -0
- data/lib/funicular/testing/node_runner.mjs +19 -0
- data/lib/funicular/testing.rb +47 -0
- data/lib/funicular/vendor/mrbc/VERSION +1 -1
- data/lib/funicular/vendor/mrbc/mrbc.js +82 -124
- data/lib/funicular/vendor/mrbc/mrbc.wasm +0 -0
- data/lib/funicular/vendor/picoruby/VERSION +1 -1
- data/lib/funicular/vendor/picoruby/debug/picoruby.js +241 -126
- data/lib/funicular/vendor/picoruby/debug/picoruby.wasm +0 -0
- data/lib/funicular/vendor/picoruby/dist/picoruby.js +1 -1
- data/lib/funicular/vendor/picoruby/dist/picoruby.wasm +0 -0
- data/lib/funicular/vendor/picoruby-test-node/VERSION +1 -1
- data/lib/funicular/vendor/picoruby-test-node/picoruby.js +2 -7201
- data/lib/funicular/vendor/picoruby-test-node/picoruby.wasm +0 -0
- data/lib/funicular/version.rb +4 -3
- data/lib/funicular.rb +1 -0
- data/lib/tasks/funicular.rake +33 -17
- data/minitest/callback_error_visibility_test.rb +48 -0
- data/minitest/configuration_test.rb +78 -0
- data/minitest/dsl_test.rb +27 -0
- data/minitest/epoch_header_test.rb +149 -0
- data/minitest/epoch_stamping_test.rb +225 -0
- data/minitest/fixtures/funicular_app/components/probe_component.rb +15 -0
- data/minitest/navigation_guard_test.rb +65 -0
- data/minitest/picoruby_helper_test.rb +236 -0
- data/minitest/schema_test.rb +47 -0
- data/minitest/session_epoch_test.rb +122 -0
- data/minitest/ssr_database_test.rb +78 -0
- data/minitest/ssr_reload_test.rb +106 -0
- data/minitest/ssr_test.rb +41 -0
- data/minitest/testing_ensure_compiled_test.rb +52 -0
- data/minitest/validations_test.rb +35 -5
- data/mrbgem.rake +2 -0
- data/mrblib/cable.rb +1 -1
- data/mrblib/component.rb +113 -1
- data/mrblib/db.rb +3116 -0
- data/mrblib/debug.rb +54 -10
- data/mrblib/differ.rb +7 -5
- data/mrblib/file_upload.rb +17 -7
- data/mrblib/funicular.rb +137 -21
- data/mrblib/http.rb +84 -107
- data/mrblib/model.rb +1178 -23
- data/mrblib/patcher.rb +57 -25
- data/mrblib/relation.rb +342 -0
- data/mrblib/router.rb +45 -4
- data/mrblib/styles.rb +20 -0
- data/mrblib/vdom.rb +5 -5
- data/mrblib/version.rb +11 -0
- data/sig/component.rbs +7 -0
- data/sig/db.rbs +328 -0
- data/sig/debug.rbs +5 -0
- data/sig/funicular.rbs +5 -0
- data/sig/http.rbs +8 -21
- data/sig/model.rbs +101 -7
- data/sig/patcher.rbs +1 -0
- data/sig/relation.rbs +44 -0
- data/sig/router.rbs +1 -0
- data/sig/styles.rbs +1 -0
- metadata +21 -3
- data/lib/funicular/vendor/picoruby-test-node/picoruby.wasm.map +0 -1
|
@@ -416,6 +416,8 @@ function initRuntime() {
|
|
|
416
416
|
assert(!runtimeInitialized);
|
|
417
417
|
runtimeInitialized = true;
|
|
418
418
|
|
|
419
|
+
setStackLimits();
|
|
420
|
+
|
|
419
421
|
checkStackCookie();
|
|
420
422
|
|
|
421
423
|
// Begin ATINITS hooks
|
|
@@ -644,36 +646,15 @@ async function createWasm() {
|
|
|
644
646
|
}
|
|
645
647
|
}
|
|
646
648
|
|
|
647
|
-
/** @type {!Int16Array} */
|
|
648
|
-
var HEAP16;
|
|
649
|
-
|
|
650
649
|
/** @type {!Int32Array} */
|
|
651
650
|
var HEAP32;
|
|
652
651
|
|
|
653
|
-
/** not-@type {!BigInt64Array} */
|
|
654
|
-
var HEAP64;
|
|
655
|
-
|
|
656
652
|
/** @type {!Int8Array} */
|
|
657
653
|
var HEAP8;
|
|
658
654
|
|
|
659
|
-
/** @type {!Float32Array} */
|
|
660
|
-
var HEAPF32;
|
|
661
|
-
|
|
662
|
-
/** @type {!Float64Array} */
|
|
663
|
-
var HEAPF64;
|
|
664
|
-
|
|
665
|
-
/** @type {!Uint16Array} */
|
|
666
|
-
var HEAPU16;
|
|
667
|
-
|
|
668
655
|
/** @type {!Uint32Array} */
|
|
669
656
|
var HEAPU32;
|
|
670
657
|
|
|
671
|
-
/** not-@type {!BigUint64Array} */
|
|
672
|
-
var HEAPU64;
|
|
673
|
-
|
|
674
|
-
/** @type {!Uint8Array} */
|
|
675
|
-
var HEAPU8;
|
|
676
|
-
|
|
677
658
|
var callRuntimeCallbacks = (callbacks) => {
|
|
678
659
|
while (callbacks.length > 0) {
|
|
679
660
|
// Pass the module as the first argument.
|
|
@@ -687,26 +668,6 @@ async function createWasm() {
|
|
|
687
668
|
var addOnPreRun = (cb) => onPreRuns.push(cb);
|
|
688
669
|
|
|
689
670
|
|
|
690
|
-
|
|
691
|
-
/**
|
|
692
|
-
* @param {number} ptr
|
|
693
|
-
* @param {string} type
|
|
694
|
-
*/
|
|
695
|
-
function getValue(ptr, type = 'i8') {
|
|
696
|
-
if (type.endsWith('*')) type = '*';
|
|
697
|
-
switch (type) {
|
|
698
|
-
case 'i1': return HEAP8[ptr];
|
|
699
|
-
case 'i8': return HEAP8[ptr];
|
|
700
|
-
case 'i16': return HEAP16[((ptr)>>1)];
|
|
701
|
-
case 'i32': return HEAP32[((ptr)>>2)];
|
|
702
|
-
case 'i64': return HEAP64[((ptr)>>3)];
|
|
703
|
-
case 'float': return HEAPF32[((ptr)>>2)];
|
|
704
|
-
case 'double': return HEAPF64[((ptr)>>3)];
|
|
705
|
-
case '*': return HEAPU32[((ptr)>>2)];
|
|
706
|
-
default: abort(`invalid type for getValue: ${type}`);
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
|
|
710
671
|
var noExitRuntime = true;
|
|
711
672
|
|
|
712
673
|
function ptrToString(ptr) {
|
|
@@ -716,26 +677,11 @@ async function createWasm() {
|
|
|
716
677
|
return '0x' + ptr.toString(16).padStart(8, '0');
|
|
717
678
|
}
|
|
718
679
|
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
*/
|
|
725
|
-
function setValue(ptr, value, type = 'i8') {
|
|
726
|
-
if (type.endsWith('*')) type = '*';
|
|
727
|
-
switch (type) {
|
|
728
|
-
case 'i1': HEAP8[ptr] = value; break;
|
|
729
|
-
case 'i8': HEAP8[ptr] = value; break;
|
|
730
|
-
case 'i16': HEAP16[((ptr)>>1)] = value; break;
|
|
731
|
-
case 'i32': HEAP32[((ptr)>>2)] = value; break;
|
|
732
|
-
case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break;
|
|
733
|
-
case 'float': HEAPF32[((ptr)>>2)] = value; break;
|
|
734
|
-
case 'double': HEAPF64[((ptr)>>3)] = value; break;
|
|
735
|
-
case '*': HEAPU32[((ptr)>>2)] = value; break;
|
|
736
|
-
default: abort(`invalid type for setValue: ${type}`);
|
|
737
|
-
}
|
|
738
|
-
}
|
|
680
|
+
var setStackLimits = () => {
|
|
681
|
+
var stackLow = _emscripten_stack_get_base();
|
|
682
|
+
var stackHigh = _emscripten_stack_get_end();
|
|
683
|
+
___set_stack_limits(stackLow, stackHigh);
|
|
684
|
+
};
|
|
739
685
|
|
|
740
686
|
var stackRestore = (val) => __emscripten_stack_restore(val);
|
|
741
687
|
|
|
@@ -819,6 +765,9 @@ async function createWasm() {
|
|
|
819
765
|
return str;
|
|
820
766
|
};
|
|
821
767
|
|
|
768
|
+
/** @type {!Uint8Array} */
|
|
769
|
+
var HEAPU8;
|
|
770
|
+
|
|
822
771
|
/**
|
|
823
772
|
* Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the
|
|
824
773
|
* emscripten HEAP, returns a copy of that string as a Javascript String object.
|
|
@@ -854,6 +803,16 @@ async function createWasm() {
|
|
|
854
803
|
};
|
|
855
804
|
var ___call_sighandler = (fp, sig) => getWasmTableEntry(fp)(sig);
|
|
856
805
|
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
var ___handle_stack_overflow = (requested) => {
|
|
809
|
+
var base = _emscripten_stack_get_base();
|
|
810
|
+
var end = _emscripten_stack_get_end();
|
|
811
|
+
abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}` +
|
|
812
|
+
`, with stack limits [${ptrToString(end)} - ${ptrToString(base)}` +
|
|
813
|
+
']). If you require more stack space build with -sSTACK_SIZE=<bytes>');
|
|
814
|
+
};
|
|
815
|
+
|
|
857
816
|
var PATH = {
|
|
858
817
|
isAbs:(path) => path.charAt(0) === '/',
|
|
859
818
|
splitPath:(filename) => {
|
|
@@ -1125,12 +1084,15 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1125
1084
|
} catch (e) {
|
|
1126
1085
|
throw new FS.ErrnoError(29);
|
|
1127
1086
|
}
|
|
1128
|
-
if (result === undefined && bytesRead
|
|
1087
|
+
if (result === undefined && !bytesRead) {
|
|
1129
1088
|
throw new FS.ErrnoError(6);
|
|
1130
1089
|
}
|
|
1131
1090
|
if (result === null || result === undefined) break;
|
|
1132
1091
|
bytesRead++;
|
|
1133
1092
|
buffer[offset+i] = result;
|
|
1093
|
+
// We currently only support canonical mode (ICANON), where
|
|
1094
|
+
// read(2) returns as soon as a line delimiter is read.
|
|
1095
|
+
if (result === 10) break;
|
|
1134
1096
|
}
|
|
1135
1097
|
if (bytesRead) {
|
|
1136
1098
|
stream.node.atime = Date.now();
|
|
@@ -1225,6 +1187,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1225
1187
|
if (ptr) zeroMemory(ptr, size);
|
|
1226
1188
|
return ptr;
|
|
1227
1189
|
};
|
|
1190
|
+
|
|
1228
1191
|
var MEMFS = {
|
|
1229
1192
|
ops_table:null,
|
|
1230
1193
|
mount(mount) {
|
|
@@ -1368,7 +1331,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1368
1331
|
return attr;
|
|
1369
1332
|
},
|
|
1370
1333
|
setattr(node, attr) {
|
|
1371
|
-
for (const key of [
|
|
1334
|
+
for (const key of ['mode', 'atime', 'mtime', 'ctime']) {
|
|
1372
1335
|
if (attr[key] != null) {
|
|
1373
1336
|
node[key] = attr[key];
|
|
1374
1337
|
}
|
|
@@ -1454,10 +1417,10 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1454
1417
|
node.mtime = node.ctime = Date.now();
|
|
1455
1418
|
|
|
1456
1419
|
if (canOwn) {
|
|
1457
|
-
assert(position
|
|
1420
|
+
assert(!position, 'canOwn must imply no weird position inside the file');
|
|
1458
1421
|
node.contents = buffer.subarray(offset, offset + length);
|
|
1459
1422
|
node.usedBytes = length;
|
|
1460
|
-
} else if (node.usedBytes
|
|
1423
|
+
} else if (!node.usedBytes && !position) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.
|
|
1461
1424
|
node.contents = buffer.slice(offset, offset + length);
|
|
1462
1425
|
node.usedBytes = length;
|
|
1463
1426
|
} else {
|
|
@@ -1745,7 +1708,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1745
1708
|
assert(id, 'addRunDependency requires an ID')
|
|
1746
1709
|
assert(!runDependencyTracking[id]);
|
|
1747
1710
|
runDependencyTracking[id] = 1;
|
|
1748
|
-
if (runDependencyWatcher
|
|
1711
|
+
if (!runDependencyWatcher && globalThis.setInterval) {
|
|
1749
1712
|
// Check for missing dependencies every few seconds
|
|
1750
1713
|
runDependencyWatcher = setInterval(() => {
|
|
1751
1714
|
if (ABORT) {
|
|
@@ -1809,6 +1772,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
1809
1772
|
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
|
|
1810
1773
|
FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror);
|
|
1811
1774
|
};
|
|
1775
|
+
|
|
1812
1776
|
var FS = {
|
|
1813
1777
|
root:null,
|
|
1814
1778
|
mounts:[],
|
|
@@ -2800,7 +2764,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
2800
2764
|
});
|
|
2801
2765
|
},
|
|
2802
2766
|
open(path, flags, mode = 0o666) {
|
|
2803
|
-
if (path ===
|
|
2767
|
+
if (path === '') {
|
|
2804
2768
|
throw new FS.ErrnoError(44);
|
|
2805
2769
|
}
|
|
2806
2770
|
flags = FS_modeStringToFlags(flags);
|
|
@@ -2814,7 +2778,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
2814
2778
|
if (typeof path == 'object') {
|
|
2815
2779
|
node = path;
|
|
2816
2780
|
} else {
|
|
2817
|
-
isDirPath = path.endsWith(
|
|
2781
|
+
isDirPath = path.endsWith('/');
|
|
2818
2782
|
// noent_okay makes it so that if the final component of the path
|
|
2819
2783
|
// doesn't exist, lookupPath returns `node: undefined`. `path` will be
|
|
2820
2784
|
// updated to point to the target of all symlinks.
|
|
@@ -2996,8 +2960,8 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
2996
2960
|
// to write to file opened in read-only mode with MAP_PRIVATE flag,
|
|
2997
2961
|
// as all modifications will be visible only in the memory of
|
|
2998
2962
|
// the current process.
|
|
2999
|
-
if ((prot & 2)
|
|
3000
|
-
&& (flags & 2)
|
|
2963
|
+
if ((prot & 2)
|
|
2964
|
+
&& !(flags & 2)
|
|
3001
2965
|
&& (stream.flags & 2097155) !== 2) {
|
|
3002
2966
|
throw new FS.ErrnoError(2);
|
|
3003
2967
|
}
|
|
@@ -3090,7 +3054,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3090
3054
|
// use a buffer to avoid overhead of individual crypto calls per byte
|
|
3091
3055
|
var randomBuffer = new Uint8Array(1024), randomLeft = 0;
|
|
3092
3056
|
var randomByte = () => {
|
|
3093
|
-
if (randomLeft
|
|
3057
|
+
if (!randomLeft) {
|
|
3094
3058
|
randomFill(randomBuffer);
|
|
3095
3059
|
randomLeft = randomBuffer.byteLength;
|
|
3096
3060
|
}
|
|
@@ -3306,7 +3270,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3306
3270
|
} catch (e) {
|
|
3307
3271
|
throw new FS.ErrnoError(29);
|
|
3308
3272
|
}
|
|
3309
|
-
if (result === undefined && bytesRead
|
|
3273
|
+
if (result === undefined && !bytesRead) {
|
|
3310
3274
|
throw new FS.ErrnoError(6);
|
|
3311
3275
|
}
|
|
3312
3276
|
if (result === null || result === undefined) break;
|
|
@@ -3337,7 +3301,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3337
3301
|
forceLoadFile(obj) {
|
|
3338
3302
|
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
|
|
3339
3303
|
if (globalThis.XMLHttpRequest) {
|
|
3340
|
-
abort(
|
|
3304
|
+
abort('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.');
|
|
3341
3305
|
} else { // Command-line.
|
|
3342
3306
|
try {
|
|
3343
3307
|
obj.contents = readBinary(obj.url);
|
|
@@ -3368,11 +3332,11 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3368
3332
|
var xhr = new XMLHttpRequest();
|
|
3369
3333
|
xhr.open('HEAD', url, false);
|
|
3370
3334
|
xhr.send(null);
|
|
3371
|
-
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(
|
|
3372
|
-
var datalength = Number(xhr.getResponseHeader(
|
|
3335
|
+
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`);
|
|
3336
|
+
var datalength = Number(xhr.getResponseHeader('Content-length'));
|
|
3373
3337
|
var header;
|
|
3374
|
-
var hasByteServing = (header = xhr.getResponseHeader(
|
|
3375
|
-
var usesGzip = (header = xhr.getResponseHeader(
|
|
3338
|
+
var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';
|
|
3339
|
+
var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';
|
|
3376
3340
|
|
|
3377
3341
|
var chunkSize = 1024*1024; // Chunk size in bytes
|
|
3378
3342
|
|
|
@@ -3386,7 +3350,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3386
3350
|
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
|
|
3387
3351
|
var xhr = new XMLHttpRequest();
|
|
3388
3352
|
xhr.open('GET', url, false);
|
|
3389
|
-
if (datalength !== chunkSize) xhr.setRequestHeader(
|
|
3353
|
+
if (datalength !== chunkSize) xhr.setRequestHeader('Range', `bytes=${from}-${to}`);
|
|
3390
3354
|
|
|
3391
3355
|
// Some hints to the browser that we want binary data.
|
|
3392
3356
|
xhr.responseType = 'arraybuffer';
|
|
@@ -3395,7 +3359,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3395
3359
|
}
|
|
3396
3360
|
|
|
3397
3361
|
xhr.send(null);
|
|
3398
|
-
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(
|
|
3362
|
+
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`);
|
|
3399
3363
|
if (xhr.response !== undefined) {
|
|
3400
3364
|
return new Uint8Array(/** @type{Array<number>} */(xhr.response || []));
|
|
3401
3365
|
}
|
|
@@ -3418,7 +3382,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3418
3382
|
chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file
|
|
3419
3383
|
datalength = this.getter(0).length;
|
|
3420
3384
|
chunkSize = datalength;
|
|
3421
|
-
out(
|
|
3385
|
+
out('LazyFiles on gzip forces download of the whole file when length is accessed');
|
|
3422
3386
|
}
|
|
3423
3387
|
|
|
3424
3388
|
this._length = datalength;
|
|
@@ -3508,6 +3472,12 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3508
3472
|
},
|
|
3509
3473
|
};
|
|
3510
3474
|
|
|
3475
|
+
|
|
3476
|
+
|
|
3477
|
+
|
|
3478
|
+
|
|
3479
|
+
/** not-@type {!BigInt64Array} */
|
|
3480
|
+
var HEAP64;
|
|
3511
3481
|
var SYSCALLS = {
|
|
3512
3482
|
currentUmask:18,
|
|
3513
3483
|
calculateAt(dirfd, path, allowEmpty) {
|
|
@@ -3655,6 +3625,9 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3655
3625
|
var syscallGetVarargP = syscallGetVarargI;
|
|
3656
3626
|
|
|
3657
3627
|
|
|
3628
|
+
|
|
3629
|
+
/** @type {!Int16Array} */
|
|
3630
|
+
var HEAP16;
|
|
3658
3631
|
function ___syscall_fcntl64(fd, cmd, varargs) {
|
|
3659
3632
|
SYSCALLS.varargs = varargs;
|
|
3660
3633
|
try {
|
|
@@ -3739,6 +3712,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3739
3712
|
}
|
|
3740
3713
|
|
|
3741
3714
|
|
|
3715
|
+
|
|
3742
3716
|
var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {
|
|
3743
3717
|
assert(typeof maxBytesToWrite == 'number', 'stringToUTF8 requires a third parameter that specifies the length of the output buffer');
|
|
3744
3718
|
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
|
@@ -3746,7 +3720,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3746
3720
|
function ___syscall_getcwd(buf, size) {
|
|
3747
3721
|
try {
|
|
3748
3722
|
|
|
3749
|
-
if (size
|
|
3723
|
+
if (!size) return -28;
|
|
3750
3724
|
var cwd = FS.cwd();
|
|
3751
3725
|
var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;
|
|
3752
3726
|
if (size < cwdLengthInBytes) return -68;
|
|
@@ -3760,6 +3734,9 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3760
3734
|
|
|
3761
3735
|
|
|
3762
3736
|
|
|
3737
|
+
|
|
3738
|
+
|
|
3739
|
+
|
|
3763
3740
|
function ___syscall_getdents64(fd, dirp, count) {
|
|
3764
3741
|
try {
|
|
3765
3742
|
|
|
@@ -3821,6 +3798,9 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3821
3798
|
|
|
3822
3799
|
|
|
3823
3800
|
|
|
3801
|
+
|
|
3802
|
+
|
|
3803
|
+
|
|
3824
3804
|
function ___syscall_ioctl(fd, op, varargs) {
|
|
3825
3805
|
SYSCALLS.varargs = varargs;
|
|
3826
3806
|
try {
|
|
@@ -3981,6 +3961,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
3981
3961
|
}
|
|
3982
3962
|
|
|
3983
3963
|
|
|
3964
|
+
|
|
3984
3965
|
var PIPEFS = {
|
|
3985
3966
|
BUCKET_BUFFER_SIZE:8192,
|
|
3986
3967
|
mount(mount) {
|
|
@@ -4240,17 +4221,17 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4240
4221
|
// When the last write end closes, wake any poll/epoll waiter on the read
|
|
4241
4222
|
// end with POLLHUP so a reader blocked on the writer dropping unblocks.
|
|
4242
4223
|
if ((stream.flags & 2097155) === 1) {
|
|
4243
|
-
if (
|
|
4224
|
+
if (!--pipe.writerCount) {
|
|
4244
4225
|
pipe.writeClosed = true;
|
|
4245
4226
|
pipe.readNode.notifyListeners(16 | 64 | 1);
|
|
4246
4227
|
}
|
|
4247
|
-
} else if (
|
|
4228
|
+
} else if (!--pipe.readerCount) {
|
|
4248
4229
|
// Mirror: when the last read end closes, wake any poll/epoll waiter on
|
|
4249
4230
|
// the write end with POLLERR (a further write would get EPIPE).
|
|
4250
4231
|
pipe.readClosed = true;
|
|
4251
4232
|
pipe.writeNode.notifyListeners(8 | 256 | 4);
|
|
4252
4233
|
}
|
|
4253
|
-
if (pipe.readerCount
|
|
4234
|
+
if (!pipe.readerCount && !pipe.writerCount) {
|
|
4254
4235
|
pipe.buckets = null;
|
|
4255
4236
|
}
|
|
4256
4237
|
},
|
|
@@ -4262,6 +4243,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4262
4243
|
return 'pipe[' + (PIPEFS.nextname.current++) + ']';
|
|
4263
4244
|
},
|
|
4264
4245
|
};
|
|
4246
|
+
|
|
4265
4247
|
function ___syscall_pipe2(fdPtr, flags) {
|
|
4266
4248
|
try {
|
|
4267
4249
|
|
|
@@ -4296,11 +4278,11 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4296
4278
|
if (!stream) return 32;
|
|
4297
4279
|
// Streams without a poll handler (regular files, incl. NODERAWFS/NODEFS
|
|
4298
4280
|
// which leave stream_ops unset) are treated as always readable+writable.
|
|
4299
|
-
var flags = stream.stream_ops?.poll
|
|
4300
|
-
? stream.stream_ops.poll(stream)
|
|
4301
|
-
: 5;
|
|
4281
|
+
var flags = stream.stream_ops?.poll?.(stream) ?? 5;
|
|
4302
4282
|
return flags & (events | 8 | 16 | 32);
|
|
4303
4283
|
};
|
|
4284
|
+
|
|
4285
|
+
|
|
4304
4286
|
var doPollSync = (fds, nfds) => {
|
|
4305
4287
|
var count = 0;
|
|
4306
4288
|
for (var i = 0, pollfd = fds; i < nfds; i++, pollfd += 8) {
|
|
@@ -4338,6 +4320,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4338
4320
|
|
|
4339
4321
|
|
|
4340
4322
|
|
|
4323
|
+
|
|
4341
4324
|
function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
|
|
4342
4325
|
try {
|
|
4343
4326
|
|
|
@@ -4475,6 +4458,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4475
4458
|
return yday;
|
|
4476
4459
|
};
|
|
4477
4460
|
|
|
4461
|
+
|
|
4478
4462
|
function __localtime_js(time, tmPtr) {
|
|
4479
4463
|
time = bigintToI53Checked(time);
|
|
4480
4464
|
|
|
@@ -4506,6 +4490,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4506
4490
|
}
|
|
4507
4491
|
|
|
4508
4492
|
|
|
4493
|
+
|
|
4509
4494
|
var __mktime_js = function(tmPtr) {
|
|
4510
4495
|
|
|
4511
4496
|
var ret = (() => {
|
|
@@ -4579,6 +4564,8 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4579
4564
|
}
|
|
4580
4565
|
|
|
4581
4566
|
|
|
4567
|
+
|
|
4568
|
+
|
|
4582
4569
|
var __tzset_js = (timezone, daylight, std_name, dst_name) => {
|
|
4583
4570
|
// TODO: Use (malleable) environment variables instead of system settings.
|
|
4584
4571
|
var currentYear = new Date().getFullYear();
|
|
@@ -4607,11 +4594,11 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4607
4594
|
var extractZone = (timezoneOffset) => {
|
|
4608
4595
|
// Why inverse sign?
|
|
4609
4596
|
// Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
|
|
4610
|
-
var sign = timezoneOffset >= 0 ?
|
|
4597
|
+
var sign = timezoneOffset >= 0 ? '-' : '+';
|
|
4611
4598
|
|
|
4612
4599
|
var absOffset = Math.abs(timezoneOffset)
|
|
4613
|
-
var hours = String(Math.floor(absOffset / 60)).padStart(2,
|
|
4614
|
-
var minutes = String(absOffset % 60).padStart(2,
|
|
4600
|
+
var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');
|
|
4601
|
+
var minutes = String(absOffset % 60).padStart(2, '0');
|
|
4615
4602
|
|
|
4616
4603
|
return `UTC${sign}${hours}${minutes}`;
|
|
4617
4604
|
}
|
|
@@ -4639,6 +4626,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4639
4626
|
|
|
4640
4627
|
var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;
|
|
4641
4628
|
|
|
4629
|
+
|
|
4642
4630
|
function _clock_time_get(clk_id, ignored_precision, ptime) {
|
|
4643
4631
|
ignored_precision = bigintToI53Checked(ignored_precision);
|
|
4644
4632
|
|
|
@@ -4663,6 +4651,13 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4663
4651
|
}
|
|
4664
4652
|
|
|
4665
4653
|
var readEmAsmArgsArray = [];
|
|
4654
|
+
|
|
4655
|
+
|
|
4656
|
+
|
|
4657
|
+
|
|
4658
|
+
/** @type {!Float64Array} */
|
|
4659
|
+
var HEAPF64;
|
|
4660
|
+
|
|
4666
4661
|
var readEmAsmArgs = (sigPtr, buf) => {
|
|
4667
4662
|
// Nobody should have mutated _readEmAsmArgsArray underneath us to be something else than an array.
|
|
4668
4663
|
assert(Array.isArray(readEmAsmArgsArray));
|
|
@@ -4728,9 +4723,10 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4728
4723
|
} catch(e) {
|
|
4729
4724
|
err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`);
|
|
4730
4725
|
}
|
|
4731
|
-
// implicit 0 return to save code size (caller will cast
|
|
4726
|
+
// implicit 0 return to save code size (caller will cast 'undefined' into 0
|
|
4732
4727
|
// anyhow)
|
|
4733
4728
|
};
|
|
4729
|
+
|
|
4734
4730
|
var _emscripten_resize_heap = (requestedSize) => {
|
|
4735
4731
|
var oldSize = HEAPU8.length;
|
|
4736
4732
|
// With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
|
|
@@ -4818,6 +4814,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4818
4814
|
return getEnvStrings.strings;
|
|
4819
4815
|
};
|
|
4820
4816
|
|
|
4817
|
+
|
|
4821
4818
|
var _environ_get = (__environ, environ_buf) => {
|
|
4822
4819
|
var bufSize = 0;
|
|
4823
4820
|
var envp = 0;
|
|
@@ -4831,6 +4828,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4831
4828
|
};
|
|
4832
4829
|
|
|
4833
4830
|
|
|
4831
|
+
|
|
4834
4832
|
var _environ_sizes_get = (penviron_count, penviron_buf_size) => {
|
|
4835
4833
|
var strings = getEnvStrings();
|
|
4836
4834
|
HEAPU32[((penviron_count)>>2)] = strings.length;
|
|
@@ -4883,6 +4881,9 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4883
4881
|
}
|
|
4884
4882
|
|
|
4885
4883
|
|
|
4884
|
+
|
|
4885
|
+
|
|
4886
|
+
|
|
4886
4887
|
function _fd_fdstat_get(fd, pbuf) {
|
|
4887
4888
|
try {
|
|
4888
4889
|
|
|
@@ -4910,6 +4911,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4910
4911
|
}
|
|
4911
4912
|
|
|
4912
4913
|
|
|
4914
|
+
|
|
4913
4915
|
/** @param {number=} offset */
|
|
4914
4916
|
var doReadv = (stream, iov, iovcnt, offset) => {
|
|
4915
4917
|
var ret = 0;
|
|
@@ -4940,6 +4942,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4940
4942
|
};
|
|
4941
4943
|
|
|
4942
4944
|
|
|
4945
|
+
|
|
4943
4946
|
function _fd_pread(fd, iov, iovcnt, offset, pnum) {
|
|
4944
4947
|
offset = bigintToI53Checked(offset);
|
|
4945
4948
|
|
|
@@ -4958,6 +4961,8 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4958
4961
|
;
|
|
4959
4962
|
}
|
|
4960
4963
|
|
|
4964
|
+
|
|
4965
|
+
|
|
4961
4966
|
/** @param {number=} offset */
|
|
4962
4967
|
var doWritev = (stream, iov, iovcnt, offset) => {
|
|
4963
4968
|
// Gather all iovecs into one contiguous buffer and issue a single
|
|
@@ -4984,6 +4989,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
4984
4989
|
};
|
|
4985
4990
|
|
|
4986
4991
|
|
|
4992
|
+
|
|
4987
4993
|
function _fd_pwrite(fd, iov, iovcnt, offset, pnum) {
|
|
4988
4994
|
offset = bigintToI53Checked(offset);
|
|
4989
4995
|
|
|
@@ -5003,6 +5009,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5003
5009
|
}
|
|
5004
5010
|
|
|
5005
5011
|
|
|
5012
|
+
|
|
5006
5013
|
function _fd_read(fd, iov, iovcnt, pnum) {
|
|
5007
5014
|
try {
|
|
5008
5015
|
|
|
@@ -5018,6 +5025,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5018
5025
|
|
|
5019
5026
|
|
|
5020
5027
|
|
|
5028
|
+
|
|
5021
5029
|
function _fd_seek(fd, offset, whence, newOffset) {
|
|
5022
5030
|
offset = bigintToI53Checked(offset);
|
|
5023
5031
|
|
|
@@ -5028,7 +5036,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5028
5036
|
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
5029
5037
|
FS.llseek(stream, offset, whence);
|
|
5030
5038
|
HEAP64[((newOffset)>>3)] = BigInt(stream.position);
|
|
5031
|
-
if (stream.getdents && offset
|
|
5039
|
+
if (stream.getdents && !offset && whence === 0) stream.getdents = null; // reset readdir state
|
|
5032
5040
|
return 0;
|
|
5033
5041
|
} catch (e) {
|
|
5034
5042
|
if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
|
|
@@ -5051,6 +5059,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5051
5059
|
|
|
5052
5060
|
|
|
5053
5061
|
|
|
5062
|
+
|
|
5054
5063
|
function _fd_write(fd, iov, iovcnt, pnum) {
|
|
5055
5064
|
try {
|
|
5056
5065
|
|
|
@@ -5067,6 +5076,74 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5067
5076
|
|
|
5068
5077
|
|
|
5069
5078
|
|
|
5079
|
+
|
|
5080
|
+
|
|
5081
|
+
|
|
5082
|
+
|
|
5083
|
+
|
|
5084
|
+
|
|
5085
|
+
|
|
5086
|
+
|
|
5087
|
+
|
|
5088
|
+
|
|
5089
|
+
|
|
5090
|
+
|
|
5091
|
+
|
|
5092
|
+
|
|
5093
|
+
|
|
5094
|
+
|
|
5095
|
+
|
|
5096
|
+
|
|
5097
|
+
|
|
5098
|
+
|
|
5099
|
+
|
|
5100
|
+
|
|
5101
|
+
|
|
5102
|
+
|
|
5103
|
+
|
|
5104
|
+
|
|
5105
|
+
|
|
5106
|
+
|
|
5107
|
+
|
|
5108
|
+
|
|
5109
|
+
|
|
5110
|
+
|
|
5111
|
+
|
|
5112
|
+
|
|
5113
|
+
|
|
5114
|
+
|
|
5115
|
+
|
|
5116
|
+
|
|
5117
|
+
|
|
5118
|
+
/** @type {!Uint16Array} */
|
|
5119
|
+
var HEAPU16;
|
|
5120
|
+
|
|
5121
|
+
|
|
5122
|
+
|
|
5123
|
+
/** @type {!Float32Array} */
|
|
5124
|
+
var HEAPF32;
|
|
5125
|
+
|
|
5126
|
+
|
|
5127
|
+
|
|
5128
|
+
/** not-@type {!BigUint64Array} */
|
|
5129
|
+
var HEAPU64;
|
|
5130
|
+
|
|
5131
|
+
|
|
5132
|
+
|
|
5133
|
+
|
|
5134
|
+
|
|
5135
|
+
|
|
5136
|
+
|
|
5137
|
+
|
|
5138
|
+
|
|
5139
|
+
|
|
5140
|
+
|
|
5141
|
+
|
|
5142
|
+
|
|
5143
|
+
|
|
5144
|
+
|
|
5145
|
+
|
|
5146
|
+
|
|
5070
5147
|
var getCFunc = (ident) => {
|
|
5071
5148
|
var func = Module['_' + ident]; // closure exported function
|
|
5072
5149
|
assert(func, `Cannot call unknown function ${ident}, make sure it is exported`);
|
|
@@ -5131,7 +5208,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5131
5208
|
for (var i = 0; i < args.length; i++) {
|
|
5132
5209
|
var converter = toC[argTypes[i]];
|
|
5133
5210
|
if (converter) {
|
|
5134
|
-
if (stack
|
|
5211
|
+
if (!stack) stack = stackSave();
|
|
5135
5212
|
cArgs[i] = converter(args[i]);
|
|
5136
5213
|
} else {
|
|
5137
5214
|
cArgs[i] = args[i];
|
|
@@ -5140,7 +5217,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
|
5140
5217
|
}
|
|
5141
5218
|
var ret = func(...cArgs);
|
|
5142
5219
|
function onDone(ret) {
|
|
5143
|
-
if (stack
|
|
5220
|
+
if (stack) stackRestore(stack);
|
|
5144
5221
|
return convertReturnValue(ret);
|
|
5145
5222
|
}
|
|
5146
5223
|
|
|
@@ -5269,6 +5346,8 @@ if (Module['printErr']) err = Module['printErr'];
|
|
|
5269
5346
|
'getFunctionAddress',
|
|
5270
5347
|
'addFunction',
|
|
5271
5348
|
'removeFunction',
|
|
5349
|
+
'setValue',
|
|
5350
|
+
'getValue',
|
|
5272
5351
|
'intArrayToString',
|
|
5273
5352
|
'AsciiToString',
|
|
5274
5353
|
'stringToAscii',
|
|
@@ -5337,10 +5416,6 @@ if (Module['printErr']) err = Module['printErr'];
|
|
|
5337
5416
|
'addPromise',
|
|
5338
5417
|
'idsToPromises',
|
|
5339
5418
|
'makePromiseCallback',
|
|
5340
|
-
'ExceptionInfo',
|
|
5341
|
-
'findMatchingCatch',
|
|
5342
|
-
'incrementUncaughtExceptionCount',
|
|
5343
|
-
'decrementUncaughtExceptionCount',
|
|
5344
5419
|
'Browser_asyncPrepareDataCounter',
|
|
5345
5420
|
'arraySum',
|
|
5346
5421
|
'addDays',
|
|
@@ -5371,14 +5446,10 @@ if (Module['printErr']) err = Module['printErr'];
|
|
|
5371
5446
|
'writeGLArray',
|
|
5372
5447
|
'registerWebGlEventCallback',
|
|
5373
5448
|
'runAndAbortIfError',
|
|
5374
|
-
'ALLOC_NORMAL',
|
|
5375
|
-
'ALLOC_STACK',
|
|
5376
|
-
'allocate',
|
|
5377
5449
|
'writeStringToMemory',
|
|
5378
5450
|
'writeAsciiToMemory',
|
|
5379
5451
|
'allocateUTF8',
|
|
5380
5452
|
'allocateUTF8OnStack',
|
|
5381
|
-
'demangle',
|
|
5382
5453
|
'stackTrace',
|
|
5383
5454
|
'getNativeTypeSize',
|
|
5384
5455
|
];
|
|
@@ -5414,6 +5485,7 @@ missingLibrarySymbols.forEach(missingLibrarySymbol)
|
|
|
5414
5485
|
'getHeapMax',
|
|
5415
5486
|
'growMemory',
|
|
5416
5487
|
'ENV',
|
|
5488
|
+
'setStackLimits',
|
|
5417
5489
|
'ERRNO_CODES',
|
|
5418
5490
|
'strError',
|
|
5419
5491
|
'DNS',
|
|
@@ -5439,8 +5511,6 @@ missingLibrarySymbols.forEach(missingLibrarySymbol)
|
|
|
5439
5511
|
'addOnPostRun',
|
|
5440
5512
|
'freeTableIndexes',
|
|
5441
5513
|
'functionsInTableMap',
|
|
5442
|
-
'setValue',
|
|
5443
|
-
'getValue',
|
|
5444
5514
|
'PATH',
|
|
5445
5515
|
'PATH_FS',
|
|
5446
5516
|
'UTF8Decoder',
|
|
@@ -5466,11 +5536,8 @@ missingLibrarySymbols.forEach(missingLibrarySymbol)
|
|
|
5466
5536
|
'emClearImmediate_deps',
|
|
5467
5537
|
'emClearImmediate',
|
|
5468
5538
|
'promiseMap',
|
|
5469
|
-
'uncaughtExceptionCount',
|
|
5470
|
-
'exceptionCaught',
|
|
5471
5539
|
'Browser',
|
|
5472
5540
|
'requestFullscreen',
|
|
5473
|
-
'requestFullScreen',
|
|
5474
5541
|
'setCanvasSize',
|
|
5475
5542
|
'getUserMedia',
|
|
5476
5543
|
'createContext',
|
|
@@ -5658,20 +5725,20 @@ function checkIncomingModuleAPI() {
|
|
|
5658
5725
|
ignoredModuleProp('wasmBinary');
|
|
5659
5726
|
}
|
|
5660
5727
|
var ASM_CONSTS = {
|
|
5661
|
-
|
|
5662
|
-
|
|
5663
|
-
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
|
|
5668
|
-
|
|
5728
|
+
2846285: ($0) => { globalThis.picorubyRefs[$0] = null; },
|
|
5729
|
+
2846325: ($0) => { globalThis.picorubyRefs[$0] = true; },
|
|
5730
|
+
2846365: ($0) => { globalThis.picorubyRefs[$0] = false; },
|
|
5731
|
+
2846406: ($0, $1) => { globalThis.picorubyRefs[$0] = $1; },
|
|
5732
|
+
2846444: ($0, $1) => { globalThis.picorubyRefs[$0] = $1; },
|
|
5733
|
+
2846482: ($0, $1, $2) => { const str = UTF8ToString($1, $2); globalThis.picorubyRefs[$0] = str; },
|
|
5734
|
+
2846555: ($0, $1) => { const arr = globalThis.picorubyRefs[$0]; const elem = globalThis.picorubyRefs[$1]; arr.push(elem); delete globalThis.picorubyRefs[$1]; },
|
|
5735
|
+
2846694: ($0, $1, $2) => { const obj = globalThis.picorubyRefs[$0]; const key = UTF8ToString($1); const val = globalThis.picorubyRefs[$2]; obj[key] = val; delete globalThis.picorubyRefs[$2]; }
|
|
5669
5736
|
};
|
|
5670
5737
|
function ble_dataview_length(ref_id) { try { const dv = globalThis.picorubyRefs[ref_id]; if (dv && dv.byteLength !== undefined) { return dv.byteLength; } return 0; } catch(e) { console.error('ble_dataview_length failed:', e); return 0; } }
|
|
5671
5738
|
function ble_dataview_read(ref_id,out_buf,max_len) { try { const dv = globalThis.picorubyRefs[ref_id]; if (!dv) return 0; const len = Math.min(dv.byteLength, max_len); for (let i = 0; i < len; i++) { HEAPU8[out_buf + i] = dv.getUint8(i); } return len; } catch(e) { console.error('ble_dataview_read failed:', e); return 0; } }
|
|
5672
5739
|
function ble_create_uint8array(data,length) { try { const buffer = new Uint8Array(HEAPU8.buffer, data, length); const copy = new Uint8Array(buffer); const refId = globalThis.picorubyRefs.push(copy) - 1; return refId; } catch(e) { console.error('ble_create_uint8array failed:', e); return -1; } }
|
|
5673
|
-
function ble_set_notify_handler(char_ref_id,callback_id) { try { const char_obj = globalThis.picorubyRefs[char_ref_id]; char_obj.
|
|
5674
|
-
function init_js_refs() { if (typeof globalThis.picorubyRefs === 'undefined') { globalThis.picorubyRefs = []; const rootObject = typeof window !== 'undefined' ? window : globalThis; globalThis.picorubyRefs.push(rootObject); } if (typeof window !== 'undefined' && typeof window._js_remove_event_listener_wrapper === 'undefined') { window._js_remove_event_listener_wrapper = function(callback_id) { if (!globalThis.picorubyEventHandlers) return false; const info = globalThis.picorubyEventHandlers[callback_id]; if (!info) return false; info.target.removeEventListener(info.type, info.handler); delete globalThis.picorubyEventHandlers[callback_id]; return true; }; } }
|
|
5740
|
+
function ble_set_notify_handler(char_ref_id,callback_id) { try { const char_obj = globalThis.picorubyRefs[char_ref_id]; if (char_obj.__picorbNotifyListener) { char_obj.removeEventListener('characteristicvaluechanged', char_obj.__picorbNotifyListener); } const listener = (event) => { const dataview = event.target.value; const len = dataview.byteLength; const ptr = _malloc(len); for (let i = 0; i < len; i++) { HEAPU8[ptr + i] = dataview.getUint8(i); } ccall( 'ble_notify_callback', 'void', ['number', 'number', 'number'], [callback_id, ptr, len] ); _free(ptr); }; char_obj.__picorbNotifyListener = listener; char_obj.addEventListener('characteristicvaluechanged', listener); } catch(e) { console.error('ble_set_notify_handler failed:', e); } }
|
|
5741
|
+
function init_js_refs() { if (typeof globalThis.picorubyRefs === 'undefined') { globalThis.picorubyRefs = []; const rootObject = typeof window !== 'undefined' ? window : globalThis; globalThis.picorubyRefs.push(rootObject); } if (typeof window !== 'undefined' && typeof window._js_remove_event_listener_wrapper === 'undefined') { window._js_remove_event_listener_wrapper = function(callback_id) { if (!globalThis.picorubyEventHandlers) return false; const info = globalThis.picorubyEventHandlers[callback_id]; if (!info) return false; info.target.removeEventListener(info.type, info.handler, !!info.capture); delete globalThis.picorubyEventHandlers[callback_id]; return true; }; } }
|
|
5675
5742
|
function js_last_error_length() { const message = globalThis.picorubyLastError; return message ? lengthBytesUTF8(message) : 0; }
|
|
5676
5743
|
function js_copy_last_error(buffer,buffer_size) { const message = globalThis.picorubyLastError; if (!message) { globalThis.picorubyLastError = null; return; } stringToUTF8(message, buffer, buffer_size); globalThis.picorubyLastError = null; }
|
|
5677
5744
|
function is_array_like(ref_id) { const obj = globalThis.picorubyRefs[ref_id]; const isNodeList = typeof NodeList !== 'undefined' && obj instanceof NodeList; const isHTMLCollection = typeof HTMLCollection !== 'undefined' && obj instanceof HTMLCollection; return isNodeList || isHTMLCollection || (typeof obj === 'object' && obj !== null && 'length' in obj && typeof obj.length === 'number'); }
|
|
@@ -5705,12 +5772,12 @@ function call_constructor_with_args(ref_id,args_json,args_json_len) { globalThis
|
|
|
5705
5772
|
function js_function_apply_args(func_ref_id,args_json,args_json_len) { globalThis.picorubyLastError = null; try { const fn = globalThis.picorubyRefs[func_ref_id]; if (typeof fn !== 'function') { console.error('js_function_apply_args: not a function'); return -1; } const argsData = JSON.parse(UTF8ToString(args_json, args_json_len)); if (!Array.isArray(argsData)) { console.error('js_function_apply_args: args_json must be a JSON array'); return -1; } const args = argsData.map(arg => { switch (arg.type) { case 'string': case 'integer': case 'float': case 'boolean': return arg.value; case 'ref': return globalThis.picorubyRefs[arg.value]; case 'nil': return null; default: return null; } }); const result = fn(...args); const newRefId = globalThis.picorubyRefs.length; globalThis.picorubyRefs.push(result); return newRefId; } catch(e) { globalThis.picorubyLastError = e && typeof e.message === 'string' ? e.message : String(e); return -1; } }
|
|
5706
5773
|
function call_fetch_with_json_options(ref_id,url,options_json) { globalThis.picorubyLastError = null; try { const obj = globalThis.picorubyRefs[ref_id]; const urlStr = UTF8ToString(url); const optionsStr = UTF8ToString(options_json); const options = JSON.parse(optionsStr); const result = obj.fetch(urlStr, options); const newRefId = globalThis.picorubyRefs.length; globalThis.picorubyRefs.push(result); return newRefId; } catch(e) { globalThis.picorubyLastError = e && typeof e.message === 'string' ? e.message : String(e); return -1; } }
|
|
5707
5774
|
function setup_promise_handler(promise_id,callback_id,mrb_ptr,task_ptr) { const promise = globalThis.picorubyRefs[promise_id]; promise.then( (result) => { const resultId = globalThis.picorubyRefs.length; globalThis.picorubyRefs.push(result); ccall( 'resume_promise_task', 'void', ['number', 'number', 'number', 'number'], [mrb_ptr, task_ptr, callback_id, resultId] ); } ).catch( (error) => { const message = error && typeof error.message === 'string' ? error.message : String(error); const size = lengthBytesUTF8(message) + 1; const errorPtr = _malloc(size); stringToUTF8(message, errorPtr, size); ccall( 'resume_promise_error_task', 'void', ['number', 'number', 'number', 'number'], [mrb_ptr, task_ptr, callback_id, errorPtr] ); } ); }
|
|
5708
|
-
function js_add_event_listener(ref_id,callback_id,event_type) { const target = globalThis.picorubyRefs[ref_id]; const type = UTF8ToString(event_type); const handler = (event) => { if (!globalThis.picorubyEventHandlers || !globalThis.picorubyEventHandlers[callback_id]) { return; } if (type === 'submit' || (type === 'click' && target.tagName === 'A')) { event.preventDefault(); } const eventRefId = globalThis.picorubyRefs.push(event) - 1; ccall( 'call_ruby_callback', 'void', ['number', 'number'], [callback_id, eventRefId] ); }; target.addEventListener(type, handler); if (!globalThis.picorubyEventHandlers) { globalThis.picorubyEventHandlers = {}; } globalThis.picorubyEventHandlers[callback_id] = { target, type, handler }; }
|
|
5775
|
+
function js_add_event_listener(ref_id,callback_id,event_type,sync,capture,once,passive) { const target = globalThis.picorubyRefs[ref_id]; const type = UTF8ToString(event_type); const isSync = !!sync; const isOnce = !!once; const isCapture = !!capture; let options = undefined; if (isCapture || isOnce || passive >= 0) { options = { capture: isCapture, once: isOnce }; if (passive >= 0) options.passive = (passive === 1); } const handler = (event) => { if (!globalThis.picorubyEventHandlers || !globalThis.picorubyEventHandlers[callback_id]) { return; } if (isOnce) { delete globalThis.picorubyEventHandlers[callback_id]; } if (!isSync && passive !== 1 && (type === 'submit' || (type === 'click' && target.tagName === 'A'))) { event.preventDefault(); } const eventRefId = globalThis.picorubyRefs.push(event) - 1; if (isSync) { try { ccall( 'call_ruby_callback_sync_event', 'void', ['number', 'number', 'number'], [callback_id, eventRefId, isOnce ? 1 : 0] ); } finally { delete globalThis.picorubyRefs[eventRefId]; } } else { ccall( isOnce ? 'call_ruby_callback_oneshot' : 'call_ruby_callback', 'void', ['number', 'number'], [callback_id, eventRefId] ); } }; if (options) { target.addEventListener(type, handler, options); } else { target.addEventListener(type, handler); } if (!globalThis.picorubyEventHandlers) { globalThis.picorubyEventHandlers = {}; } globalThis.picorubyEventHandlers[callback_id] = { target, type, handler, capture: isCapture }; }
|
|
5709
5776
|
function js_register_generic_callback(callback_id,callback_name) { const name = UTF8ToString(callback_name); if (!globalThis.picorubyGenericCallbacks) { globalThis.picorubyGenericCallbacks = {}; } globalThis.picorubyGenericCallbacks[name] = function(...args) { const argRefIds = args.map(arg => { const refId = globalThis.picorubyRefs.push(arg) - 1; return refId; }); const argRefIdsPtr = _malloc(argRefIds.length * 4); for (let i = 0; i < argRefIds.length; i++) { HEAP32[(argRefIdsPtr >> 2) + i] = argRefIds[i]; } const resultRefId = ccall( 'call_ruby_callback_sync_generic', 'number', ['number', 'number', 'number'], [callback_id, argRefIdsPtr, argRefIds.length] ); _free(argRefIdsPtr); if (resultRefId >= 0 && resultRefId < globalThis.picorubyRefs.length) { return globalThis.picorubyRefs[resultRefId]; } return undefined; }; }
|
|
5710
5777
|
function js_create_callback_function(callback_id) { try { const fn = function(...args) { const argRefIds = args.map(arg => globalThis.picorubyRefs.push(arg) - 1); const argRefIdsPtr = _malloc(argRefIds.length * 4); for (let i = 0; i < argRefIds.length; i++) { HEAP32[(argRefIdsPtr >> 2) + i] = argRefIds[i]; } const resultRefId = ccall( 'call_ruby_callback_sync_generic', 'number', ['number', 'number', 'number'], [callback_id, argRefIdsPtr, argRefIds.length] ); _free(argRefIdsPtr); if (resultRefId >= 0 && resultRefId < globalThis.picorubyRefs.length) { return globalThis.picorubyRefs[resultRefId]; } return undefined; }; return globalThis.picorubyRefs.push(fn) - 1; } catch (e) { console.error('js_create_callback_function failed:', e); return -1; } }
|
|
5711
5778
|
function js_set_timeout(callback_id,delay_ms) { const timerId = setTimeout(function() { if (!globalThis.picorubyTimeoutHandlers || !globalThis.picorubyTimeoutHandlers[callback_id]) { return; } ccall( 'call_ruby_callback_oneshot', 'void', ['number', 'number'], [callback_id, -1] ); delete globalThis.picorubyTimeoutHandlers[callback_id]; }, delay_ms); if (!globalThis.picorubyTimeoutHandlers) { globalThis.picorubyTimeoutHandlers = {}; } globalThis.picorubyTimeoutHandlers[callback_id] = timerId; return timerId; }
|
|
5712
5779
|
function js_clear_timeout(callback_id) { try { if (!globalThis.picorubyTimeoutHandlers) return false; const timerId = globalThis.picorubyTimeoutHandlers[callback_id]; if (timerId === undefined) return false; clearTimeout(timerId); delete globalThis.picorubyTimeoutHandlers[callback_id]; return true; } catch(e) { console.error('Error in js_clear_timeout:', e); return false; } }
|
|
5713
|
-
function js_remove_event_listener(callback_id) { try { if (!globalThis.picorubyEventHandlers) return false; const info = globalThis.picorubyEventHandlers[callback_id]; if (!info) return false; info.target.removeEventListener(info.type, info.handler); delete globalThis.picorubyEventHandlers[callback_id]; return true; } catch(e) { console.error('Error in js_remove_event_listener:', e); return false; } }
|
|
5780
|
+
function js_remove_event_listener(callback_id) { try { if (!globalThis.picorubyEventHandlers) return false; const info = globalThis.picorubyEventHandlers[callback_id]; if (!info) return false; info.target.removeEventListener(info.type, info.handler, !!info.capture); delete globalThis.picorubyEventHandlers[callback_id]; return true; } catch(e) { console.error('Error in js_remove_event_listener:', e); return false; } }
|
|
5714
5781
|
function js_create_element(tag_name) { try { const element = document.createElement(UTF8ToString(tag_name)); const refId = globalThis.picorubyRefs.push(element) - 1; return refId; } catch(e) { console.error('Error in js_create_element:', e); return -1; } }
|
|
5715
5782
|
function js_create_text_node(text) { try { const node = document.createTextNode(UTF8ToString(text)); const refId = globalThis.picorubyRefs.push(node) - 1; return refId; } catch(e) { console.error('Error in js_create_text_node:', e); return -1; } }
|
|
5716
5783
|
function js_create_object() { try { const obj = {}; const refId = globalThis.picorubyRefs.push(obj) - 1; return refId; } catch(e) { console.error('Error in js_create_object:', e); return -1; } }
|
|
@@ -5721,7 +5788,7 @@ function js_replace_child(parent_ref_id,new_child_ref_id,old_child_ref_id) { try
|
|
|
5721
5788
|
function js_insert_before(parent_ref_id,new_child_ref_id,ref_child_ref_id) { try { const parent = globalThis.picorubyRefs[parent_ref_id]; const newChild = globalThis.picorubyRefs[new_child_ref_id]; const refChild = globalThis.picorubyRefs[ref_child_ref_id]; if (!parent || !newChild) return false; parent.insertBefore(newChild, refChild); return true; } catch(e) { console.error('Error in js_insert_before:', e); return false; } }
|
|
5722
5789
|
function js_set_attribute(ref_id,name,value) { try { const element = globalThis.picorubyRefs[ref_id]; if (!element || !element.setAttribute) return false; element.setAttribute(UTF8ToString(name), UTF8ToString(value)); return true; } catch(e) { console.error('Error in js_set_attribute:', e); return false; } }
|
|
5723
5790
|
function js_remove_attribute(ref_id,name) { try { const element = globalThis.picorubyRefs[ref_id]; if (!element || !element.removeAttribute) return false; element.removeAttribute(UTF8ToString(name)); return true; } catch(e) { console.error('Error in js_remove_attribute:', e); return false; } }
|
|
5724
|
-
function setup_binary_handler(ref_id,mrb_ptr,task_ptr,callback_id) { const
|
|
5791
|
+
function setup_binary_handler(ref_id,mrb_ptr,task_ptr,callback_id) { const object = globalThis.picorubyRefs[ref_id]; const reportError = (error) => { const message = error && typeof error.message === 'string' ? error.message : String(error); const size = lengthBytesUTF8(message) + 1; const errorPtr = _malloc(size); stringToUTF8(message, errorPtr, size); ccall( 'resume_promise_error_task', 'void', ['number', 'number', 'number', 'number'], [mrb_ptr, task_ptr, callback_id, errorPtr] ); }; Promise.resolve().then(() => { if (!object || typeof object.arrayBuffer !== 'function') { throw new TypeError('JS object does not implement arrayBuffer()'); } return object.arrayBuffer(); }).then(arrayBuffer => { const uint8Array = new Uint8Array(arrayBuffer); const ptr = _malloc(uint8Array.length); const heapBytes = new Uint8Array(HEAPU8.buffer, ptr, uint8Array.length); heapBytes.set(uint8Array); ccall( 'resume_binary_task', 'void', ['number', 'number', 'number', 'number', 'number'], [mrb_ptr, task_ptr, callback_id, ptr, uint8Array.length] ); }).catch(reportError); }
|
|
5725
5792
|
function init_js_type_offsets(type_offset,value_offset,is_integer_offset,string_value_offset) { globalThis.JS_TYPE_INFO_OFFSETS = { type: type_offset, value: value_offset, is_integer: is_integer_offset, string_value: string_value_offset }; }
|
|
5726
5793
|
function js_get_type_info(ref_id,info) { const value = globalThis.picorubyRefs[ref_id]; const offsets = globalThis.JS_TYPE_INFO_OFFSETS; let type = typeof value; if (value === null) { HEAP32[info + offsets.type >> 2] = 1; HEAP32[info + offsets.string_value >> 2] = 0; } else if (Array.isArray(value)) { HEAP32[info + offsets.type >> 2] = 7; HEAP32[info + offsets.value >> 2] = value.length; HEAP32[info + offsets.string_value >> 2] = 0; } else { switch(type) { case "undefined": HEAP32[info + offsets.type >> 2] = 0; HEAP32[info + offsets.string_value >> 2] = 0; break; case "boolean": HEAP32[info + offsets.type >> 2] = 2; HEAPU8[info + offsets.value] = value ? 1 : 0; HEAP32[info + offsets.string_value >> 2] = 0; break; case "number": HEAP32[info + offsets.type >> 2] = 3; HEAPF64[info + offsets.value >> 3] = value; HEAPU8[info + offsets.is_integer] = Number.isInteger(value) ? 1 : 0; HEAP32[info + offsets.string_value >> 2] = 0; break; case "bigint": case "string": case "symbol": { HEAP32[info + offsets.type >> 2] = type === "bigint" ? 4 : type === "string" ? 5 : 6; const str = type === "symbol" ? (value.description || "") : value.toString(); const length = lengthBytesUTF8(str) + 1; const ptr = _malloc(length); stringToUTF8(str, ptr, length); HEAP32[info + offsets.string_value >> 2] = ptr; break; } case "object": HEAP32[info + offsets.type >> 2] = 8; HEAP32[info + offsets.string_value >> 2] = 0; break; case "function": HEAP32[info + offsets.type >> 2] = 9; HEAP32[info + offsets.string_value >> 2] = 0; break; } } }
|
|
5727
5794
|
function js_eval(script) { try { var result = (0, eval)(UTF8ToString(script)); if (result === undefined || result === null) return -1; var refId = globalThis.picorubyRefs.length; globalThis.picorubyRefs.push(result); return refId; } catch(e) { console.error('JS.eval error:', e); return -1; } }
|
|
@@ -5766,9 +5833,9 @@ function ws_set_onopen(ref_id,callback_id) { const ws = globalThis.picorubyRefs[
|
|
|
5766
5833
|
function ws_set_onmessage(ref_id,callback_id) { const ws = globalThis.picorubyRefs[ref_id]; ws.onmessage = (event) => { let data = event.data; if (data instanceof ArrayBuffer) { const uint8Array = new Uint8Array(data); const length = uint8Array.length; const ptr = _malloc(length); HEAPU8.set(uint8Array, ptr); ccall( 'call_ruby_callback_with_binary_data', 'void', ['number', 'number', 'number'], [callback_id, ptr, length] ); } else { const eventRefId = globalThis.picorubyRefs.push(event) - 1; ccall( 'call_ruby_callback', 'void', ['number', 'number'], [callback_id, eventRefId] ); } }; }
|
|
5767
5834
|
function ws_set_onerror(ref_id,callback_id) { const ws = globalThis.picorubyRefs[ref_id]; ws.onerror = (event) => { const eventRefId = globalThis.picorubyRefs.push(event) - 1; ccall( 'call_ruby_callback_oneshot', 'void', ['number', 'number'], [callback_id, eventRefId] ); }; }
|
|
5768
5835
|
function ws_set_onclose(ref_id,callback_id) { const ws = globalThis.picorubyRefs[ref_id]; ws.onclose = (event) => { const eventRefId = globalThis.picorubyRefs.push(event) - 1; ccall( 'call_ruby_callback_oneshot', 'void', ['number', 'number'], [callback_id, eventRefId] ); }; }
|
|
5769
|
-
function idb_request_to_promise(req_ref_id) { try { const req = globalThis.picorubyRefs[req_ref_id]; if (!req) { console.error('idb_request_to_promise: invalid ref_id', req_ref_id); return -1; } const promise = new Promise((resolve
|
|
5770
|
-
function idb_open_with_upgrade(name_ptr,version,callback_id) { try { const name = UTF8ToString(name_ptr); const idb = globalThis.indexedDB; if (!idb) { console.error('idb_open_with_upgrade: indexedDB unavailable'); return -1; }
|
|
5771
|
-
function idb_transaction_to_promise(tx_ref_id) { try { const tx = globalThis.picorubyRefs[tx_ref_id]; if (!tx) { console.error('idb_transaction_to_promise: invalid ref_id', tx_ref_id); return -1; } const promise = new Promise((resolve
|
|
5836
|
+
function idb_request_to_promise(req_ref_id) { try { const req = globalThis.picorubyRefs[req_ref_id]; if (!req) { console.error('idb_request_to_promise: invalid ref_id', req_ref_id); return -1; } const promise = new Promise((resolve) => { req.onsuccess = () => { resolve({ ok: true, value: req.result }); }; req.onerror = () => { resolve({ ok: false, name: (req.error && req.error.name) || 'UnknownError', message: (req.error && req.error.message) || 'IDB request failed' }); }; }); return globalThis.picorubyRefs.push(promise) - 1; } catch (e) { console.error('idb_request_to_promise failed:', e); return -1; } }
|
|
5837
|
+
function idb_open_with_upgrade(name_ptr,version,callback_id,blocked_timeout_ms) { try { const name = UTF8ToString(name_ptr); const idb = globalThis.indexedDB; if (!idb) { console.error('idb_open_with_upgrade: indexedDB unavailable'); return -1; } let req; try { req = (version > 0) ? idb.open(name, version) : idb.open(name); } catch (e) { const promise = Promise.resolve({ ok: false, name: (e && e.name) || 'UnknownError', message: (e && e.message) || 'IDB open failed' }); return globalThis.picorubyRefs.push(promise) - 1; } let settled = false; let timedOut = false; let blockedTimer = null; req.onupgradeneeded = (event) => { if (timedOut) { try { if (req.transaction) req.transaction.abort(); } catch (e) { console.error('failed to abort late IDB upgrade:', e); } return; } if (callback_id === 0) return; const db = req.result; const oldV = event.oldVersion; const newV = event.newVersion; const dbRef = globalThis.picorubyRefs.push(db) - 1; const oldRef = globalThis.picorubyRefs.push(oldV) - 1; const newRef = globalThis.picorubyRefs.push(newV) - 1; const argRefIds = [dbRef, oldRef, newRef]; const argRefIdsPtr = _malloc(argRefIds.length * 4); for (let i = 0; i < argRefIds.length; i++) { HEAP32[(argRefIdsPtr >> 2) + i] = argRefIds[i]; } try { ccall( 'call_ruby_callback_sync_generic', 'number', ['number', 'number', 'number'], [callback_id, argRefIdsPtr, argRefIds.length] ); } catch (e) { console.error('idb upgrade callback threw:', e); } finally { _free(argRefIdsPtr); } }; const promise = new Promise((resolve) => { const settle = (result) => { if (settled) return; settled = true; if (blockedTimer) { clearTimeout(blockedTimer); blockedTimer = null; } resolve(result); }; req.onsuccess = () => { if (settled) { try { req.result.close(); } catch (e) {} return; } settle({ ok: true, value: req.result }); }; req.onerror = () => { settle({ ok: false, name: (req.error && req.error.name) || 'UnknownError', message: (req.error && req.error.message) || 'IDB open failed' }); }; req.onblocked = () => { if (settled || blockedTimer) return; blockedTimer = setTimeout(() => { timedOut = true; settle({ ok: false, name: 'PicoRubyBlockedTimeout', message: 'IDB open blocked: another connection held an older version past the timeout' }); }, blocked_timeout_ms); }; }); return globalThis.picorubyRefs.push(promise) - 1; } catch (e) { console.error('idb_open_with_upgrade failed:', e); return -1; } }
|
|
5838
|
+
function idb_transaction_to_promise(tx_ref_id) { try { const tx = globalThis.picorubyRefs[tx_ref_id]; if (!tx) { console.error('idb_transaction_to_promise: invalid ref_id', tx_ref_id); return -1; } const promise = new Promise((resolve) => { tx.oncomplete = () => { resolve({ ok: true, value: true }); }; tx.onerror = () => { resolve({ ok: false, name: (tx.error && tx.error.name) || 'UnknownError', message: (tx.error && tx.error.message) || 'IDB transaction error' }); }; tx.onabort = () => { resolve({ ok: false, name: (tx.error && tx.error.name) || 'AbortError', message: (tx.error && tx.error.message) || 'IDB transaction aborted' }); }; }); return globalThis.picorubyRefs.push(promise) - 1; } catch (e) { console.error('idb_transaction_to_promise failed:', e); return -1; } }
|
|
5772
5839
|
function emscripten_date_now() { return Date.now(); }
|
|
5773
5840
|
|
|
5774
5841
|
// Imports from the Wasm binary.
|
|
@@ -5786,6 +5853,7 @@ var _mrb_debug_next = Module['_mrb_debug_next'] = makeInvalidEarlyAccess('_mrb_d
|
|
|
5786
5853
|
var _mrb_debug_get_callstack = Module['_mrb_debug_get_callstack'] = makeInvalidEarlyAccess('_mrb_debug_get_callstack');
|
|
5787
5854
|
var _call_ruby_callback = Module['_call_ruby_callback'] = makeInvalidEarlyAccess('_call_ruby_callback');
|
|
5788
5855
|
var _call_ruby_callback_oneshot = Module['_call_ruby_callback_oneshot'] = makeInvalidEarlyAccess('_call_ruby_callback_oneshot');
|
|
5856
|
+
var _call_ruby_callback_sync_event = Module['_call_ruby_callback_sync_event'] = makeInvalidEarlyAccess('_call_ruby_callback_sync_event');
|
|
5789
5857
|
var _resume_promise_task = Module['_resume_promise_task'] = makeInvalidEarlyAccess('_resume_promise_task');
|
|
5790
5858
|
var _resume_promise_error_task = Module['_resume_promise_error_task'] = makeInvalidEarlyAccess('_resume_promise_error_task');
|
|
5791
5859
|
var _resume_binary_task = Module['_resume_binary_task'] = makeInvalidEarlyAccess('_resume_binary_task');
|
|
@@ -5814,6 +5882,7 @@ var _emscripten_stack_get_end = makeInvalidEarlyAccess('_emscripten_stack_get_en
|
|
|
5814
5882
|
var __emscripten_stack_restore = makeInvalidEarlyAccess('__emscripten_stack_restore');
|
|
5815
5883
|
var __emscripten_stack_alloc = makeInvalidEarlyAccess('__emscripten_stack_alloc');
|
|
5816
5884
|
var _emscripten_stack_get_current = makeInvalidEarlyAccess('_emscripten_stack_get_current');
|
|
5885
|
+
var ___set_stack_limits = Module['___set_stack_limits'] = makeInvalidEarlyAccess('___set_stack_limits');
|
|
5817
5886
|
var memory = makeInvalidEarlyAccess('memory');
|
|
5818
5887
|
var __indirect_function_table = makeInvalidEarlyAccess('__indirect_function_table');
|
|
5819
5888
|
var wasmMemory = makeInvalidEarlyAccess('wasmMemory');
|
|
@@ -5834,6 +5903,7 @@ function assignWasmExports(wasmExports) {
|
|
|
5834
5903
|
assert(typeof wasmExports['mrb_debug_get_callstack'] != 'undefined', 'missing Wasm export: mrb_debug_get_callstack');
|
|
5835
5904
|
assert(typeof wasmExports['call_ruby_callback'] != 'undefined', 'missing Wasm export: call_ruby_callback');
|
|
5836
5905
|
assert(typeof wasmExports['call_ruby_callback_oneshot'] != 'undefined', 'missing Wasm export: call_ruby_callback_oneshot');
|
|
5906
|
+
assert(typeof wasmExports['call_ruby_callback_sync_event'] != 'undefined', 'missing Wasm export: call_ruby_callback_sync_event');
|
|
5837
5907
|
assert(typeof wasmExports['resume_promise_task'] != 'undefined', 'missing Wasm export: resume_promise_task');
|
|
5838
5908
|
assert(typeof wasmExports['resume_promise_error_task'] != 'undefined', 'missing Wasm export: resume_promise_error_task');
|
|
5839
5909
|
assert(typeof wasmExports['resume_binary_task'] != 'undefined', 'missing Wasm export: resume_binary_task');
|
|
@@ -5862,6 +5932,7 @@ function assignWasmExports(wasmExports) {
|
|
|
5862
5932
|
assert(typeof wasmExports['_emscripten_stack_restore'] != 'undefined', 'missing Wasm export: _emscripten_stack_restore');
|
|
5863
5933
|
assert(typeof wasmExports['_emscripten_stack_alloc'] != 'undefined', 'missing Wasm export: _emscripten_stack_alloc');
|
|
5864
5934
|
assert(typeof wasmExports['emscripten_stack_get_current'] != 'undefined', 'missing Wasm export: emscripten_stack_get_current');
|
|
5935
|
+
assert(typeof wasmExports['__set_stack_limits'] != 'undefined', 'missing Wasm export: __set_stack_limits');
|
|
5865
5936
|
assert(typeof wasmExports['memory'] != 'undefined', 'missing Wasm export: memory');
|
|
5866
5937
|
assert(typeof wasmExports['__indirect_function_table'] != 'undefined', 'missing Wasm export: __indirect_function_table');
|
|
5867
5938
|
_ble_notify_callback = Module['_ble_notify_callback'] = createExportWrapper('ble_notify_callback', wasmExports['ble_notify_callback'], 3);
|
|
@@ -5878,6 +5949,7 @@ function assignWasmExports(wasmExports) {
|
|
|
5878
5949
|
_mrb_debug_get_callstack = Module['_mrb_debug_get_callstack'] = createExportWrapper('mrb_debug_get_callstack', wasmExports['mrb_debug_get_callstack'], 0);
|
|
5879
5950
|
_call_ruby_callback = Module['_call_ruby_callback'] = createExportWrapper('call_ruby_callback', wasmExports['call_ruby_callback'], 2);
|
|
5880
5951
|
_call_ruby_callback_oneshot = Module['_call_ruby_callback_oneshot'] = createExportWrapper('call_ruby_callback_oneshot', wasmExports['call_ruby_callback_oneshot'], 2);
|
|
5952
|
+
_call_ruby_callback_sync_event = Module['_call_ruby_callback_sync_event'] = createExportWrapper('call_ruby_callback_sync_event', wasmExports['call_ruby_callback_sync_event'], 3);
|
|
5881
5953
|
_resume_promise_task = Module['_resume_promise_task'] = createExportWrapper('resume_promise_task', wasmExports['resume_promise_task'], 4);
|
|
5882
5954
|
_resume_promise_error_task = Module['_resume_promise_error_task'] = createExportWrapper('resume_promise_error_task', wasmExports['resume_promise_error_task'], 4);
|
|
5883
5955
|
_resume_binary_task = Module['_resume_binary_task'] = createExportWrapper('resume_binary_task', wasmExports['resume_binary_task'], 5);
|
|
@@ -5906,6 +5978,7 @@ function assignWasmExports(wasmExports) {
|
|
|
5906
5978
|
__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'];
|
|
5907
5979
|
__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'];
|
|
5908
5980
|
_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'];
|
|
5981
|
+
___set_stack_limits = Module['___set_stack_limits'] = createExportWrapper('__set_stack_limits', wasmExports['__set_stack_limits'], 2);
|
|
5909
5982
|
memory = wasmMemory = wasmExports['memory'];
|
|
5910
5983
|
__indirect_function_table = wasmTable = wasmExports['__indirect_function_table'];
|
|
5911
5984
|
}
|
|
@@ -5916,6 +5989,8 @@ var wasmImports = {
|
|
|
5916
5989
|
/** @export */
|
|
5917
5990
|
__call_sighandler: ___call_sighandler,
|
|
5918
5991
|
/** @export */
|
|
5992
|
+
__handle_stack_overflow: ___handle_stack_overflow,
|
|
5993
|
+
/** @export */
|
|
5919
5994
|
__syscall_chdir: ___syscall_chdir,
|
|
5920
5995
|
/** @export */
|
|
5921
5996
|
__syscall_chmod: ___syscall_chmod,
|
|
@@ -6072,6 +6147,8 @@ var wasmImports = {
|
|
|
6072
6147
|
/** @export */
|
|
6073
6148
|
invoke_ddd,
|
|
6074
6149
|
/** @export */
|
|
6150
|
+
invoke_ddj,
|
|
6151
|
+
/** @export */
|
|
6075
6152
|
invoke_ii,
|
|
6076
6153
|
/** @export */
|
|
6077
6154
|
invoke_iii,
|
|
@@ -6084,10 +6161,14 @@ var wasmImports = {
|
|
|
6084
6161
|
/** @export */
|
|
6085
6162
|
invoke_iijiiiiii,
|
|
6086
6163
|
/** @export */
|
|
6164
|
+
invoke_ijj,
|
|
6165
|
+
/** @export */
|
|
6087
6166
|
invoke_ji,
|
|
6088
6167
|
/** @export */
|
|
6089
6168
|
invoke_jii,
|
|
6090
6169
|
/** @export */
|
|
6170
|
+
invoke_jjd,
|
|
6171
|
+
/** @export */
|
|
6091
6172
|
invoke_vi,
|
|
6092
6173
|
/** @export */
|
|
6093
6174
|
invoke_vii,
|
|
@@ -6098,7 +6179,7 @@ var wasmImports = {
|
|
|
6098
6179
|
/** @export */
|
|
6099
6180
|
invoke_viiiii,
|
|
6100
6181
|
/** @export */
|
|
6101
|
-
|
|
6182
|
+
invoke_viiiiii,
|
|
6102
6183
|
/** @export */
|
|
6103
6184
|
invoke_viiiij,
|
|
6104
6185
|
/** @export */
|
|
@@ -6365,10 +6446,10 @@ function invoke_viiiii(index,a1,a2,a3,a4,a5) {
|
|
|
6365
6446
|
}
|
|
6366
6447
|
}
|
|
6367
6448
|
|
|
6368
|
-
function
|
|
6449
|
+
function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
|
|
6369
6450
|
var sp = stackSave();
|
|
6370
6451
|
try {
|
|
6371
|
-
getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6
|
|
6452
|
+
getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);
|
|
6372
6453
|
} catch(e) {
|
|
6373
6454
|
stackRestore(sp);
|
|
6374
6455
|
if (!(e instanceof EmscriptenEH)) throw e;
|
|
@@ -6475,6 +6556,29 @@ function invoke_viiji(index,a1,a2,a3,a4) {
|
|
|
6475
6556
|
}
|
|
6476
6557
|
}
|
|
6477
6558
|
|
|
6559
|
+
function invoke_jjd(index,a1,a2) {
|
|
6560
|
+
var sp = stackSave();
|
|
6561
|
+
try {
|
|
6562
|
+
return getWasmTableEntry(index)(a1,a2);
|
|
6563
|
+
} catch(e) {
|
|
6564
|
+
stackRestore(sp);
|
|
6565
|
+
if (!(e instanceof EmscriptenEH)) throw e;
|
|
6566
|
+
_setThrew(1, 0);
|
|
6567
|
+
return 0n;
|
|
6568
|
+
}
|
|
6569
|
+
}
|
|
6570
|
+
|
|
6571
|
+
function invoke_ijj(index,a1,a2) {
|
|
6572
|
+
var sp = stackSave();
|
|
6573
|
+
try {
|
|
6574
|
+
return getWasmTableEntry(index)(a1,a2);
|
|
6575
|
+
} catch(e) {
|
|
6576
|
+
stackRestore(sp);
|
|
6577
|
+
if (!(e instanceof EmscriptenEH)) throw e;
|
|
6578
|
+
_setThrew(1, 0);
|
|
6579
|
+
}
|
|
6580
|
+
}
|
|
6581
|
+
|
|
6478
6582
|
function invoke_viijj(index,a1,a2,a3,a4) {
|
|
6479
6583
|
var sp = stackSave();
|
|
6480
6584
|
try {
|
|
@@ -6497,6 +6601,17 @@ function invoke_ddd(index,a1,a2) {
|
|
|
6497
6601
|
}
|
|
6498
6602
|
}
|
|
6499
6603
|
|
|
6604
|
+
function invoke_ddj(index,a1,a2) {
|
|
6605
|
+
var sp = stackSave();
|
|
6606
|
+
try {
|
|
6607
|
+
return getWasmTableEntry(index)(a1,a2);
|
|
6608
|
+
} catch(e) {
|
|
6609
|
+
stackRestore(sp);
|
|
6610
|
+
if (!(e instanceof EmscriptenEH)) throw e;
|
|
6611
|
+
_setThrew(1, 0);
|
|
6612
|
+
}
|
|
6613
|
+
}
|
|
6614
|
+
|
|
6500
6615
|
function invoke_iij(index,a1,a2) {
|
|
6501
6616
|
var sp = stackSave();
|
|
6502
6617
|
try {
|