@rezless/vm 0.6.1 → 0.7.0

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.
Files changed (104) hide show
  1. package/dist/builtins/base64.d.ts +5 -2
  2. package/dist/builtins/base64.d.ts.map +1 -1
  3. package/dist/builtins/base64.js +7 -5
  4. package/dist/builtins/base64.js.map +1 -1
  5. package/dist/builtins/detected.d.ts.map +1 -1
  6. package/dist/builtins/detected.js +1 -1
  7. package/dist/builtins/detected.js.map +1 -1
  8. package/dist/builtins/hash.d.ts +1 -0
  9. package/dist/builtins/hash.d.ts.map +1 -1
  10. package/dist/builtins/hash.js +12 -2
  11. package/dist/builtins/hash.js.map +1 -1
  12. package/dist/builtins/index.d.ts.map +1 -1
  13. package/dist/builtins/index.js +18 -7
  14. package/dist/builtins/index.js.map +1 -1
  15. package/dist/builtins/inventory.d.ts +7 -5
  16. package/dist/builtins/inventory.d.ts.map +1 -1
  17. package/dist/builtins/inventory.js +36 -14
  18. package/dist/builtins/inventory.js.map +1 -1
  19. package/dist/builtins/json.d.ts.map +1 -1
  20. package/dist/builtins/json.js +45 -34
  21. package/dist/builtins/json.js.map +1 -1
  22. package/dist/builtins/link-info.js +2 -2
  23. package/dist/builtins/link-info.js.map +1 -1
  24. package/dist/builtins/linksetdata.d.ts.map +1 -1
  25. package/dist/builtins/linksetdata.js +6 -9
  26. package/dist/builtins/linksetdata.js.map +1 -1
  27. package/dist/builtins/lists.d.ts +15 -0
  28. package/dist/builtins/lists.d.ts.map +1 -1
  29. package/dist/builtins/lists.js +126 -19
  30. package/dist/builtins/lists.js.map +1 -1
  31. package/dist/builtins/math.d.ts +2 -0
  32. package/dist/builtins/math.d.ts.map +1 -1
  33. package/dist/builtins/math.js +34 -8
  34. package/dist/builtins/math.js.map +1 -1
  35. package/dist/builtins/object.d.ts +5 -2
  36. package/dist/builtins/object.d.ts.map +1 -1
  37. package/dist/builtins/object.js +13 -5
  38. package/dist/builtins/object.js.map +1 -1
  39. package/dist/builtins/prim-accessors.d.ts +1 -0
  40. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  41. package/dist/builtins/prim-accessors.js +51 -24
  42. package/dist/builtins/prim-accessors.js.map +1 -1
  43. package/dist/builtins/prim-params.d.ts.map +1 -1
  44. package/dist/builtins/prim-params.js +6 -2
  45. package/dist/builtins/prim-params.js.map +1 -1
  46. package/dist/builtins/script-control.d.ts +4 -3
  47. package/dist/builtins/script-control.d.ts.map +1 -1
  48. package/dist/builtins/script-control.js +22 -8
  49. package/dist/builtins/script-control.js.map +1 -1
  50. package/dist/builtins/strings.d.ts +6 -0
  51. package/dist/builtins/strings.d.ts.map +1 -1
  52. package/dist/builtins/strings.js +47 -6
  53. package/dist/builtins/strings.js.map +1 -1
  54. package/dist/builtins/time.d.ts +3 -5
  55. package/dist/builtins/time.d.ts.map +1 -1
  56. package/dist/builtins/time.js +4 -7
  57. package/dist/builtins/time.js.map +1 -1
  58. package/dist/clock.d.ts +16 -6
  59. package/dist/clock.d.ts.map +1 -1
  60. package/dist/clock.js +38 -11
  61. package/dist/clock.js.map +1 -1
  62. package/dist/dispatch.d.ts +3 -2
  63. package/dist/dispatch.d.ts.map +1 -1
  64. package/dist/dispatch.js +15 -10
  65. package/dist/dispatch.js.map +1 -1
  66. package/dist/interpreter.d.ts +5 -9
  67. package/dist/interpreter.d.ts.map +1 -1
  68. package/dist/interpreter.js +143 -70
  69. package/dist/interpreter.js.map +1 -1
  70. package/dist/linkset.d.ts +11 -3
  71. package/dist/linkset.d.ts.map +1 -1
  72. package/dist/linkset.js +32 -11
  73. package/dist/linkset.js.map +1 -1
  74. package/dist/memory.d.ts +5 -2
  75. package/dist/memory.d.ts.map +1 -1
  76. package/dist/memory.js +5 -2
  77. package/dist/memory.js.map +1 -1
  78. package/dist/prim-params.d.ts +27 -10
  79. package/dist/prim-params.d.ts.map +1 -1
  80. package/dist/prim-params.js +198 -122
  81. package/dist/prim-params.js.map +1 -1
  82. package/dist/prim.d.ts +1 -1
  83. package/dist/prim.d.ts.map +1 -1
  84. package/dist/prim.js +2 -2
  85. package/dist/prim.js.map +1 -1
  86. package/dist/runtime.d.ts +11 -3
  87. package/dist/runtime.d.ts.map +1 -1
  88. package/dist/script.d.ts +24 -10
  89. package/dist/script.d.ts.map +1 -1
  90. package/dist/script.js +118 -65
  91. package/dist/script.js.map +1 -1
  92. package/dist/typecheck.d.ts +3 -1
  93. package/dist/typecheck.d.ts.map +1 -1
  94. package/dist/typecheck.js +25 -5
  95. package/dist/typecheck.js.map +1 -1
  96. package/dist/values/coerce.d.ts +1 -1
  97. package/dist/values/coerce.d.ts.map +1 -1
  98. package/dist/values/coerce.js +10 -6
  99. package/dist/values/coerce.js.map +1 -1
  100. package/dist/values/format.d.ts +3 -1
  101. package/dist/values/format.d.ts.map +1 -1
  102. package/dist/values/format.js +12 -6
  103. package/dist/values/format.js.map +1 -1
  104. package/package.json +2 -2
@@ -5,7 +5,15 @@ import { typedList } from './values/list-types.js';
5
5
  import { applyBinary, applyUnary, reduceCompound, truthy } from './values/ops.js';
6
6
  import { Env } from './env.js';
7
7
  import { own } from './own.js';
8
- import { StackHeapCollision, frameBytes } from './memory.js';
8
+ import { RuntimeError, StackHeapCollision, frameBytes } from './memory.js';
9
+ import { HaltSignal } from './builtins/object.js';
10
+ /** Mono can't run a function or handler that uses the value of a key print. */
11
+ class InvalidProgram extends RuntimeError {
12
+ constructor(name) {
13
+ super(`System.InvalidProgramException: Invalid IL code in LSL :${name} ()`);
14
+ this.name = 'InvalidProgram';
15
+ }
16
+ }
9
17
  class ReturnSignal {
10
18
  value;
11
19
  constructor(value) {
@@ -24,7 +32,56 @@ export class StateChangeSignal {
24
32
  this.target = target;
25
33
  }
26
34
  }
35
+ /** Calls nested deeper than this are a Stack-Heap Collision even without the memory model. */
36
+ const MAX_CALL_DEPTH = 10_000;
27
37
  export function execHandler(ctx, handler, args = []) {
38
+ return trampoline(runHandler(ctx, handler, args));
39
+ }
40
+ function* trampoline(root) {
41
+ const frames = [root];
42
+ let sent;
43
+ let thrown = null;
44
+ try {
45
+ for (;;) {
46
+ const frame = frames[frames.length - 1];
47
+ let step;
48
+ try {
49
+ step = thrown ? frame.throw(thrown.error) : frame.next(sent);
50
+ }
51
+ catch (error) {
52
+ frames.pop();
53
+ if (frames.length === 0)
54
+ throw error;
55
+ thrown = { error };
56
+ continue;
57
+ }
58
+ thrown = null;
59
+ sent = undefined;
60
+ if (step.done) {
61
+ frames.pop();
62
+ if (frames.length === 0)
63
+ return;
64
+ sent = step.value;
65
+ }
66
+ else if ('until' in step.value) {
67
+ yield step.value;
68
+ }
69
+ else if (frames.length > MAX_CALL_DEPTH) {
70
+ thrown = { error: new StackHeapCollision() };
71
+ }
72
+ else {
73
+ frames.push(step.value);
74
+ }
75
+ }
76
+ }
77
+ finally {
78
+ while (frames.length > 0)
79
+ frames.pop().return(undefined);
80
+ }
81
+ }
82
+ function* runHandler(ctx, handler, args) {
83
+ if (ctx.invalidPrograms.has(handler))
84
+ throw new InvalidProgram(handler.name);
28
85
  if (ctx.state.coverage) {
29
86
  ctx.state.coverage.hitFunction(handler.loc);
30
87
  // execBlock bypasses execStatement for the outermost body, so credit
@@ -39,7 +96,7 @@ export function execHandler(ctx, handler, args = []) {
39
96
  const a = args[i] ?? defaultEvalFor(p.typeName);
40
97
  env.declare(p.name, p.typeName, a);
41
98
  });
42
- execBlock(ctx, env, handler.body);
99
+ yield* execBlock(ctx, env, handler.body);
43
100
  }
44
101
  catch (e) {
45
102
  if (e instanceof ReturnSignal)
@@ -55,7 +112,9 @@ export function execHandler(ctx, handler, args = []) {
55
112
  * functions see globals only), binds args to params, runs the body,
56
113
  * and unwraps a ReturnSignal into the function's return value.
57
114
  */
58
- export function callUserFunction(ctx, fn, args) {
115
+ function* callUserFunction(ctx, fn, args) {
116
+ if (ctx.invalidPrograms.has(fn))
117
+ throw new InvalidProgram(fn.name);
59
118
  if (ctx.state.coverage) {
60
119
  ctx.state.coverage.hitFunction(fn.loc);
61
120
  ctx.state.coverage.hitStatement(fn.body.loc);
@@ -70,7 +129,7 @@ export function callUserFunction(ctx, fn, args) {
70
129
  const a = args[i] ?? defaultEvalFor(p.typeName);
71
130
  env.declare(p.name, p.typeName, a);
72
131
  });
73
- execBlock(ctx, env, fn.body);
132
+ yield* execBlock(ctx, env, fn.body);
74
133
  }
75
134
  catch (e) {
76
135
  if (e instanceof ReturnSignal) {
@@ -96,7 +155,7 @@ export function callUserFunction(ctx, fn, args) {
96
155
  // Fell off end without explicit return.
97
156
  return fn.returnType ? defaultEvalFor(fn.returnType) : { type: 'void', value: 0 };
98
157
  }
99
- function execBlock(ctx, env, block) {
158
+ function* execBlock(ctx, env, block) {
100
159
  const child = env.push();
101
160
  // Pre-scan: collect label positions and detect duplicate variable names.
102
161
  // Duplicate-decl detection has to run upfront because we use
@@ -124,13 +183,15 @@ function execBlock(ctx, env, block) {
124
183
  while (i < block.body.length) {
125
184
  const stmt = block.body[i];
126
185
  try {
127
- execStatement(ctx, child, stmt);
186
+ yield* execStatement(ctx, child, stmt);
128
187
  i++;
129
188
  }
130
189
  catch (e) {
131
190
  if (e instanceof JumpSignal && labels && labels.has(e.label)) {
132
- // Resume execution at the label.
133
- i = labels.get(e.label) + 1;
191
+ const at = labels.get(e.label);
192
+ if (at < i)
193
+ iterate(ctx);
194
+ i = at + 1;
134
195
  continue;
135
196
  }
136
197
  throw e;
@@ -141,35 +202,35 @@ function execBlock(ctx, env, block) {
141
202
  child.clear();
142
203
  }
143
204
  }
144
- function execStatement(ctx, env, stmt) {
205
+ function* execStatement(ctx, env, stmt) {
145
206
  if (ctx.state.coverage)
146
207
  ctx.state.coverage.hitStatement(stmt.loc);
147
208
  switch (stmt.kind) {
148
209
  case 'BlockStatement':
149
- execBlock(ctx, env, stmt);
210
+ yield* execBlock(ctx, env, stmt);
150
211
  return;
151
212
  case 'EmptyStatement':
152
213
  return;
153
214
  case 'VariableDeclaration':
154
- execVariableDeclaration(ctx, env, stmt);
215
+ yield* execVariableDeclaration(ctx, env, stmt);
155
216
  return;
156
217
  case 'ExpressionStatement':
157
- evalExpression(ctx, env, stmt.expression);
218
+ yield* evalExpression(ctx, env, stmt.expression.kind === 'PrintExpression' ? stmt.expression.argument : stmt.expression);
158
219
  return;
159
220
  case 'IfStatement':
160
- execIf(ctx, env, stmt);
221
+ yield* execIf(ctx, env, stmt);
161
222
  return;
162
223
  case 'WhileStatement':
163
- execWhile(ctx, env, stmt);
224
+ yield* execWhile(ctx, env, stmt);
164
225
  return;
165
226
  case 'DoWhileStatement':
166
- execDoWhile(ctx, env, stmt);
227
+ yield* execDoWhile(ctx, env, stmt);
167
228
  return;
168
229
  case 'ForStatement':
169
- execFor(ctx, env, stmt);
230
+ yield* execFor(ctx, env, stmt);
170
231
  return;
171
232
  case 'ReturnStatement': {
172
- const value = stmt.argument ? evalExpression(ctx, env, stmt.argument) : null;
233
+ const value = stmt.argument ? (yield* evalExpression(ctx, env, stmt.argument)) : null;
173
234
  throw new ReturnSignal(value);
174
235
  }
175
236
  case 'StateChangeStatement':
@@ -181,57 +242,59 @@ function execStatement(ctx, env, stmt) {
181
242
  return;
182
243
  }
183
244
  }
184
- function execVariableDeclaration(ctx, env, stmt) {
185
- const init = stmt.init ? evalExpression(ctx, env, stmt.init) : undefined;
245
+ function* execVariableDeclaration(ctx, env, stmt) {
246
+ const init = stmt.init ? (yield* evalExpression(ctx, env, stmt.init)) : undefined;
186
247
  // declareOrReset lets a backward `jump` re-execute a VariableDeclaration —
187
248
  // the second pass updates the existing slot's value rather than throwing
188
249
  // "already declared". The duplicate-source guard runs upfront in execBlock.
189
250
  env.declareOrReset(stmt.name, stmt.typeName, init);
190
251
  }
191
- function execIf(ctx, env, stmt) {
252
+ function* execIf(ctx, env, stmt) {
192
253
  const cov = ctx.state.coverage;
193
- if (truthy(evalExpression(ctx, env, stmt.test))) {
254
+ if (truthy(yield* evalExpression(ctx, env, stmt.test))) {
194
255
  if (cov)
195
256
  cov.hitBranch(stmt.loc, true);
196
- execStatement(ctx, env, stmt.consequent);
257
+ yield* execStatement(ctx, env, stmt.consequent);
197
258
  }
198
259
  else {
199
260
  if (cov)
200
261
  cov.hitBranch(stmt.loc, false);
201
262
  if (stmt.alternate)
202
- execStatement(ctx, env, stmt.alternate);
263
+ yield* execStatement(ctx, env, stmt.alternate);
203
264
  }
204
265
  }
205
- function execWhile(ctx, env, stmt) {
266
+ function* execWhile(ctx, env, stmt) {
206
267
  const cov = ctx.state.coverage;
207
268
  while (true) {
208
- const t = truthy(evalExpression(ctx, env, stmt.test));
269
+ const t = truthy(yield* evalExpression(ctx, env, stmt.test));
209
270
  if (cov)
210
271
  cov.hitBranch(stmt.loc, t);
211
272
  if (!t)
212
273
  break;
213
- execStatement(ctx, env, stmt.body);
274
+ yield* execStatement(ctx, env, stmt.body);
275
+ iterate(ctx);
214
276
  }
215
277
  }
216
- function execDoWhile(ctx, env, stmt) {
278
+ function* execDoWhile(ctx, env, stmt) {
217
279
  const cov = ctx.state.coverage;
218
280
  while (true) {
219
- execStatement(ctx, env, stmt.body);
220
- const t = truthy(evalExpression(ctx, env, stmt.test));
281
+ yield* execStatement(ctx, env, stmt.body);
282
+ const t = truthy(yield* evalExpression(ctx, env, stmt.test));
221
283
  if (cov)
222
284
  cov.hitBranch(stmt.loc, t);
223
285
  if (!t)
224
286
  break;
287
+ iterate(ctx);
225
288
  }
226
289
  }
227
- function execFor(ctx, env, stmt) {
290
+ function* execFor(ctx, env, stmt) {
228
291
  const child = env.push();
229
292
  const cov = ctx.state.coverage;
230
293
  for (const e of stmt.init)
231
- evalExpression(ctx, child, e);
294
+ yield* evalExpression(ctx, child, e);
232
295
  while (true) {
233
296
  if (stmt.test) {
234
- const t = truthy(evalExpression(ctx, child, stmt.test));
297
+ const t = truthy(yield* evalExpression(ctx, child, stmt.test));
235
298
  if (cov)
236
299
  cov.hitBranch(stmt.loc, t);
237
300
  if (!t)
@@ -241,13 +304,19 @@ function execFor(ctx, env, stmt) {
241
304
  // Infinite loop: still useful to record "body entered".
242
305
  cov.hitBranch(stmt.loc, true);
243
306
  }
244
- execStatement(ctx, child, stmt.body);
307
+ yield* execStatement(ctx, child, stmt.body);
245
308
  for (const e of stmt.update)
246
- evalExpression(ctx, child, e);
309
+ yield* evalExpression(ctx, child, e);
310
+ iterate(ctx);
247
311
  }
248
312
  }
313
+ /** A loop's back-edge, where a script that called llDie or removed itself halts. */
314
+ function iterate(ctx) {
315
+ if (ctx.state.lifecycle.dying || ctx.state.lifecycle.removed)
316
+ throw new HaltSignal();
317
+ }
249
318
  // ---- Expressions ----
250
- function evalExpression(ctx, env, expr) {
319
+ function* evalExpression(ctx, env, expr) {
251
320
  switch (expr.kind) {
252
321
  case 'IntegerLiteral':
253
322
  return { type: 'integer', value: expr.value | 0 };
@@ -256,59 +325,61 @@ function evalExpression(ctx, env, expr) {
256
325
  case 'StringLiteral':
257
326
  return { type: 'string', value: expr.value };
258
327
  case 'VectorLiteral':
259
- return evalVectorLiteral(ctx, env, expr);
328
+ return yield* evalVectorLiteral(ctx, env, expr);
260
329
  case 'RotationLiteral':
261
- return evalRotationLiteral(ctx, env, expr);
330
+ return yield* evalRotationLiteral(ctx, env, expr);
262
331
  case 'ListLiteral':
263
- return evalListLiteral(ctx, env, expr);
332
+ return yield* evalListLiteral(ctx, env, expr);
264
333
  case 'Identifier':
265
334
  return env.get(expr.name);
266
335
  case 'CallExpression':
267
- return evalCall(ctx, env, expr);
336
+ return yield* evalCall(ctx, env, expr);
268
337
  case 'UnaryExpression':
269
- return applyUnary(expr.operator, evalExpression(ctx, env, expr.argument));
338
+ return applyUnary(expr.operator, yield* evalExpression(ctx, env, expr.argument));
270
339
  case 'BinaryExpression':
271
- return evalBinary(ctx, env, expr);
340
+ return yield* evalBinary(ctx, env, expr);
272
341
  case 'AssignmentExpression':
273
- return evalAssignment(ctx, env, expr);
342
+ return yield* evalAssignment(ctx, env, expr);
274
343
  case 'CastExpression':
275
- return coerce(evalExpression(ctx, env, expr.argument), expr.targetType);
344
+ return coerce(yield* evalExpression(ctx, env, expr.argument), expr.targetType);
276
345
  case 'MemberExpression':
277
- return evalMember(ctx, env, expr);
346
+ return yield* evalMember(ctx, env, expr);
278
347
  case 'UpdateExpression':
279
- return evalUpdate(ctx, env, expr);
348
+ return yield* evalUpdate(ctx, env, expr);
280
349
  case 'PrintExpression':
281
- return evalExpression(ctx, env, expr.argument);
350
+ return defaultEvalFor((yield* evalExpression(ctx, env, expr.argument)).type);
282
351
  }
283
352
  }
284
- function evalVectorLiteral(ctx, env, e) {
285
- const x = coerce(evalExpression(ctx, env, e.x), 'float').value;
286
- const y = coerce(evalExpression(ctx, env, e.y), 'float').value;
287
- const z = coerce(evalExpression(ctx, env, e.z), 'float').value;
353
+ function* evalVectorLiteral(ctx, env, e) {
354
+ const x = coerce(yield* evalExpression(ctx, env, e.x), 'float').value;
355
+ const y = coerce(yield* evalExpression(ctx, env, e.y), 'float').value;
356
+ const z = coerce(yield* evalExpression(ctx, env, e.z), 'float').value;
288
357
  return { type: 'vector', value: { x, y, z } };
289
358
  }
290
- function evalRotationLiteral(ctx, env, e) {
291
- const x = coerce(evalExpression(ctx, env, e.x), 'float').value;
292
- const y = coerce(evalExpression(ctx, env, e.y), 'float').value;
293
- const z = coerce(evalExpression(ctx, env, e.z), 'float').value;
294
- const s = coerce(evalExpression(ctx, env, e.s), 'float').value;
359
+ function* evalRotationLiteral(ctx, env, e) {
360
+ const x = coerce(yield* evalExpression(ctx, env, e.x), 'float').value;
361
+ const y = coerce(yield* evalExpression(ctx, env, e.y), 'float').value;
362
+ const z = coerce(yield* evalExpression(ctx, env, e.z), 'float').value;
363
+ const s = coerce(yield* evalExpression(ctx, env, e.s), 'float').value;
295
364
  return { type: 'rotation', value: { x, y, z, s } };
296
365
  }
297
- function evalListLiteral(ctx, env, e) {
298
- const elements = e.elements.map((el) => evalExpression(ctx, env, el));
366
+ function* evalListLiteral(ctx, env, e) {
367
+ const elements = [];
368
+ for (const el of e.elements)
369
+ elements.push(yield* evalExpression(ctx, env, el));
299
370
  return {
300
371
  type: 'list',
301
372
  value: typedList(elements.map((r) => r.value), elements.map((r) => r.type)),
302
373
  };
303
374
  }
304
- function evalBinary(ctx, env, e) {
375
+ function* evalBinary(ctx, env, e) {
305
376
  // LSL: && and || are NOT short-circuit, and the right operand runs first.
306
- const right = evalExpression(ctx, env, e.right);
307
- const left = evalExpression(ctx, env, e.left);
377
+ const right = yield* evalExpression(ctx, env, e.right);
378
+ const left = yield* evalExpression(ctx, env, e.left);
308
379
  return applyBinary(e.operator, left, right);
309
380
  }
310
- function evalAssignment(ctx, env, e) {
311
- const newValue = evalExpression(ctx, env, e.value);
381
+ function* evalAssignment(ctx, env, e) {
382
+ const newValue = yield* evalExpression(ctx, env, e.value);
312
383
  return assignTo(ctx, env, e.target, e.operator, newValue);
313
384
  }
314
385
  function assignTo(ctx, env, target, op, rhs) {
@@ -364,8 +435,8 @@ function assignToMember(ctx, env, target, op, rhs) {
364
435
  env.set(target.object.name, wrapped);
365
436
  return newField;
366
437
  }
367
- function evalMember(ctx, env, e) {
368
- const obj = evalExpression(ctx, env, e.object);
438
+ function* evalMember(ctx, env, e) {
439
+ const obj = yield* evalExpression(ctx, env, e.object);
369
440
  if (!isVector(obj.value) && !isRotation(obj.value)) {
370
441
  throw new Error(`cannot access member on ${obj.type}`);
371
442
  }
@@ -379,25 +450,27 @@ function evalMember(ctx, env, e) {
379
450
  }
380
451
  return { type: 'float', value: v[member] };
381
452
  }
382
- function evalUpdate(ctx, env, e) {
453
+ function* evalUpdate(ctx, env, e) {
383
454
  if (e.argument.kind !== 'Identifier' && e.argument.kind !== 'MemberExpression') {
384
455
  throw new Error('++/-- only valid on identifiers or member expressions');
385
456
  }
386
457
  // Get current value
387
- const current = evalExpression(ctx, env, e.argument);
458
+ const current = yield* evalExpression(ctx, env, e.argument);
388
459
  const delta = { type: 'integer', value: e.operator === '++' ? 1 : -1 };
389
460
  const updated = reduceCompound('+=', current, delta);
390
461
  // Write back
391
462
  assignTo(ctx, env, e.argument, '=', updated);
392
463
  return e.prefix ? updated : current;
393
464
  }
394
- function evalCall(ctx, env, call) {
465
+ function* evalCall(ctx, env, call) {
395
466
  // Evaluate args eagerly (matches LSL semantics).
396
- const evalArgs = call.args.map((a) => evalExpression(ctx, env, a));
467
+ const evalArgs = [];
468
+ for (const a of call.args)
469
+ evalArgs.push(yield* evalExpression(ctx, env, a));
397
470
  // User-defined function?
398
471
  const userFn = ctx.userFunctions.get(call.callee);
399
472
  if (userFn) {
400
- return callUserFunction(ctx, userFn, evalArgs);
473
+ return (yield callUserFunction(ctx, userFn, evalArgs));
401
474
  }
402
475
  // Builtin (real, generated stub, or user-mocked).
403
476
  const spec = specFor(call.callee);
@@ -406,7 +479,7 @@ function evalCall(ctx, env, call) {
406
479
  const rawArgs = evalArgs.map((r, i) => r.type === 'integer' && (spec?.params[i]?.type ?? declared?.params?.[i]) === 'float'
407
480
  ? coerce(r, 'float').value
408
481
  : r.value);
409
- const result = callBuiltin({ state: ctx.state, mocks: ctx.mocks, script: ctx.script }, call.callee, rawArgs);
482
+ const result = yield* callBuiltin({ state: ctx.state, mocks: ctx.mocks, script: ctx.script }, call.callee, rawArgs);
410
483
  const returnType = (spec?.returnType ?? declared?.returns ?? 'void');
411
484
  if (returnType === 'void')
412
485
  return { type: 'void', value: 0 };
@@ -1 +1 @@
1
- {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,+EAA+E;AAC/E,MAAM,cAAe,SAAQ,YAAY;IACvC,YAAY,IAAY;QACtB,KAAK,CAAC,2DAA2D,IAAI,KAAK,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF;AA8BD,MAAM,YAAY;IACY,KAAK;IAAjC,YAA4B,KAAwB;qBAAxB,KAAK;IAAsB,CAAC;CACzD;AAED,MAAM,UAAU;IACc,KAAK;IAAjC,YAA4B,KAAa;qBAAb,KAAK;IAAW,CAAC;CAC9C;AAED,MAAM,OAAO,iBAAiB;IACA,MAAM;IAAlC,YAA4B,MAAc;sBAAd,MAAM;IAAW,CAAC;CAC/C;AAOD,8FAA8F;AAC9F,MAAM,cAAc,GAAG,MAAM,CAAA;AAE7B,MAAM,UAAU,WAAW,CACzB,GAAuB,EACvB,OAAqB,EACrB,IAAI,GAA8B,EAAE;IAEpC,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAgB;IACnC,MAAM,MAAM,GAAoB,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,IAAa,CAAA;IACjB,IAAI,MAAM,GAA8B,IAAI,CAAA;IAC5C,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;YACxC,IAAI,IAAoD,CAAA;YACxD,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,EAAE,CAAA;gBACZ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAA;gBACpC,MAAM,GAAG,EAAE,KAAK,EAAE,CAAA;gBAClB,SAAQ;YACV,CAAC;YACD,MAAM,GAAG,IAAI,CAAA;YACb,IAAI,GAAG,SAAS,CAAA;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,EAAE,CAAA;gBACZ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAM;gBAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;YACnB,CAAC;iBAAM,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,KAAK,CAAA;YAClB,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBAC1C,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAA;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,EAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAClB,GAAuB,EACvB,OAAqB,EACrB,IAA+B;IAE/B,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3C,qEAAqE;QACrE,gCAAgC;QAChC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,IAAI,CAAC;QACH,wDAAwD;QACxD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,QAAmB,CAAC,CAAA;YAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAmB,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,YAAY;YAAE,OAAM;QACrC,MAAM,CAAC,CAAA;IACT,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,QAAQ,CAAC,CAAC,gBAAgB,CACxB,GAAuB,EACvB,EAAuB,EACvB,IAA+B;IAE/B,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAClE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACtC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAA;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,QAAmB,CAAC,CAAA;YAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAmB,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;YAC9B,IAAI,EAAE,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;YAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAqB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,UAAqB,CAAC,CAAA;QACvG,CAAC;QACD,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;YAC5B,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,MAAM,IAAI,KAAK,CACb,4BAA4B,CAAC,CAAC,KAAK,kBAAkB,EAAE,CAAC,IAAI,GAAG,CAChE,CAAA;QACH,CAAC;QACD,yDAAyD;QACzD,IAAI,CAAC,YAAY,UAAU;YAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;QAC3D,MAAM,CAAC,CAAA;IACT,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,wCAAwC;IACxC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,UAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAC9F,CAAC;AAED,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAuB,EAAE,GAAQ,EAAE,KAAqB;IAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACxB,yEAAyE;IACzE,6DAA6D;IAC7D,yEAAyE;IACzE,0EAA0E;IAC1E,mDAAmD;IACnD,IAAI,MAAM,GAA+B,IAAI,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAA;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC5C,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,IAAI,YAAY,CAAC,CAAA;YAClE,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAA;YAC3B,IAAI,CAAC;gBACH,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;gBACtC,CAAC,EAAE,CAAA;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAA;oBAC/B,IAAI,EAAE,GAAG,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,CAAA;oBACxB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;oBACV,SAAQ;gBACV,CAAC;gBACD,MAAM,CAAC,CAAA;YACT,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAe;IACxE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ;QAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,gBAAgB;YACnB,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,KAAK,gBAAgB;YACnB,OAAM;QACR,KAAK,qBAAqB;YACxB,KAAK,CAAC,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAC9C,OAAM;QACR,KAAK,qBAAqB;YACxB,KAAK,CAAC,CAAC,cAAc,CACnB,GAAG,EACH,GAAG,EACH,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CACxF,CAAA;YACD,OAAM;QACR,KAAK,aAAa;YAChB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAM;QACR,KAAK,gBAAgB;YACnB,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,KAAK,kBAAkB;YACrB,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAClC,OAAM;QACR,KAAK,cAAc;YACjB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAC9B,OAAM;QACR,KAAK,iBAAiB,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACrF,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;QACD,KAAK,sBAAsB;YACzB,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1C,KAAK,eAAe;YAClB,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,KAAK,gBAAgB;YACnB,+DAA+D;YAC/D,OAAM;IACV,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,uBAAuB,CAC/B,GAAuB,EACvB,GAAQ,EACR,IAAyB;IAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjF,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAmB,EAAE,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAiB;IACnE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACtC,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,SAAS;YAAE,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACpE,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAoB;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,CAAC;YAAE,MAAK;QACb,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAsB;IAC7E,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC9B,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,CAAC;YAAE,MAAK;QACb,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAkB;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;IAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC/D,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,IAAI,GAAG;gBAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACnC,IAAI,CAAC,CAAC;gBAAE,MAAK;QACf,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,wDAAwD;YACxD,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC/B,CAAC;QACD,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,SAAS,OAAO,CAAC,GAAuB;IACtC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO;QAAE,MAAM,IAAI,UAAU,EAAE,CAAA;AACtF,CAAC;AAED,wBAAwB;AAExB,QAAQ,CAAC,CAAC,cAAc,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAgB;IAC1E,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,gBAAgB;YACnB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAA;QACnD,KAAK,cAAc;YACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;QAC7C,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;QAC9C,KAAK,eAAe;YAClB,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACjD,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACnD,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC/C,KAAK,YAAY;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,KAAK,gBAAgB;YACnB,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACxC,KAAK,iBAAiB;YACpB,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClF,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1C,KAAK,sBAAsB;YACzB,OAAO,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC9C,KAAK,gBAAgB;YACnB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAqB,CAAC,CAAA;QAC3F,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1C,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1C,KAAK,iBAAiB;YACpB,OAAO,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAChF,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,iBAAiB,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAgB;IAC7E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;AAC/C,CAAC;AAED,QAAQ,CAAC,CAAC,mBAAmB,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAkB;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAe,CAAA;IAC/E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;AACpD,CAAC;AAED,QAAQ,CAAC,CAAC,eAAe,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAc;IACzE,MAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/E,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,SAAS,CACd,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5B;KACF,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAmB;IACzE,0EAA0E;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACpD,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED,QAAQ,CAAC,CAAC,cAAc,CACtB,GAAuB,EACvB,GAAQ,EACR,CAAuB;IAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;IACzD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,QAAQ,CACf,GAAuB,EACvB,GAAQ,EACR,MAAkB,EAClB,EAA0C,EAC1C,GAAe;IAEf,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACpC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,cAAc,CACrB,GAAuB,EACvB,GAAQ,EACR,MAAwB,EACxB,EAA0C,EAC1C,GAAe;IAEf,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAA0B,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC9B,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,sBAAsB,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,QAAQ,GAAe;QAC3B,IAAI,EAAE,OAAO;QACb,KAAK,EAAG,GAAyC,CAAC,MAAM,CAAE;KAC3D,CAAA;IACD,MAAM,QAAQ,GACZ,EAAE,KAAK,GAAG;QACR,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;QACtB,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;IACvC,MAAM,OAAO,GAA2B,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAe,EAAE,CAAA;IACtF,MAAM,OAAO,GAAe,UAAU,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE;gBACL,CAAC,EAAE,OAAO,CAAC,CAAE;gBACb,CAAC,EAAE,OAAO,CAAC,CAAE;gBACb,CAAC,EAAE,OAAO,CAAC,CAAE;gBACb,CAAC,EAAE,OAAO,CAAC,CAAE;aACd;SACF;QACH,CAAC,CAAC;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAE,EAAE;SACvD,CAAA;IACL,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAmB;IACzE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,KAA0B,CAAA;IACxC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAA;IACzB,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,sBAAsB,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAG,CAAuC,CAAC,MAAM,CAAE,EAAE,CAAA;AACpF,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAuB,EAAE,GAAQ,EAAE,CAAmB;IACzE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IACD,oBAAoB;IACpB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACpD,aAAa;IACb,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAC5C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;AACrC,CAAC;AAED,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAuB,EAAE,GAAQ,EAAE,IAAoB;IACxE,iDAAiD;IACjD,MAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,yBAAyB;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAe,CAAA;IACtE,CAAC;IACD,kDAAkD;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAChD,kFAAkF;IAClF,MAAM,OAAO,GAAe,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO;QAClF,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK;QAC1B,CAAC,CAAC,CAAC,CAAC,KAAK,CACZ,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnH,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAY,CAAA;IAC/E,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAC5D,yCAAyC;IACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAA;AAC5G,CAAC"}
package/dist/linkset.d.ts CHANGED
@@ -67,8 +67,9 @@ export declare class Linkset {
67
67
  /**
68
68
  * Send a `link_message` according to LSL fan-out semantics.
69
69
  * `senderLink` is the calling prim's link number; the event payload's
70
- * `sender_num` is set to that value. The capture array on the linkset
71
- * records every invocation for cross-script test assertions.
70
+ * `sender_num` is set to that value. Scripts that are not running never
71
+ * get the message. The capture array on the linkset records every
72
+ * invocation for cross-script test assertions.
72
73
  */
73
74
  deliverLinkMessage(senderLink: number, target: number, num: number, str: string, id: string): void;
74
75
  /**
@@ -96,9 +97,16 @@ export declare class Linkset {
96
97
  * due across the linkset, or its whole world, dispatching each to its
97
98
  * target script. The clock steps to each
98
99
  * event's due time before its handler runs, so handlers see the time the
99
- * event fired rather than the end of the window.
100
+ * event fired rather than the end of the window. The clock ends exactly
101
+ * `ms` later; a handler sleeping past that stays asleep until a later advance.
100
102
  */
101
103
  advanceTime(ms: number): void;
104
+ /**
105
+ * Drain due events, then keep moving the clock to the next wake of any of
106
+ * `scripts` that is sleeping, running everything due on the way, until
107
+ * none of them is (or the sleeper is paused).
108
+ */
109
+ settle(scripts: ReadonlyArray<Script>): void;
102
110
  /**
103
111
  * Drain due events in chronological order. Each event is delivered to
104
112
  * its target script via `script.deliver(event, payload)`. If a handler
@@ -1 +1 @@
1
- {"version":3,"file":"linkset.d.ts","sourceRoot":"","sources":["../src/linkset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linkset.d.ts","sourceRoot":"","sources":["../src/linkset.ts"],"names":[],"mappings":"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"}
package/dist/linkset.js CHANGED
@@ -120,8 +120,9 @@ export class Linkset {
120
120
  /**
121
121
  * Send a `link_message` according to LSL fan-out semantics.
122
122
  * `senderLink` is the calling prim's link number; the event payload's
123
- * `sender_num` is set to that value. The capture array on the linkset
124
- * records every invocation for cross-script test assertions.
123
+ * `sender_num` is set to that value. Scripts that are not running never
124
+ * get the message. The capture array on the linkset records every
125
+ * invocation for cross-script test assertions.
125
126
  */
126
127
  deliverLinkMessage(senderLink, target, num, str, id) {
127
128
  this.linkedMessages.push({ target, num, str, id });
@@ -129,7 +130,8 @@ export class Linkset {
129
130
  const at = this.clock.now;
130
131
  for (const p of targets) {
131
132
  for (const s of p.scripts) {
132
- this.clock.schedule(s, at, 'link_message', { sender_num: senderLink, num, str, id });
133
+ if (s.running)
134
+ this.clock.schedule(s, at, 'link_message', { sender_num: senderLink, num, str, id });
133
135
  }
134
136
  }
135
137
  }
@@ -139,10 +141,7 @@ export class Linkset {
139
141
  * available for the single-script case (delivers only to that script).
140
142
  */
141
143
  deliverChat(opts) {
142
- for (const s of this.allScripts()) {
143
- s.matchChatListens(opts);
144
- }
145
- this.drainQueue();
144
+ this.settle(this.allScripts().filter((s) => s.matchChatListens(opts) && s.handles('listen')));
146
145
  }
147
146
  /**
148
147
  * Queue chat a script in prim `from` sent on the listens of every prim it
@@ -182,7 +181,8 @@ export class Linkset {
182
181
  * due across the linkset, or its whole world, dispatching each to its
183
182
  * target script. The clock steps to each
184
183
  * event's due time before its handler runs, so handlers see the time the
185
- * event fired rather than the end of the window.
184
+ * event fired rather than the end of the window. The clock ends exactly
185
+ * `ms` later; a handler sleeping past that stays asleep until a later advance.
186
186
  */
187
187
  advanceTime(ms) {
188
188
  if (ms < 0)
@@ -192,6 +192,23 @@ export class Linkset {
192
192
  if (this.clock.now < until)
193
193
  this.clock.now = until;
194
194
  }
195
+ /**
196
+ * Drain due events, then keep moving the clock to the next wake of any of
197
+ * `scripts` that is sleeping, running everything due on the way, until
198
+ * none of them is (or the sleeper is paused).
199
+ */
200
+ settle(scripts) {
201
+ this.drainQueue();
202
+ for (;;) {
203
+ let at = Infinity;
204
+ for (const s of scripts)
205
+ if (s.running && s.wakeAt !== undefined)
206
+ at = Math.min(at, s.wakeAt);
207
+ if (at === Infinity)
208
+ return;
209
+ this.drainQueue(at);
210
+ }
211
+ }
195
212
  /**
196
213
  * Drain due events in chronological order. Each event is delivered to
197
214
  * its target script via `script.deliver(event, payload)`. If a handler
@@ -217,9 +234,13 @@ export class Linkset {
217
234
  const target = next.target;
218
235
  if (target.dead)
219
236
  continue;
220
- // `__reset` (from llResetOtherScript) must run regardless of the
221
- // target's running flag — per LSL, a stopped script is still reset
222
- // when commanded, it just stays stopped afterward.
237
+ if (next.event === '__wake') {
238
+ target.wake();
239
+ continue;
240
+ }
241
+ // `__reset` (from llResetOtherScript) was requested while the target
242
+ // was running, so it applies even if the target was stopped since; the
243
+ // target just stays stopped afterward.
223
244
  if (!target.running && next.event !== '__reset') {
224
245
  // Park for replay when the script is re-enabled. A paused script
225
246
  // must not block other scripts' events, so we stash on the script