@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.
- package/dist/ast-nodes.d.ts +189 -49
- package/dist/ast-nodes.d.ts.map +1 -1
- package/dist/ast-unions.d.ts +1 -1
- package/dist/ast-unions.d.ts.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +29 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classes.d.ts +3 -1
- package/dist/error-classes.d.ts.map +1 -1
- package/dist/error-classes.js +11 -5
- package/dist/error-classes.js.map +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +293 -9
- package/dist/error-registry.js.map +1 -1
- package/dist/ext/crypto/index.d.ts +2 -1
- package/dist/ext/crypto/index.d.ts.map +1 -1
- package/dist/ext/crypto/index.js +7 -0
- package/dist/ext/crypto/index.js.map +1 -1
- package/dist/ext/exec/index.d.ts +2 -1
- package/dist/ext/exec/index.d.ts.map +1 -1
- package/dist/ext/exec/index.js +6 -0
- package/dist/ext/exec/index.js.map +1 -1
- package/dist/ext/fetch/index.d.ts +2 -1
- package/dist/ext/fetch/index.d.ts.map +1 -1
- package/dist/ext/fetch/index.js +6 -0
- package/dist/ext/fetch/index.js.map +1 -1
- package/dist/ext/fs/index.d.ts +2 -1
- package/dist/ext/fs/index.d.ts.map +1 -1
- package/dist/ext/fs/index.js +3 -0
- package/dist/ext/fs/index.js.map +1 -1
- package/dist/ext/kv/index.d.ts +48 -12
- package/dist/ext/kv/index.d.ts.map +1 -1
- package/dist/ext/kv/index.js +225 -63
- package/dist/ext/kv/index.js.map +1 -1
- package/dist/ext/kv/store.d.ts +4 -0
- package/dist/ext/kv/store.d.ts.map +1 -1
- package/dist/ext/kv/store.js +14 -0
- package/dist/ext/kv/store.js.map +1 -1
- package/dist/generated/introspection-data.d.ts +1 -1
- package/dist/generated/introspection-data.d.ts.map +1 -1
- package/dist/generated/introspection-data.js +194 -185
- package/dist/generated/introspection-data.js.map +1 -1
- package/dist/generated/version-data.d.ts +1 -1
- package/dist/generated/version-data.js +3 -3
- package/dist/highlight-map.d.ts.map +1 -1
- package/dist/highlight-map.js +8 -2
- package/dist/highlight-map.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lexer/operators.d.ts.map +1 -1
- package/dist/lexer/operators.js +0 -2
- package/dist/lexer/operators.js.map +1 -1
- package/dist/lexer/readers.d.ts +18 -1
- package/dist/lexer/readers.d.ts.map +1 -1
- package/dist/lexer/readers.js +55 -0
- package/dist/lexer/readers.js.map +1 -1
- package/dist/parser/helpers.d.ts +8 -13
- package/dist/parser/helpers.d.ts.map +1 -1
- package/dist/parser/helpers.js +42 -35
- package/dist/parser/helpers.js.map +1 -1
- package/dist/parser/index.d.ts +1 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +1 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/parser-collect.d.ts.map +1 -1
- package/dist/parser/parser-collect.js +34 -5
- package/dist/parser/parser-collect.js.map +1 -1
- package/dist/parser/parser-control.d.ts.map +1 -1
- package/dist/parser/parser-control.js +9 -0
- package/dist/parser/parser-control.js.map +1 -1
- package/dist/parser/parser-expr.d.ts +3 -1
- package/dist/parser/parser-expr.d.ts.map +1 -1
- package/dist/parser/parser-expr.js +377 -100
- package/dist/parser/parser-expr.js.map +1 -1
- package/dist/parser/parser-extract.d.ts +3 -5
- package/dist/parser/parser-extract.d.ts.map +1 -1
- package/dist/parser/parser-extract.js +37 -69
- package/dist/parser/parser-extract.js.map +1 -1
- package/dist/parser/parser-functions.d.ts +2 -2
- package/dist/parser/parser-functions.d.ts.map +1 -1
- package/dist/parser/parser-functions.js +112 -36
- package/dist/parser/parser-functions.js.map +1 -1
- package/dist/parser/parser-literals.d.ts +4 -3
- package/dist/parser/parser-literals.d.ts.map +1 -1
- package/dist/parser/parser-literals.js +257 -42
- package/dist/parser/parser-literals.js.map +1 -1
- package/dist/parser/parser-script.d.ts.map +1 -1
- package/dist/parser/parser-script.js +25 -12
- package/dist/parser/parser-script.js.map +1 -1
- package/dist/parser/parser-shape.d.ts +13 -0
- package/dist/parser/parser-shape.d.ts.map +1 -0
- package/dist/parser/parser-shape.js +72 -0
- package/dist/parser/parser-shape.js.map +1 -0
- package/dist/parser/parser-types.d.ts +21 -0
- package/dist/parser/parser-types.d.ts.map +1 -0
- package/dist/parser/parser-types.js +30 -0
- package/dist/parser/parser-types.js.map +1 -0
- package/dist/parser/parser-variables.d.ts.map +1 -1
- package/dist/parser/parser-variables.js +10 -1
- package/dist/parser/parser-variables.js.map +1 -1
- package/dist/runtime/core/callable.d.ts +25 -22
- package/dist/runtime/core/callable.d.ts.map +1 -1
- package/dist/runtime/core/callable.js +43 -36
- package/dist/runtime/core/callable.js.map +1 -1
- package/dist/runtime/core/context.d.ts.map +1 -1
- package/dist/runtime/core/context.js +8 -8
- package/dist/runtime/core/context.js.map +1 -1
- package/dist/runtime/core/equals.d.ts.map +1 -1
- package/dist/runtime/core/equals.js +142 -30
- package/dist/runtime/core/equals.js.map +1 -1
- package/dist/runtime/core/eval/base.d.ts +2 -2
- package/dist/runtime/core/eval/base.d.ts.map +1 -1
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -1
- package/dist/runtime/core/eval/evaluator.js +3 -1
- package/dist/runtime/core/eval/evaluator.js.map +1 -1
- package/dist/runtime/core/eval/index.d.ts +16 -1
- package/dist/runtime/core/eval/index.d.ts.map +1 -1
- package/dist/runtime/core/eval/index.js +22 -2
- package/dist/runtime/core/eval/index.js.map +1 -1
- package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/annotations.js +14 -8
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.d.ts +0 -2
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.js +286 -105
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
- package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/collections.js +65 -25
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.js +21 -17
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -1
- package/dist/runtime/core/eval/mixins/conversion.d.ts +30 -0
- package/dist/runtime/core/eval/mixins/conversion.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/conversion.js +203 -0
- package/dist/runtime/core/eval/mixins/conversion.js.map +1 -0
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/core.js +101 -32
- package/dist/runtime/core/eval/mixins/core.js.map +1 -1
- package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/extraction.js +136 -30
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -1
- package/dist/runtime/core/eval/mixins/list-dispatch.d.ts +17 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.js +97 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.js.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/literals.js +64 -82
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -1
- package/dist/runtime/core/eval/mixins/types.d.ts +4 -0
- package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/types.js +202 -3
- package/dist/runtime/core/eval/mixins/types.js.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.js +42 -7
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
- package/dist/runtime/core/execute.d.ts.map +1 -1
- package/dist/runtime/core/execute.js +2 -15
- package/dist/runtime/core/execute.js.map +1 -1
- package/dist/runtime/core/field-descriptor.d.ts +29 -0
- package/dist/runtime/core/field-descriptor.d.ts.map +1 -0
- package/dist/runtime/core/field-descriptor.js +27 -0
- package/dist/runtime/core/field-descriptor.js.map +1 -0
- package/dist/runtime/core/types.d.ts +15 -6
- package/dist/runtime/core/types.d.ts.map +1 -1
- package/dist/runtime/core/types.js.map +1 -1
- package/dist/runtime/core/values.d.ts +107 -9
- package/dist/runtime/core/values.d.ts.map +1 -1
- package/dist/runtime/core/values.js +453 -43
- package/dist/runtime/core/values.js.map +1 -1
- package/dist/runtime/ext/builtins.d.ts.map +1 -1
- package/dist/runtime/ext/builtins.js +47 -107
- package/dist/runtime/ext/builtins.js.map +1 -1
- package/dist/runtime/ext/extensions.d.ts +134 -1
- package/dist/runtime/ext/extensions.d.ts.map +1 -1
- package/dist/runtime/ext/extensions.js.map +1 -1
- package/dist/runtime/index.d.ts +7 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +7 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/token-types.d.ts +7 -2
- package/dist/token-types.d.ts.map +1 -1
- package/dist/token-types.js +9 -2
- package/dist/token-types.js.map +1 -1
- package/dist/value-types.d.ts +19 -1
- package/dist/value-types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
import { RuntimeError } from '../../../../types.js';
|
|
10
|
-
import {
|
|
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
|
-
* -
|
|
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;
|
|
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
|
|
49
|
-
// When a closure is created within
|
|
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
|
-
//
|
|
52
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
239
|
-
// Evaluate
|
|
240
|
-
|
|
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',
|
|
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}`,
|
|
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
|
|
371
|
-
const pairs = await this.
|
|
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
|
-
//
|
|
453
|
-
//
|
|
454
|
-
const keyValue = await this.
|
|
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 -
|
|
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
|
|
497
|
-
if (typeof input !== 'number') {
|
|
498
|
-
throw new RuntimeError('RILL-
|
|
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
|
-
|
|
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
|
|
514
|
-
throw new RuntimeError('RILL-
|
|
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:
|
|
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
|
|
733
|
-
paramAnnotations
|
|
712
|
+
annotations,
|
|
713
|
+
paramAnnotations,
|
|
714
|
+
inputShape,
|
|
715
|
+
returnShape: undefined,
|
|
734
716
|
};
|
|
735
717
|
}
|
|
736
718
|
/**
|