@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,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Literal Parsing
|
|
3
|
+
* Strings, numbers, booleans, tuples, dicts, and closures
|
|
4
|
+
*/
|
|
5
|
+
import { Parser } from './parser.js';
|
|
6
|
+
import { ParseError, TOKEN_TYPES } from '../types.js';
|
|
7
|
+
import { tokenize } from '../lexer/index.js';
|
|
8
|
+
import { check, advance, expect, current, skipNewlines, makeSpan, } from './state.js';
|
|
9
|
+
import { isDictStart, FUNC_PARAM_TYPES, parseTypeName } from './helpers.js';
|
|
10
|
+
// ============================================================
|
|
11
|
+
// LITERAL PARSING
|
|
12
|
+
// ============================================================
|
|
13
|
+
Parser.prototype.parseLiteral = function () {
|
|
14
|
+
if (check(this.state, TOKEN_TYPES.STRING)) {
|
|
15
|
+
return this.parseString();
|
|
16
|
+
}
|
|
17
|
+
if (check(this.state, TOKEN_TYPES.NUMBER)) {
|
|
18
|
+
const token = advance(this.state);
|
|
19
|
+
return {
|
|
20
|
+
type: 'NumberLiteral',
|
|
21
|
+
value: parseFloat(token.value),
|
|
22
|
+
span: token.span,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (check(this.state, TOKEN_TYPES.TRUE)) {
|
|
26
|
+
const token = advance(this.state);
|
|
27
|
+
return { type: 'BoolLiteral', value: true, span: token.span };
|
|
28
|
+
}
|
|
29
|
+
if (check(this.state, TOKEN_TYPES.FALSE)) {
|
|
30
|
+
const token = advance(this.state);
|
|
31
|
+
return { type: 'BoolLiteral', value: false, span: token.span };
|
|
32
|
+
}
|
|
33
|
+
if (check(this.state, TOKEN_TYPES.LBRACKET)) {
|
|
34
|
+
return this.parseTupleOrDict();
|
|
35
|
+
}
|
|
36
|
+
const token = current(this.state);
|
|
37
|
+
let hint = '';
|
|
38
|
+
if (token.type === TOKEN_TYPES.ASSIGN) {
|
|
39
|
+
hint = ". Hint: Use '->' for assignment, not '='";
|
|
40
|
+
}
|
|
41
|
+
else if (token.type === TOKEN_TYPES.EOF) {
|
|
42
|
+
hint = '. Hint: Unexpected end of input';
|
|
43
|
+
}
|
|
44
|
+
throw new ParseError(`Expected literal, got: ${token.value}${hint}`, token.span.start);
|
|
45
|
+
};
|
|
46
|
+
// ============================================================
|
|
47
|
+
// STRING PARSING
|
|
48
|
+
// ============================================================
|
|
49
|
+
Parser.prototype.parseString = function () {
|
|
50
|
+
const token = advance(this.state);
|
|
51
|
+
const raw = token.value;
|
|
52
|
+
const parts = this.parseStringParts(raw, token.span.start);
|
|
53
|
+
return {
|
|
54
|
+
type: 'StringLiteral',
|
|
55
|
+
parts,
|
|
56
|
+
isHeredoc: raw.includes('\n'),
|
|
57
|
+
span: token.span,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
Parser.prototype.parseStringParts = function (raw, baseLocation) {
|
|
61
|
+
const parts = [];
|
|
62
|
+
let i = 0;
|
|
63
|
+
let literalStart = 0;
|
|
64
|
+
while (i < raw.length) {
|
|
65
|
+
if (raw[i] === '{') {
|
|
66
|
+
if (raw[i + 1] === '{') {
|
|
67
|
+
i += 2;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (i > literalStart) {
|
|
71
|
+
const literal = this.unescapeBraces(raw.slice(literalStart, i));
|
|
72
|
+
if (literal)
|
|
73
|
+
parts.push(literal);
|
|
74
|
+
}
|
|
75
|
+
const exprStart = i + 1;
|
|
76
|
+
let depth = 1;
|
|
77
|
+
i++;
|
|
78
|
+
while (i < raw.length && depth > 0) {
|
|
79
|
+
if (raw[i] === '{' && raw[i + 1] === '{') {
|
|
80
|
+
i += 2;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (raw[i] === '}' && raw[i + 1] === '}') {
|
|
84
|
+
i += 2;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (raw[i] === '{')
|
|
88
|
+
depth++;
|
|
89
|
+
else if (raw[i] === '}')
|
|
90
|
+
depth--;
|
|
91
|
+
i++;
|
|
92
|
+
}
|
|
93
|
+
if (depth !== 0) {
|
|
94
|
+
throw new ParseError("Unterminated string interpolation. Hint: Check for missing '}' in interpolation", baseLocation);
|
|
95
|
+
}
|
|
96
|
+
const exprSource = raw.slice(exprStart, i - 1);
|
|
97
|
+
if (!exprSource.trim()) {
|
|
98
|
+
throw new ParseError('Empty string interpolation', baseLocation);
|
|
99
|
+
}
|
|
100
|
+
const interpolation = this.parseInterpolationExpr(exprSource, baseLocation);
|
|
101
|
+
parts.push(interpolation);
|
|
102
|
+
literalStart = i;
|
|
103
|
+
}
|
|
104
|
+
else if (raw[i] === '}' && raw[i + 1] === '}') {
|
|
105
|
+
i += 2;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
i++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (literalStart < raw.length) {
|
|
112
|
+
const literal = this.unescapeBraces(raw.slice(literalStart));
|
|
113
|
+
if (literal)
|
|
114
|
+
parts.push(literal);
|
|
115
|
+
}
|
|
116
|
+
if (parts.length === 0) {
|
|
117
|
+
parts.push('');
|
|
118
|
+
}
|
|
119
|
+
return parts;
|
|
120
|
+
};
|
|
121
|
+
Parser.prototype.unescapeBraces = function (s) {
|
|
122
|
+
return s.replaceAll('{{', '{').replaceAll('}}', '}');
|
|
123
|
+
};
|
|
124
|
+
Parser.prototype.parseInterpolationExpr = function (source, baseLocation) {
|
|
125
|
+
const tokens = tokenize(source);
|
|
126
|
+
const filtered = tokens.filter((t) => t.type !== TOKEN_TYPES.NEWLINE && t.type !== TOKEN_TYPES.COMMENT);
|
|
127
|
+
if (filtered.length === 0 || filtered[0]?.type === TOKEN_TYPES.EOF) {
|
|
128
|
+
throw new ParseError('Empty string interpolation', baseLocation);
|
|
129
|
+
}
|
|
130
|
+
const subParser = new Parser(filtered);
|
|
131
|
+
const expression = subParser.parseExpression();
|
|
132
|
+
if (subParser.state.tokens[subParser.state.pos]?.type !== TOKEN_TYPES.EOF) {
|
|
133
|
+
throw new ParseError(`Unexpected token in interpolation: ${subParser.state.tokens[subParser.state.pos]?.value}`, baseLocation);
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
type: 'Interpolation',
|
|
137
|
+
expression,
|
|
138
|
+
span: expression.span,
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
// ============================================================
|
|
142
|
+
// TUPLE & DICT PARSING
|
|
143
|
+
// ============================================================
|
|
144
|
+
Parser.prototype.parseTupleOrDict = function () {
|
|
145
|
+
const start = current(this.state).span.start;
|
|
146
|
+
expect(this.state, TOKEN_TYPES.LBRACKET, 'Expected [');
|
|
147
|
+
skipNewlines(this.state);
|
|
148
|
+
if (check(this.state, TOKEN_TYPES.RBRACKET)) {
|
|
149
|
+
advance(this.state);
|
|
150
|
+
return {
|
|
151
|
+
type: 'Tuple',
|
|
152
|
+
elements: [],
|
|
153
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (check(this.state, TOKEN_TYPES.COLON) &&
|
|
157
|
+
this.state.tokens[this.state.pos + 1]?.type === TOKEN_TYPES.RBRACKET) {
|
|
158
|
+
advance(this.state);
|
|
159
|
+
advance(this.state);
|
|
160
|
+
return {
|
|
161
|
+
type: 'Dict',
|
|
162
|
+
entries: [],
|
|
163
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (isDictStart(this.state)) {
|
|
167
|
+
return this.parseDict(start);
|
|
168
|
+
}
|
|
169
|
+
return this.parseTuple(start);
|
|
170
|
+
};
|
|
171
|
+
Parser.prototype.parseTuple = function (start) {
|
|
172
|
+
const elements = [];
|
|
173
|
+
elements.push(this.parseExpression());
|
|
174
|
+
skipNewlines(this.state);
|
|
175
|
+
while (check(this.state, TOKEN_TYPES.COMMA)) {
|
|
176
|
+
advance(this.state);
|
|
177
|
+
skipNewlines(this.state);
|
|
178
|
+
if (check(this.state, TOKEN_TYPES.RBRACKET))
|
|
179
|
+
break;
|
|
180
|
+
elements.push(this.parseExpression());
|
|
181
|
+
skipNewlines(this.state);
|
|
182
|
+
}
|
|
183
|
+
expect(this.state, TOKEN_TYPES.RBRACKET, 'Expected ]');
|
|
184
|
+
return {
|
|
185
|
+
type: 'Tuple',
|
|
186
|
+
elements,
|
|
187
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
Parser.prototype.parseDict = function (start) {
|
|
191
|
+
const entries = [];
|
|
192
|
+
entries.push(this.parseDictEntry());
|
|
193
|
+
skipNewlines(this.state);
|
|
194
|
+
while (check(this.state, TOKEN_TYPES.COMMA)) {
|
|
195
|
+
advance(this.state);
|
|
196
|
+
skipNewlines(this.state);
|
|
197
|
+
if (check(this.state, TOKEN_TYPES.RBRACKET))
|
|
198
|
+
break;
|
|
199
|
+
entries.push(this.parseDictEntry());
|
|
200
|
+
skipNewlines(this.state);
|
|
201
|
+
}
|
|
202
|
+
expect(this.state, TOKEN_TYPES.RBRACKET, 'Expected ]');
|
|
203
|
+
return {
|
|
204
|
+
type: 'Dict',
|
|
205
|
+
entries,
|
|
206
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
Parser.prototype.parseDictEntry = function () {
|
|
210
|
+
const start = current(this.state).span.start;
|
|
211
|
+
const keyToken = expect(this.state, TOKEN_TYPES.IDENTIFIER, 'Expected key');
|
|
212
|
+
expect(this.state, TOKEN_TYPES.COLON, 'Expected :');
|
|
213
|
+
const value = this.parseExpression();
|
|
214
|
+
return {
|
|
215
|
+
type: 'DictEntry',
|
|
216
|
+
key: keyToken.value,
|
|
217
|
+
value,
|
|
218
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
// ============================================================
|
|
222
|
+
// CLOSURE PARSING
|
|
223
|
+
// ============================================================
|
|
224
|
+
Parser.prototype.parseClosure = function () {
|
|
225
|
+
const start = current(this.state).span.start;
|
|
226
|
+
if (check(this.state, TOKEN_TYPES.OR)) {
|
|
227
|
+
advance(this.state);
|
|
228
|
+
const body = this.parseBody();
|
|
229
|
+
return {
|
|
230
|
+
type: 'Closure',
|
|
231
|
+
params: [],
|
|
232
|
+
body,
|
|
233
|
+
span: makeSpan(start, body.span.end),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
expect(this.state, TOKEN_TYPES.PIPE_BAR, 'Expected |');
|
|
237
|
+
const params = [];
|
|
238
|
+
if (!check(this.state, TOKEN_TYPES.PIPE_BAR)) {
|
|
239
|
+
params.push(this.parseClosureParam());
|
|
240
|
+
while (check(this.state, TOKEN_TYPES.COMMA)) {
|
|
241
|
+
advance(this.state);
|
|
242
|
+
params.push(this.parseClosureParam());
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
expect(this.state, TOKEN_TYPES.PIPE_BAR, 'Expected |');
|
|
246
|
+
const body = this.parseBody();
|
|
247
|
+
return {
|
|
248
|
+
type: 'Closure',
|
|
249
|
+
params,
|
|
250
|
+
body,
|
|
251
|
+
span: makeSpan(start, body.span.end),
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
Parser.prototype.parseBody = function () {
|
|
255
|
+
if (check(this.state, TOKEN_TYPES.LBRACE)) {
|
|
256
|
+
return this.parseBlock();
|
|
257
|
+
}
|
|
258
|
+
if (check(this.state, TOKEN_TYPES.LPAREN)) {
|
|
259
|
+
return this.parseGrouped();
|
|
260
|
+
}
|
|
261
|
+
if (check(this.state, TOKEN_TYPES.BREAK) ||
|
|
262
|
+
check(this.state, TOKEN_TYPES.RETURN)) {
|
|
263
|
+
return this.parsePipeChain();
|
|
264
|
+
}
|
|
265
|
+
return this.parsePostfixExpr();
|
|
266
|
+
};
|
|
267
|
+
Parser.prototype.parseClosureParam = function () {
|
|
268
|
+
const start = current(this.state).span.start;
|
|
269
|
+
const nameToken = expect(this.state, TOKEN_TYPES.IDENTIFIER, 'Expected parameter name');
|
|
270
|
+
let typeName = null;
|
|
271
|
+
let defaultValue = null;
|
|
272
|
+
if (check(this.state, TOKEN_TYPES.COLON)) {
|
|
273
|
+
advance(this.state);
|
|
274
|
+
typeName = parseTypeName(this.state, FUNC_PARAM_TYPES);
|
|
275
|
+
}
|
|
276
|
+
if (check(this.state, TOKEN_TYPES.ASSIGN)) {
|
|
277
|
+
advance(this.state);
|
|
278
|
+
defaultValue = this.parseLiteral();
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
type: 'ClosureParam',
|
|
282
|
+
name: nameToken.value,
|
|
283
|
+
typeName,
|
|
284
|
+
defaultValue,
|
|
285
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=parser-literals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-literals.js","sourceRoot":"","sources":["../../src/parser/parser-literals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Script Parsing
|
|
3
|
+
* Script, frontmatter, statements, and annotations
|
|
4
|
+
*/
|
|
5
|
+
import type { AnnotatedStatementNode, AnnotationArg, ErrorNode, FrontmatterNode, ScriptNode, StatementNode } from '../types.js';
|
|
6
|
+
declare module './parser.js' {
|
|
7
|
+
interface Parser {
|
|
8
|
+
parseScript(): ScriptNode;
|
|
9
|
+
parseFrontmatter(): FrontmatterNode;
|
|
10
|
+
parseStatement(): StatementNode | AnnotatedStatementNode;
|
|
11
|
+
parseAnnotatedStatement(): AnnotatedStatementNode;
|
|
12
|
+
parseAnnotationArgs(): AnnotationArg[];
|
|
13
|
+
parseAnnotationArg(): AnnotationArg;
|
|
14
|
+
recoverToNextStatement(startLocation: {
|
|
15
|
+
line: number;
|
|
16
|
+
column: number;
|
|
17
|
+
offset: number;
|
|
18
|
+
}, message: string): ErrorNode;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=parser-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-script.d.ts","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,SAAS,EACT,eAAe,EAEf,UAAU,EAEV,aAAa,EACd,MAAM,aAAa,CAAC;AAarB,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,MAAM;QACd,WAAW,IAAI,UAAU,CAAC;QAC1B,gBAAgB,IAAI,eAAe,CAAC;QACpC,cAAc,IAAI,aAAa,GAAG,sBAAsB,CAAC;QACzD,uBAAuB,IAAI,sBAAsB,CAAC;QAClD,mBAAmB,IAAI,aAAa,EAAE,CAAC;QACvC,kBAAkB,IAAI,aAAa,CAAC;QACpC,sBAAsB,CACpB,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAC/D,OAAO,EAAE,MAAM,GACd,SAAS,CAAC;KACd;CACF"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Script Parsing
|
|
3
|
+
* Script, frontmatter, statements, and annotations
|
|
4
|
+
*/
|
|
5
|
+
import { Parser } from './parser.js';
|
|
6
|
+
import { ParseError, TOKEN_TYPES } from '../types.js';
|
|
7
|
+
import { check, advance, expect, current, isAtEnd, skipNewlines, makeSpan, } from './state.js';
|
|
8
|
+
// ============================================================
|
|
9
|
+
// SCRIPT PARSING
|
|
10
|
+
// ============================================================
|
|
11
|
+
Parser.prototype.parseScript = function () {
|
|
12
|
+
const start = current(this.state).span.start;
|
|
13
|
+
skipNewlines(this.state);
|
|
14
|
+
// Optional frontmatter
|
|
15
|
+
let frontmatter = null;
|
|
16
|
+
if (check(this.state, TOKEN_TYPES.FRONTMATTER_DELIM)) {
|
|
17
|
+
frontmatter = this.parseFrontmatter();
|
|
18
|
+
}
|
|
19
|
+
skipNewlines(this.state);
|
|
20
|
+
// Statements
|
|
21
|
+
const statements = [];
|
|
22
|
+
while (!isAtEnd(this.state)) {
|
|
23
|
+
skipNewlines(this.state);
|
|
24
|
+
if (isAtEnd(this.state))
|
|
25
|
+
break;
|
|
26
|
+
if (this.state.recoveryMode) {
|
|
27
|
+
// Recovery mode: catch errors and create ErrorNode
|
|
28
|
+
const stmtStart = current(this.state).span.start;
|
|
29
|
+
try {
|
|
30
|
+
statements.push(this.parseStatement());
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (err instanceof ParseError) {
|
|
34
|
+
this.state.errors.push(err);
|
|
35
|
+
// Create ErrorNode and skip to next statement boundary
|
|
36
|
+
const errorNode = this.recoverToNextStatement(stmtStart, err.message);
|
|
37
|
+
statements.push(errorNode);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw err; // Re-throw non-parse errors
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Normal mode: let errors propagate
|
|
46
|
+
statements.push(this.parseStatement());
|
|
47
|
+
}
|
|
48
|
+
skipNewlines(this.state);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
type: 'Script',
|
|
52
|
+
frontmatter,
|
|
53
|
+
statements,
|
|
54
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
Parser.prototype.recoverToNextStatement = function (startLocation, message) {
|
|
58
|
+
const startOffset = startLocation.offset;
|
|
59
|
+
let endOffset = startOffset;
|
|
60
|
+
// Skip tokens until we hit a newline or EOF (statement boundary)
|
|
61
|
+
while (!isAtEnd(this.state) && !check(this.state, TOKEN_TYPES.NEWLINE)) {
|
|
62
|
+
endOffset = current(this.state).span.end.offset;
|
|
63
|
+
advance(this.state);
|
|
64
|
+
}
|
|
65
|
+
// Extract the skipped text from source
|
|
66
|
+
const text = this.state.source.slice(startOffset, endOffset);
|
|
67
|
+
return {
|
|
68
|
+
type: 'Error',
|
|
69
|
+
message,
|
|
70
|
+
text,
|
|
71
|
+
span: makeSpan(startLocation, current(this.state).span.start),
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
// ============================================================
|
|
75
|
+
// FRONTMATTER PARSING
|
|
76
|
+
// ============================================================
|
|
77
|
+
Parser.prototype.parseFrontmatter = function () {
|
|
78
|
+
const start = current(this.state).span.start;
|
|
79
|
+
expect(this.state, TOKEN_TYPES.FRONTMATTER_DELIM, 'Expected ---');
|
|
80
|
+
skipNewlines(this.state);
|
|
81
|
+
// Collect all content until next ---
|
|
82
|
+
let content = '';
|
|
83
|
+
while (!check(this.state, TOKEN_TYPES.FRONTMATTER_DELIM) &&
|
|
84
|
+
!isAtEnd(this.state)) {
|
|
85
|
+
const token = advance(this.state);
|
|
86
|
+
content += token.value;
|
|
87
|
+
}
|
|
88
|
+
expect(this.state, TOKEN_TYPES.FRONTMATTER_DELIM, 'Expected closing ---');
|
|
89
|
+
return {
|
|
90
|
+
type: 'Frontmatter',
|
|
91
|
+
content: content.trim(),
|
|
92
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
// ============================================================
|
|
96
|
+
// STATEMENT PARSING
|
|
97
|
+
// ============================================================
|
|
98
|
+
Parser.prototype.parseStatement = function () {
|
|
99
|
+
const start = current(this.state).span.start;
|
|
100
|
+
// Check for annotation prefix: ^(...)
|
|
101
|
+
if (check(this.state, TOKEN_TYPES.CARET)) {
|
|
102
|
+
return this.parseAnnotatedStatement();
|
|
103
|
+
}
|
|
104
|
+
const expression = this.parseExpression();
|
|
105
|
+
return {
|
|
106
|
+
type: 'Statement',
|
|
107
|
+
expression,
|
|
108
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
// ============================================================
|
|
112
|
+
// ANNOTATION PARSING
|
|
113
|
+
// ============================================================
|
|
114
|
+
Parser.prototype.parseAnnotatedStatement = function () {
|
|
115
|
+
const start = current(this.state).span.start;
|
|
116
|
+
expect(this.state, TOKEN_TYPES.CARET, 'Expected ^');
|
|
117
|
+
expect(this.state, TOKEN_TYPES.LPAREN, 'Expected (');
|
|
118
|
+
const annotations = this.parseAnnotationArgs();
|
|
119
|
+
expect(this.state, TOKEN_TYPES.RPAREN, 'Expected )');
|
|
120
|
+
// Parse the inner statement (which could also be annotated)
|
|
121
|
+
const statement = this.parseStatement();
|
|
122
|
+
// If inner is annotated, wrap it; otherwise use directly
|
|
123
|
+
const innerStatement = statement.type === 'AnnotatedStatement'
|
|
124
|
+
? {
|
|
125
|
+
type: 'Statement',
|
|
126
|
+
expression: statement.statement.expression,
|
|
127
|
+
span: statement.span,
|
|
128
|
+
}
|
|
129
|
+
: statement;
|
|
130
|
+
return {
|
|
131
|
+
type: 'AnnotatedStatement',
|
|
132
|
+
annotations,
|
|
133
|
+
statement: innerStatement,
|
|
134
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
Parser.prototype.parseAnnotationArgs = function () {
|
|
138
|
+
const args = [];
|
|
139
|
+
if (check(this.state, TOKEN_TYPES.RPAREN)) {
|
|
140
|
+
return args; // Empty annotation list
|
|
141
|
+
}
|
|
142
|
+
args.push(this.parseAnnotationArg());
|
|
143
|
+
while (check(this.state, TOKEN_TYPES.COMMA)) {
|
|
144
|
+
advance(this.state); // consume comma
|
|
145
|
+
if (check(this.state, TOKEN_TYPES.RPAREN))
|
|
146
|
+
break; // trailing comma
|
|
147
|
+
args.push(this.parseAnnotationArg());
|
|
148
|
+
}
|
|
149
|
+
return args;
|
|
150
|
+
};
|
|
151
|
+
Parser.prototype.parseAnnotationArg = function () {
|
|
152
|
+
const start = current(this.state).span.start;
|
|
153
|
+
// Spread argument: *expr
|
|
154
|
+
if (check(this.state, TOKEN_TYPES.STAR)) {
|
|
155
|
+
advance(this.state); // consume *
|
|
156
|
+
const expression = this.parseExpression();
|
|
157
|
+
return {
|
|
158
|
+
type: 'SpreadArg',
|
|
159
|
+
expression,
|
|
160
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Named argument: key: value
|
|
164
|
+
const nameToken = expect(this.state, TOKEN_TYPES.IDENTIFIER, 'Expected annotation name');
|
|
165
|
+
expect(this.state, TOKEN_TYPES.COLON, 'Expected :');
|
|
166
|
+
const value = this.parseExpression();
|
|
167
|
+
return {
|
|
168
|
+
type: 'NamedArg',
|
|
169
|
+
name: nameToken.value,
|
|
170
|
+
value,
|
|
171
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=parser-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-script.js","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAWrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,QAAQ,GACT,MAAM,YAAY,CAAC;AAkBpB,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,uBAAuB;IACvB,IAAI,WAAW,GAA2B,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrD,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,aAAa;IACb,MAAM,UAAU,GAA2D,EAAE,CAAC;IAC9E,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM;QAE/B,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC5B,mDAAmD;YACnD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5B,uDAAuD;oBACvD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC,CAAC,4BAA4B;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW;QACX,UAAU;QACV,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAExC,aAA+D,EAC/D,OAAe;IAEf,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACzC,IAAI,SAAS,GAAG,WAAW,CAAC;IAE5B,iEAAiE;IACjE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE7D,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO;QACP,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;KAC9D,CAAC;AACJ,CAAC,CAAC;AAEF,+DAA+D;AAC/D,sBAAsB;AACtB,+DAA+D;AAE/D,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAClE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,qCAAqC;IACrC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,OACE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC;QACjD,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IAE1E,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;IAGhC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAE7C,sCAAsC;IACtC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,UAAU;QACV,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,+DAA+D;AAC/D,qBAAqB;AACrB,+DAA+D;AAE/D,MAAM,CAAC,SAAS,CAAC,uBAAuB,GAAG;IAGzC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErD,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAExC,yDAAyD;IACzD,MAAM,cAAc,GAClB,SAAS,CAAC,IAAI,KAAK,oBAAoB;QACrC,CAAC,CAAC;YACE,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,UAAU;YAC1C,IAAI,EAAE,SAAS,CAAC,IAAI;SACrB;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,WAAW;QACX,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,mBAAmB,GAAG;IAGrC,MAAM,IAAI,GAAoB,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACvC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAErC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,iBAAiB;QACnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,kBAAkB,GAAG;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAE7C,yBAAyB;IACzB,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,UAAU;YACV,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5B,CAAC;IAC5B,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,MAAM,CACtB,IAAI,CAAC,KAAK,EACV,WAAW,CAAC,UAAU,EACtB,0BAA0B,CAC3B,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,KAAK;QACL,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC7B,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Variable Parsing
|
|
3
|
+
* Variables and access chains
|
|
4
|
+
*/
|
|
5
|
+
import type { ExistenceCheck, FieldAccess, PropertyAccess, BodyNode, SourceLocation, VariableNode } from '../types.js';
|
|
6
|
+
declare module './parser.js' {
|
|
7
|
+
interface Parser {
|
|
8
|
+
parseVariable(): VariableNode;
|
|
9
|
+
makeVariableWithAccess(name: string | null, isPipeVar: boolean, start: SourceLocation): VariableNode;
|
|
10
|
+
parseAccessChain(): {
|
|
11
|
+
accessChain: PropertyAccess[];
|
|
12
|
+
existenceCheck: ExistenceCheck | null;
|
|
13
|
+
};
|
|
14
|
+
parseFieldAccessElement(): FieldAccess | null;
|
|
15
|
+
parseComputedOrAlternatives(): FieldAccess;
|
|
16
|
+
tryParseAlternatives(): string[] | null;
|
|
17
|
+
parseDefaultValue(): BodyNode;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=parser-variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-variables.d.ts","sourceRoot":"","sources":["../../src/parser/parser-variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAUrB,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,MAAM;QACd,aAAa,IAAI,YAAY,CAAC;QAC9B,sBAAsB,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,cAAc,GACpB,YAAY,CAAC;QAChB,gBAAgB,IAAI;YAClB,WAAW,EAAE,cAAc,EAAE,CAAC;YAC9B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;SACvC,CAAC;QACF,uBAAuB,IAAI,WAAW,GAAG,IAAI,CAAC;QAC9C,2BAA2B,IAAI,WAAW,CAAC;QAC3C,oBAAoB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC;QACxC,iBAAiB,IAAI,QAAQ,CAAC;KAC/B;CACF"}
|