@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,447 @@
|
|
|
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
|
+
export function astEquals(a, b) {
|
|
12
|
+
// Different node types are never equal
|
|
13
|
+
if (a.type !== b.type)
|
|
14
|
+
return false;
|
|
15
|
+
switch (a.type) {
|
|
16
|
+
case 'Block':
|
|
17
|
+
return blockEquals(a, b);
|
|
18
|
+
case 'Statement':
|
|
19
|
+
return statementEquals(a, b);
|
|
20
|
+
case 'PipeChain':
|
|
21
|
+
return pipeChainEquals(a, b);
|
|
22
|
+
case 'PostfixExpr':
|
|
23
|
+
return postfixExprEquals(a, b);
|
|
24
|
+
case 'StringLiteral':
|
|
25
|
+
return stringLiteralEquals(a, b);
|
|
26
|
+
case 'NumberLiteral':
|
|
27
|
+
return a.value === b.value;
|
|
28
|
+
case 'BoolLiteral':
|
|
29
|
+
return a.value === b.value;
|
|
30
|
+
case 'Variable':
|
|
31
|
+
return variableEquals(a, b);
|
|
32
|
+
case 'FunctionCall':
|
|
33
|
+
return functionCallEquals(a, b);
|
|
34
|
+
case 'VariableCall':
|
|
35
|
+
return variableCallEquals(a, b);
|
|
36
|
+
case 'MethodCall':
|
|
37
|
+
return methodCallEquals(a, b);
|
|
38
|
+
case 'Invoke':
|
|
39
|
+
return invokeEquals(a, b);
|
|
40
|
+
case 'Conditional':
|
|
41
|
+
return conditionalEquals(a, b);
|
|
42
|
+
case 'WhileLoop':
|
|
43
|
+
return whileLoopEquals(a, b);
|
|
44
|
+
case 'ForLoop':
|
|
45
|
+
return forLoopEquals(a, b);
|
|
46
|
+
case 'Tuple':
|
|
47
|
+
return tupleEquals(a, b);
|
|
48
|
+
case 'Dict':
|
|
49
|
+
return dictEquals(a, b);
|
|
50
|
+
case 'DictEntry':
|
|
51
|
+
return dictEntryEquals(a, b);
|
|
52
|
+
case 'FunctionLiteral':
|
|
53
|
+
return functionLiteralEquals(a, b);
|
|
54
|
+
case 'FuncParam':
|
|
55
|
+
return funcParamEquals(a, b);
|
|
56
|
+
case 'Arithmetic':
|
|
57
|
+
return arithmeticEquals(a, b);
|
|
58
|
+
case 'BoolExpr':
|
|
59
|
+
return boolExprEquals(a, b);
|
|
60
|
+
case 'Comparison':
|
|
61
|
+
return comparisonEquals(a, b);
|
|
62
|
+
case 'ParallelSpread':
|
|
63
|
+
return parallelSpreadEquals(a, b);
|
|
64
|
+
case 'ParallelFilter':
|
|
65
|
+
return parallelFilterEquals(a, b);
|
|
66
|
+
case 'SequentialSpread':
|
|
67
|
+
return sequentialSpreadEquals(a, b);
|
|
68
|
+
case 'Destructure':
|
|
69
|
+
return destructureEquals(a, b);
|
|
70
|
+
case 'DestructElem':
|
|
71
|
+
return destructElemEquals(a, b);
|
|
72
|
+
case 'Slice':
|
|
73
|
+
return sliceEquals(a, b);
|
|
74
|
+
case 'Enumerate':
|
|
75
|
+
return true; // EnumerateNode has no fields besides type and span
|
|
76
|
+
case 'Spread':
|
|
77
|
+
return spreadEquals(a, b);
|
|
78
|
+
case 'Capture':
|
|
79
|
+
return a.name === b.name && a.typeName === b.typeName;
|
|
80
|
+
case 'Break':
|
|
81
|
+
case 'Return':
|
|
82
|
+
return a.value === null
|
|
83
|
+
? b.value === null
|
|
84
|
+
: b.value !== null &&
|
|
85
|
+
astEquals(a.value, b.value);
|
|
86
|
+
case 'Interpolation':
|
|
87
|
+
return expressionEquals(a.expression, b.expression);
|
|
88
|
+
default:
|
|
89
|
+
// For any unhandled node types, fall back to false
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function blockEquals(a, b) {
|
|
94
|
+
if (a.statements.length !== b.statements.length)
|
|
95
|
+
return false;
|
|
96
|
+
for (let i = 0; i < a.statements.length; i++) {
|
|
97
|
+
if (!statementEquals(a.statements[i], b.statements[i]))
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
function statementEquals(a, b) {
|
|
103
|
+
if (a.terminator !== b.terminator)
|
|
104
|
+
return false;
|
|
105
|
+
// Compare captures
|
|
106
|
+
if (a.capture === null && b.capture !== null)
|
|
107
|
+
return false;
|
|
108
|
+
if (a.capture !== null && b.capture === null)
|
|
109
|
+
return false;
|
|
110
|
+
if (a.capture !== null && b.capture !== null) {
|
|
111
|
+
if (a.capture.name !== b.capture.name)
|
|
112
|
+
return false;
|
|
113
|
+
if (a.capture.typeName !== b.capture.typeName)
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return expressionEquals(a.expression, b.expression);
|
|
117
|
+
}
|
|
118
|
+
function expressionEquals(a, b) {
|
|
119
|
+
return pipeChainEquals(a, b);
|
|
120
|
+
}
|
|
121
|
+
function pipeChainEquals(a, b) {
|
|
122
|
+
if (!postfixExprEquals(a.head, b.head))
|
|
123
|
+
return false;
|
|
124
|
+
if (a.pipes.length !== b.pipes.length)
|
|
125
|
+
return false;
|
|
126
|
+
for (let i = 0; i < a.pipes.length; i++) {
|
|
127
|
+
if (!astEquals(a.pipes[i], b.pipes[i]))
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
function postfixExprEquals(a, b) {
|
|
133
|
+
if (!astEquals(a.primary, b.primary))
|
|
134
|
+
return false;
|
|
135
|
+
if (a.methods.length !== b.methods.length)
|
|
136
|
+
return false;
|
|
137
|
+
for (let i = 0; i < a.methods.length; i++) {
|
|
138
|
+
if (!methodCallEquals(a.methods[i], b.methods[i]))
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
function stringLiteralEquals(a, b) {
|
|
144
|
+
if (a.isHeredoc !== b.isHeredoc)
|
|
145
|
+
return false;
|
|
146
|
+
if (a.parts.length !== b.parts.length)
|
|
147
|
+
return false;
|
|
148
|
+
for (let i = 0; i < a.parts.length; i++) {
|
|
149
|
+
const aPart = a.parts[i];
|
|
150
|
+
const bPart = b.parts[i];
|
|
151
|
+
if (typeof aPart === 'string') {
|
|
152
|
+
if (typeof bPart !== 'string' || aPart !== bPart)
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
if (typeof bPart === 'string')
|
|
157
|
+
return false;
|
|
158
|
+
if (!expressionEquals(aPart.expression, bPart.expression))
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
function variableEquals(a, b) {
|
|
165
|
+
if (a.name !== b.name)
|
|
166
|
+
return false;
|
|
167
|
+
if (a.isPipeVar !== b.isPipeVar)
|
|
168
|
+
return false;
|
|
169
|
+
if (a.fieldAccess.length !== b.fieldAccess.length)
|
|
170
|
+
return false;
|
|
171
|
+
for (let i = 0; i < a.fieldAccess.length; i++) {
|
|
172
|
+
if (a.fieldAccess[i].field !== b.fieldAccess[i].field)
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
function functionCallEquals(a, b) {
|
|
178
|
+
if (a.name !== b.name)
|
|
179
|
+
return false;
|
|
180
|
+
return argsListEquals(a.args, b.args);
|
|
181
|
+
}
|
|
182
|
+
function variableCallEquals(a, b) {
|
|
183
|
+
if (a.name !== b.name)
|
|
184
|
+
return false;
|
|
185
|
+
return argsListEquals(a.args, b.args);
|
|
186
|
+
}
|
|
187
|
+
function methodCallEquals(a, b) {
|
|
188
|
+
if (a.name !== b.name)
|
|
189
|
+
return false;
|
|
190
|
+
return argsListEquals(a.args, b.args);
|
|
191
|
+
}
|
|
192
|
+
function invokeEquals(a, b) {
|
|
193
|
+
return argsListEquals(a.args, b.args);
|
|
194
|
+
}
|
|
195
|
+
function argsListEquals(a, b) {
|
|
196
|
+
if (a.length !== b.length)
|
|
197
|
+
return false;
|
|
198
|
+
for (let i = 0; i < a.length; i++) {
|
|
199
|
+
if (!expressionEquals(a[i], b[i]))
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
function conditionalEquals(a, b) {
|
|
205
|
+
// Compare input
|
|
206
|
+
if (a.input === null && b.input !== null)
|
|
207
|
+
return false;
|
|
208
|
+
if (a.input !== null && b.input === null)
|
|
209
|
+
return false;
|
|
210
|
+
if (a.input !== null && b.input !== null) {
|
|
211
|
+
if (!expressionEquals(a.input, b.input))
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
// Compare condition
|
|
215
|
+
if (a.condition === null && b.condition !== null)
|
|
216
|
+
return false;
|
|
217
|
+
if (a.condition !== null && b.condition === null)
|
|
218
|
+
return false;
|
|
219
|
+
if (a.condition !== null && b.condition !== null) {
|
|
220
|
+
if (!boolExprEquals(a.condition, b.condition))
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
// Compare then block
|
|
224
|
+
if (!blockEquals(a.thenBlock, b.thenBlock))
|
|
225
|
+
return false;
|
|
226
|
+
// Compare else clause
|
|
227
|
+
if (a.elseClause === null && b.elseClause !== null)
|
|
228
|
+
return false;
|
|
229
|
+
if (a.elseClause !== null && b.elseClause === null)
|
|
230
|
+
return false;
|
|
231
|
+
if (a.elseClause !== null && b.elseClause !== null) {
|
|
232
|
+
if (!astEquals(a.elseClause, b.elseClause))
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
function whileLoopEquals(a, b) {
|
|
238
|
+
// Compare input
|
|
239
|
+
if (a.input === null && b.input !== null)
|
|
240
|
+
return false;
|
|
241
|
+
if (a.input !== null && b.input === null)
|
|
242
|
+
return false;
|
|
243
|
+
if (a.input !== null && b.input !== null) {
|
|
244
|
+
if (!expressionEquals(a.input, b.input))
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
// Compare condition
|
|
248
|
+
if (!boolExprEquals(a.condition, b.condition))
|
|
249
|
+
return false;
|
|
250
|
+
// Compare max iterations
|
|
251
|
+
if (a.maxIterations === null && b.maxIterations !== null)
|
|
252
|
+
return false;
|
|
253
|
+
if (a.maxIterations !== null && b.maxIterations === null)
|
|
254
|
+
return false;
|
|
255
|
+
if (a.maxIterations !== null && b.maxIterations !== null) {
|
|
256
|
+
if (!expressionEquals(a.maxIterations, b.maxIterations))
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return blockEquals(a.body, b.body);
|
|
260
|
+
}
|
|
261
|
+
function forLoopEquals(a, b) {
|
|
262
|
+
// Compare input
|
|
263
|
+
if (a.input === null && b.input !== null)
|
|
264
|
+
return false;
|
|
265
|
+
if (a.input !== null && b.input === null)
|
|
266
|
+
return false;
|
|
267
|
+
if (a.input !== null && b.input !== null) {
|
|
268
|
+
if (!expressionEquals(a.input, b.input))
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
return blockEquals(a.body, b.body);
|
|
272
|
+
}
|
|
273
|
+
function tupleEquals(a, b) {
|
|
274
|
+
return argsListEquals(a.elements, b.elements);
|
|
275
|
+
}
|
|
276
|
+
function dictEquals(a, b) {
|
|
277
|
+
if (a.entries.length !== b.entries.length)
|
|
278
|
+
return false;
|
|
279
|
+
for (let i = 0; i < a.entries.length; i++) {
|
|
280
|
+
if (!dictEntryEquals(a.entries[i], b.entries[i]))
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
function dictEntryEquals(a, b) {
|
|
286
|
+
if (a.key !== b.key)
|
|
287
|
+
return false;
|
|
288
|
+
return expressionEquals(a.value, b.value);
|
|
289
|
+
}
|
|
290
|
+
function functionLiteralEquals(a, b) {
|
|
291
|
+
if (a.params.length !== b.params.length)
|
|
292
|
+
return false;
|
|
293
|
+
for (let i = 0; i < a.params.length; i++) {
|
|
294
|
+
if (!funcParamEquals(a.params[i], b.params[i]))
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
return blockEquals(a.body, b.body);
|
|
298
|
+
}
|
|
299
|
+
function funcParamEquals(a, b) {
|
|
300
|
+
if (a.name !== b.name)
|
|
301
|
+
return false;
|
|
302
|
+
if (a.typeName !== b.typeName)
|
|
303
|
+
return false;
|
|
304
|
+
if (a.defaultValue === null && b.defaultValue !== null)
|
|
305
|
+
return false;
|
|
306
|
+
if (a.defaultValue !== null && b.defaultValue === null)
|
|
307
|
+
return false;
|
|
308
|
+
if (a.defaultValue !== null && b.defaultValue !== null) {
|
|
309
|
+
if (!astEquals(a.defaultValue, b.defaultValue))
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
function arithmeticEquals(a, b) {
|
|
315
|
+
if (a.op !== b.op)
|
|
316
|
+
return false;
|
|
317
|
+
if (!astEquals(a.left, b.left))
|
|
318
|
+
return false;
|
|
319
|
+
if (a.right === null && b.right !== null)
|
|
320
|
+
return false;
|
|
321
|
+
if (a.right !== null && b.right === null)
|
|
322
|
+
return false;
|
|
323
|
+
if (a.right !== null && b.right !== null) {
|
|
324
|
+
if (!astEquals(a.right, b.right))
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
function boolExprEquals(a, b) {
|
|
330
|
+
if (a.type !== b.type)
|
|
331
|
+
return false;
|
|
332
|
+
if (a.type === 'Comparison') {
|
|
333
|
+
return comparisonEquals(a, b);
|
|
334
|
+
}
|
|
335
|
+
// BoolExpr nodes
|
|
336
|
+
if (a.op !== b.op)
|
|
337
|
+
return false;
|
|
338
|
+
if (a.op === 'not') {
|
|
339
|
+
return boolExprEquals(a.operand, b.operand);
|
|
340
|
+
}
|
|
341
|
+
// 'and' or 'or'
|
|
342
|
+
const aOperands = a.operands;
|
|
343
|
+
const bOperands = b.operands;
|
|
344
|
+
if (aOperands.length !== bOperands.length)
|
|
345
|
+
return false;
|
|
346
|
+
for (let i = 0; i < aOperands.length; i++) {
|
|
347
|
+
if (!boolExprEquals(aOperands[i], bOperands[i]))
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
function comparisonEquals(a, b) {
|
|
353
|
+
if (a.op !== b.op)
|
|
354
|
+
return false;
|
|
355
|
+
if (!astEquals(a.left, b.left))
|
|
356
|
+
return false;
|
|
357
|
+
if (a.right === null && b.right !== null)
|
|
358
|
+
return false;
|
|
359
|
+
if (a.right !== null && b.right === null)
|
|
360
|
+
return false;
|
|
361
|
+
if (a.right !== null && b.right !== null) {
|
|
362
|
+
if (!astEquals(a.right, b.right))
|
|
363
|
+
return false;
|
|
364
|
+
}
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
function parallelSpreadEquals(a, b) {
|
|
368
|
+
return expressionEquals(a.target, b.target);
|
|
369
|
+
}
|
|
370
|
+
function parallelFilterEquals(a, b) {
|
|
371
|
+
if (a.predicate.type !== b.predicate.type)
|
|
372
|
+
return false;
|
|
373
|
+
return astEquals(a.predicate, b.predicate);
|
|
374
|
+
}
|
|
375
|
+
function sequentialSpreadEquals(a, b) {
|
|
376
|
+
return expressionEquals(a.target, b.target);
|
|
377
|
+
}
|
|
378
|
+
function destructureEquals(a, b) {
|
|
379
|
+
if (a.elements.length !== b.elements.length)
|
|
380
|
+
return false;
|
|
381
|
+
for (let i = 0; i < a.elements.length; i++) {
|
|
382
|
+
if (!destructElemEquals(a.elements[i], b.elements[i]))
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
function destructElemEquals(a, b) {
|
|
388
|
+
if (a.kind !== b.kind)
|
|
389
|
+
return false;
|
|
390
|
+
if (a.name !== b.name)
|
|
391
|
+
return false;
|
|
392
|
+
if (a.key !== b.key)
|
|
393
|
+
return false;
|
|
394
|
+
if (a.typeName !== b.typeName)
|
|
395
|
+
return false;
|
|
396
|
+
if (a.nested === null && b.nested !== null)
|
|
397
|
+
return false;
|
|
398
|
+
if (a.nested !== null && b.nested === null)
|
|
399
|
+
return false;
|
|
400
|
+
if (a.nested !== null && b.nested !== null) {
|
|
401
|
+
if (!destructureEquals(a.nested, b.nested))
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
function sliceEquals(a, b) {
|
|
407
|
+
// Compare start
|
|
408
|
+
if (a.start === null && b.start !== null)
|
|
409
|
+
return false;
|
|
410
|
+
if (a.start !== null && b.start === null)
|
|
411
|
+
return false;
|
|
412
|
+
if (a.start !== null && b.start !== null) {
|
|
413
|
+
if (!astEquals(a.start, b.start))
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
// Compare stop
|
|
417
|
+
if (a.stop === null && b.stop !== null)
|
|
418
|
+
return false;
|
|
419
|
+
if (a.stop !== null && b.stop === null)
|
|
420
|
+
return false;
|
|
421
|
+
if (a.stop !== null && b.stop !== null) {
|
|
422
|
+
if (!astEquals(a.stop, b.stop))
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
// Compare step
|
|
426
|
+
if (a.step === null && b.step !== null)
|
|
427
|
+
return false;
|
|
428
|
+
if (a.step !== null && b.step === null)
|
|
429
|
+
return false;
|
|
430
|
+
if (a.step !== null && b.step !== null) {
|
|
431
|
+
if (!astEquals(a.step, b.step))
|
|
432
|
+
return false;
|
|
433
|
+
}
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
function spreadEquals(a, b) {
|
|
437
|
+
if (a.operand === null && b.operand !== null)
|
|
438
|
+
return false;
|
|
439
|
+
if (a.operand !== null && b.operand === null)
|
|
440
|
+
return false;
|
|
441
|
+
if (a.operand !== null && b.operand !== null) {
|
|
442
|
+
if (!expressionEquals(a.operand, b.operand))
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
return true;
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=ast-equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-equals.js","sourceRoot":"","sources":["../../src/runtime/ast-equals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Functions and Methods
|
|
3
|
+
*
|
|
4
|
+
* Minimal set of built-in operations. Host applications provide
|
|
5
|
+
* domain-specific functions via RuntimeContext.
|
|
6
|
+
*
|
|
7
|
+
* @internal - Not part of public API
|
|
8
|
+
*/
|
|
9
|
+
import type { CallableFn } from './callable.js';
|
|
10
|
+
import type { RillMethod } from './types.js';
|
|
11
|
+
export declare const BUILTIN_FUNCTIONS: Record<string, CallableFn>;
|
|
12
|
+
export declare const BUILTIN_METHODS: Record<string, RillMethod>;
|
|
13
|
+
//# sourceMappingURL=builtins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/runtime/builtins.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAO7D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAiBxD,CAAC;AAmBF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAwJtD,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Functions and Methods
|
|
3
|
+
*
|
|
4
|
+
* Minimal set of built-in operations. Host applications provide
|
|
5
|
+
* domain-specific functions via RuntimeContext.
|
|
6
|
+
*
|
|
7
|
+
* @internal - Not part of public API
|
|
8
|
+
*/
|
|
9
|
+
import { isDict } from './callable.js';
|
|
10
|
+
import { deepEquals, formatValue, inferType, isEmpty } from './values.js';
|
|
11
|
+
// ============================================================
|
|
12
|
+
// BUILT-IN FUNCTIONS
|
|
13
|
+
// ============================================================
|
|
14
|
+
export const BUILTIN_FUNCTIONS = {
|
|
15
|
+
/** Identity function - returns its argument */
|
|
16
|
+
identity: (args) => args[0] ?? null,
|
|
17
|
+
/** Return the type name of a value */
|
|
18
|
+
type: (args) => inferType(args[0] ?? null),
|
|
19
|
+
/** Log a value and return it unchanged (passthrough) */
|
|
20
|
+
log: (args, ctx) => {
|
|
21
|
+
const value = args[0] ?? null;
|
|
22
|
+
// ctx is RuntimeContext but CallableFn uses a minimal interface
|
|
23
|
+
ctx.callbacks.onLog(value);
|
|
24
|
+
return value;
|
|
25
|
+
},
|
|
26
|
+
/** Convert any value to JSON string */
|
|
27
|
+
json: (args) => JSON.stringify(args[0] ?? null),
|
|
28
|
+
};
|
|
29
|
+
// ============================================================
|
|
30
|
+
// BUILT-IN METHODS
|
|
31
|
+
// ============================================================
|
|
32
|
+
/** Factory for comparison methods (lt, gt, le, ge) */
|
|
33
|
+
function createComparisonMethod(compare) {
|
|
34
|
+
return (receiver, args) => {
|
|
35
|
+
const arg = args[0];
|
|
36
|
+
if (typeof receiver === 'number' && typeof arg === 'number') {
|
|
37
|
+
return compare(receiver, arg);
|
|
38
|
+
}
|
|
39
|
+
return compare(formatValue(receiver), formatValue(arg ?? ''));
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export const BUILTIN_METHODS = {
|
|
43
|
+
// === Conversion methods ===
|
|
44
|
+
/** Convert value to string */
|
|
45
|
+
str: (receiver) => formatValue(receiver),
|
|
46
|
+
/** Convert value to number */
|
|
47
|
+
num: (receiver) => {
|
|
48
|
+
if (typeof receiver === 'number')
|
|
49
|
+
return receiver;
|
|
50
|
+
if (typeof receiver === 'string') {
|
|
51
|
+
const n = parseFloat(receiver);
|
|
52
|
+
if (!isNaN(n))
|
|
53
|
+
return n;
|
|
54
|
+
}
|
|
55
|
+
if (typeof receiver === 'boolean')
|
|
56
|
+
return receiver ? 1 : 0;
|
|
57
|
+
return 0;
|
|
58
|
+
},
|
|
59
|
+
/** Get length of string or array */
|
|
60
|
+
len: (receiver) => {
|
|
61
|
+
if (typeof receiver === 'string')
|
|
62
|
+
return receiver.length;
|
|
63
|
+
if (Array.isArray(receiver))
|
|
64
|
+
return receiver.length;
|
|
65
|
+
if (receiver && typeof receiver === 'object') {
|
|
66
|
+
return Object.keys(receiver).length;
|
|
67
|
+
}
|
|
68
|
+
return 0;
|
|
69
|
+
},
|
|
70
|
+
/** Trim whitespace from string */
|
|
71
|
+
trim: (receiver) => formatValue(receiver).trim(),
|
|
72
|
+
// === Element access methods ===
|
|
73
|
+
/** Get first element of array or first char of string */
|
|
74
|
+
first: (receiver) => {
|
|
75
|
+
if (Array.isArray(receiver))
|
|
76
|
+
return receiver[0] ?? null;
|
|
77
|
+
if (typeof receiver === 'string')
|
|
78
|
+
return receiver[0] ?? '';
|
|
79
|
+
return null;
|
|
80
|
+
},
|
|
81
|
+
/** Get last element of array or last char of string */
|
|
82
|
+
last: (receiver) => {
|
|
83
|
+
if (Array.isArray(receiver))
|
|
84
|
+
return receiver[receiver.length - 1] ?? null;
|
|
85
|
+
if (typeof receiver === 'string') {
|
|
86
|
+
return receiver[receiver.length - 1] ?? '';
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
},
|
|
90
|
+
/** Get element at index */
|
|
91
|
+
at: (receiver, args) => {
|
|
92
|
+
const idx = typeof args[0] === 'number' ? args[0] : 0;
|
|
93
|
+
if (Array.isArray(receiver))
|
|
94
|
+
return receiver[idx] ?? null;
|
|
95
|
+
if (typeof receiver === 'string')
|
|
96
|
+
return receiver[idx] ?? '';
|
|
97
|
+
return null;
|
|
98
|
+
},
|
|
99
|
+
// === String operations ===
|
|
100
|
+
/** Split string by separator (default: newline) */
|
|
101
|
+
split: (receiver, args) => {
|
|
102
|
+
const str = formatValue(receiver);
|
|
103
|
+
const sep = typeof args[0] === 'string' ? args[0] : '\n';
|
|
104
|
+
return str.split(sep);
|
|
105
|
+
},
|
|
106
|
+
/** Join array elements with separator (default: comma) */
|
|
107
|
+
join: (receiver, args) => {
|
|
108
|
+
const sep = typeof args[0] === 'string' ? args[0] : ',';
|
|
109
|
+
if (!Array.isArray(receiver))
|
|
110
|
+
return formatValue(receiver);
|
|
111
|
+
return receiver.map(formatValue).join(sep);
|
|
112
|
+
},
|
|
113
|
+
/** Split string into lines (same as .split but newline only) */
|
|
114
|
+
lines: (receiver) => {
|
|
115
|
+
const str = formatValue(receiver);
|
|
116
|
+
return str.split('\n');
|
|
117
|
+
},
|
|
118
|
+
// === Utility methods ===
|
|
119
|
+
/** Check if value is empty */
|
|
120
|
+
empty: (receiver) => isEmpty(receiver),
|
|
121
|
+
// === Pattern matching methods ===
|
|
122
|
+
/** Check if string contains substring */
|
|
123
|
+
contains: (receiver, args) => {
|
|
124
|
+
const str = formatValue(receiver);
|
|
125
|
+
const search = formatValue(args[0] ?? '');
|
|
126
|
+
return str.includes(search);
|
|
127
|
+
},
|
|
128
|
+
/** Match regex pattern and return capture groups as tuple. Empty tuple = no match. */
|
|
129
|
+
matches: (receiver, args) => {
|
|
130
|
+
const str = formatValue(receiver);
|
|
131
|
+
const pattern = formatValue(args[0] ?? '');
|
|
132
|
+
try {
|
|
133
|
+
const match = new RegExp(pattern).exec(str);
|
|
134
|
+
if (!match)
|
|
135
|
+
return [];
|
|
136
|
+
// Return capture groups (index 1+), or full match if no groups
|
|
137
|
+
const groups = match.slice(1);
|
|
138
|
+
return groups.length > 0 ? groups : [match[0]];
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
// === Comparison methods ===
|
|
145
|
+
/** Equality check (deep structural comparison) */
|
|
146
|
+
eq: (receiver, args) => deepEquals(receiver, args[0] ?? null),
|
|
147
|
+
/** Inequality check (deep structural comparison) */
|
|
148
|
+
ne: (receiver, args) => !deepEquals(receiver, args[0] ?? null),
|
|
149
|
+
/** Less than */
|
|
150
|
+
lt: createComparisonMethod((a, b) => a < b),
|
|
151
|
+
/** Greater than */
|
|
152
|
+
gt: createComparisonMethod((a, b) => a > b),
|
|
153
|
+
/** Less than or equal */
|
|
154
|
+
le: createComparisonMethod((a, b) => a <= b),
|
|
155
|
+
/** Greater than or equal */
|
|
156
|
+
ge: createComparisonMethod((a, b) => a >= b),
|
|
157
|
+
// === Dict methods (reserved) ===
|
|
158
|
+
/** Get all keys of a dict as a tuple of strings */
|
|
159
|
+
keys: (receiver) => {
|
|
160
|
+
if (isDict(receiver)) {
|
|
161
|
+
return Object.keys(receiver);
|
|
162
|
+
}
|
|
163
|
+
return [];
|
|
164
|
+
},
|
|
165
|
+
/** Get all values of a dict as a tuple */
|
|
166
|
+
values: (receiver) => {
|
|
167
|
+
if (isDict(receiver)) {
|
|
168
|
+
return Object.values(receiver);
|
|
169
|
+
}
|
|
170
|
+
return [];
|
|
171
|
+
},
|
|
172
|
+
/** Get all entries of a dict as a tuple of [key, value] pairs */
|
|
173
|
+
entries: (receiver) => {
|
|
174
|
+
if (isDict(receiver)) {
|
|
175
|
+
return Object.entries(receiver).map(([k, v]) => [k, v]);
|
|
176
|
+
}
|
|
177
|
+
return [];
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=builtins.js.map
|