funicular 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3daa358d6b29db11190349ae990006246a9c4b1d04e2e363235428dd3e53fd2a
4
- data.tar.gz: 4ef7607d5e6d33385b776c6f01ba763c555bdc453109adb7d3473089889827cc
3
+ metadata.gz: 558f130a4dd9915a25efbdb6ebc5d976fc7e1459a7fcd1362a20465253fbb238
4
+ data.tar.gz: 9c8efa623ad8aa782bc24ddc352a57b376fcdac1322c818316d7479bbe39a19d
5
5
  SHA512:
6
- metadata.gz: 547f30c0948941c1b40c2506c129e7aaa1d364b5db0073a2fe7f404d34149e2ba6d9400067748b6512beb7ffa34ba9dd318a9d6b6b9d78caf2baeeffc45f0442
7
- data.tar.gz: b2c64be4ae511ead4abc54df652e391aafeea9e6ef1be3373e5dc686bac00d7de0885ffca2d4ad392dbb76c0f9fc7443ebfc367b35d22e8470766010669c5493
6
+ metadata.gz: 4a8e1188bd56a2609c5d319905a65defd15785540c10772f56caf7f63ca4d90ec32bc408eea3a0c8bd75ceefa2d59eb7f629414643061b0831200116394d9dde
7
+ data.tar.gz: e8b2b91085f66f8a83fb9745b8b68d0a56d27e50b07a0531e38036047bbc4b3c62a11ded2b35b15017ab3f18c2f372cea7a3d5ece0cd71677a423a744ecdf9c5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,47 @@
1
+ ## [0.5.1] - 2026-09-17
2
+
3
+ A patch release: keyed-list patching fixes surfaced by real applications,
4
+ a DevTools inspector crash, and a single source of truth for the version.
5
+
6
+ ### Fixed
7
+
8
+ - Keyed child reordering: kept children whose position changed between
9
+ renders were updated in place but never moved, so a keyed list that
10
+ reordered its items rendered in the old order. The patcher now places
11
+ kept and inserted children at their new index in one pass. Unmoved
12
+ children are left untouched: the browser's `insertBefore(node, node)`
13
+ counts as a detach and re-attach, which reset focus, restarted CSS
14
+ transitions and reloaded iframes on every keyed render. The live child
15
+ order is tracked in a Ruby array built from the snapshot instead of
16
+ re-reading `childNodes` per op, which was O(n^2) across the wasm
17
+ boundary and leaked JS object references.
18
+
19
+ - Keyed diffs remove unmatched raw String children. A text child that no
20
+ new child matched (a `'Loading...'` placeholder followed by a keyed
21
+ list, say) survived every keyed re-render and stayed in the DOM
22
+ forever. Only nil slots are skipped now.
23
+
24
+ - The DevTools inspector bounds the depth of instance-variable
25
+ inspection. `Object#inspect` on a component's `@runtime` recursed
26
+ through the router, the mounted component and its whole VDOM tree and
27
+ overflowed the wasm C stack, which showed up later as garbage values,
28
+ `TypeError` from `<=>` and GC crashes after clicking a component in the
29
+ PicoRuby debugger panel. Leaves are inspected in full; containers and
30
+ objects past a fixed depth and item count are summarized, and
31
+ BasicObject proxies (style accessors) are named rather than inspected.
32
+
33
+ ### Changed
34
+
35
+ - `Funicular::VERSION` is defined once, in `mrblib/version.rb`, and is
36
+ compiled into PicoRuby.wasm. `lib/funicular/version.rb` requires it,
37
+ so the CRuby gem and the browser runtime can no longer disagree (they
38
+ had drifted to 0.5.1 vs 0.5.0). `Funicular.version` in the browser now
39
+ reports the released version.
40
+
41
+ - `Funicular::VDOM::Element#==` is public. It was declared under
42
+ `private`, which mruby honors for operator calls, so element
43
+ comparison behaved differently between CRuby (SSR) and the browser.
44
+
1
45
  ## [0.5.0] - 2026-08-13
2
46
 
3
47
  The local database release: an ActiveRecord-like, reactive local store on
@@ -1 +1 @@
1
- 4.0.3
1
+ 4.0.4
@@ -682,12 +682,9 @@ async function instantiateAsync(binary, binaryFile, imports) {
682
682
  if (!binary
683
683
  // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
684
684
  && !isFileURI(binaryFile)
685
- // Avoid instantiateStreaming() on Node.js environment for now, as while
686
- // Node.js v18.1.0 implements it, it does not have a full fetch()
687
- // implementation yet.
688
- //
689
- // Reference:
690
- // https://github.com/emscripten-core/emscripten/pull/16917
685
+ // Avoid using instantiateStreaming() on Node.js since the `fetch()` API
686
+ // does not support `file://` URLs.
687
+ // See: https://github.com/emscripten-core/emscripten/pull/16917
691
688
  && !ENVIRONMENT_IS_NODE
692
689
  ) {
693
690
  try {
@@ -1146,6 +1143,9 @@ async function createWasm() {
1146
1143
  if (result === null || result === undefined) break;
1147
1144
  bytesRead++;
1148
1145
  buffer[offset+i] = result;
1146
+ // We currently only support canonical mode (ICANON), where
1147
+ // read(2) returns as soon as a line delimiter is read.
1148
+ if (result === 10) break;
1149
1149
  }
1150
1150
  if (bytesRead) {
1151
1151
  stream.node.atime = Date.now();
@@ -1997,6 +1997,7 @@ async function createWasm() {
1997
1997
 
1998
1998
 
1999
1999
 
2000
+
2000
2001
  var NODERAWFS_stream_funcs = {
2001
2002
  close(stream) {
2002
2003
  VFS.closeStream(stream.fd);
@@ -2075,10 +2076,10 @@ async function createWasm() {
2075
2076
  return { path, node: { id: st.ino, mode, node_ops: NODERAWFS, path }};
2076
2077
  },
2077
2078
  createStandardStreams() {
2078
- FS.createStream({ nfd: 0, position: 0, path: '/dev/stdin', flags: 0, seekable: false }, 0);
2079
+ FS.createStream({ nfd: 0, position: 0, path: '/dev/stdin', flags: 0 }, 0);
2079
2080
  var paths = [,'/dev/stdout', '/dev/stderr'];
2080
2081
  for (var i = 1; i < 3; i++) {
2081
- FS.createStream({ nfd: i, position: 0, path: paths[i], flags: 577, seekable: false }, i);
2082
+ FS.createStream({ nfd: i, position: 0, path: paths[i], flags: 577 }, i);
2082
2083
  }
2083
2084
  },
2084
2085
  cwd() { return process.cwd(); },
@@ -2210,7 +2211,10 @@ async function createWasm() {
2210
2211
  if (!stream.stream_ops) {
2211
2212
  rtn.shared.refcnt ??= 0;
2212
2213
  rtn.shared.refcnt++;
2213
- rtn.tty = nodeTTY.isatty(rtn.nfd);
2214
+ if (nodeTTY.isatty(rtn.nfd)) {
2215
+ rtn.tty = { ops: TTY.default_tty_ops };
2216
+ rtn.seekable = false;
2217
+ }
2214
2218
  }
2215
2219
  return rtn;
2216
2220
  },
Binary file
@@ -1 +1 @@
1
- 4.0.3
1
+ 4.0.4
@@ -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
@@ -675,6 +677,12 @@ async function createWasm() {
675
677
  return '0x' + ptr.toString(16).padStart(8, '0');
676
678
  }
677
679
 
680
+ var setStackLimits = () => {
681
+ var stackLow = _emscripten_stack_get_base();
682
+ var stackHigh = _emscripten_stack_get_end();
683
+ ___set_stack_limits(stackLow, stackHigh);
684
+ };
685
+
678
686
  var stackRestore = (val) => __emscripten_stack_restore(val);
679
687
 
680
688
  var stackSave = () => _emscripten_stack_get_current();
@@ -795,6 +803,16 @@ async function createWasm() {
795
803
  };
796
804
  var ___call_sighandler = (fp, sig) => getWasmTableEntry(fp)(sig);
797
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
+
798
816
  var PATH = {
799
817
  isAbs:(path) => path.charAt(0) === '/',
800
818
  splitPath:(filename) => {
@@ -1072,6 +1090,9 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
1072
1090
  if (result === null || result === undefined) break;
1073
1091
  bytesRead++;
1074
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;
1075
1096
  }
1076
1097
  if (bytesRead) {
1077
1098
  stream.node.atime = Date.now();
@@ -4257,9 +4278,7 @@ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
4257
4278
  if (!stream) return 32;
4258
4279
  // Streams without a poll handler (regular files, incl. NODERAWFS/NODEFS
4259
4280
  // which leave stream_ops unset) are treated as always readable+writable.
4260
- var flags = stream.stream_ops?.poll
4261
- ? stream.stream_ops.poll(stream)
4262
- : 5;
4281
+ var flags = stream.stream_ops?.poll?.(stream) ?? 5;
4263
4282
  return flags & (events | 8 | 16 | 32);
4264
4283
  };
4265
4284
 
@@ -5466,6 +5485,7 @@ missingLibrarySymbols.forEach(missingLibrarySymbol)
5466
5485
  'getHeapMax',
5467
5486
  'growMemory',
5468
5487
  'ENV',
5488
+ 'setStackLimits',
5469
5489
  'ERRNO_CODES',
5470
5490
  'strError',
5471
5491
  'DNS',
@@ -5705,14 +5725,14 @@ function checkIncomingModuleAPI() {
5705
5725
  ignoredModuleProp('wasmBinary');
5706
5726
  }
5707
5727
  var ASM_CONSTS = {
5708
- 2823398: ($0) => { globalThis.picorubyRefs[$0] = null; },
5709
- 2823438: ($0) => { globalThis.picorubyRefs[$0] = true; },
5710
- 2823478: ($0) => { globalThis.picorubyRefs[$0] = false; },
5711
- 2823519: ($0, $1) => { globalThis.picorubyRefs[$0] = $1; },
5712
- 2823557: ($0, $1) => { globalThis.picorubyRefs[$0] = $1; },
5713
- 2823595: ($0, $1, $2) => { const str = UTF8ToString($1, $2); globalThis.picorubyRefs[$0] = str; },
5714
- 2823668: ($0, $1) => { const arr = globalThis.picorubyRefs[$0]; const elem = globalThis.picorubyRefs[$1]; arr.push(elem); delete globalThis.picorubyRefs[$1]; },
5715
- 2823807: ($0, $1, $2) => { const obj = globalThis.picorubyRefs[$0]; const key = UTF8ToString($1); const val = globalThis.picorubyRefs[$2]; obj[key] = val; delete globalThis.picorubyRefs[$2]; }
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]; }
5716
5736
  };
5717
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; } }
5718
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; } }
@@ -5768,7 +5788,7 @@ function js_replace_child(parent_ref_id,new_child_ref_id,old_child_ref_id) { try
5768
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; } }
5769
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; } }
5770
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; } }
5771
- function setup_binary_handler(ref_id,mrb_ptr,task_ptr,callback_id) { const response = globalThis.picorubyRefs[ref_id]; if (!response || typeof response.arrayBuffer !== 'function') { console.error('Invalid response object:', response); return 0; } response.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(error => { console.error('Error in arrayBuffer processing:', error); }); return 0; }
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); }
5772
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 }; }
5773
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; } } }
5774
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; } }
@@ -5862,6 +5882,7 @@ var _emscripten_stack_get_end = makeInvalidEarlyAccess('_emscripten_stack_get_en
5862
5882
  var __emscripten_stack_restore = makeInvalidEarlyAccess('__emscripten_stack_restore');
5863
5883
  var __emscripten_stack_alloc = makeInvalidEarlyAccess('__emscripten_stack_alloc');
5864
5884
  var _emscripten_stack_get_current = makeInvalidEarlyAccess('_emscripten_stack_get_current');
5885
+ var ___set_stack_limits = Module['___set_stack_limits'] = makeInvalidEarlyAccess('___set_stack_limits');
5865
5886
  var memory = makeInvalidEarlyAccess('memory');
5866
5887
  var __indirect_function_table = makeInvalidEarlyAccess('__indirect_function_table');
5867
5888
  var wasmMemory = makeInvalidEarlyAccess('wasmMemory');
@@ -5911,6 +5932,7 @@ function assignWasmExports(wasmExports) {
5911
5932
  assert(typeof wasmExports['_emscripten_stack_restore'] != 'undefined', 'missing Wasm export: _emscripten_stack_restore');
5912
5933
  assert(typeof wasmExports['_emscripten_stack_alloc'] != 'undefined', 'missing Wasm export: _emscripten_stack_alloc');
5913
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');
5914
5936
  assert(typeof wasmExports['memory'] != 'undefined', 'missing Wasm export: memory');
5915
5937
  assert(typeof wasmExports['__indirect_function_table'] != 'undefined', 'missing Wasm export: __indirect_function_table');
5916
5938
  _ble_notify_callback = Module['_ble_notify_callback'] = createExportWrapper('ble_notify_callback', wasmExports['ble_notify_callback'], 3);
@@ -5956,6 +5978,7 @@ function assignWasmExports(wasmExports) {
5956
5978
  __emscripten_stack_restore = wasmExports['_emscripten_stack_restore'];
5957
5979
  __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'];
5958
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);
5959
5982
  memory = wasmMemory = wasmExports['memory'];
5960
5983
  __indirect_function_table = wasmTable = wasmExports['__indirect_function_table'];
5961
5984
  }
@@ -5966,6 +5989,8 @@ var wasmImports = {
5966
5989
  /** @export */
5967
5990
  __call_sighandler: ___call_sighandler,
5968
5991
  /** @export */
5992
+ __handle_stack_overflow: ___handle_stack_overflow,
5993
+ /** @export */
5969
5994
  __syscall_chdir: ___syscall_chdir,
5970
5995
  /** @export */
5971
5996
  __syscall_chmod: ___syscall_chmod,
@@ -6122,6 +6147,8 @@ var wasmImports = {
6122
6147
  /** @export */
6123
6148
  invoke_ddd,
6124
6149
  /** @export */
6150
+ invoke_ddj,
6151
+ /** @export */
6125
6152
  invoke_ii,
6126
6153
  /** @export */
6127
6154
  invoke_iii,
@@ -6134,10 +6161,14 @@ var wasmImports = {
6134
6161
  /** @export */
6135
6162
  invoke_iijiiiiii,
6136
6163
  /** @export */
6164
+ invoke_ijj,
6165
+ /** @export */
6137
6166
  invoke_ji,
6138
6167
  /** @export */
6139
6168
  invoke_jii,
6140
6169
  /** @export */
6170
+ invoke_jjd,
6171
+ /** @export */
6141
6172
  invoke_vi,
6142
6173
  /** @export */
6143
6174
  invoke_vii,
@@ -6148,7 +6179,7 @@ var wasmImports = {
6148
6179
  /** @export */
6149
6180
  invoke_viiiii,
6150
6181
  /** @export */
6151
- invoke_viiiiiii,
6182
+ invoke_viiiiii,
6152
6183
  /** @export */
6153
6184
  invoke_viiiij,
6154
6185
  /** @export */
@@ -6415,10 +6446,10 @@ function invoke_viiiii(index,a1,a2,a3,a4,a5) {
6415
6446
  }
6416
6447
  }
6417
6448
 
6418
- function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
6449
+ function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
6419
6450
  var sp = stackSave();
6420
6451
  try {
6421
- getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7);
6452
+ getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);
6422
6453
  } catch(e) {
6423
6454
  stackRestore(sp);
6424
6455
  if (!(e instanceof EmscriptenEH)) throw e;
@@ -6525,6 +6556,29 @@ function invoke_viiji(index,a1,a2,a3,a4) {
6525
6556
  }
6526
6557
  }
6527
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
+
6528
6582
  function invoke_viijj(index,a1,a2,a3,a4) {
6529
6583
  var sp = stackSave();
6530
6584
  try {
@@ -6547,6 +6601,17 @@ function invoke_ddd(index,a1,a2) {
6547
6601
  }
6548
6602
  }
6549
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
+
6550
6615
  function invoke_iij(index,a1,a2) {
6551
6616
  var sp = stackSave();
6552
6617
  try {