septima-lang 0.0.1

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.
Files changed (67) hide show
  1. package/dist/src/ast-node.d.ts +85 -0
  2. package/dist/src/ast-node.js +114 -0
  3. package/dist/src/cdl.d.ts +33 -0
  4. package/dist/src/cdl.js +63 -0
  5. package/dist/src/extract-message.d.ts +1 -0
  6. package/dist/src/extract-message.js +10 -0
  7. package/dist/src/fail-me.d.ts +1 -0
  8. package/dist/src/fail-me.js +11 -0
  9. package/dist/src/find-array-method.d.ts +15 -0
  10. package/dist/src/find-array-method.js +104 -0
  11. package/dist/src/find-string-method.d.ts +2 -0
  12. package/dist/src/find-string-method.js +88 -0
  13. package/dist/src/index.d.ts +1 -0
  14. package/dist/src/index.js +18 -0
  15. package/dist/src/location.d.ts +11 -0
  16. package/dist/src/location.js +3 -0
  17. package/dist/src/parser.d.ts +37 -0
  18. package/dist/src/parser.js +345 -0
  19. package/dist/src/result.d.ts +24 -0
  20. package/dist/src/result.js +29 -0
  21. package/dist/src/runtime.d.ts +25 -0
  22. package/dist/src/runtime.js +287 -0
  23. package/dist/src/scanner.d.ts +22 -0
  24. package/dist/src/scanner.js +76 -0
  25. package/dist/src/should-never-happen.d.ts +1 -0
  26. package/dist/src/should-never-happen.js +9 -0
  27. package/dist/src/source-code.d.ts +19 -0
  28. package/dist/src/source-code.js +90 -0
  29. package/dist/src/stack.d.ts +11 -0
  30. package/dist/src/stack.js +19 -0
  31. package/dist/src/switch-on.d.ts +1 -0
  32. package/dist/src/switch-on.js +9 -0
  33. package/dist/src/symbol-table.d.ts +5 -0
  34. package/dist/src/symbol-table.js +3 -0
  35. package/dist/src/value.d.ts +128 -0
  36. package/dist/src/value.js +634 -0
  37. package/dist/tests/cdl.spec.d.ts +1 -0
  38. package/dist/tests/cdl.spec.js +692 -0
  39. package/dist/tests/parser.spec.d.ts +1 -0
  40. package/dist/tests/parser.spec.js +39 -0
  41. package/dist/tests/value.spec.d.ts +1 -0
  42. package/dist/tests/value.spec.js +355 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -0
  44. package/jest-output.json +1 -0
  45. package/package.json +17 -0
  46. package/src/ast-node.ts +205 -0
  47. package/src/cdl.ts +78 -0
  48. package/src/extract-message.ts +5 -0
  49. package/src/fail-me.ts +7 -0
  50. package/src/find-array-method.ts +115 -0
  51. package/src/find-string-method.ts +84 -0
  52. package/src/index.ts +1 -0
  53. package/src/location.ts +13 -0
  54. package/src/parser.ts +399 -0
  55. package/src/result.ts +45 -0
  56. package/src/runtime.ts +295 -0
  57. package/src/scanner.ts +94 -0
  58. package/src/should-never-happen.ts +4 -0
  59. package/src/source-code.ts +101 -0
  60. package/src/stack.ts +18 -0
  61. package/src/switch-on.ts +4 -0
  62. package/src/symbol-table.ts +6 -0
  63. package/src/value.ts +742 -0
  64. package/tests/cdl.spec.ts +755 -0
  65. package/tests/parser.spec.ts +14 -0
  66. package/tests/value.spec.ts +387 -0
  67. package/tsconfig.json +11 -0
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Runtime = void 0;
27
+ const ast_node_1 = require("./ast-node");
28
+ const extract_message_1 = require("./extract-message");
29
+ const fail_me_1 = require("./fail-me");
30
+ const should_never_happen_1 = require("./should-never-happen");
31
+ const Stack = __importStar(require("./stack"));
32
+ const switch_on_1 = require("./switch-on");
33
+ const value_1 = require("./value");
34
+ class SymbolFrame {
35
+ constructor(symbol, placeholder, earlier) {
36
+ this.symbol = symbol;
37
+ this.placeholder = placeholder;
38
+ this.earlier = earlier;
39
+ }
40
+ lookup(sym) {
41
+ if (this.symbol === sym) {
42
+ const ret = this.placeholder.destination;
43
+ if (ret === undefined) {
44
+ throw new Error(`Unresolved definition: ${this.symbol}`);
45
+ }
46
+ return ret;
47
+ }
48
+ return this.earlier.lookup(sym);
49
+ }
50
+ export() {
51
+ const ret = this.earlier.export();
52
+ ret[this.symbol] = this.placeholder.destination?.export() ?? (0, fail_me_1.failMe)(`Unbounded symbol: ${this.symbol}`);
53
+ return ret;
54
+ }
55
+ }
56
+ class EmptySymbolTable {
57
+ lookup(sym) {
58
+ throw new Error(`Symbol ${sym} was not found`);
59
+ }
60
+ export() {
61
+ return {};
62
+ }
63
+ }
64
+ class Runtime {
65
+ constructor(root, verbosity = 'quiet', parser) {
66
+ this.root = root;
67
+ this.verbosity = verbosity;
68
+ this.parser = parser;
69
+ this.stack = undefined;
70
+ }
71
+ compute() {
72
+ const empty = new EmptySymbolTable();
73
+ const keys = value_1.Value.foreign(o => o.keys());
74
+ const entries = value_1.Value.foreign(o => o.entries());
75
+ const fromEntries = value_1.Value.foreign(o => o.fromEntries());
76
+ const lib = new SymbolFrame('Object', { destination: value_1.Value.obj({ keys, entries, fromEntries }) }, empty);
77
+ try {
78
+ const value = this.evalNode(this.root, lib);
79
+ return { value };
80
+ }
81
+ catch (e) {
82
+ const trace = [];
83
+ for (let curr = this.stack; curr; curr = curr?.next) {
84
+ trace.push(curr.ast);
85
+ }
86
+ return {
87
+ expressionTrace: trace,
88
+ errorMessage: (0, extract_message_1.extractMessage)(e),
89
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
90
+ stack: e.stack,
91
+ };
92
+ }
93
+ }
94
+ evalNode(ast, table) {
95
+ this.stack = Stack.push(ast, this.stack);
96
+ let ret = this.evalNodeImpl(ast, table);
97
+ if (ret.isSink() && !ret.span()) {
98
+ ret = ret.bindToSpan((0, ast_node_1.span)(ast));
99
+ }
100
+ (0, switch_on_1.switchOn)(this.verbosity, {
101
+ quiet: () => { },
102
+ trace: () => {
103
+ // eslint-disable-next-line no-console
104
+ console.log(`output of <|${(0, ast_node_1.show)(ast)}|> is ${JSON.stringify(ret)} // ${ast.tag}`);
105
+ },
106
+ });
107
+ this.stack = Stack.pop(this.stack);
108
+ return ret;
109
+ }
110
+ evalNodeImpl(ast, table) {
111
+ if (ast.tag === 'topLevelExpression') {
112
+ let newTable = table;
113
+ for (const def of ast.definitions) {
114
+ const name = def.ident.t.text;
115
+ const placeholder = { destination: undefined };
116
+ newTable = new SymbolFrame(name, placeholder, newTable);
117
+ const v = this.evalNode(def.value, newTable);
118
+ placeholder.destination = v;
119
+ }
120
+ return this.evalNode(ast.computation, newTable);
121
+ }
122
+ if (ast.tag === 'binaryOperator') {
123
+ const lhs = this.evalNode(ast.lhs, table);
124
+ if (ast.operator === '||') {
125
+ return lhs.or(() => this.evalNode(ast.rhs, table));
126
+ }
127
+ if (ast.operator === '&&') {
128
+ return lhs.and(() => this.evalNode(ast.rhs, table));
129
+ }
130
+ if (ast.operator === '??') {
131
+ return lhs.unsink(() => this.evalNode(ast.rhs, table));
132
+ }
133
+ const rhs = this.evalNode(ast.rhs, table);
134
+ if (ast.operator === '!=') {
135
+ return lhs.equalsTo(rhs).not();
136
+ }
137
+ if (ast.operator === '==') {
138
+ return lhs.equalsTo(rhs);
139
+ }
140
+ if (ast.operator === '<=') {
141
+ const comp = lhs.order(rhs);
142
+ return comp.isToZero('<=');
143
+ }
144
+ if (ast.operator === '<') {
145
+ const comp = lhs.order(rhs);
146
+ return comp.isToZero('<');
147
+ }
148
+ if (ast.operator === '>=') {
149
+ const comp = lhs.order(rhs);
150
+ return comp.isToZero('>=');
151
+ }
152
+ if (ast.operator === '>') {
153
+ const comp = lhs.order(rhs);
154
+ return comp.isToZero('>');
155
+ }
156
+ if (ast.operator === '%') {
157
+ return lhs.modulo(rhs);
158
+ }
159
+ if (ast.operator === '*') {
160
+ return lhs.times(rhs);
161
+ }
162
+ if (ast.operator === '**') {
163
+ return lhs.power(rhs);
164
+ }
165
+ if (ast.operator === '+') {
166
+ return lhs.plus(rhs);
167
+ }
168
+ if (ast.operator === '-') {
169
+ return lhs.minus(rhs);
170
+ }
171
+ if (ast.operator === '/') {
172
+ return lhs.over(rhs);
173
+ }
174
+ (0, should_never_happen_1.shouldNeverHappen)(ast.operator);
175
+ }
176
+ if (ast.tag === 'unaryOperator') {
177
+ const operand = this.evalNode(ast.operand, table);
178
+ if (ast.operator === '!') {
179
+ return operand.not();
180
+ }
181
+ if (ast.operator === '+') {
182
+ // We intentionally do <0 + operand> instead of just <operand>. This is due to type-checking: the latter will
183
+ // evaluate to the operand as-is, making expression such as `+true` dynamically valid (which is not the desired
184
+ // behavior)
185
+ return value_1.Value.num(0).plus(operand);
186
+ }
187
+ if (ast.operator === '-') {
188
+ return operand.negate();
189
+ }
190
+ (0, should_never_happen_1.shouldNeverHappen)(ast.operator);
191
+ }
192
+ if (ast.tag === 'ident') {
193
+ return table.lookup(ast.t.text);
194
+ }
195
+ if (ast.tag === 'literal') {
196
+ if (ast.type === 'bool') {
197
+ // TODO(imaman): stricter checking of 'false'
198
+ return value_1.Value.bool(ast.t.text === 'true' ? true : false);
199
+ }
200
+ if (ast.type === 'num') {
201
+ return value_1.Value.num(Number(ast.t.text));
202
+ }
203
+ if (ast.type === 'sink!!') {
204
+ return value_1.Value.sink(undefined, this.stack, table);
205
+ }
206
+ if (ast.type === 'sink!') {
207
+ return value_1.Value.sink(undefined, this.stack);
208
+ }
209
+ if (ast.type === 'sink') {
210
+ return value_1.Value.sink();
211
+ }
212
+ if (ast.type === 'str') {
213
+ return value_1.Value.str(ast.t.text);
214
+ }
215
+ (0, should_never_happen_1.shouldNeverHappen)(ast.type);
216
+ }
217
+ if (ast.tag === 'arrayLiteral') {
218
+ const arr = [];
219
+ for (const curr of ast.parts) {
220
+ if (curr.tag === 'element') {
221
+ arr.push(this.evalNode(curr.v, table));
222
+ }
223
+ else if (curr.tag === 'spread') {
224
+ const v = this.evalNode(curr.v, table);
225
+ arr.push(...v.assertArr());
226
+ }
227
+ else {
228
+ (0, should_never_happen_1.shouldNeverHappen)(curr);
229
+ }
230
+ }
231
+ return value_1.Value.arr(arr);
232
+ }
233
+ if (ast.tag === 'objectLiteral') {
234
+ const entries = ast.parts.flatMap(at => {
235
+ if (at.tag === 'hardName') {
236
+ return [[at.k.t.text, this.evalNode(at.v, table)]];
237
+ }
238
+ if (at.tag === 'computedName') {
239
+ return [[this.evalNode(at.k, table).assertStr(), this.evalNode(at.v, table)]];
240
+ }
241
+ if (at.tag === 'spread') {
242
+ const o = this.evalNode(at.o, table);
243
+ return Object.entries(o.assertObj());
244
+ }
245
+ (0, should_never_happen_1.shouldNeverHappen)(at);
246
+ });
247
+ // TODO(imaman): verify type of all keys (strings, maybe also numbers)
248
+ return value_1.Value.obj(Object.fromEntries(entries));
249
+ }
250
+ if (ast.tag === 'lambda') {
251
+ return value_1.Value.lambda(ast, table);
252
+ }
253
+ if (ast.tag === 'functionCall') {
254
+ const argValues = ast.actualArgs.map(a => this.evalNode(a, table));
255
+ const callee = this.evalNode(ast.callee, table);
256
+ return this.call(callee, argValues);
257
+ }
258
+ if (ast.tag === 'if') {
259
+ const c = this.evalNode(ast.condition, table);
260
+ return c.ifElse(() => this.evalNode(ast.positive, table), () => this.evalNode(ast.negative, table));
261
+ }
262
+ if (ast.tag === 'dot') {
263
+ const rec = this.evalNode(ast.receiver, table);
264
+ if (rec === undefined || rec === null) {
265
+ throw new Error(`Cannot access attribute .${ast.ident.t.text} of ${rec}`);
266
+ }
267
+ return rec.access(ast.ident.t.text, (callee, args) => this.call(callee, args));
268
+ }
269
+ if (ast.tag === 'indexAccess') {
270
+ const rec = this.evalNode(ast.receiver, table);
271
+ const index = this.evalNode(ast.index, table);
272
+ return rec.access(index, (callee, args) => this.call(callee, args));
273
+ }
274
+ (0, should_never_happen_1.shouldNeverHappen)(ast);
275
+ }
276
+ call(callee, argValues) {
277
+ return callee.call(argValues, (names, body, lambdaTable) => {
278
+ if (names.length > argValues.length) {
279
+ throw new Error(`Arg list length mismatch: expected ${names.length} but got ${argValues.length}`);
280
+ }
281
+ const newTable = names.reduce((t, n, i) => new SymbolFrame(n, { destination: argValues[i] }, t), lambdaTable);
282
+ return this.evalNode(body, newTable);
283
+ });
284
+ }
285
+ }
286
+ exports.Runtime = Runtime;
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQWdEO0FBQ2hELHVEQUFrRDtBQUNsRCx1Q0FBa0M7QUFFbEMsK0RBQXlEO0FBQ3pELCtDQUFnQztBQUNoQywyQ0FBc0M7QUFFdEMsbUNBQStCO0FBTS9CLE1BQU0sV0FBVztJQUNmLFlBQXFCLE1BQWMsRUFBVyxXQUF3QixFQUFtQixPQUFvQjtRQUF4RixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtJQUFHLENBQUM7SUFFakgsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQTtZQUN4QyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO2FBQ3pEO1lBQ0QsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBQSxnQkFBTSxFQUFDLHFCQUFxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN2RyxPQUFPLEdBQUcsQ0FBQTtJQUNa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QUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUMxQjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUMzQjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUMxQjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN2QjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN0QjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN0QjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNyQjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN0QjtZQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNyQjtZQUVELElB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
@@ -0,0 +1,22 @@
1
+ import { Location } from './location';
2
+ import { SourceCode } from './source-code';
3
+ export interface Token {
4
+ readonly text: string;
5
+ readonly location: Location;
6
+ }
7
+ export declare class Scanner {
8
+ private readonly sourceCode;
9
+ private offset;
10
+ constructor(sourceCode: SourceCode);
11
+ get sourceRef(): string;
12
+ private curr;
13
+ private eatWhitespace;
14
+ eof(): boolean;
15
+ synopsis(): {
16
+ position: number;
17
+ lookingAt: string;
18
+ };
19
+ consume(r: RegExp | string, eatWhitespace?: boolean): Token;
20
+ consumeIf(r: RegExp | string, eatWhitespace?: boolean): Token | undefined;
21
+ private match;
22
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Scanner = void 0;
4
+ class Scanner {
5
+ constructor(sourceCode) {
6
+ this.sourceCode = sourceCode;
7
+ this.offset = 0;
8
+ this.eatWhitespace();
9
+ }
10
+ get sourceRef() {
11
+ return this.sourceCode.sourceRef(this.sourceCode.expandToEndOfLine({ offset: this.offset }));
12
+ }
13
+ curr() {
14
+ return this.sourceCode.input.substring(this.offset);
15
+ }
16
+ eatWhitespace() {
17
+ while (true) {
18
+ if (this.consumeIf(/\s*/, false)) {
19
+ continue;
20
+ }
21
+ if (this.consumeIf('//', false)) {
22
+ this.consume(/[^\n]*/, false);
23
+ continue;
24
+ }
25
+ return;
26
+ }
27
+ }
28
+ eof() {
29
+ return this.offset >= this.sourceCode.input.length;
30
+ }
31
+ synopsis() {
32
+ const c = this.curr();
33
+ let lookingAt = c.substring(0, 20);
34
+ if (lookingAt.length !== c.length) {
35
+ lookingAt = `${lookingAt}...`;
36
+ }
37
+ return {
38
+ position: this.offset,
39
+ lookingAt,
40
+ };
41
+ }
42
+ consume(r, eatWhitespace = true) {
43
+ const text = this.match(r);
44
+ if (text === undefined) {
45
+ throw new Error(`Expected ${r} ${this.sourceRef}`);
46
+ }
47
+ const offset = this.offset;
48
+ this.offset += text.length;
49
+ if (eatWhitespace) {
50
+ this.eatWhitespace();
51
+ }
52
+ return { location: { offset }, text };
53
+ }
54
+ consumeIf(r, eatWhitespace = true) {
55
+ const ret = this.match(r);
56
+ if (!ret) {
57
+ return undefined;
58
+ }
59
+ return this.consume(r, eatWhitespace);
60
+ }
61
+ match(r) {
62
+ if (typeof r === 'string') {
63
+ if (this.curr().startsWith(r)) {
64
+ return r;
65
+ }
66
+ return undefined;
67
+ }
68
+ const m = this.curr().match(r);
69
+ if (m && m.index === 0) {
70
+ return m[0];
71
+ }
72
+ return undefined;
73
+ }
74
+ }
75
+ exports.Scanner = Scanner;
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLE1BQWEsT0FBTztJQUdsQixZQUE2QixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRjNDLFdBQU0sR0FBRyxDQUFDLENBQUE7UUFHaEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRU8sSUFBSTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLElBQUksRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLFNBQVE7YUFDVDtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUM3QixTQUFRO2FBQ1Q7WUFFRCxPQUFNO1NBQ1A7SUFDSCxDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDcEQsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDckIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDakMsU0FBUyxHQUFHLEdBQUcsU0FBUyxLQUFLLENBQUE7U0FDOUI7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3JCLFNBQVM7U0FDVixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFrQixFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7U0FDbkQ7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBQzFCLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUUxQixJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDckI7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFrQixFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sU0FBUyxDQUFBO1NBQ2pCO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLENBQWtCO1FBQzlCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxDQUFDLENBQUE7YUFDVDtZQUNELE9BQU8sU0FBUyxDQUFBO1NBQ2pCO1FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNaO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztDQUNGO0FBckZELDBCQXFGQyJ9
@@ -0,0 +1 @@
1
+ export declare function shouldNeverHappen(n: never): never;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldNeverHappen = void 0;
4
+ function shouldNeverHappen(n) {
5
+ // This following line never gets executed. It is here just to make the compiler happy.
6
+ throw new Error(`This should never happen ${n}`);
7
+ }
8
+ exports.shouldNeverHappen = shouldNeverHappen;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkLW5ldmVyLWhhcHBlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaG91bGQtbmV2ZXItaGFwcGVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLGlCQUFpQixDQUFDLENBQVE7SUFDeEMsdUZBQXVGO0lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDbEQsQ0FBQztBQUhELDhDQUdDIn0=
@@ -0,0 +1,19 @@
1
+ import { AstNode } from './ast-node';
2
+ import { Location, Location2d, Span } from './location';
3
+ export declare class SourceCode {
4
+ readonly input: string;
5
+ constructor(input: string);
6
+ formatTrace(trace: AstNode[]): string;
7
+ sourceRefOfLocation(loc: Location): string;
8
+ sourceRef(span: Span | undefined): string;
9
+ formatSpan(span: Span): string;
10
+ private interestingPart;
11
+ resolveLocation(loc: Location): Location2d;
12
+ /**
13
+ * Returns a span starting a the given input location that runs all the way to the end of the line. Specifically, the
14
+ * returned span's `.to` location will point at the character (in the same line as `loc`) that is immediately before
15
+ * the terminating newline character.
16
+ */
17
+ expandToEndOfLine(loc: Location): Span;
18
+ lineAt(loc: Location): string;
19
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SourceCode = void 0;
4
+ const ast_node_1 = require("./ast-node");
5
+ class SourceCode {
6
+ constructor(input) {
7
+ this.input = input;
8
+ }
9
+ formatTrace(trace) {
10
+ const spacer = ' ';
11
+ const formatted = trace
12
+ .map(ast => this.sourceRef((0, ast_node_1.span)(ast)))
13
+ .reverse()
14
+ .join(`\n${spacer}`);
15
+ return `${spacer}${formatted}`;
16
+ }
17
+ sourceRefOfLocation(loc) {
18
+ return this.sourceRef(this.expandToEndOfLine(loc));
19
+ }
20
+ sourceRef(span) {
21
+ if (!span) {
22
+ return `at <unknown location>`;
23
+ }
24
+ return `at ${this.formatSpan(span)} ${this.interestingPart(span)}`;
25
+ }
26
+ formatSpan(span) {
27
+ const f = this.resolveLocation(span.from);
28
+ const t = this.resolveLocation(span.to);
29
+ if (f.line === t.line) {
30
+ return `(${f.line + 1}:${f.col + 1}..${t.col + 1})`;
31
+ }
32
+ return `(${f.line + 1}:${f.col + 1}..${t.line + 1}:${t.col + 1})`;
33
+ }
34
+ interestingPart(span) {
35
+ const f = this.resolveLocation(span.from);
36
+ const t = this.resolveLocation(span.to);
37
+ const strip = (s) => s.replace(/^[\n]*/, '').replace(/[\n]*$/, '');
38
+ const limit = 80;
39
+ const lineAtFrom = this.lineAt(span.from);
40
+ if (f.line !== t.line) {
41
+ return `${strip(lineAtFrom).substring(0, limit)}...`;
42
+ }
43
+ const stripped = strip(lineAtFrom.substring(f.col, t.col + 1));
44
+ if (stripped.length <= limit) {
45
+ return stripped;
46
+ }
47
+ return `${stripped.substring(0, limit)}...`;
48
+ }
49
+ resolveLocation(loc) {
50
+ const prefix = this.input.slice(0, loc.offset);
51
+ let line = 0;
52
+ for (let i = 0; i < prefix.length; ++i) {
53
+ const ch = prefix[i];
54
+ if (ch === '\n') {
55
+ line += 1;
56
+ }
57
+ }
58
+ let col = 0;
59
+ for (let i = prefix.length - 1; i >= 0; --i, ++col) {
60
+ const ch = prefix[i];
61
+ if (ch === '\n') {
62
+ break;
63
+ }
64
+ }
65
+ return { line, col };
66
+ }
67
+ /**
68
+ * Returns a span starting a the given input location that runs all the way to the end of the line. Specifically, the
69
+ * returned span's `.to` location will point at the character (in the same line as `loc`) that is immediately before
70
+ * the terminating newline character.
71
+ */
72
+ expandToEndOfLine(loc) {
73
+ let endOfLine = this.input.indexOf('\n', loc.offset);
74
+ if (endOfLine < 0) {
75
+ endOfLine = this.input.length - 1;
76
+ }
77
+ return { from: loc, to: { offset: endOfLine } };
78
+ }
79
+ lineAt(loc) {
80
+ const precedingNewline = this.input.lastIndexOf('\n', loc.offset);
81
+ // add a + 1 to skip over the '\n' character (it is not part of the line). Also works if precedingNewLine is -1 (no
82
+ // preceding newline exists)
83
+ const startOfLine = precedingNewline + 1;
84
+ const endOfLine = this.expandToEndOfLine(loc).to;
85
+ const ret = this.input.substring(startOfLine, endOfLine.offset + 1);
86
+ return ret;
87
+ }
88
+ }
89
+ exports.SourceCode = SourceCode;
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc291cmNlLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTBDO0FBRzFDLE1BQWEsVUFBVTtJQUNyQixZQUFxQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUFHLENBQUM7SUFFdEMsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQTtRQUVuQixNQUFNLFNBQVMsR0FBRyxLQUFLO2FBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSxlQUFJLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNyQyxPQUFPLEVBQUU7YUFDVCxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ3RCLE9BQU8sR0FBRyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQWE7UUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxTQUFTLENBQUMsSUFBc0I7UUFDOUIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sdUJBQXVCLENBQUE7U0FDL0I7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7SUFDcEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUs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
@@ -0,0 +1,11 @@
1
+ import { AstNode } from './ast-node';
2
+ export declare type T = {
3
+ ast: AstNode;
4
+ next: T;
5
+ } | undefined;
6
+ export declare function push(ast: AstNode, s: T): {
7
+ ast: AstNode;
8
+ next: T;
9
+ };
10
+ export declare function pop(s: T): T;
11
+ export declare function empty(): T;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.empty = exports.pop = exports.push = void 0;
4
+ function push(ast, s) {
5
+ return { ast, next: s };
6
+ }
7
+ exports.push = push;
8
+ function pop(s) {
9
+ if (typeof s === 'undefined') {
10
+ throw new Error(`Cannot pop from an empty stack`);
11
+ }
12
+ return s.next;
13
+ }
14
+ exports.pop = pop;
15
+ function empty() {
16
+ return undefined;
17
+ }
18
+ exports.empty = empty;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsU0FBZ0IsSUFBSSxDQUFDLEdBQVksRUFBRSxDQUFJO0lBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFBO0FBQ3pCLENBQUM7QUFGRCxvQkFFQztBQUVELFNBQWdCLEdBQUcsQ0FBQyxDQUFJO0lBQ3RCLElBQUksT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtLQUNsRDtJQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNmLENBQUM7QUFORCxrQkFNQztBQUVELFNBQWdCLEtBQUs7SUFDbkIsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUZELHNCQUVDIn0=
@@ -0,0 +1 @@
1
+ export declare function switchOn<G, K extends string>(selector: K, cases: Record<K, () => G>): G;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.switchOn = void 0;
4
+ function switchOn(selector, cases) {
5
+ const f = cases[selector];
6
+ return f();
7
+ }
8
+ exports.switchOn = switchOn;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N3aXRjaC1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixRQUFRLENBQXNCLFFBQVcsRUFBRSxLQUF5QjtJQUNsRixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekIsT0FBTyxDQUFDLEVBQUUsQ0FBQTtBQUNaLENBQUM7QUFIRCw0QkFHQyJ9
@@ -0,0 +1,5 @@
1
+ import { Value } from './value';
2
+ export interface SymbolTable {
3
+ lookup(sym: string): Value;
4
+ export(): Record<string, unknown>;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9sLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bWJvbC10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=