@rcrsr/rill 0.8.5 → 0.9.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 (190) hide show
  1. package/dist/ast-nodes.d.ts +189 -49
  2. package/dist/ast-nodes.d.ts.map +1 -1
  3. package/dist/ast-unions.d.ts +1 -1
  4. package/dist/ast-unions.d.ts.map +1 -1
  5. package/dist/constants.d.ts +14 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +29 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/error-classes.d.ts +3 -1
  10. package/dist/error-classes.d.ts.map +1 -1
  11. package/dist/error-classes.js +11 -5
  12. package/dist/error-classes.js.map +1 -1
  13. package/dist/error-registry.d.ts.map +1 -1
  14. package/dist/error-registry.js +293 -9
  15. package/dist/error-registry.js.map +1 -1
  16. package/dist/ext/crypto/index.d.ts +2 -1
  17. package/dist/ext/crypto/index.d.ts.map +1 -1
  18. package/dist/ext/crypto/index.js +7 -0
  19. package/dist/ext/crypto/index.js.map +1 -1
  20. package/dist/ext/exec/index.d.ts +2 -1
  21. package/dist/ext/exec/index.d.ts.map +1 -1
  22. package/dist/ext/exec/index.js +6 -0
  23. package/dist/ext/exec/index.js.map +1 -1
  24. package/dist/ext/fetch/index.d.ts +2 -1
  25. package/dist/ext/fetch/index.d.ts.map +1 -1
  26. package/dist/ext/fetch/index.js +6 -0
  27. package/dist/ext/fetch/index.js.map +1 -1
  28. package/dist/ext/fs/index.d.ts +2 -1
  29. package/dist/ext/fs/index.d.ts.map +1 -1
  30. package/dist/ext/fs/index.js +3 -0
  31. package/dist/ext/fs/index.js.map +1 -1
  32. package/dist/ext/kv/index.d.ts +48 -12
  33. package/dist/ext/kv/index.d.ts.map +1 -1
  34. package/dist/ext/kv/index.js +225 -63
  35. package/dist/ext/kv/index.js.map +1 -1
  36. package/dist/ext/kv/store.d.ts +4 -0
  37. package/dist/ext/kv/store.d.ts.map +1 -1
  38. package/dist/ext/kv/store.js +14 -0
  39. package/dist/ext/kv/store.js.map +1 -1
  40. package/dist/generated/introspection-data.d.ts +1 -1
  41. package/dist/generated/introspection-data.d.ts.map +1 -1
  42. package/dist/generated/introspection-data.js +194 -185
  43. package/dist/generated/introspection-data.js.map +1 -1
  44. package/dist/generated/version-data.d.ts +1 -1
  45. package/dist/generated/version-data.js +3 -3
  46. package/dist/highlight-map.d.ts.map +1 -1
  47. package/dist/highlight-map.js +8 -2
  48. package/dist/highlight-map.js.map +1 -1
  49. package/dist/index.d.ts +2 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +5 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/lexer/operators.d.ts.map +1 -1
  54. package/dist/lexer/operators.js +0 -2
  55. package/dist/lexer/operators.js.map +1 -1
  56. package/dist/lexer/readers.d.ts +18 -1
  57. package/dist/lexer/readers.d.ts.map +1 -1
  58. package/dist/lexer/readers.js +55 -0
  59. package/dist/lexer/readers.js.map +1 -1
  60. package/dist/parser/helpers.d.ts +8 -13
  61. package/dist/parser/helpers.d.ts.map +1 -1
  62. package/dist/parser/helpers.js +42 -35
  63. package/dist/parser/helpers.js.map +1 -1
  64. package/dist/parser/index.d.ts +1 -0
  65. package/dist/parser/index.d.ts.map +1 -1
  66. package/dist/parser/index.js +1 -0
  67. package/dist/parser/index.js.map +1 -1
  68. package/dist/parser/parser-collect.d.ts.map +1 -1
  69. package/dist/parser/parser-collect.js +34 -5
  70. package/dist/parser/parser-collect.js.map +1 -1
  71. package/dist/parser/parser-control.d.ts.map +1 -1
  72. package/dist/parser/parser-control.js +9 -0
  73. package/dist/parser/parser-control.js.map +1 -1
  74. package/dist/parser/parser-expr.d.ts +3 -1
  75. package/dist/parser/parser-expr.d.ts.map +1 -1
  76. package/dist/parser/parser-expr.js +377 -100
  77. package/dist/parser/parser-expr.js.map +1 -1
  78. package/dist/parser/parser-extract.d.ts +3 -5
  79. package/dist/parser/parser-extract.d.ts.map +1 -1
  80. package/dist/parser/parser-extract.js +37 -69
  81. package/dist/parser/parser-extract.js.map +1 -1
  82. package/dist/parser/parser-functions.d.ts +2 -2
  83. package/dist/parser/parser-functions.d.ts.map +1 -1
  84. package/dist/parser/parser-functions.js +112 -36
  85. package/dist/parser/parser-functions.js.map +1 -1
  86. package/dist/parser/parser-literals.d.ts +4 -3
  87. package/dist/parser/parser-literals.d.ts.map +1 -1
  88. package/dist/parser/parser-literals.js +257 -42
  89. package/dist/parser/parser-literals.js.map +1 -1
  90. package/dist/parser/parser-script.d.ts.map +1 -1
  91. package/dist/parser/parser-script.js +25 -12
  92. package/dist/parser/parser-script.js.map +1 -1
  93. package/dist/parser/parser-shape.d.ts +13 -0
  94. package/dist/parser/parser-shape.d.ts.map +1 -0
  95. package/dist/parser/parser-shape.js +72 -0
  96. package/dist/parser/parser-shape.js.map +1 -0
  97. package/dist/parser/parser-types.d.ts +21 -0
  98. package/dist/parser/parser-types.d.ts.map +1 -0
  99. package/dist/parser/parser-types.js +30 -0
  100. package/dist/parser/parser-types.js.map +1 -0
  101. package/dist/parser/parser-variables.d.ts.map +1 -1
  102. package/dist/parser/parser-variables.js +10 -1
  103. package/dist/parser/parser-variables.js.map +1 -1
  104. package/dist/runtime/core/callable.d.ts +25 -22
  105. package/dist/runtime/core/callable.d.ts.map +1 -1
  106. package/dist/runtime/core/callable.js +43 -36
  107. package/dist/runtime/core/callable.js.map +1 -1
  108. package/dist/runtime/core/context.d.ts.map +1 -1
  109. package/dist/runtime/core/context.js +8 -8
  110. package/dist/runtime/core/context.js.map +1 -1
  111. package/dist/runtime/core/equals.d.ts.map +1 -1
  112. package/dist/runtime/core/equals.js +142 -30
  113. package/dist/runtime/core/equals.js.map +1 -1
  114. package/dist/runtime/core/eval/base.d.ts +2 -2
  115. package/dist/runtime/core/eval/base.d.ts.map +1 -1
  116. package/dist/runtime/core/eval/evaluator.d.ts.map +1 -1
  117. package/dist/runtime/core/eval/evaluator.js +3 -1
  118. package/dist/runtime/core/eval/evaluator.js.map +1 -1
  119. package/dist/runtime/core/eval/index.d.ts +16 -1
  120. package/dist/runtime/core/eval/index.d.ts.map +1 -1
  121. package/dist/runtime/core/eval/index.js +22 -2
  122. package/dist/runtime/core/eval/index.js.map +1 -1
  123. package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -1
  124. package/dist/runtime/core/eval/mixins/annotations.js +14 -8
  125. package/dist/runtime/core/eval/mixins/annotations.js.map +1 -1
  126. package/dist/runtime/core/eval/mixins/closures.d.ts +0 -2
  127. package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
  128. package/dist/runtime/core/eval/mixins/closures.js +286 -105
  129. package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
  130. package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -1
  131. package/dist/runtime/core/eval/mixins/collections.js +65 -25
  132. package/dist/runtime/core/eval/mixins/collections.js.map +1 -1
  133. package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -1
  134. package/dist/runtime/core/eval/mixins/control-flow.js +21 -17
  135. package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -1
  136. package/dist/runtime/core/eval/mixins/conversion.d.ts +30 -0
  137. package/dist/runtime/core/eval/mixins/conversion.d.ts.map +1 -0
  138. package/dist/runtime/core/eval/mixins/conversion.js +203 -0
  139. package/dist/runtime/core/eval/mixins/conversion.js.map +1 -0
  140. package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -1
  141. package/dist/runtime/core/eval/mixins/core.js +101 -32
  142. package/dist/runtime/core/eval/mixins/core.js.map +1 -1
  143. package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -1
  144. package/dist/runtime/core/eval/mixins/extraction.js +136 -30
  145. package/dist/runtime/core/eval/mixins/extraction.js.map +1 -1
  146. package/dist/runtime/core/eval/mixins/list-dispatch.d.ts +17 -0
  147. package/dist/runtime/core/eval/mixins/list-dispatch.d.ts.map +1 -0
  148. package/dist/runtime/core/eval/mixins/list-dispatch.js +97 -0
  149. package/dist/runtime/core/eval/mixins/list-dispatch.js.map +1 -0
  150. package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -1
  151. package/dist/runtime/core/eval/mixins/literals.js +64 -82
  152. package/dist/runtime/core/eval/mixins/literals.js.map +1 -1
  153. package/dist/runtime/core/eval/mixins/types.d.ts +4 -0
  154. package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -1
  155. package/dist/runtime/core/eval/mixins/types.js +202 -3
  156. package/dist/runtime/core/eval/mixins/types.js.map +1 -1
  157. package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -1
  158. package/dist/runtime/core/eval/mixins/variables.js +42 -7
  159. package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
  160. package/dist/runtime/core/execute.d.ts.map +1 -1
  161. package/dist/runtime/core/execute.js +2 -15
  162. package/dist/runtime/core/execute.js.map +1 -1
  163. package/dist/runtime/core/field-descriptor.d.ts +29 -0
  164. package/dist/runtime/core/field-descriptor.d.ts.map +1 -0
  165. package/dist/runtime/core/field-descriptor.js +27 -0
  166. package/dist/runtime/core/field-descriptor.js.map +1 -0
  167. package/dist/runtime/core/types.d.ts +15 -6
  168. package/dist/runtime/core/types.d.ts.map +1 -1
  169. package/dist/runtime/core/types.js.map +1 -1
  170. package/dist/runtime/core/values.d.ts +107 -9
  171. package/dist/runtime/core/values.d.ts.map +1 -1
  172. package/dist/runtime/core/values.js +453 -43
  173. package/dist/runtime/core/values.js.map +1 -1
  174. package/dist/runtime/ext/builtins.d.ts.map +1 -1
  175. package/dist/runtime/ext/builtins.js +47 -107
  176. package/dist/runtime/ext/builtins.js.map +1 -1
  177. package/dist/runtime/ext/extensions.d.ts +134 -1
  178. package/dist/runtime/ext/extensions.d.ts.map +1 -1
  179. package/dist/runtime/ext/extensions.js.map +1 -1
  180. package/dist/runtime/index.d.ts +7 -4
  181. package/dist/runtime/index.d.ts.map +1 -1
  182. package/dist/runtime/index.js +7 -2
  183. package/dist/runtime/index.js.map +1 -1
  184. package/dist/token-types.d.ts +7 -2
  185. package/dist/token-types.d.ts.map +1 -1
  186. package/dist/token-types.js +9 -2
  187. package/dist/token-types.js.map +1 -1
  188. package/dist/value-types.d.ts +19 -1
  189. package/dist/value-types.d.ts.map +1 -1
  190. package/package.json +1 -1
@@ -7,7 +7,7 @@
7
7
  * @internal
8
8
  */
9
9
  import { RuntimeError } from '../../../../types.js';
10
- import { createTupleFromDict, createTupleFromList, inferType, } from '../../values.js';
10
+ import { createOrdered, createTuple, inferElementType } from '../../values.js';
11
11
  import { isDict } from '../../callable.js';
12
12
  /**
13
13
  * ExtractionMixin implementation.
@@ -23,13 +23,14 @@ import { isDict } from '../../callable.js';
23
23
  *
24
24
  * Methods added:
25
25
  * - evaluateDestructure(node, input) -> RillValue
26
+ * - evaluateDestruct(node, input) -> RillValue
26
27
  * - evaluateSlice(node, input) -> Promise<RillValue>
27
- * - evaluateSpread(node) -> Promise<RillTuple>
28
+ * - evaluateCollectionLiteral(node) -> Promise<RillValue>
28
29
  *
29
30
  * Covers:
31
+ * - IR-8: evaluateCollectionLiteral for ListLiteralNode, DictLiteralNode, TupleLiteralNode, OrderedLiteralNode
30
32
  * - IR-26: evaluateDestructure(node, input) -> RillValue
31
33
  * - IR-27: evaluateSlice(node, input) -> Promise<RillValue>
32
- * - IR-28: evaluateSpread(node) -> Promise<RillTuple>
33
34
  *
34
35
  * Error handling:
35
36
  * - EC-13: Destructure/slice on wrong types -> RuntimeError(RUNTIME_TYPE_ERROR)
@@ -140,33 +141,6 @@ function createExtractionMixin(Base) {
140
141
  }
141
142
  return this.applySlice(input, input.length, startBound, stopBound, stepBound);
142
143
  }
143
- /**
144
- * Evaluate spread operator: *[...] or *[key: value, ...]
145
- * Creates a tuple from a list or dict for argument unpacking.
146
- *
147
- * Examples:
148
- * *[1, 2, 3] -> $fn() # Calls $fn(1, 2, 3)
149
- * *[a: 1, b: 2] -> $fn() # Calls $fn with named args
150
- */
151
- async evaluateSpread(node) {
152
- let value;
153
- if (node.operand === null) {
154
- value = this.ctx.pipeValue;
155
- }
156
- else {
157
- // Note: evaluateExpression will be available from CoreMixin
158
- // which is applied before ExtractionMixin in the composition order
159
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
- value = await this.evaluateExpression(node.operand);
161
- }
162
- if (Array.isArray(value)) {
163
- return createTupleFromList(value);
164
- }
165
- if (isDict(value)) {
166
- return createTupleFromDict(value);
167
- }
168
- throw new RuntimeError('RILL-R002', `Spread requires list or dict, got ${inferType(value)}`, node.span.start);
169
- }
170
144
  /**
171
145
  * Evaluate a slice bound expression (start, stop, or step).
172
146
  * Returns the numeric value of the bound.
@@ -241,6 +215,138 @@ function createExtractionMixin(Base) {
241
215
  return indices.map((i) => input[i]).join('');
242
216
  }
243
217
  }
218
+ /**
219
+ * Evaluate destruct operator: destruct<$a, $b, ...>
220
+ * Same semantics as evaluateDestructure but for the keyword-based syntax.
221
+ * Delegates to evaluateDestructure since the pattern structure is identical.
222
+ */
223
+ evaluateDestruct(node, input) {
224
+ // DestructNode has the same elements structure as DestructureNode.
225
+ // Cast to DestructureNode-compatible shape for reuse.
226
+ return this.evaluateDestructure({ ...node, type: 'Destructure' }, input);
227
+ }
228
+ /**
229
+ * Evaluate collection literals [IR-8].
230
+ * Handles list[...], dict[...], tuple[...], ordered[...] keyword forms.
231
+ *
232
+ * Ellipsis spread (...$other) expands referenced collections inline.
233
+ * Type is fixed by the keyword — no runtime inference from content.
234
+ *
235
+ * Returns:
236
+ * - ListLiteralNode -> RillValue[] (plain list)
237
+ * - DictLiteralNode -> Record<string, RillValue>
238
+ * - TupleLiteralNode -> RillTuple
239
+ * - OrderedLiteralNode -> RillOrdered
240
+ */
241
+ async evaluateCollectionLiteral(node) {
242
+ switch (node.type) {
243
+ case 'ListLiteral': {
244
+ const listItems = await this.evaluateListLiteralElements(node.elements);
245
+ // Validate homogeneity: all elements must share the same structural type
246
+ inferElementType(listItems);
247
+ return listItems;
248
+ }
249
+ case 'TupleLiteral': {
250
+ // Tuples allow mixed types — no homogeneity check
251
+ const items = await this.evaluateListLiteralElements(node.elements);
252
+ return createTuple(items);
253
+ }
254
+ case 'DictLiteral': {
255
+ const result = {};
256
+ for (const [key, value] of await this.evaluateDictLiteralEntries(node.entries)) {
257
+ result[key] = value;
258
+ }
259
+ return result;
260
+ }
261
+ case 'OrderedLiteral': {
262
+ const pairs = await this.evaluateDictLiteralEntries(node.entries);
263
+ return createOrdered(pairs);
264
+ }
265
+ }
266
+ }
267
+ /**
268
+ * Evaluate list/tuple literal elements, expanding spread nodes inline.
269
+ * Spread: ...$other expands the referenced collection into the result.
270
+ */
271
+ async evaluateListLiteralElements(rawElements) {
272
+ const result = [];
273
+ for (const elem of rawElements) {
274
+ if (elem.type === 'ListSpread') {
275
+ const spreadNode = elem;
276
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
277
+ const spreadValue = await this.evaluateExpression(spreadNode.expression);
278
+ if (Array.isArray(spreadValue)) {
279
+ result.push(...spreadValue);
280
+ }
281
+ else {
282
+ throw new RuntimeError('RILL-R002', `Spread in list literal requires list, got ${typeof spreadValue}`, spreadNode.span?.start, { got: typeof spreadValue });
283
+ }
284
+ }
285
+ else {
286
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
287
+ result.push(await this.evaluateExpression(elem));
288
+ }
289
+ }
290
+ return result;
291
+ }
292
+ /**
293
+ * Evaluate dict/ordered literal entries, returning [key, value] pairs.
294
+ * Keys are always strings (number/boolean keys are stringified).
295
+ * Spread entries (...$other) expand inline (dict keys merged).
296
+ */
297
+ async evaluateDictLiteralEntries(entries) {
298
+ const result = [];
299
+ for (const entry of entries) {
300
+ // Spread entry: key is a string starting with '...' is not how parser marks it.
301
+ // The parser uses ListSpread for element spreads in list/tuple.
302
+ // For dict/ordered, spread is encoded as a DictEntry with an object key
303
+ // where kind === 'variable'. Handle simple string/number/boolean keys only here
304
+ // since the collection literal parser does not support multi-key or computed keys.
305
+ const key = entry.key;
306
+ let stringKey;
307
+ if (typeof key === 'string') {
308
+ stringKey = key;
309
+ }
310
+ else if (typeof key === 'number' || typeof key === 'boolean') {
311
+ stringKey = String(key);
312
+ }
313
+ else {
314
+ // Object key (DictKeyVariable or DictKeyComputed) — evaluate like evaluateDict
315
+ if ('kind' in key) {
316
+ if (key.kind === 'variable') {
317
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
318
+ const varVal = this.evaluateVariable
319
+ ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
+ this.evaluateVariable({
321
+ name: key.variableName,
322
+ isPipeVar: false,
323
+ accessChain: [],
324
+ defaultValue: null,
325
+ existenceCheck: null,
326
+ })
327
+ : undefined;
328
+ stringKey =
329
+ typeof varVal === 'string'
330
+ ? varVal
331
+ : String(varVal ?? key.variableName);
332
+ }
333
+ else {
334
+ // computed: evaluate expression
335
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
336
+ const computed = await this.evaluateExpression(key.expression);
337
+ stringKey = String(computed);
338
+ }
339
+ }
340
+ else {
341
+ stringKey = String(key);
342
+ }
343
+ }
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ const value = await this.evaluateExpression(entry.value);
346
+ result.push([stringKey, value]);
347
+ }
348
+ return result;
349
+ }
244
350
  };
245
351
  }
246
352
  // Export with type assertion to work around TS4094 limitation
@@ -1 +1 @@
1
- {"version":3,"file":"extraction.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extraction.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ListDispatchMixin: list[...] Pipe Target Dispatch
3
+ *
4
+ * Handles `index -> list[v0, v1, ...]` — evaluates the list literal elements,
5
+ * then returns the element at the piped numeric index.
6
+ *
7
+ * Interface requirements (from spec IR-11):
8
+ * - evaluateListLiteralDispatch(node, input) -> Promise<RillValue>
9
+ *
10
+ * Error Contracts:
11
+ * - EC-15 (RILL-R041): Non-integer index
12
+ * - EC-16 (RILL-R042): Out-of-bounds without ?? fallback
13
+ *
14
+ * @internal
15
+ */
16
+ export declare const ListDispatchMixin: any;
17
+ //# sourceMappingURL=list-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dispatch.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/list-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2HH,eAAO,MAAM,iBAAiB,EAA8B,GAAG,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ListDispatchMixin: list[...] Pipe Target Dispatch
3
+ *
4
+ * Handles `index -> list[v0, v1, ...]` — evaluates the list literal elements,
5
+ * then returns the element at the piped numeric index.
6
+ *
7
+ * Interface requirements (from spec IR-11):
8
+ * - evaluateListLiteralDispatch(node, input) -> Promise<RillValue>
9
+ *
10
+ * Error Contracts:
11
+ * - EC-15 (RILL-R041): Non-integer index
12
+ * - EC-16 (RILL-R042): Out-of-bounds without ?? fallback
13
+ *
14
+ * @internal
15
+ */
16
+ import { RuntimeError } from '../../../../types.js';
17
+ import { inferElementType } from '../../values.js';
18
+ /**
19
+ * ListDispatchMixin implementation.
20
+ *
21
+ * Evaluates list[...] when used as a pipe target. The piped value is
22
+ * used as a numeric index into the evaluated list elements.
23
+ *
24
+ * Depends on:
25
+ * - EvaluatorBase: ctx, getNodeLocation()
26
+ * - evaluateExpression() (from CoreMixin composition)
27
+ *
28
+ * Methods added:
29
+ * - evaluateListLiteralDispatch(node, input) -> Promise<RillValue>
30
+ */
31
+ function createListDispatchMixin(Base) {
32
+ return class ListDispatchEvaluator extends Base {
33
+ /**
34
+ * Evaluate list[...] as a pipe target [IR-11].
35
+ *
36
+ * The piped value is used as a numeric index. Negative indices count from
37
+ * the end (-1 is last). Non-integer indices throw EC-15. Out-of-bounds
38
+ * without a default value throws EC-16.
39
+ */
40
+ async evaluateListLiteralDispatch(node, input) {
41
+ // EC-15: index must be a number
42
+ if (typeof input !== 'number') {
43
+ throw new RuntimeError('RILL-R041', 'list index must be an integer', this.getNodeLocation(node), { index: input });
44
+ }
45
+ // EC-15: index must be an integer (no fractional part)
46
+ if (!Number.isInteger(input)) {
47
+ throw new RuntimeError('RILL-R041', 'list index must be an integer', this.getNodeLocation(node), { index: input });
48
+ }
49
+ // Evaluate all elements (supporting ...spread)
50
+ const elements = await this.evaluateListLiteralElements(node.elements);
51
+ const index = input;
52
+ // Normalize negative indices
53
+ const normalizedIndex = index < 0 ? elements.length + index : index;
54
+ // Check bounds
55
+ if (normalizedIndex < 0 || normalizedIndex >= elements.length) {
56
+ // Use default value if provided via ??
57
+ if (node.defaultValue) {
58
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
+ return await this.evaluateExpression(node.defaultValue);
60
+ }
61
+ throw new RuntimeError('RILL-R042', `list index ${index} out of range (length: ${elements.length})`, this.getNodeLocation(node), { n: index, m: elements.length });
62
+ }
63
+ return elements[normalizedIndex];
64
+ }
65
+ /**
66
+ * Evaluate list literal elements, expanding any ...spread nodes inline.
67
+ */
68
+ async evaluateListLiteralElements(rawElements) {
69
+ const result = [];
70
+ for (const elem of rawElements) {
71
+ if (elem.type === 'ListSpread') {
72
+ // Spread: ...$other — expand collection inline
73
+ const spreadNode = elem;
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ const spreadValue = await this.evaluateExpression(spreadNode.expression);
76
+ if (Array.isArray(spreadValue)) {
77
+ result.push(...spreadValue);
78
+ }
79
+ else {
80
+ throw new RuntimeError('RILL-R002', `Spread in list literal requires list, got ${typeof spreadValue}`, spreadNode.span?.start, { got: typeof spreadValue });
81
+ }
82
+ }
83
+ else {
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ result.push(await this.evaluateExpression(elem));
86
+ }
87
+ }
88
+ // Validate homogeneity: all elements must share the same structural type
89
+ inferElementType(result);
90
+ return result;
91
+ }
92
+ };
93
+ }
94
+ // Export with type assertion to work around TS4094 limitation
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ export const ListDispatchMixin = createListDispatchMixin;
97
+ //# sourceMappingURL=list-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dispatch.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/list-dispatch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA+/BH,eAAO,MAAM,aAAa,EAA0B,GAAG,CAAC"}
1
+ {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA4/BH,eAAO,MAAM,aAAa,EAA0B,GAAG,CAAC"}
@@ -25,8 +25,8 @@
25
25
  * @internal
26
26
  */
27
27
  import { RuntimeError } from '../../../../types.js';
28
- import { formatValue, isReservedMethod, isVector } from '../../values.js';
29
- import { isCallable, } from '../../callable.js';
28
+ import { formatValue, inferElementType, isReservedMethod, isTypeValue, isVector, } from '../../values.js';
29
+ import { isCallable, paramsToStructuralType, } from '../../callable.js';
30
30
  import { getVariable } from '../../context.js';
31
31
  /**
32
32
  * Capture annotation context at closure creation time.
@@ -45,11 +45,13 @@ import { getVariable } from '../../context.js';
45
45
  * @internal
46
46
  */
47
47
  async function captureClosureAnnotations(ctx, closureNode, evaluateExpression) {
48
- // Capture closure-level annotations from annotation stack
49
- // When a closure is created within an annotated statement like:
48
+ // Capture closure-level annotations from immediateAnnotation field [IR-7].
49
+ // When a closure is created within a directly-annotated statement like:
50
50
  // ^(doc: "test") |x|($x * 2) :> $fn
51
- // The annotation stack contains the evaluated annotations from the statement
52
- const annotations = ctx.annotationStack.at(-1) ?? {};
51
+ // immediateAnnotation holds the evaluated annotations set by executeAnnotatedStatement.
52
+ // Consumed once: cleared after capture to prevent unintended re-use.
53
+ const annotations = ctx.immediateAnnotation ?? {};
54
+ ctx.immediateAnnotation = undefined;
53
55
  // Capture parameter-level annotations
54
56
  const paramAnnotations = {};
55
57
  for (const param of closureNode.params) {
@@ -170,77 +172,31 @@ function createLiteralsMixin(Base) {
170
172
  return result;
171
173
  }
172
174
  /**
173
- * Evaluate tuple literal.
175
+ * Evaluate list literal elements into a flat array.
174
176
  * Elements are evaluated in order and collected into an array.
175
- * ListSpreadNode elements are flattened inline.
176
177
  *
177
178
  * Errors from element evaluation propagate to caller.
178
179
  */
179
180
  async evaluateTuple(node) {
180
181
  const elements = [];
181
182
  for (const elem of node.elements) {
182
- if (elem.type === 'ListSpread') {
183
- // ListSpreadNode: evaluate expression and flatten
184
- const spreadResult = await this.evaluateTupleElement(elem);
185
- // Spread result should be an array - flatten it
186
- if (Array.isArray(spreadResult)) {
187
- elements.push(...spreadResult);
188
- }
189
- else {
190
- // Single value returned - should not happen for ListSpread
191
- elements.push(spreadResult);
192
- }
193
- }
194
- else {
195
- // Regular element: evaluate and add
196
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
- elements.push(await this.evaluateExpression(elem));
198
- }
199
- }
200
- return elements;
201
- }
202
- /**
203
- * Evaluate single tuple element.
204
- * Returns spread-able array when element is ListSpreadNode, single value otherwise.
205
- *
206
- * @param elem - Element to evaluate (ExpressionNode or ListSpreadNode)
207
- * @returns Flattened array for spread, single value otherwise
208
- * @throws RuntimeError with RUNTIME_TYPE_ERROR if spread on non-list [EC-3]
209
- */
210
- async evaluateTupleElement(elem) {
211
- if (elem.type === 'ListSpread') {
212
- // Evaluate spread expression
213
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
- const spreadValue = await this.evaluateExpression(elem.expression);
215
- // Verify it's a list
216
- if (!Array.isArray(spreadValue)) {
217
- throw new RuntimeError('RILL-R002', `Spread in list literal requires list, got ${typeof spreadValue}`, elem.span?.start, { got: typeof spreadValue });
218
- }
219
- return spreadValue;
220
- }
221
- else {
222
- // Regular expression: evaluate and return single value
223
183
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
224
- return await this.evaluateExpression(elem);
184
+ elements.push(await this.evaluateExpression(elem));
225
185
  }
186
+ // Validate homogeneity: all elements must share the same structural type [C-1]
187
+ inferElementType(elements);
188
+ return elements;
226
189
  }
227
190
  /**
228
- * Evaluate multi-key dict entry.
229
- * Expands `[["k1", "k2"]: value]` to array of key-value pairs.
230
- * Evaluates value once, creates entry for each key.
231
- *
232
- * @param keyTuple - TupleNode containing list of keys
233
- * @param value - Value expression to associate with all keys
234
- * @returns Array of [key, value] pairs
235
- * @throws RuntimeError with RUNTIME_TYPE_ERROR if tuple empty [EC-4]
236
- * @throws RuntimeError with RUNTIME_TYPE_ERROR if key element non-primitive [EC-5]
191
+ * Evaluate multi-key dict entry from a ListLiteralNode key.
237
192
  */
238
- async evaluateDictMultiKey(keyTuple, value) {
239
- // Evaluate key tuple to get list of keys
240
- const keys = await this.evaluateTuple(keyTuple);
193
+ async evaluateDictMultiKeyFromList(keyList, value) {
194
+ // Evaluate list elements to get keys
195
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
196
+ const keys = await this.evaluateListLiteralElements(keyList.elements);
241
197
  // Validate non-empty [EC-4]
242
198
  if (keys.length === 0) {
243
- throw new RuntimeError('RILL-R002', 'Multi-key dict entry requires non-empty list', keyTuple.span?.start);
199
+ throw new RuntimeError('RILL-R002', 'Multi-key dict entry requires non-empty list', keyList.span?.start);
244
200
  }
245
201
  // Validate all keys are primitives [EC-5]
246
202
  for (const key of keys) {
@@ -248,19 +204,17 @@ function createLiteralsMixin(Base) {
248
204
  if (keyType !== 'string' &&
249
205
  keyType !== 'number' &&
250
206
  keyType !== 'boolean') {
251
- throw new RuntimeError('RILL-R002', `Dict key must be string, number, or boolean, got ${keyType}`, keyTuple.span?.start, { got: keyType });
207
+ throw new RuntimeError('RILL-R002', `Dict key must be string, number, or boolean, got ${keyType}`, keyList.span?.start, { got: keyType });
252
208
  }
253
209
  }
254
210
  // Evaluate value once
255
211
  let evaluatedValue;
256
212
  if (this.isBlockExpr(value)) {
257
- // Safe cast: isBlockExpr ensures head is PostfixExpr with Block primary
258
213
  const head = value.head;
259
214
  const blockNode = head.primary;
260
215
  evaluatedValue = this.createBlockClosure(blockNode);
261
216
  }
262
217
  else if (this.isClosureExpr(value)) {
263
- // Safe cast: isClosureExpr ensures head is PostfixExpr with Closure primary
264
218
  const head = value.head;
265
219
  const fnLit = head.primary;
266
220
  evaluatedValue = await this.createClosure(fnLit);
@@ -367,8 +321,8 @@ function createLiteralsMixin(Base) {
367
321
  continue;
368
322
  }
369
323
  }
370
- // At this point, entry.key must be TupleNode (multi-key entry)
371
- const pairs = await this.evaluateDictMultiKey(entry.key, entry.value);
324
+ // At this point, entry.key is ListLiteralNode (multi-key entry)
325
+ const pairs = await this.evaluateDictMultiKeyFromList(entry.key, entry.value);
372
326
  for (const [stringKey, value] of pairs) {
373
327
  if (isReservedMethod(stringKey)) {
374
328
  throw new RuntimeError('RILL-R002', `Cannot use reserved method name '${stringKey}' as dict key`, entry.span.start, {
@@ -449,9 +403,9 @@ function createLiteralsMixin(Base) {
449
403
  if ('kind' in entry.key) {
450
404
  throw new RuntimeError('RILL-R004', `Variable and computed dict keys not yet supported`, entry.span.start);
451
405
  }
452
- // Tuple key - evaluate to get list of candidates
453
- // Parser ensures entry.key is TupleNode, evaluateTuple always returns array
454
- const keyValue = await this.evaluateTuple(entry.key);
406
+ // ListLiteralNode key - evaluate to get list of candidates
407
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
408
+ const keyValue = (await this.evaluateListLiteralElements(entry.key.elements));
455
409
  // Check if input matches any element in the list (type-aware)
456
410
  for (const candidate of keyValue) {
457
411
  if (deepEquals(input, candidate)) {
@@ -487,20 +441,19 @@ function createLiteralsMixin(Base) {
487
441
  * Takes numeric index and returns element at that position.
488
442
  * Supports negative indices and default values.
489
443
  *
490
- * @param node - TupleNode representing list literal
444
+ * @param node - ListLiteralNode representing list literal
491
445
  * @param input - Piped value to use as index (must be number)
492
446
  * @returns Element at index
493
447
  * @throws RuntimeError if input not number or index out of bounds
494
448
  */
495
449
  async evaluateListDispatch(node, input) {
496
- // Validate input is number
497
- if (typeof input !== 'number') {
498
- throw new RuntimeError('RILL-R002', `List dispatch requires number index, got ${typeof input}`, node.span?.start, { input, expectedType: 'number' });
450
+ // Validate input is an integer (EC-15)
451
+ if (typeof input !== 'number' || !Number.isInteger(input)) {
452
+ throw new RuntimeError('RILL-R041', `List dispatch requires integer index, got ${typeof input !== 'number' ? typeof input : 'non-integer number'}`, node.span?.start, { input, expectedType: 'integer' });
499
453
  }
500
454
  // Evaluate all elements to get the list
501
455
  const elements = await this.evaluateTuple(node);
502
- // Truncate decimal to integer
503
- const index = Math.trunc(input);
456
+ const index = input;
504
457
  // Normalize negative indices
505
458
  const normalizedIndex = index < 0 ? elements.length + index : index;
506
459
  // Check bounds
@@ -510,8 +463,8 @@ function createLiteralsMixin(Base) {
510
463
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
511
464
  return await this.evaluateExpression(node.defaultValue);
512
465
  }
513
- // No match and no default - throw error
514
- throw new RuntimeError('RILL-R009', `List dispatch: index '${index}' not found`, node.span?.start, { index, listLength: elements.length });
466
+ // No default - throw EC-16 out-of-bounds error
467
+ throw new RuntimeError('RILL-R042', `List dispatch: index ${index} out of range (length: ${elements.length})`, node.span?.start, { index, listLength: elements.length });
515
468
  }
516
469
  // Return element at normalized index
517
470
  return elements[normalizedIndex];
@@ -684,14 +637,35 @@ function createLiteralsMixin(Base) {
684
637
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
685
638
  defaultValue = await this.evaluatePrimary(param.defaultValue);
686
639
  }
640
+ // Resolve typeRef at closure-creation time (AC-12).
641
+ // Dynamic refs ($var) are resolved against the current context now,
642
+ // so the closure captures the concrete type, not the variable reference.
643
+ let resolvedTypeName = null;
644
+ if (param.typeRef !== null) {
645
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
646
+ const resolved = this.resolveTypeRef(param.typeRef, (name) => getVariable(this.ctx, name));
647
+ if (!isTypeValue(resolved)) {
648
+ throw new RuntimeError('RILL-R004', `Closure parameter '${param.name}' type must be a type value, not a shape`);
649
+ }
650
+ resolvedTypeName = resolved.typeName;
651
+ }
687
652
  params.push({
688
653
  name: param.name,
689
- typeName: param.typeName,
654
+ typeName: resolvedTypeName,
690
655
  defaultValue,
691
656
  annotations: paramAnnotations[param.name] ?? {},
692
657
  });
693
658
  }
694
659
  const isProperty = params.length === 0;
660
+ const inputShape = paramsToStructuralType(params);
661
+ // Evaluate returnTypeTarget at closure creation time (IR-4).
662
+ // TypeRef → resolve via resolveTypeRef() — returns RillTypeValue.
663
+ // Absent → returnShape remains undefined (omission implies :any, AC-17, AC-18, AC-19).
664
+ let returnShape = undefined;
665
+ if (node.returnTypeTarget !== undefined) {
666
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
667
+ returnShape = this.resolveTypeRef(node.returnTypeTarget, (name) => getVariable(this.ctx, name));
668
+ }
695
669
  return {
696
670
  __type: 'callable',
697
671
  kind: 'script',
@@ -701,6 +675,8 @@ function createLiteralsMixin(Base) {
701
675
  isProperty,
702
676
  annotations,
703
677
  paramAnnotations,
678
+ inputShape,
679
+ returnShape,
704
680
  };
705
681
  }
706
682
  /**
@@ -722,6 +698,10 @@ function createLiteralsMixin(Base) {
722
698
  annotations: {}, // Block closures have no parameter annotations
723
699
  },
724
700
  ];
701
+ const annotations = this.ctx.immediateAnnotation ?? {};
702
+ this.ctx.immediateAnnotation = undefined;
703
+ const paramAnnotations = {};
704
+ const inputShape = paramsToStructuralType(params);
725
705
  return {
726
706
  __type: 'callable',
727
707
  kind: 'script',
@@ -729,8 +709,10 @@ function createLiteralsMixin(Base) {
729
709
  body: node,
730
710
  definingScope,
731
711
  isProperty: false,
732
- annotations: {}, // Block closures: no annotation support (expression-position blocks)
733
- paramAnnotations: {}, // Block closures have no parameter annotations
712
+ annotations,
713
+ paramAnnotations,
714
+ inputShape,
715
+ returnShape: undefined,
734
716
  };
735
717
  }
736
718
  /**