@rcrsr/rill 0.1.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/LICENSE +21 -0
- package/README.md +187 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +121 -0
- package/dist/demo.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/errors.d.ts +9 -0
- package/dist/lexer/errors.d.ts.map +1 -0
- package/dist/lexer/errors.js +12 -0
- package/dist/lexer/errors.js.map +1 -0
- package/dist/lexer/helpers.d.ts +14 -0
- package/dist/lexer/helpers.d.ts.map +1 -0
- package/dist/lexer/helpers.js +30 -0
- package/dist/lexer/helpers.js.map +1 -0
- package/dist/lexer/index.d.ts +8 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +8 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/operators.d.ts +11 -0
- package/dist/lexer/operators.d.ts.map +1 -0
- package/dist/lexer/operators.js +58 -0
- package/dist/lexer/operators.js.map +1 -0
- package/dist/lexer/readers.d.ts +12 -0
- package/dist/lexer/readers.d.ts.map +1 -0
- package/dist/lexer/readers.js +144 -0
- package/dist/lexer/readers.js.map +1 -0
- package/dist/lexer/state.d.ts +18 -0
- package/dist/lexer/state.d.ts.map +1 -0
- package/dist/lexer/state.js +37 -0
- package/dist/lexer/state.js.map +1 -0
- package/dist/lexer/tokenizer.d.ts +9 -0
- package/dist/lexer/tokenizer.d.ts.map +1 -0
- package/dist/lexer/tokenizer.js +100 -0
- package/dist/lexer/tokenizer.js.map +1 -0
- package/dist/lexer.d.ts +19 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +344 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser/arithmetic.d.ts +16 -0
- package/dist/parser/arithmetic.d.ts.map +1 -0
- package/dist/parser/arithmetic.js +128 -0
- package/dist/parser/arithmetic.js.map +1 -0
- package/dist/parser/boolean.d.ts +15 -0
- package/dist/parser/boolean.d.ts.map +1 -0
- package/dist/parser/boolean.js +20 -0
- package/dist/parser/boolean.js.map +1 -0
- package/dist/parser/control-flow.d.ts +56 -0
- package/dist/parser/control-flow.d.ts.map +1 -0
- package/dist/parser/control-flow.js +167 -0
- package/dist/parser/control-flow.js.map +1 -0
- package/dist/parser/expressions.d.ts +23 -0
- package/dist/parser/expressions.d.ts.map +1 -0
- package/dist/parser/expressions.js +950 -0
- package/dist/parser/expressions.js.map +1 -0
- package/dist/parser/extraction.d.ts +48 -0
- package/dist/parser/extraction.d.ts.map +1 -0
- package/dist/parser/extraction.js +279 -0
- package/dist/parser/extraction.js.map +1 -0
- package/dist/parser/functions.d.ts +20 -0
- package/dist/parser/functions.d.ts.map +1 -0
- package/dist/parser/functions.js +96 -0
- package/dist/parser/functions.js.map +1 -0
- package/dist/parser/helpers.d.ts +94 -0
- package/dist/parser/helpers.d.ts.map +1 -0
- package/dist/parser/helpers.js +225 -0
- package/dist/parser/helpers.js.map +1 -0
- package/dist/parser/index.d.ts +49 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +73 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/literals.d.ts +37 -0
- package/dist/parser/literals.d.ts.map +1 -0
- package/dist/parser/literals.js +373 -0
- package/dist/parser/literals.js.map +1 -0
- package/dist/parser/parser-collect.d.ts +16 -0
- package/dist/parser/parser-collect.d.ts.map +1 -0
- package/dist/parser/parser-collect.js +125 -0
- package/dist/parser/parser-collect.js.map +1 -0
- package/dist/parser/parser-control.d.ts +20 -0
- package/dist/parser/parser-control.d.ts.map +1 -0
- package/dist/parser/parser-control.js +120 -0
- package/dist/parser/parser-control.js.map +1 -0
- package/dist/parser/parser-expr.d.ts +37 -0
- package/dist/parser/parser-expr.d.ts.map +1 -0
- package/dist/parser/parser-expr.js +639 -0
- package/dist/parser/parser-expr.js.map +1 -0
- package/dist/parser/parser-extract.d.ts +17 -0
- package/dist/parser/parser-extract.d.ts.map +1 -0
- package/dist/parser/parser-extract.js +222 -0
- package/dist/parser/parser-extract.js.map +1 -0
- package/dist/parser/parser-functions.d.ts +21 -0
- package/dist/parser/parser-functions.d.ts.map +1 -0
- package/dist/parser/parser-functions.js +155 -0
- package/dist/parser/parser-functions.js.map +1 -0
- package/dist/parser/parser-literals.d.ts +22 -0
- package/dist/parser/parser-literals.d.ts.map +1 -0
- package/dist/parser/parser-literals.js +288 -0
- package/dist/parser/parser-literals.js.map +1 -0
- package/dist/parser/parser-script.d.ts +21 -0
- package/dist/parser/parser-script.d.ts.map +1 -0
- package/dist/parser/parser-script.js +174 -0
- package/dist/parser/parser-script.js.map +1 -0
- package/dist/parser/parser-variables.d.ts +20 -0
- package/dist/parser/parser-variables.d.ts.map +1 -0
- package/dist/parser/parser-variables.js +146 -0
- package/dist/parser/parser-variables.js.map +1 -0
- package/dist/parser/parser.d.ts +49 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +54 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/parser/script.d.ts +14 -0
- package/dist/parser/script.d.ts.map +1 -0
- package/dist/parser/script.js +196 -0
- package/dist/parser/script.js.map +1 -0
- package/dist/parser/state.d.ts +40 -0
- package/dist/parser/state.d.ts.map +1 -0
- package/dist/parser/state.js +129 -0
- package/dist/parser/state.js.map +1 -0
- package/dist/parser/variables.d.ts +10 -0
- package/dist/parser/variables.d.ts.map +1 -0
- package/dist/parser/variables.js +215 -0
- package/dist/parser/variables.js.map +1 -0
- package/dist/runtime/ast-equals.d.ts +13 -0
- package/dist/runtime/ast-equals.d.ts.map +1 -0
- package/dist/runtime/ast-equals.js +447 -0
- package/dist/runtime/ast-equals.js.map +1 -0
- package/dist/runtime/builtins.d.ts +13 -0
- package/dist/runtime/builtins.d.ts.map +1 -0
- package/dist/runtime/builtins.js +180 -0
- package/dist/runtime/builtins.js.map +1 -0
- package/dist/runtime/callable.d.ts +88 -0
- package/dist/runtime/callable.d.ts.map +1 -0
- package/dist/runtime/callable.js +98 -0
- package/dist/runtime/callable.js.map +1 -0
- package/dist/runtime/context.d.ts +13 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +73 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/core/callable.d.ts +171 -0
- package/dist/runtime/core/callable.d.ts.map +1 -0
- package/dist/runtime/core/callable.js +246 -0
- package/dist/runtime/core/callable.js.map +1 -0
- package/dist/runtime/core/context.d.ts +29 -0
- package/dist/runtime/core/context.d.ts.map +1 -0
- package/dist/runtime/core/context.js +154 -0
- package/dist/runtime/core/context.js.map +1 -0
- package/dist/runtime/core/equals.d.ts +9 -0
- package/dist/runtime/core/equals.d.ts.map +1 -0
- package/dist/runtime/core/equals.js +381 -0
- package/dist/runtime/core/equals.js.map +1 -0
- package/dist/runtime/core/eval/base.d.ts +65 -0
- package/dist/runtime/core/eval/base.d.ts.map +1 -0
- package/dist/runtime/core/eval/base.js +112 -0
- package/dist/runtime/core/eval/base.js.map +1 -0
- package/dist/runtime/core/eval/evaluator.d.ts +47 -0
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -0
- package/dist/runtime/core/eval/evaluator.js +73 -0
- package/dist/runtime/core/eval/evaluator.js.map +1 -0
- package/dist/runtime/core/eval/index.d.ts +57 -0
- package/dist/runtime/core/eval/index.d.ts.map +1 -0
- package/dist/runtime/core/eval/index.js +95 -0
- package/dist/runtime/core/eval/index.js.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.js +146 -0
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts +49 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.js +479 -0
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.js +466 -0
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts +27 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.js +369 -0
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -0
- package/dist/runtime/core/eval/mixins/core.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/core.js +335 -0
- package/dist/runtime/core/eval/mixins/core.js.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.js +202 -0
- package/dist/runtime/core/eval/mixins/expressions.js.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts +10 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.js +250 -0
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts +23 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.js +180 -0
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -0
- package/dist/runtime/core/eval/mixins/types.d.ts +20 -0
- package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/types.js +109 -0
- package/dist/runtime/core/eval/mixins/types.js.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts +34 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.js +247 -0
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -0
- package/dist/runtime/core/eval/types.d.ts +41 -0
- package/dist/runtime/core/eval/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/types.js +10 -0
- package/dist/runtime/core/eval/types.js.map +1 -0
- package/dist/runtime/core/evaluate.d.ts +42 -0
- package/dist/runtime/core/evaluate.d.ts.map +1 -0
- package/dist/runtime/core/evaluate.debug.js +1251 -0
- package/dist/runtime/core/evaluate.js +1913 -0
- package/dist/runtime/core/evaluate.js.map +1 -0
- package/dist/runtime/core/execute.d.ts +26 -0
- package/dist/runtime/core/execute.d.ts.map +1 -0
- package/dist/runtime/core/execute.js +177 -0
- package/dist/runtime/core/execute.js.map +1 -0
- package/dist/runtime/core/signals.d.ts +19 -0
- package/dist/runtime/core/signals.d.ts.map +1 -0
- package/dist/runtime/core/signals.js +26 -0
- package/dist/runtime/core/signals.js.map +1 -0
- package/dist/runtime/core/types.d.ts +177 -0
- package/dist/runtime/core/types.d.ts.map +1 -0
- package/dist/runtime/core/types.js +50 -0
- package/dist/runtime/core/types.js.map +1 -0
- package/dist/runtime/core/values.d.ts +66 -0
- package/dist/runtime/core/values.d.ts.map +1 -0
- package/dist/runtime/core/values.js +240 -0
- package/dist/runtime/core/values.js.map +1 -0
- package/dist/runtime/evaluate.d.ts +32 -0
- package/dist/runtime/evaluate.d.ts.map +1 -0
- package/dist/runtime/evaluate.js +1111 -0
- package/dist/runtime/evaluate.js.map +1 -0
- package/dist/runtime/execute.d.ts +26 -0
- package/dist/runtime/execute.d.ts.map +1 -0
- package/dist/runtime/execute.js +121 -0
- package/dist/runtime/execute.js.map +1 -0
- package/dist/runtime/ext/builtins.d.ts +16 -0
- package/dist/runtime/ext/builtins.d.ts.map +1 -0
- package/dist/runtime/ext/builtins.js +528 -0
- package/dist/runtime/ext/builtins.js.map +1 -0
- package/dist/runtime/ext/content-parser.d.ts +83 -0
- package/dist/runtime/ext/content-parser.d.ts.map +1 -0
- package/dist/runtime/ext/content-parser.js +536 -0
- package/dist/runtime/ext/content-parser.js.map +1 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +34 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/signals.d.ts +19 -0
- package/dist/runtime/signals.d.ts.map +1 -0
- package/dist/runtime/signals.js +26 -0
- package/dist/runtime/signals.js.map +1 -0
- package/dist/runtime/types.d.ts +169 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +50 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/values.d.ts +50 -0
- package/dist/runtime/values.d.ts.map +1 -0
- package/dist/runtime/values.js +209 -0
- package/dist/runtime/values.js.map +1 -0
- package/dist/runtime.d.ts +254 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2014 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +752 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +189 -0
- package/dist/types.js.map +1 -0
- package/docs/00_INDEX.md +65 -0
- package/docs/01_guide.md +390 -0
- package/docs/02_types.md +399 -0
- package/docs/03_variables.md +314 -0
- package/docs/04_operators.md +551 -0
- package/docs/05_control-flow.md +350 -0
- package/docs/06_closures.md +353 -0
- package/docs/07_collections.md +686 -0
- package/docs/08_iterators.md +330 -0
- package/docs/09_strings.md +205 -0
- package/docs/10_parsing.md +366 -0
- package/docs/11_reference.md +350 -0
- package/docs/12_examples.md +771 -0
- package/docs/13_modules.md +519 -0
- package/docs/14_host-integration.md +826 -0
- package/docs/15_grammar.ebnf +693 -0
- package/docs/16_conventions.md +696 -0
- package/docs/99_llm-reference.txt +300 -0
- package/docs/assets/logo.png +0 -0
- package/package.json +70 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoreMixin: Main Expression Dispatch
|
|
3
|
+
*
|
|
4
|
+
* Provides the main entry points for expression evaluation and dispatches
|
|
5
|
+
* to specialized evaluators based on AST node type.
|
|
6
|
+
*
|
|
7
|
+
* This is the central coordination point that ties together all other mixins.
|
|
8
|
+
*
|
|
9
|
+
* Interface requirements (from spec IR-5 through IR-13):
|
|
10
|
+
* - evaluateExpression(expr) -> Promise<RillValue> [IR-8]
|
|
11
|
+
* - evaluatePipeChain(chain) -> Promise<RillValue> [IR-9]
|
|
12
|
+
* - evaluatePostfixExpr(expr) -> Promise<RillValue> [IR-10]
|
|
13
|
+
* - evaluatePrimary(primary) -> Promise<RillValue> [IR-11]
|
|
14
|
+
* - evaluatePipeTarget(target, input) -> Promise<RillValue> [IR-12]
|
|
15
|
+
* - evaluateArgs(argExprs) -> Promise<RillValue[]> [IR-13]
|
|
16
|
+
*
|
|
17
|
+
* Error Handling:
|
|
18
|
+
* - Unsupported expression types throw RuntimeError [EC-4]
|
|
19
|
+
* - Aborted execution throws AbortError [EC-5]
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
import { RuntimeError, RILL_ERROR_CODES } from '../../../../types.js';
|
|
24
|
+
import { BreakSignal, ReturnSignal } from '../../signals.js';
|
|
25
|
+
/**
|
|
26
|
+
* CoreMixin implementation.
|
|
27
|
+
*
|
|
28
|
+
* Provides main dispatch methods for expression evaluation.
|
|
29
|
+
* This mixin coordinates with other mixins to provide complete evaluation.
|
|
30
|
+
*
|
|
31
|
+
* Depends on:
|
|
32
|
+
* - EvaluatorBase: ctx, checkAborted(), getNodeLocation()
|
|
33
|
+
* - ExpressionsMixin: evaluateBinaryExpr(), evaluateUnaryExpr(), evaluateGroupedExpr()
|
|
34
|
+
* - LiteralsMixin: evaluateString(), evaluateDict(), evaluateTuple(), createClosure()
|
|
35
|
+
* - VariablesMixin: evaluateVariable(), evaluateVariableAsync(), evaluatePipePropertyAccess(), evaluateVariableInvoke(), handleCapture()
|
|
36
|
+
* - ClosuresMixin: evaluateHostCall(), evaluateClosureCall(), evaluatePipeInvoke(), evaluateClosureChain()
|
|
37
|
+
* - ControlFlowMixin: evaluateConditional(), evaluateWhileLoop(), evaluateDoWhileLoop(), evaluateBlockExpression()
|
|
38
|
+
* - TypesMixin: evaluateTypeAssertion(), evaluateTypeCheck()
|
|
39
|
+
* - CollectionsMixin: evaluateEach(), evaluateMap(), evaluateFold(), evaluateFilter()
|
|
40
|
+
* - ExtractionMixin: evaluateDestructure(), evaluateSlice(), evaluateSpread()
|
|
41
|
+
*
|
|
42
|
+
* Methods added:
|
|
43
|
+
* - evaluateExpression(expr) -> Promise<RillValue>
|
|
44
|
+
* - evaluatePipeChain(chain) -> Promise<RillValue>
|
|
45
|
+
* - evaluatePostfixExpr(expr) -> Promise<RillValue>
|
|
46
|
+
* - evaluatePrimary(primary) -> Promise<RillValue>
|
|
47
|
+
* - evaluatePipeTarget(target, input) -> Promise<RillValue>
|
|
48
|
+
* - evaluateArgs(argExprs) -> Promise<RillValue[]>
|
|
49
|
+
*/
|
|
50
|
+
function createCoreMixin(Base) {
|
|
51
|
+
return class CoreEvaluator extends Base {
|
|
52
|
+
/**
|
|
53
|
+
* Main expression evaluation entry point [IR-8].
|
|
54
|
+
* Delegates to pipe chain evaluator.
|
|
55
|
+
*/
|
|
56
|
+
async evaluateExpression(expr) {
|
|
57
|
+
this.checkAborted();
|
|
58
|
+
return this.evaluatePipeChain(expr);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Evaluate pipe chain with left-to-right flow [IR-9].
|
|
62
|
+
*
|
|
63
|
+
* Pipe chains isolate their $ value from parent scope.
|
|
64
|
+
* The chain's result is returned, but $ modifications don't leak.
|
|
65
|
+
*
|
|
66
|
+
* Handles chain terminators:
|
|
67
|
+
* - Capture: stores value and returns it
|
|
68
|
+
* - Break: throws BreakSignal with value
|
|
69
|
+
* - Return: throws ReturnSignal with value
|
|
70
|
+
*/
|
|
71
|
+
async evaluatePipeChain(chain) {
|
|
72
|
+
// Save parent's $ - chains don't leak $ modifications to parent scope
|
|
73
|
+
const savedPipeValue = this.ctx.pipeValue;
|
|
74
|
+
// Evaluate head (can be PostfixExpr, BinaryExpr, or UnaryExpr)
|
|
75
|
+
let value;
|
|
76
|
+
switch (chain.head.type) {
|
|
77
|
+
case 'BinaryExpr':
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
+
value = await this.evaluateBinaryExpr(chain.head);
|
|
80
|
+
break;
|
|
81
|
+
case 'UnaryExpr':
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
+
value = await this.evaluateUnaryExpr(chain.head);
|
|
84
|
+
break;
|
|
85
|
+
case 'PostfixExpr':
|
|
86
|
+
value = await this.evaluatePostfixExpr(chain.head);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
this.ctx.pipeValue = value; // OK: local to this chain evaluation
|
|
90
|
+
// Evaluate each pipe target in sequence
|
|
91
|
+
// [IR-8: BreakSignal and ReturnSignal propagate through to caller]
|
|
92
|
+
for (const target of chain.pipes) {
|
|
93
|
+
// Handle inline captures (act as identity: store and pass through)
|
|
94
|
+
if (target.type === 'Capture') {
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
96
|
+
this.handleCapture(target, value);
|
|
97
|
+
// Value flows through unchanged
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
value = await this.evaluatePipeTarget(target, value);
|
|
101
|
+
this.ctx.pipeValue = value; // OK: flows within chain
|
|
102
|
+
}
|
|
103
|
+
// Handle chain terminator (capture, break, return)
|
|
104
|
+
if (chain.terminator) {
|
|
105
|
+
if (chain.terminator.type === 'Break') {
|
|
106
|
+
// Restore parent's $ before throwing (cleanup)
|
|
107
|
+
this.ctx.pipeValue = savedPipeValue;
|
|
108
|
+
throw new BreakSignal(value);
|
|
109
|
+
}
|
|
110
|
+
if (chain.terminator.type === 'Return') {
|
|
111
|
+
// Restore parent's $ before throwing (cleanup)
|
|
112
|
+
this.ctx.pipeValue = savedPipeValue;
|
|
113
|
+
throw new ReturnSignal(value);
|
|
114
|
+
}
|
|
115
|
+
// Capture
|
|
116
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
117
|
+
this.handleCapture(chain.terminator, value);
|
|
118
|
+
}
|
|
119
|
+
// Restore parent's $ - chain result is returned, but $ doesn't leak
|
|
120
|
+
this.ctx.pipeValue = savedPipeValue;
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Evaluate postfix expression: primary with method chain [IR-10].
|
|
125
|
+
*
|
|
126
|
+
* Example: obj.method1().method2().method3()
|
|
127
|
+
* Evaluates primary, then applies each method in sequence.
|
|
128
|
+
*/
|
|
129
|
+
async evaluatePostfixExpr(expr) {
|
|
130
|
+
let value = await this.evaluatePrimary(expr.primary);
|
|
131
|
+
for (const method of expr.methods) {
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
133
|
+
value = await this.evaluateMethod(method, value);
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Evaluate primary expression [IR-11].
|
|
139
|
+
*
|
|
140
|
+
* Primary expressions are the atomic units of expressions:
|
|
141
|
+
* - Literals (string, number, boolean, tuple, dict, closure)
|
|
142
|
+
* - Variables
|
|
143
|
+
* - Function calls
|
|
144
|
+
* - Control flow constructs
|
|
145
|
+
* - Grouped expressions
|
|
146
|
+
*/
|
|
147
|
+
async evaluatePrimary(primary) {
|
|
148
|
+
switch (primary.type) {
|
|
149
|
+
case 'StringLiteral':
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
|
+
return this.evaluateString(primary);
|
|
152
|
+
case 'NumberLiteral':
|
|
153
|
+
return primary.value;
|
|
154
|
+
case 'BoolLiteral':
|
|
155
|
+
return primary.value;
|
|
156
|
+
case 'Tuple':
|
|
157
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
158
|
+
return this.evaluateTuple(primary);
|
|
159
|
+
case 'Dict':
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
161
|
+
return this.evaluateDict(primary);
|
|
162
|
+
case 'Closure':
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
164
|
+
return await this.createClosure(primary);
|
|
165
|
+
case 'Variable':
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
return this.evaluateVariableAsync(primary);
|
|
168
|
+
case 'HostCall':
|
|
169
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
170
|
+
return this.evaluateHostCall(primary);
|
|
171
|
+
case 'ClosureCall':
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
173
|
+
return this.evaluateClosureCall(primary);
|
|
174
|
+
case 'MethodCall':
|
|
175
|
+
if (this.ctx.pipeValue === null) {
|
|
176
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_VARIABLE, 'Undefined variable: $', primary.span?.start, { variable: '$' });
|
|
177
|
+
}
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
179
|
+
return this.evaluateMethod(primary, this.ctx.pipeValue);
|
|
180
|
+
case 'Conditional':
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
182
|
+
return this.evaluateConditional(primary);
|
|
183
|
+
case 'WhileLoop':
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
185
|
+
return this.evaluateWhileLoop(primary);
|
|
186
|
+
case 'DoWhileLoop':
|
|
187
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
188
|
+
return this.evaluateDoWhileLoop(primary);
|
|
189
|
+
case 'Block':
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
191
|
+
return this.evaluateBlockExpression(primary);
|
|
192
|
+
case 'GroupedExpr':
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
|
+
return this.evaluateGroupedExpr(primary);
|
|
195
|
+
case 'Spread':
|
|
196
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
197
|
+
return this.evaluateSpread(primary);
|
|
198
|
+
case 'TypeAssertion': {
|
|
199
|
+
// Postfix type assertion: the operand is already evaluated
|
|
200
|
+
if (!primary.operand) {
|
|
201
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Postfix type assertion requires operand', primary.span.start);
|
|
202
|
+
}
|
|
203
|
+
const assertValue = await this.evaluatePostfixExpr(primary.operand);
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
205
|
+
return this.evaluateTypeAssertion(primary, assertValue);
|
|
206
|
+
}
|
|
207
|
+
case 'TypeCheck': {
|
|
208
|
+
// Postfix type check: the operand is already evaluated
|
|
209
|
+
if (!primary.operand) {
|
|
210
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Postfix type check requires operand', primary.span.start);
|
|
211
|
+
}
|
|
212
|
+
const checkValue = await this.evaluatePostfixExpr(primary.operand);
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
214
|
+
return this.evaluateTypeCheck(primary, checkValue);
|
|
215
|
+
}
|
|
216
|
+
default:
|
|
217
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Unsupported expression type: ${primary.type}`, this.getNodeLocation(primary));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Evaluate pipe target with input value [IR-12].
|
|
222
|
+
*
|
|
223
|
+
* Pipe targets are expressions that can receive piped values.
|
|
224
|
+
* Sets $ to the input value before evaluation.
|
|
225
|
+
*/
|
|
226
|
+
async evaluatePipeTarget(target, input) {
|
|
227
|
+
this.ctx.pipeValue = input;
|
|
228
|
+
switch (target.type) {
|
|
229
|
+
case 'HostCall':
|
|
230
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
231
|
+
return this.evaluateHostCall(target);
|
|
232
|
+
case 'ClosureCall':
|
|
233
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
234
|
+
return this.evaluateClosureCallWithPipe(target, input);
|
|
235
|
+
case 'PipeInvoke':
|
|
236
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
237
|
+
return this.evaluatePipeInvoke(target, input);
|
|
238
|
+
case 'MethodCall':
|
|
239
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
240
|
+
return this.evaluateMethod(target, input);
|
|
241
|
+
case 'Conditional':
|
|
242
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
243
|
+
return this.evaluateConditional(target);
|
|
244
|
+
case 'WhileLoop':
|
|
245
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
246
|
+
return this.evaluateWhileLoop(target);
|
|
247
|
+
case 'DoWhileLoop':
|
|
248
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
249
|
+
return this.evaluateDoWhileLoop(target);
|
|
250
|
+
case 'Block':
|
|
251
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
252
|
+
return this.evaluateBlockExpression(target);
|
|
253
|
+
case 'StringLiteral':
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
255
|
+
return this.evaluateString(target);
|
|
256
|
+
case 'GroupedExpr':
|
|
257
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
258
|
+
return this.evaluateGroupedExpr(target);
|
|
259
|
+
case 'ClosureChain':
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
261
|
+
return this.evaluateClosureChain(target, input);
|
|
262
|
+
case 'Destructure':
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
264
|
+
return this.evaluateDestructure(target, input);
|
|
265
|
+
case 'Slice':
|
|
266
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
267
|
+
return this.evaluateSlice(target, input);
|
|
268
|
+
case 'Spread':
|
|
269
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
270
|
+
return this.evaluateSpread(target);
|
|
271
|
+
case 'TypeAssertion':
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
273
|
+
return this.evaluateTypeAssertion(target, input);
|
|
274
|
+
case 'TypeCheck':
|
|
275
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
276
|
+
return this.evaluateTypeCheck(target, input);
|
|
277
|
+
case 'EachExpr':
|
|
278
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
279
|
+
return this.evaluateEach(target, input);
|
|
280
|
+
case 'MapExpr':
|
|
281
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
282
|
+
return this.evaluateMap(target, input);
|
|
283
|
+
case 'FoldExpr':
|
|
284
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
285
|
+
return this.evaluateFold(target, input);
|
|
286
|
+
case 'FilterExpr':
|
|
287
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
288
|
+
return this.evaluateFilter(target, input);
|
|
289
|
+
case 'Variable':
|
|
290
|
+
// $.field is property access on pipe value, not closure invocation
|
|
291
|
+
if (target.isPipeVar &&
|
|
292
|
+
!target.name &&
|
|
293
|
+
target.accessChain.length > 0) {
|
|
294
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
295
|
+
return this.evaluatePipePropertyAccess(target, input);
|
|
296
|
+
}
|
|
297
|
+
// Variable in pipe chain: evaluate normally (preserves original error codes)
|
|
298
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
299
|
+
return this.evaluateVariableAsync(target);
|
|
300
|
+
case 'PostfixExpr': {
|
|
301
|
+
// Chained methods on pipe value: -> .a.b.c
|
|
302
|
+
// The primary is implicit $ (pipe value)
|
|
303
|
+
let value = input;
|
|
304
|
+
for (const method of target.methods) {
|
|
305
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
306
|
+
value = await this.evaluateMethod(method, value);
|
|
307
|
+
}
|
|
308
|
+
return value;
|
|
309
|
+
}
|
|
310
|
+
default:
|
|
311
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Unsupported pipe target type: ${target.type}`, this.getNodeLocation(target));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Evaluate argument expressions [IR-13].
|
|
316
|
+
*
|
|
317
|
+
* Evaluates arguments in order, preserving pipe value.
|
|
318
|
+
* The pipe value is saved and restored so arguments don't affect it.
|
|
319
|
+
*/
|
|
320
|
+
async evaluateArgs(argExprs) {
|
|
321
|
+
const savedPipeValue = this.ctx.pipeValue;
|
|
322
|
+
const args = [];
|
|
323
|
+
for (const arg of argExprs) {
|
|
324
|
+
args.push(await this.evaluateExpression(arg));
|
|
325
|
+
}
|
|
326
|
+
this.ctx.pipeValue = savedPipeValue;
|
|
327
|
+
return args;
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// Export with type assertion to work around TS4094 limitation
|
|
332
|
+
// TypeScript can't generate declarations for functions returning classes with protected members
|
|
333
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
334
|
+
export const CoreMixin = createCoreMixin;
|
|
335
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressionsMixin: Binary and Unary Expressions
|
|
3
|
+
*
|
|
4
|
+
* Handles arithmetic, comparison, and logical operators.
|
|
5
|
+
* Provides evaluation for binary operations, unary operations, and grouped expressions.
|
|
6
|
+
*
|
|
7
|
+
* Interface requirements (from spec):
|
|
8
|
+
* - evaluateBinaryExpr(node) -> Promise<RillValue>
|
|
9
|
+
* - evaluateUnaryExpr(node) -> Promise<RillValue>
|
|
10
|
+
* - evaluateGroupedExpr(node) -> Promise<RillValue>
|
|
11
|
+
*
|
|
12
|
+
* Error Handling:
|
|
13
|
+
* - Type mismatches in operators throw RuntimeError(RUNTIME_TYPE_ERROR) [EC-22]
|
|
14
|
+
* - Nested expression evaluation errors are propagated [EC-23]
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export declare const ExpressionsMixin: any;
|
|
19
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/expressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAuOH,eAAO,MAAM,gBAAgB,EAA6B,GAAG,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressionsMixin: Binary and Unary Expressions
|
|
3
|
+
*
|
|
4
|
+
* Handles arithmetic, comparison, and logical operators.
|
|
5
|
+
* Provides evaluation for binary operations, unary operations, and grouped expressions.
|
|
6
|
+
*
|
|
7
|
+
* Interface requirements (from spec):
|
|
8
|
+
* - evaluateBinaryExpr(node) -> Promise<RillValue>
|
|
9
|
+
* - evaluateUnaryExpr(node) -> Promise<RillValue>
|
|
10
|
+
* - evaluateGroupedExpr(node) -> Promise<RillValue>
|
|
11
|
+
*
|
|
12
|
+
* Error Handling:
|
|
13
|
+
* - Type mismatches in operators throw RuntimeError(RUNTIME_TYPE_ERROR) [EC-22]
|
|
14
|
+
* - Nested expression evaluation errors are propagated [EC-23]
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
import { RuntimeError, RILL_ERROR_CODES } from '../../../../types.js';
|
|
19
|
+
import { inferType, isTruthy, deepEquals } from '../../values.js';
|
|
20
|
+
import { createChildContext } from '../../context.js';
|
|
21
|
+
/**
|
|
22
|
+
* ExpressionsMixin implementation.
|
|
23
|
+
*
|
|
24
|
+
* Evaluates binary expressions (arithmetic, comparison, logical),
|
|
25
|
+
* unary expressions (negation, logical NOT), and grouped expressions.
|
|
26
|
+
*
|
|
27
|
+
* Depends on:
|
|
28
|
+
* - EvaluatorBase: ctx, getNodeLocation()
|
|
29
|
+
* - evaluateExprHead() (internal helper, defined in this mixin)
|
|
30
|
+
* - evaluatePostfixExpr() (from future CoreMixin composition)
|
|
31
|
+
* - evaluatePipeChain() (from future CoreMixin composition)
|
|
32
|
+
*
|
|
33
|
+
* Methods added:
|
|
34
|
+
* - evaluateBinaryExpr(node) -> Promise<RillValue>
|
|
35
|
+
* - evaluateUnaryExpr(node) -> Promise<RillValue>
|
|
36
|
+
* - evaluateGroupedExpr(node) -> Promise<RillValue>
|
|
37
|
+
* - evaluateExprHead(node) -> Promise<RillValue> (helper)
|
|
38
|
+
* - evaluateExprHeadNumber(node) -> Promise<number> (helper)
|
|
39
|
+
* - evaluateBinaryComparison(left, right, op, node) -> boolean (helper)
|
|
40
|
+
*/
|
|
41
|
+
function createExpressionsMixin(Base) {
|
|
42
|
+
return class ExpressionsEvaluator extends Base {
|
|
43
|
+
/**
|
|
44
|
+
* Evaluate binary expression: left op right.
|
|
45
|
+
* Handles arithmetic, comparison, and logical operators.
|
|
46
|
+
*/
|
|
47
|
+
async evaluateBinaryExpr(node) {
|
|
48
|
+
const { op } = node;
|
|
49
|
+
// Logical operators with short-circuit evaluation
|
|
50
|
+
if (op === '||') {
|
|
51
|
+
const left = await this.evaluateExprHead(node.left);
|
|
52
|
+
if (isTruthy(left))
|
|
53
|
+
return true;
|
|
54
|
+
const right = await this.evaluateExprHead(node.right);
|
|
55
|
+
return isTruthy(right);
|
|
56
|
+
}
|
|
57
|
+
if (op === '&&') {
|
|
58
|
+
const left = await this.evaluateExprHead(node.left);
|
|
59
|
+
if (!isTruthy(left))
|
|
60
|
+
return false;
|
|
61
|
+
const right = await this.evaluateExprHead(node.right);
|
|
62
|
+
return isTruthy(right);
|
|
63
|
+
}
|
|
64
|
+
// Comparison operators - work on any values, return boolean
|
|
65
|
+
if (op === '==' ||
|
|
66
|
+
op === '!=' ||
|
|
67
|
+
op === '<' ||
|
|
68
|
+
op === '>' ||
|
|
69
|
+
op === '<=' ||
|
|
70
|
+
op === '>=') {
|
|
71
|
+
const left = await this.evaluateExprHead(node.left);
|
|
72
|
+
const right = await this.evaluateExprHead(node.right);
|
|
73
|
+
return this.evaluateBinaryComparison(left, right, op, node);
|
|
74
|
+
}
|
|
75
|
+
// Arithmetic operators - require numbers
|
|
76
|
+
const left = await this.evaluateExprHeadNumber(node.left);
|
|
77
|
+
const right = await this.evaluateExprHeadNumber(node.right);
|
|
78
|
+
switch (op) {
|
|
79
|
+
case '+':
|
|
80
|
+
return left + right;
|
|
81
|
+
case '-':
|
|
82
|
+
return left - right;
|
|
83
|
+
case '*':
|
|
84
|
+
return left * right;
|
|
85
|
+
case '/':
|
|
86
|
+
if (right === 0) {
|
|
87
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Division by zero', node.span.start);
|
|
88
|
+
}
|
|
89
|
+
return left / right;
|
|
90
|
+
case '%':
|
|
91
|
+
if (right === 0) {
|
|
92
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Modulo by zero', node.span.start);
|
|
93
|
+
}
|
|
94
|
+
return left % right;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Evaluate comparison between two values.
|
|
99
|
+
* Equality works on all types, ordering requires compatible types.
|
|
100
|
+
*/
|
|
101
|
+
evaluateBinaryComparison(left, right, op, node) {
|
|
102
|
+
switch (op) {
|
|
103
|
+
case '==':
|
|
104
|
+
return deepEquals(left, right);
|
|
105
|
+
case '!=':
|
|
106
|
+
return !deepEquals(left, right);
|
|
107
|
+
case '<':
|
|
108
|
+
case '>':
|
|
109
|
+
case '<=':
|
|
110
|
+
case '>=':
|
|
111
|
+
// Ordering comparisons require compatible types
|
|
112
|
+
if (typeof left === 'number' && typeof right === 'number') {
|
|
113
|
+
return op === '<'
|
|
114
|
+
? left < right
|
|
115
|
+
: op === '>'
|
|
116
|
+
? left > right
|
|
117
|
+
: op === '<='
|
|
118
|
+
? left <= right
|
|
119
|
+
: left >= right;
|
|
120
|
+
}
|
|
121
|
+
if (typeof left === 'string' && typeof right === 'string') {
|
|
122
|
+
return op === '<'
|
|
123
|
+
? left < right
|
|
124
|
+
: op === '>'
|
|
125
|
+
? left > right
|
|
126
|
+
: op === '<='
|
|
127
|
+
? left <= right
|
|
128
|
+
: left >= right;
|
|
129
|
+
}
|
|
130
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot compare ${inferType(left)} with ${inferType(right)} using ${op}`, node.span.start);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Evaluate unary expression: -operand or !operand.
|
|
135
|
+
*/
|
|
136
|
+
async evaluateUnaryExpr(node) {
|
|
137
|
+
if (node.op === '!') {
|
|
138
|
+
const value = await this.evaluateExprHead(node.operand);
|
|
139
|
+
return !isTruthy(value);
|
|
140
|
+
}
|
|
141
|
+
// Unary minus
|
|
142
|
+
const operand = node.operand;
|
|
143
|
+
if (operand.type === 'UnaryExpr') {
|
|
144
|
+
const inner = await this.evaluateUnaryExpr(operand);
|
|
145
|
+
if (typeof inner !== 'number') {
|
|
146
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Unary minus requires number, got ${inferType(inner)}`, node.span.start);
|
|
147
|
+
}
|
|
148
|
+
return -inner;
|
|
149
|
+
}
|
|
150
|
+
const value = await this.evaluateExprHeadNumber(operand);
|
|
151
|
+
return -value;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Evaluate expression head, returning any RillValue.
|
|
155
|
+
* Helper for binary and unary expression evaluation.
|
|
156
|
+
*/
|
|
157
|
+
async evaluateExprHead(node) {
|
|
158
|
+
switch (node.type) {
|
|
159
|
+
case 'BinaryExpr':
|
|
160
|
+
return this.evaluateBinaryExpr(node);
|
|
161
|
+
case 'UnaryExpr':
|
|
162
|
+
return this.evaluateUnaryExpr(node);
|
|
163
|
+
case 'PostfixExpr':
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
165
|
+
return this.evaluatePostfixExpr(node);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Evaluate expression head, requiring a number result.
|
|
170
|
+
* Helper for arithmetic operators.
|
|
171
|
+
*/
|
|
172
|
+
async evaluateExprHeadNumber(node) {
|
|
173
|
+
const value = await this.evaluateExprHead(node);
|
|
174
|
+
if (typeof value !== 'number') {
|
|
175
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Arithmetic requires number, got ${inferType(value)}`, node.span.start);
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Evaluate grouped expression: (expression).
|
|
181
|
+
* Provides scoping - captures inside are local and not visible outside.
|
|
182
|
+
*/
|
|
183
|
+
async evaluateGroupedExpr(node) {
|
|
184
|
+
// Grouped expressions have their own scope (reads parent, writes local only)
|
|
185
|
+
const childCtx = createChildContext(this.ctx);
|
|
186
|
+
const savedCtx = this.ctx;
|
|
187
|
+
this.ctx = childCtx;
|
|
188
|
+
try {
|
|
189
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
+
return await this.evaluatePipeChain(node.expression);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
this.ctx = savedCtx;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Export with type assertion to work around TS4094 limitation
|
|
199
|
+
// TypeScript can't generate declarations for functions returning classes with protected members
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
201
|
+
export const ExpressionsMixin = createExpressionsMixin;
|
|
202
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExtractionMixin - Extraction Operators
|
|
3
|
+
*
|
|
4
|
+
* Handles destructure, slice, and spread operations for extracting
|
|
5
|
+
* values from lists and dicts.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare const ExtractionMixin: any;
|
|
10
|
+
//# sourceMappingURL=extraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/extraction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwYH,eAAO,MAAM,eAAe,EAA4B,GAAG,CAAC"}
|