@ai-ecoverse/slicc-kernel 1.166.3 → 1.166.4

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.
@@ -174,19 +174,22 @@ var init_lockdown = __esm({
174
174
  });
175
175
 
176
176
  // src/realm/sync-sab-wire.ts
177
+ function copyWindow(out, window, chunk, at) {
178
+ setBytes.call(out, bytesPart.call(window, 0, chunk), at);
179
+ }
177
180
  function loadBlocked(header) {
178
- return [capturedAtomics.load(header, SAB_I_BLOCKED), capturedAtomics.load(header, SAB_I_BLOCKED_HI)];
181
+ return [sabLoad(header, SAB_I_BLOCKED), sabLoad(header, SAB_I_BLOCKED_HI)];
179
182
  }
180
183
  function storeBlocked(header, [low, high]) {
181
- capturedAtomics.store(header, SAB_I_BLOCKED_HI, high);
182
- capturedAtomics.store(header, SAB_I_BLOCKED, low);
184
+ sabStore(header, SAB_I_BLOCKED_HI, high);
185
+ sabStore(header, SAB_I_BLOCKED, low);
183
186
  }
184
187
  function loadU53(header, lo, hi) {
185
- return (capturedAtomics.load(header, lo) >>> 0) + capturedAtomics.load(header, hi) * U32;
188
+ return (sabLoad(header, lo) >>> 0) + sabLoad(header, hi) * U32;
186
189
  }
187
190
  function publishMemory(sab, bytes) {
188
191
  if (bytes > 0)
189
- capturedAtomics.store(new capturedInt32Array(sab, 0, SAB_HEADER_I32), SAB_I_MEMORY, capturedMath.ceil(bytes / 65536));
192
+ sabStore(new capturedInt32Array(sab, 0, SAB_HEADER_I32), SAB_I_MEMORY, capturedMath.ceil(bytes / 65536));
190
193
  }
191
194
  function decodeSabResult(status2, payload) {
192
195
  switch (status2) {
@@ -196,14 +199,14 @@ function decodeSabResult(status2, payload) {
196
199
  return { ok: true, kind: "void" };
197
200
  case SAB_STATUS_JSON: {
198
201
  try {
199
- return { ok: true, kind: "json", json: capturedJSON.parse(decoder.decode(payload)) };
202
+ return { ok: true, kind: "json", json: capturedJSON.parse(decodeText.call(decoder, payload)) };
200
203
  } catch {
201
204
  return { ok: false, errno: "EIO", message: "sync-sab: malformed json payload" };
202
205
  }
203
206
  }
204
207
  case SAB_STATUS_ERRNO: {
205
208
  try {
206
- const parsed = capturedJSON.parse(decoder.decode(payload));
209
+ const parsed = capturedJSON.parse(decodeText.call(decoder, payload));
207
210
  const errno2 = typeof parsed.errno === "string" && /^E[A-Z]+$|^EAI_[A-Z]+$/.test(parsed.errno) ? parsed.errno : "EIO";
208
211
  const message2 = capturedString(parsed.message ?? errno2);
209
212
  return {
@@ -230,11 +233,20 @@ function sabViews(sab) {
230
233
  window: new capturedUint8Array(sab, SAB_HEADER_BYTES)
231
234
  };
232
235
  }
233
- var SAB_HEADER_I32, SAB_CLOCK_OFFSET, SAB_CLOCK_I64, SAB_HEADER_BYTES, SAB_I_STATE, SAB_I_SEQ, SAB_I_STATUS, SAB_I_TOTAL, SAB_I_CHUNK, SAB_I_OFFSET, SAB_I_REQ, SAB_I_PUB, SAB_I_SIGNALS, SAB_I_TIMERS, SAB_I_MEMORY, SAB_I_TOTAL_HI, SAB_I_OFFSET_HI, SAB_I_KILLED, SAB_I_ASYNC, SAB_I_STOP, SAB_I_BLOCKED, SAB_I_BLOCKED_HI, anyBlocked, U32, SAB_STATE_IDLE, SAB_STATE_PENDING, SAB_STATE_READY, SAB_STATUS_BYTES, SAB_STATUS_JSON, SAB_STATUS_VOID, SAB_STATUS_ERRNO, SAB_DEFAULT_WINDOW_BYTES, SAB_MIN_BYTES, SYNC_SAB_REQ_MSG, SYNC_SAB_NEXT_MSG, encoder, decoder;
236
+ var atomicLoad, atomicStore, atomicWaitAsync, setBytes, bytesPart, decodeText, sabLoad, sabStore, sabWaitAsync, SAB_HEADER_I32, SAB_CLOCK_OFFSET, SAB_CLOCK_I64, SAB_HEADER_BYTES, SAB_I_STATE, SAB_I_SEQ, SAB_I_STATUS, SAB_I_TOTAL, SAB_I_CHUNK, SAB_I_OFFSET, SAB_I_REQ, SAB_I_PUB, SAB_I_SIGNALS, SAB_I_TIMERS, SAB_I_MEMORY, SAB_I_TOTAL_HI, SAB_I_OFFSET_HI, SAB_I_KILLED, SAB_I_ASYNC, SAB_I_STOP, SAB_I_BLOCKED, SAB_I_BLOCKED_HI, anyBlocked, U32, SAB_STATE_IDLE, SAB_STATE_PENDING, SAB_STATE_READY, SAB_STATUS_BYTES, SAB_STATUS_JSON, SAB_STATUS_VOID, SAB_STATUS_ERRNO, SAB_DEFAULT_WINDOW_BYTES, SAB_MIN_BYTES, SYNC_SAB_REQ_MSG, SYNC_SAB_NEXT_MSG, encoder, decoder;
234
237
  var init_sync_sab_wire = __esm({
235
238
  "src/realm/sync-sab-wire.ts"() {
236
239
  "use strict";
237
240
  init_captured_globals();
241
+ atomicLoad = capturedAtomics.load;
242
+ atomicStore = capturedAtomics.store;
243
+ atomicWaitAsync = capturedAtomics.waitAsync;
244
+ setBytes = capturedUint8Array.prototype.set;
245
+ bytesPart = capturedUint8Array.prototype.subarray;
246
+ decodeText = capturedTextDecoder.prototype.decode;
247
+ sabLoad = (a, i) => atomicLoad(a, i);
248
+ sabStore = (a, i, v) => atomicStore(a, i, v);
249
+ sabWaitAsync = atomicWaitAsync;
238
250
  SAB_HEADER_I32 = 18;
239
251
  SAB_CLOCK_OFFSET = SAB_HEADER_I32 * 4;
240
252
  SAB_CLOCK_I64 = 3;
@@ -287,9 +299,9 @@ function useLocalClock(sab) {
287
299
  if (!local) return;
288
300
  localSab = sab;
289
301
  localStart = epochMicros();
290
- const wait2 = (typed, index3, value2, timeout) => localWait(
291
- () => rawWait(typed, index3, value2, timeout),
292
- timeout !== 0 && capturedAtomics.load(typed, index3) === value2
302
+ const wait2 = (typed3, index3, value2, timeout) => localWait(
303
+ () => rawWait(typed3, index3, value2, timeout),
304
+ timeout !== 0 && capturedAtomics.load(typed3, index3) === value2
293
305
  );
294
306
  capturedAtomics.wait = wait2;
295
307
  }
@@ -1344,7 +1356,7 @@ function createSyncSabTransport(sab, port2, deps = {}) {
1344
1356
  const now = deps.now ?? (() => capturedperformance.now());
1345
1357
  let seq = 0;
1346
1358
  let typical = 0;
1347
- const ready = (id) => capturedAtomics.load(header, SAB_I_STATE) === SAB_STATE_READY && capturedAtomics.load(header, SAB_I_SEQ) === id;
1359
+ const ready = (id) => sabLoad(header, SAB_I_STATE) === SAB_STATE_READY && sabLoad(header, SAB_I_SEQ) === id;
1348
1360
  function spinUntil(id, until) {
1349
1361
  for (let stride = 0; stride < SPIN_STRIDES; stride++) {
1350
1362
  for (let i = 0; i < SPIN_STRIDE; i++) if (ready(id)) return true;
@@ -1362,7 +1374,7 @@ function createSyncSabTransport(sab, port2, deps = {}) {
1362
1374
  return;
1363
1375
  }
1364
1376
  for (; ; ) {
1365
- const published = capturedAtomics.load(header, SAB_I_PUB);
1377
+ const published = sabLoad(header, SAB_I_PUB);
1366
1378
  if (ready(id)) {
1367
1379
  settled2(start2);
1368
1380
  return;
@@ -1373,7 +1385,7 @@ function createSyncSabTransport(sab, port2, deps = {}) {
1373
1385
  }
1374
1386
  }
1375
1387
  return {
1376
- call(asked, timeoutMs2, label, given = []) {
1388
+ call(asked, timeoutMs2, label, given = [], sink) {
1377
1389
  if (deps.memory) publishMemory(sab, deps.memory());
1378
1390
  const { req, transfer } = exactBody(asked, given);
1379
1391
  const id = ++seq;
@@ -1381,10 +1393,10 @@ function createSyncSabTransport(sab, port2, deps = {}) {
1381
1393
  let out = null;
1382
1394
  let status2 = 0;
1383
1395
  let offset = 0;
1384
- capturedAtomics.store(header, SAB_I_REQ, id);
1396
+ sabStore(header, SAB_I_REQ, id);
1385
1397
  try {
1386
1398
  for (; ; ) {
1387
- capturedAtomics.store(header, SAB_I_STATE, SAB_STATE_PENDING);
1399
+ sabStore(header, SAB_I_STATE, SAB_STATE_PENDING);
1388
1400
  const msg = offset === 0 ? { type: SYNC_SAB_REQ_MSG, id, req } : { type: SYNC_SAB_NEXT_MSG, id, offset };
1389
1401
  try {
1390
1402
  if (offset === 0 && transfer.length > 0) port2.postMessage(msg, transfer);
@@ -1394,28 +1406,34 @@ function createSyncSabTransport(sab, port2, deps = {}) {
1394
1406
  }
1395
1407
  awaitReady(id, now() + timeoutMs2, label);
1396
1408
  const total = loadU53(header, SAB_I_TOTAL, SAB_I_TOTAL_HI);
1397
- const chunk = capturedAtomics.load(header, SAB_I_CHUNK);
1409
+ const chunk = sabLoad(header, SAB_I_CHUNK);
1398
1410
  const at = loadU53(header, SAB_I_OFFSET, SAB_I_OFFSET_HI);
1399
1411
  if (at !== offset || chunk < 0 || total < 0 || offset + chunk > total) {
1400
1412
  throw syncError("EIO", label);
1401
1413
  }
1402
1414
  if (out === null) {
1403
- status2 = capturedAtomics.load(header, SAB_I_STATUS);
1404
- out = new capturedUint8Array(total);
1415
+ status2 = sabLoad(header, SAB_I_STATUS);
1416
+ out = landing(status2, total, sink);
1405
1417
  }
1406
- out.set(window.subarray(0, chunk), offset);
1418
+ copyWindow(out, window, chunk, offset);
1407
1419
  offset += chunk;
1408
1420
  if (offset >= total) break;
1409
1421
  if (chunk === 0) throw syncError("EIO", label);
1410
1422
  }
1411
1423
  } finally {
1412
- capturedAtomics.store(header, SAB_I_REQ, 0);
1413
- capturedAtomics.store(header, SAB_I_STATE, SAB_STATE_IDLE);
1424
+ sabStore(header, SAB_I_REQ, 0);
1425
+ sabStore(header, SAB_I_STATE, SAB_STATE_IDLE);
1414
1426
  }
1415
1427
  return decodeSabResult(status2, out);
1416
1428
  }
1417
1429
  };
1418
1430
  }
1431
+ function landing(status2, total, sink) {
1432
+ if (!sink || status2 !== SAB_STATUS_BYTES || total > lengthOf.call(sink)) {
1433
+ return new capturedUint8Array(total);
1434
+ }
1435
+ return new capturedUint8Array(bufferOf.call(sink), offsetOf.call(sink), total);
1436
+ }
1419
1437
  function errnoError(code2, path, direct) {
1420
1438
  const err = syncError(code2, `sync-sab bridge, '${path}'`);
1421
1439
  return direct ? capturedObject.assign(err, { direct }) : err;
@@ -1607,7 +1625,7 @@ function createSyncFsSabBridge(transport, opts = {}) {
1607
1625
  )
1608
1626
  };
1609
1627
  }
1610
- var UNCOUNTED_OPS, calls, looks, SPIN_MS, SPIN_STRIDE, SPIN_STRIDES, SPIN_CORES, spinning, SPIN_CAP_MS;
1628
+ var UNCOUNTED_OPS, calls, looks, SPIN_MS, SPIN_STRIDE, SPIN_STRIDES, SPIN_CORES, spinning, SPIN_CAP_MS, typed, getter, bufferOf, offsetOf, lengthOf;
1611
1629
  var init_sync_sab_bridge = __esm({
1612
1630
  "src/realm/sync-sab-bridge.ts"() {
1613
1631
  "use strict";
@@ -1625,6 +1643,11 @@ var init_sync_sab_bridge = __esm({
1625
1643
  SPIN_CORES = 4;
1626
1644
  spinning = (capturedGlobalThis.navigator?.hardwareConcurrency ?? 0) >= SPIN_CORES;
1627
1645
  SPIN_CAP_MS = 1;
1646
+ typed = capturedObject.getPrototypeOf(capturedUint8Array.prototype);
1647
+ getter = (name2) => capturedObject.getOwnPropertyDescriptor(typed, name2)?.get;
1648
+ bufferOf = getter("buffer");
1649
+ offsetOf = getter("byteOffset");
1650
+ lengthOf = getter("length");
1628
1651
  }
1629
1652
  });
1630
1653
 
@@ -3083,7 +3106,7 @@ var init_version = __esm({
3083
3106
  "src/version.ts"() {
3084
3107
  "use strict";
3085
3108
  init_captured_globals();
3086
- KERNEL_VERSION = true ? "1.166.3" : "0.0.0-dev";
3109
+ KERNEL_VERSION = true ? "1.166.4" : "0.0.0-dev";
3087
3110
  OS_RELEASE = "6.0.0-slicc";
3088
3111
  }
3089
3112
  });
@@ -3556,7 +3579,7 @@ function syncFsync(imports, fs, glue) {
3556
3579
  };
3557
3580
  }
3558
3581
  }
3559
- function offsetOf(rest2) {
3582
+ function offsetOf2(rest2) {
3560
3583
  const at = rest2.length >= 3 ? capturedNumber(rest2[1]) * 2 ** 32 + (capturedNumber(rest2[0]) >>> 0) : capturedNumber(capturedBigInt.asIntN(64, capturedBigInt(rest2[0])));
3561
3584
  return at >= 0 && capturedNumber.isSafeInteger(at) ? at : void 0;
3562
3585
  }
@@ -3578,7 +3601,7 @@ function positioned(original, write2, deps) {
3578
3601
  if (kfd === void 0 || !memory || !(write2 ? deps.sys.pwrite : deps.sys.pread)) {
3579
3602
  return original(fd, iov, iovcnt, ...rest2);
3580
3603
  }
3581
- const at = offsetOf(rest2);
3604
+ const at = offsetOf2(rest2);
3582
3605
  if (at === void 0) return wasiErrno("EINVAL");
3583
3606
  const view = new capturedDataView(memory.buffer);
3584
3607
  let done = 0;
@@ -8025,8 +8048,8 @@ function createAsyncSabTransport(sab, port2, waitAsync = defaultWaitAsync) {
8025
8048
  let tail = capturedPromise.resolve();
8026
8049
  async function ready(id) {
8027
8050
  for (; ; ) {
8028
- const published = capturedAtomics.load(header, SAB_I_PUB);
8029
- if (capturedAtomics.load(header, SAB_I_STATE) === SAB_STATE_READY && capturedAtomics.load(header, SAB_I_SEQ) === id) {
8051
+ const published = sabLoad(header, SAB_I_PUB);
8052
+ if (sabLoad(header, SAB_I_STATE) === SAB_STATE_READY && sabLoad(header, SAB_I_SEQ) === id) {
8030
8053
  return;
8031
8054
  }
8032
8055
  await changed(header, SAB_I_PUB, published, waitAsync);
@@ -8038,31 +8061,31 @@ function createAsyncSabTransport(sab, port2, waitAsync = defaultWaitAsync) {
8038
8061
  let out = null;
8039
8062
  let status2 = 0;
8040
8063
  let offset = 0;
8041
- capturedAtomics.store(header, SAB_I_REQ, id);
8064
+ sabStore(header, SAB_I_REQ, id);
8042
8065
  try {
8043
8066
  for (; ; ) {
8044
- capturedAtomics.store(header, SAB_I_STATE, SAB_STATE_PENDING);
8067
+ sabStore(header, SAB_I_STATE, SAB_STATE_PENDING);
8045
8068
  if (offset === 0) port2.postMessage({ type: SYNC_SAB_REQ_MSG, id, req }, transfer);
8046
8069
  else port2.postMessage({ type: SYNC_SAB_NEXT_MSG, id, offset });
8047
8070
  await ready(id);
8048
8071
  const total = loadU53(header, SAB_I_TOTAL, SAB_I_TOTAL_HI);
8049
- const chunk = capturedAtomics.load(header, SAB_I_CHUNK);
8072
+ const chunk = sabLoad(header, SAB_I_CHUNK);
8050
8073
  const at = loadU53(header, SAB_I_OFFSET, SAB_I_OFFSET_HI);
8051
8074
  if (at !== offset || chunk < 0 || total < 0 || offset + chunk > total) {
8052
8075
  return { ok: false, errno: "EIO", message: "sync-sab: torn reply" };
8053
8076
  }
8054
8077
  if (out === null) {
8055
- status2 = capturedAtomics.load(header, SAB_I_STATUS);
8078
+ status2 = sabLoad(header, SAB_I_STATUS);
8056
8079
  out = new capturedUint8Array(total);
8057
8080
  }
8058
- out.set(window.subarray(0, chunk), offset);
8081
+ copyWindow(out, window, chunk, offset);
8059
8082
  offset += chunk;
8060
8083
  if (offset >= total) break;
8061
8084
  if (chunk === 0) return { ok: false, errno: "EIO", message: "sync-sab: empty chunk" };
8062
8085
  }
8063
8086
  } finally {
8064
- capturedAtomics.store(header, SAB_I_REQ, 0);
8065
- capturedAtomics.store(header, SAB_I_STATE, SAB_STATE_IDLE);
8087
+ sabStore(header, SAB_I_REQ, 0);
8088
+ sabStore(header, SAB_I_STATE, SAB_STATE_IDLE);
8066
8089
  }
8067
8090
  return decodeSabResult(status2, out);
8068
8091
  }
@@ -8081,7 +8104,7 @@ var init_async_sab = __esm({
8081
8104
  init_captured_globals();
8082
8105
  init_sync_sab_bridge();
8083
8106
  init_sync_sab_wire();
8084
- defaultWaitAsync = (a, i, v) => capturedAtomics.waitAsync(a, i, v);
8107
+ defaultWaitAsync = (a, i, v) => sabWaitAsync(a, i, v);
8085
8108
  }
8086
8109
  });
8087
8110
 
@@ -17734,13 +17757,17 @@ var init_js_run = __esm({
17734
17757
  });
17735
17758
 
17736
17759
  // src/process/js/js-sync.ts
17760
+ function viewOf(into, at, length) {
17761
+ return new capturedUint8Array(bufferOf2.call(into), offsetOf3.call(into) + at, length);
17762
+ }
17737
17763
  function laneOf(lane, silence = SYNC_FS_REQUEST_TIMEOUT_MS, open = createSyncSabTransport) {
17738
17764
  if (!lane) return noLane;
17739
17765
  const transport = open(lane.sab, lane.port);
17740
- return (req) => {
17741
- if (!READ_ONLY.has(req.op)) return transport.call(req, capturedNumber.POSITIVE_INFINITY, req.op);
17766
+ return (req, sink) => {
17767
+ if (!READ_ONLY.has(req.op))
17768
+ return transport.call(req, capturedNumber.POSITIVE_INFINITY, req.op, void 0, sink);
17742
17769
  try {
17743
- return transport.call(req, silence, req.op);
17770
+ return transport.call(req, silence, req.op, void 0, sink);
17744
17771
  } catch (err) {
17745
17772
  const errno2 = err?.code;
17746
17773
  return {
@@ -17906,10 +17933,17 @@ function syncFile(kernel, fd, path, append, forget) {
17906
17933
  live();
17907
17934
  const max = capturedMath.min(length - got, MAX_PREAD);
17908
17935
  if (max <= 0) break;
17909
- const chunk = kernel.bytes({ op: "fd-pread", fd, offset: position + got, max });
17936
+ const req = { op: "fd-pread", fd, offset: position + got, max };
17937
+ if (target) {
17938
+ const at = target.at + got;
17939
+ const n = kernel.bytesInto(req, viewOf(target.into, at, max));
17940
+ if (n === 0) break;
17941
+ got += n;
17942
+ continue;
17943
+ }
17944
+ const chunk = kernel.bytes(req);
17910
17945
  if (chunk.length === 0) break;
17911
- if (target) target.into.set(chunk, target.at + got);
17912
- else parts.push(chunk);
17946
+ parts.push(chunk);
17913
17947
  got += chunk.length;
17914
17948
  } while (got < length);
17915
17949
  return target ? got : joined(parts, got);
@@ -18038,7 +18072,7 @@ function syncPathOps(kernel, resolve, statOf, open, clean) {
18038
18072
  }
18039
18073
  };
18040
18074
  }
18041
- var encoder4, noLane, READ_ONLY, JsSyncKernel;
18075
+ var encoder4, typed2, getter2, bufferOf2, offsetOf3, setInto, noLane, READ_ONLY, JsSyncKernel;
18042
18076
  var init_js_sync = __esm({
18043
18077
  "src/process/js/js-sync.ts"() {
18044
18078
  "use strict";
@@ -18053,6 +18087,11 @@ var init_js_sync = __esm({
18053
18087
  init_js_proc();
18054
18088
  init_js_rights();
18055
18089
  encoder4 = new capturedTextEncoder();
18090
+ typed2 = capturedObject.getPrototypeOf(capturedUint8Array.prototype);
18091
+ getter2 = (name2) => capturedObject.getOwnPropertyDescriptor(typed2, name2)?.get;
18092
+ bufferOf2 = getter2("buffer");
18093
+ offsetOf3 = getter2("byteOffset");
18094
+ setInto = capturedUint8Array.prototype.set;
18056
18095
  noLane = () => ({ ok: false, errno: "ENOSYS", message: "no sync lane" });
18057
18096
  READ_ONLY = new capturedSet([...SYNC_FS_READ_ONLY, "fd-path-flush"]);
18058
18097
  JsSyncKernel = class {
@@ -18065,9 +18104,9 @@ var init_js_sync = __esm({
18065
18104
  this.kernel = kernel;
18066
18105
  this.unwind = unwind;
18067
18106
  }
18068
- raw(req) {
18107
+ raw(req, sink) {
18069
18108
  this.unwind();
18070
- const result = this.lane(req);
18109
+ const result = this.lane(req, sink);
18071
18110
  this.kernel.deliver();
18072
18111
  this.unwind();
18073
18112
  return result;
@@ -18085,6 +18124,15 @@ var init_js_sync = __esm({
18085
18124
  const result = this.call(req);
18086
18125
  return result.ok && result.kind === "bytes" ? result.bytes : new capturedUint8Array(0);
18087
18126
  }
18127
+ bytesInto(req, sink) {
18128
+ const result = this.raw(req, sink);
18129
+ if (!result.ok) throw callError(result, req.op);
18130
+ if (result.kind !== "bytes") return 0;
18131
+ const { bytes } = result;
18132
+ if (bufferOf2.call(bytes) !== bufferOf2.call(sink) || offsetOf3.call(bytes) !== offsetOf3.call(sink))
18133
+ setInto.call(sink, bytes);
18134
+ return bytes.length;
18135
+ }
18088
18136
  blocking(req) {
18089
18137
  for (; ; ) {
18090
18138
  const result = this.raw(req);