@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,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Structural Equality
|
|
3
|
+
*
|
|
4
|
+
* Compares AST nodes for structural equality, ignoring source locations.
|
|
5
|
+
* Used for closure equality: two closures with identical structure are equal.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Compare two AST nodes for structural equality.
|
|
9
|
+
* Ignores source locations (span) - only compares structure and values.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Helper to compare two nullable values for structural equality.
|
|
13
|
+
* Returns false if nullability differs, otherwise compares with astEquals.
|
|
14
|
+
*/
|
|
15
|
+
function nullableEquals(a, b) {
|
|
16
|
+
if (a === null && b === null)
|
|
17
|
+
return true;
|
|
18
|
+
if (a === null || b === null)
|
|
19
|
+
return false;
|
|
20
|
+
return astEquals(a, b);
|
|
21
|
+
}
|
|
22
|
+
export function astEquals(a, b) {
|
|
23
|
+
// Different node types are never equal
|
|
24
|
+
if (a.type !== b.type)
|
|
25
|
+
return false;
|
|
26
|
+
switch (a.type) {
|
|
27
|
+
case 'Block':
|
|
28
|
+
return blockEquals(a, b);
|
|
29
|
+
case 'Statement':
|
|
30
|
+
return statementEquals(a, b);
|
|
31
|
+
case 'AnnotatedStatement':
|
|
32
|
+
return annotatedStatementEquals(a, b);
|
|
33
|
+
case 'PipeChain':
|
|
34
|
+
return pipeChainEquals(a, b);
|
|
35
|
+
case 'PostfixExpr':
|
|
36
|
+
return postfixExprEquals(a, b);
|
|
37
|
+
case 'StringLiteral':
|
|
38
|
+
return stringLiteralEquals(a, b);
|
|
39
|
+
case 'NumberLiteral':
|
|
40
|
+
return a.value === b.value;
|
|
41
|
+
case 'BoolLiteral':
|
|
42
|
+
return a.value === b.value;
|
|
43
|
+
case 'Variable':
|
|
44
|
+
return variableEquals(a, b);
|
|
45
|
+
case 'HostCall':
|
|
46
|
+
return functionCallEquals(a, b);
|
|
47
|
+
case 'ClosureCall':
|
|
48
|
+
return closureCallEquals(a, b);
|
|
49
|
+
case 'MethodCall':
|
|
50
|
+
return methodCallEquals(a, b);
|
|
51
|
+
case 'Invoke':
|
|
52
|
+
return invokeEquals(a, b);
|
|
53
|
+
case 'PipeInvoke':
|
|
54
|
+
return pipeInvokeEquals(a, b);
|
|
55
|
+
case 'Conditional':
|
|
56
|
+
return conditionalEquals(a, b);
|
|
57
|
+
case 'WhileLoop':
|
|
58
|
+
return whileLoopEquals(a, b);
|
|
59
|
+
case 'DoWhileLoop':
|
|
60
|
+
return doWhileLoopEquals(a, b);
|
|
61
|
+
case 'Tuple':
|
|
62
|
+
return tupleEquals(a, b);
|
|
63
|
+
case 'Dict':
|
|
64
|
+
return dictEquals(a, b);
|
|
65
|
+
case 'DictEntry':
|
|
66
|
+
return dictEntryEquals(a, b);
|
|
67
|
+
case 'Closure':
|
|
68
|
+
return closureEquals(a, b);
|
|
69
|
+
case 'ClosureParam':
|
|
70
|
+
return closureParamEquals(a, b);
|
|
71
|
+
case 'BinaryExpr':
|
|
72
|
+
return binaryExprEquals(a, b);
|
|
73
|
+
case 'UnaryExpr':
|
|
74
|
+
return unaryExprEquals(a, b);
|
|
75
|
+
case 'GroupedExpr':
|
|
76
|
+
return groupedExprEquals(a, b);
|
|
77
|
+
case 'ClosureChain':
|
|
78
|
+
return closureChainEquals(a, b);
|
|
79
|
+
case 'Destructure':
|
|
80
|
+
return destructureEquals(a, b);
|
|
81
|
+
case 'DestructPattern':
|
|
82
|
+
return destructElemEquals(a, b);
|
|
83
|
+
case 'Slice':
|
|
84
|
+
return sliceEquals(a, b);
|
|
85
|
+
case 'Spread':
|
|
86
|
+
return spreadEquals(a, b);
|
|
87
|
+
case 'Capture':
|
|
88
|
+
return (a.name === b.name &&
|
|
89
|
+
a.typeName === b.typeName);
|
|
90
|
+
case 'Break':
|
|
91
|
+
case 'Return':
|
|
92
|
+
return true; // Break and Return nodes have no value property
|
|
93
|
+
case 'Interpolation':
|
|
94
|
+
return expressionEquals(a.expression, b.expression);
|
|
95
|
+
default:
|
|
96
|
+
// For any unhandled node types, fall back to false
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function blockEquals(a, b) {
|
|
101
|
+
if (a.statements.length !== b.statements.length)
|
|
102
|
+
return false;
|
|
103
|
+
for (let i = 0; i < a.statements.length; i++) {
|
|
104
|
+
const stmtA = a.statements[i];
|
|
105
|
+
const stmtB = b.statements[i];
|
|
106
|
+
if (stmtA.type !== stmtB.type)
|
|
107
|
+
return false;
|
|
108
|
+
if (stmtA.type === 'AnnotatedStatement') {
|
|
109
|
+
if (!annotatedStatementEquals(stmtA, stmtB))
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if (!statementEquals(stmtA, stmtB))
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
function statementEquals(a, b) {
|
|
120
|
+
return expressionEquals(a.expression, b.expression);
|
|
121
|
+
}
|
|
122
|
+
function annotatedStatementEquals(a, b) {
|
|
123
|
+
if (a.annotations.length !== b.annotations.length)
|
|
124
|
+
return false;
|
|
125
|
+
for (let i = 0; i < a.annotations.length; i++) {
|
|
126
|
+
if (!annotationArgEquals(a.annotations[i], b.annotations[i]))
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return statementEquals(a.statement, b.statement);
|
|
130
|
+
}
|
|
131
|
+
function annotationArgEquals(a, b) {
|
|
132
|
+
if (a.type !== b.type)
|
|
133
|
+
return false;
|
|
134
|
+
if (a.type === 'NamedArg') {
|
|
135
|
+
const bNamed = b;
|
|
136
|
+
if (a.name !== bNamed.name)
|
|
137
|
+
return false;
|
|
138
|
+
return expressionEquals(a.value, bNamed.value);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// SpreadArg
|
|
142
|
+
const aSpread = a;
|
|
143
|
+
const bSpread = b;
|
|
144
|
+
return expressionEquals(aSpread.expression, bSpread.expression);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function expressionEquals(a, b) {
|
|
148
|
+
return pipeChainEquals(a, b);
|
|
149
|
+
}
|
|
150
|
+
function pipeChainEquals(a, b) {
|
|
151
|
+
if (!astEquals(a.head, b.head))
|
|
152
|
+
return false;
|
|
153
|
+
if (a.pipes.length !== b.pipes.length)
|
|
154
|
+
return false;
|
|
155
|
+
for (let i = 0; i < a.pipes.length; i++) {
|
|
156
|
+
if (!astEquals(a.pipes[i], b.pipes[i]))
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return nullableEquals(a.terminator, b.terminator);
|
|
160
|
+
}
|
|
161
|
+
function postfixExprEquals(a, b) {
|
|
162
|
+
if (!astEquals(a.primary, b.primary))
|
|
163
|
+
return false;
|
|
164
|
+
if (a.methods.length !== b.methods.length)
|
|
165
|
+
return false;
|
|
166
|
+
for (let i = 0; i < a.methods.length; i++) {
|
|
167
|
+
// Methods array can contain MethodCallNode or InvokeNode
|
|
168
|
+
if (!astEquals(a.methods[i], b.methods[i]))
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
function stringLiteralEquals(a, b) {
|
|
174
|
+
if (a.isHeredoc !== b.isHeredoc)
|
|
175
|
+
return false;
|
|
176
|
+
if (a.parts.length !== b.parts.length)
|
|
177
|
+
return false;
|
|
178
|
+
for (let i = 0; i < a.parts.length; i++) {
|
|
179
|
+
const aPart = a.parts[i];
|
|
180
|
+
const bPart = b.parts[i];
|
|
181
|
+
if (typeof aPart === 'string') {
|
|
182
|
+
if (typeof bPart !== 'string' || aPart !== bPart)
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
if (typeof bPart === 'string')
|
|
187
|
+
return false;
|
|
188
|
+
if (!expressionEquals(aPart.expression, bPart.expression))
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
function fieldAccessEquals(a, b) {
|
|
195
|
+
if (a.kind !== b.kind)
|
|
196
|
+
return false;
|
|
197
|
+
switch (a.kind) {
|
|
198
|
+
case 'literal':
|
|
199
|
+
return a.field === b.field;
|
|
200
|
+
case 'variable':
|
|
201
|
+
return a.variableName === b.variableName;
|
|
202
|
+
case 'computed':
|
|
203
|
+
return astEquals(a.expression, b.expression);
|
|
204
|
+
case 'block':
|
|
205
|
+
return astEquals(a.block, b.block);
|
|
206
|
+
case 'alternatives':
|
|
207
|
+
return (a.alternatives.length === b.alternatives.length &&
|
|
208
|
+
a.alternatives.every((alt, i) => alt === b.alternatives[i]));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function variableEquals(a, b) {
|
|
212
|
+
if (a.name !== b.name)
|
|
213
|
+
return false;
|
|
214
|
+
if (a.isPipeVar !== b.isPipeVar)
|
|
215
|
+
return false;
|
|
216
|
+
if (a.accessChain.length !== b.accessChain.length)
|
|
217
|
+
return false;
|
|
218
|
+
for (let i = 0; i < a.accessChain.length; i++) {
|
|
219
|
+
if (!propertyAccessEquals(a.accessChain[i], b.accessChain[i]))
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
function propertyAccessEquals(a, b) {
|
|
225
|
+
// Check if both are bracket access
|
|
226
|
+
const aIsBracket = 'accessKind' in a && a.accessKind === 'bracket';
|
|
227
|
+
const bIsBracket = 'accessKind' in b && b.accessKind === 'bracket';
|
|
228
|
+
if (aIsBracket !== bIsBracket)
|
|
229
|
+
return false;
|
|
230
|
+
if (aIsBracket && bIsBracket) {
|
|
231
|
+
return expressionEquals(a.expression, b.expression);
|
|
232
|
+
}
|
|
233
|
+
// Both are field access
|
|
234
|
+
return fieldAccessEquals(a, b);
|
|
235
|
+
}
|
|
236
|
+
function functionCallEquals(a, b) {
|
|
237
|
+
if (a.name !== b.name)
|
|
238
|
+
return false;
|
|
239
|
+
return argsListEquals(a.args, b.args);
|
|
240
|
+
}
|
|
241
|
+
function closureCallEquals(a, b) {
|
|
242
|
+
if (a.name !== b.name)
|
|
243
|
+
return false;
|
|
244
|
+
if (a.accessChain.length !== b.accessChain.length)
|
|
245
|
+
return false;
|
|
246
|
+
for (let i = 0; i < a.accessChain.length; i++) {
|
|
247
|
+
if (a.accessChain[i] !== b.accessChain[i])
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
return argsListEquals(a.args, b.args);
|
|
251
|
+
}
|
|
252
|
+
function methodCallEquals(a, b) {
|
|
253
|
+
if (a.name !== b.name)
|
|
254
|
+
return false;
|
|
255
|
+
return argsListEquals(a.args, b.args);
|
|
256
|
+
}
|
|
257
|
+
function invokeEquals(a, b) {
|
|
258
|
+
return argsListEquals(a.args, b.args);
|
|
259
|
+
}
|
|
260
|
+
function pipeInvokeEquals(a, b) {
|
|
261
|
+
return argsListEquals(a.args, b.args);
|
|
262
|
+
}
|
|
263
|
+
function argsListEquals(a, b) {
|
|
264
|
+
if (a.length !== b.length)
|
|
265
|
+
return false;
|
|
266
|
+
for (let i = 0; i < a.length; i++) {
|
|
267
|
+
if (!expressionEquals(a[i], b[i]))
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
function conditionalEquals(a, b) {
|
|
273
|
+
if (!nullableEquals(a.input, b.input))
|
|
274
|
+
return false;
|
|
275
|
+
if (!nullableEquals(a.condition, b.condition))
|
|
276
|
+
return false;
|
|
277
|
+
if (!simpleBodyEquals(a.thenBranch, b.thenBranch))
|
|
278
|
+
return false;
|
|
279
|
+
return nullableEquals(a.elseBranch, b.elseBranch);
|
|
280
|
+
}
|
|
281
|
+
function whileLoopEquals(a, b) {
|
|
282
|
+
if (!astEquals(a.condition, b.condition))
|
|
283
|
+
return false;
|
|
284
|
+
return simpleBodyEquals(a.body, b.body);
|
|
285
|
+
}
|
|
286
|
+
function doWhileLoopEquals(a, b) {
|
|
287
|
+
if (!nullableEquals(a.input, b.input))
|
|
288
|
+
return false;
|
|
289
|
+
if (!simpleBodyEquals(a.condition, b.condition))
|
|
290
|
+
return false;
|
|
291
|
+
return simpleBodyEquals(a.body, b.body);
|
|
292
|
+
}
|
|
293
|
+
function simpleBodyEquals(a, b) {
|
|
294
|
+
if (a.type !== b.type)
|
|
295
|
+
return false;
|
|
296
|
+
return astEquals(a, b);
|
|
297
|
+
}
|
|
298
|
+
function binaryExprEquals(a, b) {
|
|
299
|
+
if (a.op !== b.op)
|
|
300
|
+
return false;
|
|
301
|
+
if (!astEquals(a.left, b.left))
|
|
302
|
+
return false;
|
|
303
|
+
return astEquals(a.right, b.right);
|
|
304
|
+
}
|
|
305
|
+
function unaryExprEquals(a, b) {
|
|
306
|
+
if (a.op !== b.op)
|
|
307
|
+
return false;
|
|
308
|
+
return astEquals(a.operand, b.operand);
|
|
309
|
+
}
|
|
310
|
+
function groupedExprEquals(a, b) {
|
|
311
|
+
return pipeChainEquals(a.expression, b.expression);
|
|
312
|
+
}
|
|
313
|
+
function tupleEquals(a, b) {
|
|
314
|
+
return argsListEquals(a.elements, b.elements);
|
|
315
|
+
}
|
|
316
|
+
function dictEquals(a, b) {
|
|
317
|
+
if (a.entries.length !== b.entries.length)
|
|
318
|
+
return false;
|
|
319
|
+
for (let i = 0; i < a.entries.length; i++) {
|
|
320
|
+
if (!dictEntryEquals(a.entries[i], b.entries[i]))
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
function dictEntryEquals(a, b) {
|
|
326
|
+
if (a.key !== b.key)
|
|
327
|
+
return false;
|
|
328
|
+
return expressionEquals(a.value, b.value);
|
|
329
|
+
}
|
|
330
|
+
function closureEquals(a, b) {
|
|
331
|
+
if (a.params.length !== b.params.length)
|
|
332
|
+
return false;
|
|
333
|
+
for (let i = 0; i < a.params.length; i++) {
|
|
334
|
+
if (!closureParamEquals(a.params[i], b.params[i]))
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
return simpleBodyEquals(a.body, b.body);
|
|
338
|
+
}
|
|
339
|
+
function closureParamEquals(a, b) {
|
|
340
|
+
if (a.name !== b.name)
|
|
341
|
+
return false;
|
|
342
|
+
if (a.typeName !== b.typeName)
|
|
343
|
+
return false;
|
|
344
|
+
return nullableEquals(a.defaultValue, b.defaultValue);
|
|
345
|
+
}
|
|
346
|
+
function closureChainEquals(a, b) {
|
|
347
|
+
return expressionEquals(a.target, b.target);
|
|
348
|
+
}
|
|
349
|
+
function destructureEquals(a, b) {
|
|
350
|
+
if (a.elements.length !== b.elements.length)
|
|
351
|
+
return false;
|
|
352
|
+
for (let i = 0; i < a.elements.length; i++) {
|
|
353
|
+
if (!destructElemEquals(a.elements[i], b.elements[i]))
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
function destructElemEquals(a, b) {
|
|
359
|
+
if (a.kind !== b.kind)
|
|
360
|
+
return false;
|
|
361
|
+
if (a.name !== b.name)
|
|
362
|
+
return false;
|
|
363
|
+
if (a.key !== b.key)
|
|
364
|
+
return false;
|
|
365
|
+
if (a.typeName !== b.typeName)
|
|
366
|
+
return false;
|
|
367
|
+
return nullableEquals(a.nested, b.nested);
|
|
368
|
+
}
|
|
369
|
+
function sliceEquals(a, b) {
|
|
370
|
+
if (!nullableEquals(a.start, b.start))
|
|
371
|
+
return false;
|
|
372
|
+
if (!nullableEquals(a.stop, b.stop))
|
|
373
|
+
return false;
|
|
374
|
+
if (!nullableEquals(a.step, b.step))
|
|
375
|
+
return false;
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
function spreadEquals(a, b) {
|
|
379
|
+
return nullableEquals(a.operand, b.operand);
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../src/runtime/core/equals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluator Base Class
|
|
3
|
+
*
|
|
4
|
+
* Foundation for the class-based evaluator architecture.
|
|
5
|
+
* Provides shared utilities and context access for all mixins.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
import type { ASTNode, CaptureNode, SourceLocation } from '../../../types.js';
|
|
10
|
+
import type { RuntimeContext } from '../types.js';
|
|
11
|
+
import type { RillValue } from '../values.js';
|
|
12
|
+
/**
|
|
13
|
+
* Base class for the evaluator.
|
|
14
|
+
* Contains shared utilities used by all mixins.
|
|
15
|
+
* All internal methods are protected to enable mixin access.
|
|
16
|
+
*/
|
|
17
|
+
export declare class EvaluatorBase {
|
|
18
|
+
protected ctx: RuntimeContext;
|
|
19
|
+
constructor(ctx: RuntimeContext);
|
|
20
|
+
/**
|
|
21
|
+
* Get source location from an AST node.
|
|
22
|
+
* Used for error reporting with precise location information.
|
|
23
|
+
*/
|
|
24
|
+
protected getNodeLocation(node?: ASTNode): SourceLocation | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Check if execution has been aborted via AbortSignal.
|
|
27
|
+
* Throws AbortError if signal is aborted.
|
|
28
|
+
*/
|
|
29
|
+
protected checkAborted(node?: ASTNode): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the current pipe value matches any autoException pattern.
|
|
32
|
+
* Only checks string values. Throws AutoExceptionError on match.
|
|
33
|
+
*/
|
|
34
|
+
protected checkAutoExceptions(value: RillValue, node?: ASTNode): void;
|
|
35
|
+
/**
|
|
36
|
+
* Wrap a promise with a timeout.
|
|
37
|
+
* Returns original promise if no timeout configured.
|
|
38
|
+
*/
|
|
39
|
+
protected withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined, functionName: string, node?: ASTNode): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Handle statement capture: set variable and fire observability event.
|
|
42
|
+
* Returns capture info if a capture occurred.
|
|
43
|
+
*
|
|
44
|
+
* NOTE: Stub implementation - actual implementation requires VariablesMixin.
|
|
45
|
+
* This method will only be called after full mixin composition in Phase 4.
|
|
46
|
+
* Phase 1-3 use the functional evaluator which has its own handleCapture.
|
|
47
|
+
*/
|
|
48
|
+
protected handleCapture(_capture: CaptureNode | null, _value: RillValue): {
|
|
49
|
+
name: string;
|
|
50
|
+
value: RillValue;
|
|
51
|
+
} | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Access a field on a dict value with property-style callable auto-invocation.
|
|
54
|
+
* Shared by ClosuresMixin and VariablesMixin for consistent property access.
|
|
55
|
+
*
|
|
56
|
+
* @param value - The dict to access
|
|
57
|
+
* @param field - The field name
|
|
58
|
+
* @param location - Source location for error reporting
|
|
59
|
+
* @param allowMissing - If true, returns null for missing fields instead of throwing
|
|
60
|
+
* @returns The field value
|
|
61
|
+
* @throws RuntimeError if value is not a dict or field is missing (unless allowMissing)
|
|
62
|
+
*/
|
|
63
|
+
protected accessDictField(value: RillValue, field: string, location?: SourceLocation, allowMissing?: boolean): Promise<RillValue>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/runtime/core/eval/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQ9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;GAIG;AACH,qBAAa,aAAa;IACZ,SAAS,CAAC,GAAG,EAAE,cAAc;gBAAnB,GAAG,EAAE,cAAc;IAEzC;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS;IAIrE;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM5C;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAgBrE;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,CAAC,EACrB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC;IAqBb;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CACrB,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,MAAM,EAAE,SAAS,GAChB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS;IAMjD;;;;;;;;;;OAUG;cACa,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,cAAc,EACzB,YAAY,UAAQ,GACnB,OAAO,CAAC,SAAS,CAAC;CAqCtB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluator Base Class
|
|
3
|
+
*
|
|
4
|
+
* Foundation for the class-based evaluator architecture.
|
|
5
|
+
* Provides shared utilities and context access for all mixins.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
import { AbortError, AutoExceptionError, RuntimeError, RILL_ERROR_CODES, TimeoutError, } from '../../../types.js';
|
|
10
|
+
import { isCallable, isDict } from '../callable.js';
|
|
11
|
+
/**
|
|
12
|
+
* Base class for the evaluator.
|
|
13
|
+
* Contains shared utilities used by all mixins.
|
|
14
|
+
* All internal methods are protected to enable mixin access.
|
|
15
|
+
*/
|
|
16
|
+
export class EvaluatorBase {
|
|
17
|
+
ctx;
|
|
18
|
+
constructor(ctx) {
|
|
19
|
+
this.ctx = ctx;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get source location from an AST node.
|
|
23
|
+
* Used for error reporting with precise location information.
|
|
24
|
+
*/
|
|
25
|
+
getNodeLocation(node) {
|
|
26
|
+
return node?.span.start;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if execution has been aborted via AbortSignal.
|
|
30
|
+
* Throws AbortError if signal is aborted.
|
|
31
|
+
*/
|
|
32
|
+
checkAborted(node) {
|
|
33
|
+
if (this.ctx.signal?.aborted) {
|
|
34
|
+
throw new AbortError(this.getNodeLocation(node));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if the current pipe value matches any autoException pattern.
|
|
39
|
+
* Only checks string values. Throws AutoExceptionError on match.
|
|
40
|
+
*/
|
|
41
|
+
checkAutoExceptions(value, node) {
|
|
42
|
+
if (typeof value !== 'string' || this.ctx.autoExceptions.length === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
for (const pattern of this.ctx.autoExceptions) {
|
|
46
|
+
if (pattern.test(value)) {
|
|
47
|
+
throw new AutoExceptionError(pattern.source, value, this.getNodeLocation(node));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Wrap a promise with a timeout.
|
|
53
|
+
* Returns original promise if no timeout configured.
|
|
54
|
+
*/
|
|
55
|
+
withTimeout(promise, timeoutMs, functionName, node) {
|
|
56
|
+
if (timeoutMs === undefined) {
|
|
57
|
+
return promise;
|
|
58
|
+
}
|
|
59
|
+
return Promise.race([
|
|
60
|
+
promise,
|
|
61
|
+
new Promise((_, reject) => {
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
reject(new TimeoutError(functionName, timeoutMs, this.getNodeLocation(node)));
|
|
64
|
+
}, timeoutMs);
|
|
65
|
+
}),
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle statement capture: set variable and fire observability event.
|
|
70
|
+
* Returns capture info if a capture occurred.
|
|
71
|
+
*
|
|
72
|
+
* NOTE: Stub implementation - actual implementation requires VariablesMixin.
|
|
73
|
+
* This method will only be called after full mixin composition in Phase 4.
|
|
74
|
+
* Phase 1-3 use the functional evaluator which has its own handleCapture.
|
|
75
|
+
*/
|
|
76
|
+
handleCapture(_capture, _value) {
|
|
77
|
+
throw new Error('handleCapture requires full Evaluator composition with VariablesMixin');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Access a field on a dict value with property-style callable auto-invocation.
|
|
81
|
+
* Shared by ClosuresMixin and VariablesMixin for consistent property access.
|
|
82
|
+
*
|
|
83
|
+
* @param value - The dict to access
|
|
84
|
+
* @param field - The field name
|
|
85
|
+
* @param location - Source location for error reporting
|
|
86
|
+
* @param allowMissing - If true, returns null for missing fields instead of throwing
|
|
87
|
+
* @returns The field value
|
|
88
|
+
* @throws RuntimeError if value is not a dict or field is missing (unless allowMissing)
|
|
89
|
+
*/
|
|
90
|
+
async accessDictField(value, field, location, allowMissing = false) {
|
|
91
|
+
if (!isDict(value)) {
|
|
92
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot access field '${field}' on non-dict`, location);
|
|
93
|
+
}
|
|
94
|
+
const dictValue = value[field];
|
|
95
|
+
// Check if field exists
|
|
96
|
+
if (dictValue === undefined || dictValue === null) {
|
|
97
|
+
if (allowMissing) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Dict has no field '${field}'`, location);
|
|
101
|
+
}
|
|
102
|
+
// Property-style callable: auto-invoke when accessed
|
|
103
|
+
if (isCallable(dictValue)) {
|
|
104
|
+
if (dictValue.isProperty) {
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
106
|
+
return await this.invokeCallable(dictValue, [value], location);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return dictValue;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/runtime/core/eval/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composed Evaluator
|
|
3
|
+
*
|
|
4
|
+
* The complete evaluator class composed from all mixins.
|
|
5
|
+
* Uses WeakMap caching to reuse evaluator instances per RuntimeContext.
|
|
6
|
+
*
|
|
7
|
+
* Mixin composition order (bottom to top):
|
|
8
|
+
* 1. EvaluatorBase - Foundation utilities
|
|
9
|
+
* 2. CoreMixin - Expression dispatch
|
|
10
|
+
* 3. LiteralsMixin - String, dict, tuple, closure literals
|
|
11
|
+
* 4. VariablesMixin - Variable resolution and access chains
|
|
12
|
+
* 5. CollectionsMixin - each, map, fold, filter operators
|
|
13
|
+
* 6. ExtractionMixin - Destructure, slice, spread operators
|
|
14
|
+
* 7. ControlFlowMixin - Conditionals, loops, blocks
|
|
15
|
+
* 8. ClosuresMixin - Function calls and invocation
|
|
16
|
+
* 9. ExpressionsMixin - Binary, unary, grouped expressions
|
|
17
|
+
* 10. TypesMixin - Type assertions and checks
|
|
18
|
+
* 11. AnnotationsMixin - Annotated statement execution (outermost)
|
|
19
|
+
*
|
|
20
|
+
* The order ensures that each mixin can depend on the methods provided
|
|
21
|
+
* by mixins below it in the stack.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
import type { RuntimeContext } from '../types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Complete Evaluator class composed from all mixins.
|
|
28
|
+
*
|
|
29
|
+
* This is the final, fully-composed evaluator that has all evaluation
|
|
30
|
+
* capabilities. The composition order is carefully chosen to ensure
|
|
31
|
+
* dependencies are satisfied.
|
|
32
|
+
*/
|
|
33
|
+
export declare const Evaluator: any;
|
|
34
|
+
export type Evaluator = InstanceType<typeof Evaluator>;
|
|
35
|
+
/**
|
|
36
|
+
* Get or create an evaluator instance for a given RuntimeContext.
|
|
37
|
+
*
|
|
38
|
+
* Evaluator instances are cached per context to avoid recreating
|
|
39
|
+
* the same evaluator multiple times during script execution.
|
|
40
|
+
*
|
|
41
|
+
* @param ctx - The runtime context
|
|
42
|
+
* @returns Evaluator instance (cached or newly created)
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export declare function getEvaluator(ctx: RuntimeContext): InstanceType<typeof Evaluator>;
|
|
47
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../../src/runtime/core/eval/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,KAcrB,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC;AAgBvD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,cAAc,GAClB,YAAY,CAAC,OAAO,SAAS,CAAC,CAOhC"}
|