@ai-ecoverse/slicc-kernel 1.55.0 → 1.56.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.
@@ -1905,6 +1905,7 @@ var init_wasi_host = __esm({
1905
1905
  muted;
1906
1906
  signals;
1907
1907
  interrupted;
1908
+ quietly = (fn) => fn();
1908
1909
  listening;
1909
1910
  o;
1910
1911
  constructor(o) {
@@ -9268,6 +9269,10 @@ var init_wasix_fork = __esm({
9268
9269
  get supported() {
9269
9270
  return typeof this.exports.asyncify_start_unwind === "function";
9270
9271
  }
9272
+ get idle() {
9273
+ const state = this.exports.asyncify_get_state;
9274
+ return !this.supported || typeof state !== "function" || state() === 0;
9275
+ }
9271
9276
  resume() {
9272
9277
  if (this.exports.asyncify_get_state?.() !== UNWINDING) return false;
9273
9278
  this.exports.asyncify_stop_unwind?.();
@@ -10998,13 +11003,49 @@ var wasi_runtime_exports = {};
10998
11003
  __export(wasi_runtime_exports, {
10999
11004
  FALLBACK_MAXIMUM_PAGES: () => FALLBACK_MAXIMUM_PAGES,
11000
11005
  LinkSync: () => LinkSync,
11006
+ UNDELIVERED: () => UNDELIVERED,
11001
11007
  captureBacktraces: () => captureBacktraces,
11008
+ catchUpFirst: () => catchUpFirst,
11002
11009
  createImportedMemory: () => createImportedMemory,
11010
+ delivering: () => delivering,
11003
11011
  runWasiProcess: () => runWasiProcess,
11004
11012
  runWasiThread: () => runWasiThread,
11005
11013
  trapMessage: () => trapMessage,
11006
- unsupportedImport: () => unsupportedImport
11014
+ unsupportedImport: () => unsupportedImport,
11015
+ wireSignals: () => wireSignals
11007
11016
  });
11017
+ function wireSignals(host, gate) {
11018
+ host.interrupted = () => gate.interrupt();
11019
+ host.quietly = (fn) => gate.quiet(fn);
11020
+ }
11021
+ function catchUpFirst(host, sync) {
11022
+ return sync && (() => host.quietly(() => sync.current()));
11023
+ }
11024
+ function deliverAll(imports, host, driver, before) {
11025
+ for (const ns of DELIVERED) {
11026
+ const table = imports[ns];
11027
+ if (table) imports[ns] = delivering(ns, table, host, driver, before);
11028
+ }
11029
+ }
11030
+ function delivering(ns, table, host, driver, before) {
11031
+ const exempt = new Set(UNDELIVERED[ns]);
11032
+ const out = {};
11033
+ for (const [name2, value2] of Object.entries(table)) {
11034
+ if (exempt.has(name2) || typeof value2 !== "function") {
11035
+ out[name2] = value2;
11036
+ continue;
11037
+ }
11038
+ const fn = value2;
11039
+ out[name2] = (...args) => {
11040
+ if (driver.idle) {
11041
+ before?.();
11042
+ host.interrupted?.();
11043
+ }
11044
+ return fn(...args);
11045
+ };
11046
+ }
11047
+ return out;
11048
+ }
11008
11049
  function enosys(module, name2, foreign) {
11009
11050
  const type = foreign?.[module]?.[name2];
11010
11051
  if (type === "other") throw new Error(noErrno(`${module}.${name2}`));
@@ -11203,6 +11244,7 @@ async function instantiate(host, module, memory, threads, {
11203
11244
  sliccFs,
11204
11245
  sliccTty2
11205
11246
  );
11247
+ deliverAll(hostImports, host, driver, catchUpFirst(host, sync));
11206
11248
  const imports = sync ? merge(hostImports, sync.linker.mainImports(module)) : hostImports;
11207
11249
  instance = await WebAssembly.instantiate(module, imports);
11208
11250
  stats?.phase("instantiate");
@@ -11330,7 +11372,7 @@ async function runWasiProcess(init, port3) {
11330
11372
  if (importsSigactionHook(module)) signals.useHook();
11331
11373
  if (fork?.signals) signals.restore(fork.signals);
11332
11374
  host.signals = signals;
11333
- host.interrupted = () => gate.interrupt();
11375
+ wireSignals(host, gate);
11334
11376
  host.onRaise = (sig) => signals.raised(sig);
11335
11377
  host.muted = (fd, data) => signals.muted(fd, data);
11336
11378
  const exports = instance.exports;
@@ -11410,7 +11452,7 @@ async function runWasiThread(init, port3) {
11410
11452
  });
11411
11453
  signals.bind(instance.exports);
11412
11454
  signals.register(SIGNAL_CALLBACK);
11413
- host.interrupted = () => gate.interrupt();
11455
+ wireSignals(host, gate);
11414
11456
  host.onRaise = (sig) => signals.raised(sig);
11415
11457
  const start2 = instance.exports.wasi_thread_start;
11416
11458
  try {
@@ -11436,7 +11478,7 @@ async function runWasiThread(init, port3) {
11436
11478
  throw e;
11437
11479
  }
11438
11480
  }
11439
- var TRAPPED, PREVIEW1, WASIX, SLICC, SIGNAL_CALLBACK, takeDefault, SLICC_FS, SLICC_TTY, RESERVED2, importsSigactionHook, noErrno, FALLBACK_MAXIMUM_PAGES, LinkSync, DL_GEN, BACKTRACE_FRAMES;
11481
+ var TRAPPED, PREVIEW1, WASIX, SLICC, SIGNAL_CALLBACK, takeDefault, SLICC_FS, SLICC_TTY, RESERVED2, UNDELIVERED, DELIVERED, importsSigactionHook, noErrno, FALLBACK_MAXIMUM_PAGES, LinkSync, DL_GEN, BACKTRACE_FRAMES;
11440
11482
  var init_wasi_runtime = __esm({
11441
11483
  "src/process/wasi/wasi-runtime.ts"() {
11442
11484
  "use strict";
@@ -11473,6 +11515,13 @@ var init_wasi_runtime = __esm({
11473
11515
  SLICC_FS = "slicc_fs";
11474
11516
  SLICC_TTY = "slicc_tty";
11475
11517
  RESERVED2 = RESERVED_NAMESPACES;
11518
+ UNDELIVERED = {
11519
+ [PREVIEW1]: ["proc_exit", "clock_time_get"],
11520
+ [WASIX]: ["proc_exit2", "thread_exit", "thread_spawn_v2", "callback_signal"],
11521
+ [SLICC]: ["sigaction_set"],
11522
+ wasi: ["thread-spawn"]
11523
+ };
11524
+ DELIVERED = [PREVIEW1, WASIX, SLICC, SLICC_FS, SLICC_TTY];
11476
11525
  importsSigactionHook = (module) => WebAssembly.Module.imports(module).some((i) => i.module === SLICC && i.name === "sigaction_set");
11477
11526
  noErrno = (key) => `imports ${key}: its result cannot carry ENOSYS, and this host does not provide it`;
11478
11527
  FALLBACK_MAXIMUM_PAGES = 32768;
@@ -11524,6 +11573,9 @@ var init_wasi_runtime = __esm({
11524
11573
  this.bump();
11525
11574
  this.catchUp();
11526
11575
  }
11576
+ current() {
11577
+ if (this.ids && Atomics.load(this.ids, DL_GEN) !== this.gen) this.catchUp();
11578
+ }
11527
11579
  catchUp() {
11528
11580
  for (; ; ) {
11529
11581
  const gen = this.ids ? Atomics.load(this.ids, DL_GEN) : 0;
@@ -11543,9 +11595,9 @@ var init_wasi_runtime = __esm({
11543
11595
  Object.entries(table).map(([name2, fn]) => [
11544
11596
  name2,
11545
11597
  ((...args) => {
11546
- if (Atomics.load(ids, DL_GEN) !== this.gen) this.catchUp();
11598
+ this.current();
11547
11599
  const result = fn(...args);
11548
- if (Atomics.load(ids, DL_GEN) !== this.gen) this.catchUp();
11600
+ this.current();
11549
11601
  return result;
11550
11602
  })
11551
11603
  ])