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.
- package/dist/src/ast-node.d.ts +85 -0
- package/dist/src/ast-node.js +114 -0
- package/dist/src/cdl.d.ts +33 -0
- package/dist/src/cdl.js +63 -0
- package/dist/src/extract-message.d.ts +1 -0
- package/dist/src/extract-message.js +10 -0
- package/dist/src/fail-me.d.ts +1 -0
- package/dist/src/fail-me.js +11 -0
- package/dist/src/find-array-method.d.ts +15 -0
- package/dist/src/find-array-method.js +104 -0
- package/dist/src/find-string-method.d.ts +2 -0
- package/dist/src/find-string-method.js +88 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +18 -0
- package/dist/src/location.d.ts +11 -0
- package/dist/src/location.js +3 -0
- package/dist/src/parser.d.ts +37 -0
- package/dist/src/parser.js +345 -0
- package/dist/src/result.d.ts +24 -0
- package/dist/src/result.js +29 -0
- package/dist/src/runtime.d.ts +25 -0
- package/dist/src/runtime.js +287 -0
- package/dist/src/scanner.d.ts +22 -0
- package/dist/src/scanner.js +76 -0
- package/dist/src/should-never-happen.d.ts +1 -0
- package/dist/src/should-never-happen.js +9 -0
- package/dist/src/source-code.d.ts +19 -0
- package/dist/src/source-code.js +90 -0
- package/dist/src/stack.d.ts +11 -0
- package/dist/src/stack.js +19 -0
- package/dist/src/switch-on.d.ts +1 -0
- package/dist/src/switch-on.js +9 -0
- package/dist/src/symbol-table.d.ts +5 -0
- package/dist/src/symbol-table.js +3 -0
- package/dist/src/value.d.ts +128 -0
- package/dist/src/value.js +634 -0
- package/dist/tests/cdl.spec.d.ts +1 -0
- package/dist/tests/cdl.spec.js +692 -0
- package/dist/tests/parser.spec.d.ts +1 -0
- package/dist/tests/parser.spec.js +39 -0
- package/dist/tests/value.spec.d.ts +1 -0
- package/dist/tests/value.spec.js +355 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/jest-output.json +1 -0
- package/package.json +17 -0
- package/src/ast-node.ts +205 -0
- package/src/cdl.ts +78 -0
- package/src/extract-message.ts +5 -0
- package/src/fail-me.ts +7 -0
- package/src/find-array-method.ts +115 -0
- package/src/find-string-method.ts +84 -0
- package/src/index.ts +1 -0
- package/src/location.ts +13 -0
- package/src/parser.ts +399 -0
- package/src/result.ts +45 -0
- package/src/runtime.ts +295 -0
- package/src/scanner.ts +94 -0
- package/src/should-never-happen.ts +4 -0
- package/src/source-code.ts +101 -0
- package/src/stack.ts +18 -0
- package/src/switch-on.ts +4 -0
- package/src/symbol-table.ts +6 -0
- package/src/value.ts +742 -0
- package/tests/cdl.spec.ts +755 -0
- package/tests/parser.spec.ts +14 -0
- package/tests/value.spec.ts +387 -0
- package/tsconfig.json +11 -0
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Value = void 0;
|
|
4
|
+
const ast_node_1 = require("./ast-node");
|
|
5
|
+
const fail_me_1 = require("./fail-me");
|
|
6
|
+
const find_array_method_1 = require("./find-array-method");
|
|
7
|
+
const find_string_method_1 = require("./find-string-method");
|
|
8
|
+
const should_never_happen_1 = require("./should-never-happen");
|
|
9
|
+
const switch_on_1 = require("./switch-on");
|
|
10
|
+
function inspectValue(u) {
|
|
11
|
+
return JSON.stringify(u);
|
|
12
|
+
}
|
|
13
|
+
const badType = (expected, ...moreExpected) => (_u, _actual, v) => {
|
|
14
|
+
if (moreExpected.length === 0) {
|
|
15
|
+
throw new Error(`value type error: expected ${expected} but found ${inspectValue(v)}`);
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`value type error: expected either ${moreExpected.join(', ')} or ${expected} but found ${inspectValue(v)}`);
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Allows the caller to "see" the native value held by a Value object. The caller supplies the `cases` object
|
|
21
|
+
* which maps a function for each possible Value tag. Returns the return value of the function associated with the tag
|
|
22
|
+
* of `v`.
|
|
23
|
+
*
|
|
24
|
+
* In the code we should perfer to use `select()` over this one as it provides better handling of `sink` values.
|
|
25
|
+
*
|
|
26
|
+
* @param v the Value object to look into
|
|
27
|
+
* @param cases an object which maps Tag values to functions
|
|
28
|
+
* @returns the return value of the function mapped to the tag of `v`
|
|
29
|
+
*/
|
|
30
|
+
function selectRaw(v, cases) {
|
|
31
|
+
const inner = v.inner;
|
|
32
|
+
if (inner.tag === 'arr') {
|
|
33
|
+
return cases.arr(inner.val, inner.tag, v);
|
|
34
|
+
}
|
|
35
|
+
if (inner.tag === 'bool') {
|
|
36
|
+
return cases.bool(inner.val, inner.tag, v);
|
|
37
|
+
}
|
|
38
|
+
if (inner.tag === 'foreign') {
|
|
39
|
+
return cases.foreign(inner.val, inner.tag, v);
|
|
40
|
+
}
|
|
41
|
+
if (inner.tag === 'lambda') {
|
|
42
|
+
return cases.lambda(inner.val, inner.tag, v);
|
|
43
|
+
}
|
|
44
|
+
if (inner.tag === 'num') {
|
|
45
|
+
return cases.num(inner.val, inner.tag, v);
|
|
46
|
+
}
|
|
47
|
+
if (inner.tag === 'obj') {
|
|
48
|
+
return cases.obj(inner.val, inner.tag, v);
|
|
49
|
+
}
|
|
50
|
+
if (inner.tag === 'sink') {
|
|
51
|
+
// For sink we provide a default behavior of throwing an exception. Yet, the caller is encouraged to explicitly
|
|
52
|
+
// provide a `sink` case as there is broader context at the caller's side which makes it possible to provide more
|
|
53
|
+
// meaningful error messages.
|
|
54
|
+
if (!cases.sink) {
|
|
55
|
+
throw new Error(`Cannot evaluate a sink value`);
|
|
56
|
+
}
|
|
57
|
+
return cases.sink(inner.val, inner.tag, v);
|
|
58
|
+
}
|
|
59
|
+
if (inner.tag === 'str') {
|
|
60
|
+
return cases.str(inner.val, inner.tag, v);
|
|
61
|
+
}
|
|
62
|
+
(0, should_never_happen_1.shouldNeverHappen)(inner);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Allows the caller to "see" the native value held by a Value object. The caller supplies the `cases` object
|
|
66
|
+
* which maps a function for each possible Value tag. Returns the return value of the function associated with the tag
|
|
67
|
+
* of `v`.
|
|
68
|
+
*
|
|
69
|
+
* if `select()` is invoked on sink value (i.e., `Value.sink()`) it returns the sink value itself. This realizes the
|
|
70
|
+
* behavior that an expression involving a sink value evaluates to sink.
|
|
71
|
+
*
|
|
72
|
+
* @param v the Value object to look into
|
|
73
|
+
* @param cases an object which maps Tag values to functions
|
|
74
|
+
* @returns the return value of the function mapped to the tag of `v`
|
|
75
|
+
*/
|
|
76
|
+
function select(v, cases) {
|
|
77
|
+
if (v.isSink()) {
|
|
78
|
+
return v;
|
|
79
|
+
}
|
|
80
|
+
return Value.from(selectRaw(v, cases));
|
|
81
|
+
}
|
|
82
|
+
class Value {
|
|
83
|
+
constructor(inner) {
|
|
84
|
+
this.inner = inner;
|
|
85
|
+
}
|
|
86
|
+
static bool(val) {
|
|
87
|
+
return new Value({ val, tag: 'bool' });
|
|
88
|
+
}
|
|
89
|
+
static num(val) {
|
|
90
|
+
return new Value({ val, tag: 'num' });
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Returns a Value which is essentially a "sink": (almost) every computation involving a sink evaluates to sink. A few
|
|
94
|
+
* quick examples: `5+sink`, `sink.x`, `sink()`, `Object.keys(sink)`, `if (sink) 4 else 8` all evaluate to `sink`. The
|
|
95
|
+
* raitonale is that once an expression evaluates to `sink` all expressions depending on it also evaluate to `sink`.
|
|
96
|
+
*
|
|
97
|
+
* There are however a few (intentional) exemptions:
|
|
98
|
+
* (i) a sink can be passed as an actual parameter in a function call. Hence `(fun (x,y) y)(sink, 5)` will evaluate
|
|
99
|
+
* to `5`.
|
|
100
|
+
* (ii) a sink can be compared with itself.
|
|
101
|
+
* (iii) in `if()` expressions, only one of the branches is evlauated (based on the condition's value). As a result,
|
|
102
|
+
* evluation of a sink-producing branch can be skipping. Specifically, `if (true) 5 else sink` evaluates to `5`.
|
|
103
|
+
* (iv) in `||` and `&&` expressions, the evaluation of the right hand side can be skipped. Specifically,
|
|
104
|
+
* `true || sink` evaluates to `true` and `false && sink` evaluates to `false`.
|
|
105
|
+
*/
|
|
106
|
+
static sink(span, trace, symbols) {
|
|
107
|
+
return new Value({
|
|
108
|
+
val: undefined,
|
|
109
|
+
tag: 'sink',
|
|
110
|
+
...(span ? { span } : {}),
|
|
111
|
+
...(trace ? { trace } : {}),
|
|
112
|
+
...(symbols ? { symbols } : {}),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
static str(val) {
|
|
116
|
+
return new Value({ val, tag: 'str' });
|
|
117
|
+
}
|
|
118
|
+
static arr(val) {
|
|
119
|
+
return new Value({ val, tag: 'arr' });
|
|
120
|
+
}
|
|
121
|
+
static obj(val) {
|
|
122
|
+
return new Value({ val, tag: 'obj' });
|
|
123
|
+
}
|
|
124
|
+
static lambda(ast, table) {
|
|
125
|
+
return new Value({ val: { ast, table }, tag: 'lambda' });
|
|
126
|
+
}
|
|
127
|
+
static foreign(f) {
|
|
128
|
+
return new Value({ tag: 'foreign', val: f });
|
|
129
|
+
}
|
|
130
|
+
isSink() {
|
|
131
|
+
return this.inner.tag === 'sink';
|
|
132
|
+
}
|
|
133
|
+
unwrap() {
|
|
134
|
+
return this.inner.val;
|
|
135
|
+
}
|
|
136
|
+
assertBool() {
|
|
137
|
+
const err = badType('bool');
|
|
138
|
+
return selectRaw(this, {
|
|
139
|
+
arr: err,
|
|
140
|
+
bool: a => a,
|
|
141
|
+
foreign: err,
|
|
142
|
+
lambda: err,
|
|
143
|
+
num: err,
|
|
144
|
+
obj: err,
|
|
145
|
+
sink: err,
|
|
146
|
+
str: err,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
assertNum() {
|
|
150
|
+
const err = badType('num');
|
|
151
|
+
return selectRaw(this, {
|
|
152
|
+
arr: err,
|
|
153
|
+
bool: err,
|
|
154
|
+
foreign: err,
|
|
155
|
+
lambda: err,
|
|
156
|
+
num: a => a,
|
|
157
|
+
obj: err,
|
|
158
|
+
sink: err,
|
|
159
|
+
str: err,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
assertStr() {
|
|
163
|
+
const err = badType('str');
|
|
164
|
+
return selectRaw(this, {
|
|
165
|
+
arr: err,
|
|
166
|
+
bool: err,
|
|
167
|
+
foreign: err,
|
|
168
|
+
lambda: err,
|
|
169
|
+
num: err,
|
|
170
|
+
obj: err,
|
|
171
|
+
sink: err,
|
|
172
|
+
str: a => a,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
assertArr() {
|
|
176
|
+
const err = badType('arr');
|
|
177
|
+
return selectRaw(this, {
|
|
178
|
+
arr: a => a,
|
|
179
|
+
bool: err,
|
|
180
|
+
foreign: err,
|
|
181
|
+
lambda: err,
|
|
182
|
+
num: err,
|
|
183
|
+
obj: err,
|
|
184
|
+
sink: err,
|
|
185
|
+
str: err,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
assertObj() {
|
|
189
|
+
const err = badType('obj');
|
|
190
|
+
return selectRaw(this, {
|
|
191
|
+
arr: err,
|
|
192
|
+
bool: err,
|
|
193
|
+
foreign: err,
|
|
194
|
+
lambda: err,
|
|
195
|
+
num: err,
|
|
196
|
+
obj: a => a,
|
|
197
|
+
sink: err,
|
|
198
|
+
str: err,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
assertLambda() {
|
|
202
|
+
const err = badType('lambda');
|
|
203
|
+
return selectRaw(this, {
|
|
204
|
+
arr: err,
|
|
205
|
+
bool: err,
|
|
206
|
+
foreign: err,
|
|
207
|
+
lambda: a => a,
|
|
208
|
+
num: err,
|
|
209
|
+
obj: err,
|
|
210
|
+
sink: err,
|
|
211
|
+
str: err,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
isLambda() {
|
|
215
|
+
return this.inner.tag === 'lambda';
|
|
216
|
+
}
|
|
217
|
+
ifElse(positive, negative) {
|
|
218
|
+
const err = badType('bool');
|
|
219
|
+
return select(this, {
|
|
220
|
+
arr: err,
|
|
221
|
+
bool: c => (c ? positive() : negative()),
|
|
222
|
+
foreign: err,
|
|
223
|
+
lambda: err,
|
|
224
|
+
num: err,
|
|
225
|
+
obj: err,
|
|
226
|
+
str: err,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
bindToSpan(span) {
|
|
230
|
+
const inner = this.inner;
|
|
231
|
+
if (inner.tag !== 'sink') {
|
|
232
|
+
throw new Error(`Not supported on type ${this.inner.tag}`);
|
|
233
|
+
}
|
|
234
|
+
return Value.sink(span, inner.trace, inner.symbols);
|
|
235
|
+
}
|
|
236
|
+
trace() {
|
|
237
|
+
const inner = this.inner;
|
|
238
|
+
if (inner.tag !== 'sink') {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
const ret = [];
|
|
242
|
+
for (let curr = inner.trace; curr !== undefined; curr = curr?.next) {
|
|
243
|
+
ret.push(curr.ast);
|
|
244
|
+
}
|
|
245
|
+
return ret.length === 0 ? undefined : ret;
|
|
246
|
+
}
|
|
247
|
+
symbols() {
|
|
248
|
+
const inner = this.inner;
|
|
249
|
+
if (inner.tag !== 'sink') {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
return inner.symbols;
|
|
253
|
+
}
|
|
254
|
+
span() {
|
|
255
|
+
const inner = this.inner;
|
|
256
|
+
if (inner.tag !== 'sink') {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
return inner.span;
|
|
260
|
+
}
|
|
261
|
+
or(that) {
|
|
262
|
+
const err = badType('bool');
|
|
263
|
+
return select(this, {
|
|
264
|
+
arr: err,
|
|
265
|
+
bool: lhs => lhs ||
|
|
266
|
+
select(that(), {
|
|
267
|
+
arr: err,
|
|
268
|
+
bool: rhs => rhs,
|
|
269
|
+
foreign: err,
|
|
270
|
+
lambda: err,
|
|
271
|
+
num: err,
|
|
272
|
+
obj: err,
|
|
273
|
+
str: err,
|
|
274
|
+
}),
|
|
275
|
+
foreign: err,
|
|
276
|
+
lambda: err,
|
|
277
|
+
num: err,
|
|
278
|
+
obj: err,
|
|
279
|
+
str: err,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
and(that) {
|
|
283
|
+
const err = badType('bool');
|
|
284
|
+
return select(this, {
|
|
285
|
+
arr: err,
|
|
286
|
+
bool: lhs => lhs &&
|
|
287
|
+
select(that(), {
|
|
288
|
+
arr: err,
|
|
289
|
+
bool: rhs => rhs,
|
|
290
|
+
foreign: err,
|
|
291
|
+
lambda: err,
|
|
292
|
+
num: err,
|
|
293
|
+
obj: err,
|
|
294
|
+
str: err,
|
|
295
|
+
}),
|
|
296
|
+
foreign: err,
|
|
297
|
+
lambda: err,
|
|
298
|
+
num: err,
|
|
299
|
+
obj: err,
|
|
300
|
+
str: err,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
unsink(that) {
|
|
304
|
+
if (this.isSink()) {
|
|
305
|
+
return that();
|
|
306
|
+
}
|
|
307
|
+
return this;
|
|
308
|
+
}
|
|
309
|
+
equalsTo(that) {
|
|
310
|
+
if (this.inner.tag !== that.inner.tag) {
|
|
311
|
+
return Value.bool(false);
|
|
312
|
+
}
|
|
313
|
+
// TODO(imaman): much better comparison is needed here
|
|
314
|
+
const b = JSON.stringify(this.inner.val) === JSON.stringify(that.inner.val);
|
|
315
|
+
return Value.bool(b);
|
|
316
|
+
}
|
|
317
|
+
not() {
|
|
318
|
+
const err = badType('bool');
|
|
319
|
+
return select(this, {
|
|
320
|
+
arr: err,
|
|
321
|
+
bool: lhs => !lhs,
|
|
322
|
+
foreign: err,
|
|
323
|
+
lambda: err,
|
|
324
|
+
num: err,
|
|
325
|
+
obj: err,
|
|
326
|
+
str: err,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
binaryNumericOperator(a, b, f) {
|
|
330
|
+
const err = badType('num');
|
|
331
|
+
return select(a, {
|
|
332
|
+
arr: err,
|
|
333
|
+
bool: err,
|
|
334
|
+
foreign: err,
|
|
335
|
+
lambda: err,
|
|
336
|
+
num: lhs => select(b, {
|
|
337
|
+
arr: err,
|
|
338
|
+
bool: err,
|
|
339
|
+
foreign: err,
|
|
340
|
+
lambda: err,
|
|
341
|
+
num: rhs => f(lhs, rhs),
|
|
342
|
+
obj: err,
|
|
343
|
+
str: err,
|
|
344
|
+
}),
|
|
345
|
+
obj: err,
|
|
346
|
+
str: err,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
plus(that) {
|
|
350
|
+
const errNum = badType('num');
|
|
351
|
+
return select(this, {
|
|
352
|
+
arr: errNum,
|
|
353
|
+
bool: errNum,
|
|
354
|
+
foreign: errNum,
|
|
355
|
+
lambda: errNum,
|
|
356
|
+
num: lhs => select(that, {
|
|
357
|
+
arr: errNum,
|
|
358
|
+
bool: errNum,
|
|
359
|
+
foreign: errNum,
|
|
360
|
+
lambda: errNum,
|
|
361
|
+
num: rhs => lhs + rhs,
|
|
362
|
+
obj: errNum,
|
|
363
|
+
str: errNum,
|
|
364
|
+
}),
|
|
365
|
+
obj: errNum,
|
|
366
|
+
str: lhs => select(that, {
|
|
367
|
+
arr: rhs => lhs + rhs,
|
|
368
|
+
bool: rhs => lhs + rhs,
|
|
369
|
+
foreign: rhs => lhs + rhs,
|
|
370
|
+
lambda: rhs => lhs + rhs,
|
|
371
|
+
num: rhs => lhs + rhs,
|
|
372
|
+
obj: rhs => lhs + rhs,
|
|
373
|
+
str: rhs => lhs + rhs,
|
|
374
|
+
}),
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
minus(that) {
|
|
378
|
+
return this.binaryNumericOperator(this, that, (a, b) => a - b);
|
|
379
|
+
}
|
|
380
|
+
times(that) {
|
|
381
|
+
return this.binaryNumericOperator(this, that, (a, b) => a * b);
|
|
382
|
+
}
|
|
383
|
+
power(that) {
|
|
384
|
+
return this.binaryNumericOperator(this, that, (a, b) => a ** b);
|
|
385
|
+
}
|
|
386
|
+
over(that) {
|
|
387
|
+
return this.binaryNumericOperator(this, that, (a, b) => a / b);
|
|
388
|
+
}
|
|
389
|
+
modulo(that) {
|
|
390
|
+
return this.binaryNumericOperator(this, that, (a, b) => a % b);
|
|
391
|
+
}
|
|
392
|
+
negate() {
|
|
393
|
+
return Value.num(0).minus(this);
|
|
394
|
+
}
|
|
395
|
+
isToZero(comparator) {
|
|
396
|
+
const err = badType('num');
|
|
397
|
+
return select(this, {
|
|
398
|
+
arr: err,
|
|
399
|
+
bool: err,
|
|
400
|
+
foreign: err,
|
|
401
|
+
lambda: err,
|
|
402
|
+
num: n => (0, switch_on_1.switchOn)(comparator, {
|
|
403
|
+
'<': () => Value.bool(n < 0),
|
|
404
|
+
'<=': () => Value.bool(n <= 0),
|
|
405
|
+
'==': () => Value.bool(n == 0),
|
|
406
|
+
'!=': () => Value.bool(n !== 0),
|
|
407
|
+
'>=': () => Value.bool(n >= 0),
|
|
408
|
+
'>': () => Value.bool(n > 0),
|
|
409
|
+
}),
|
|
410
|
+
obj: err,
|
|
411
|
+
str: err,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
isTrue() {
|
|
415
|
+
const err = badType('bool');
|
|
416
|
+
return selectRaw(this, {
|
|
417
|
+
arr: err,
|
|
418
|
+
bool: b => b,
|
|
419
|
+
foreign: err,
|
|
420
|
+
lambda: err,
|
|
421
|
+
num: err,
|
|
422
|
+
obj: err,
|
|
423
|
+
sink: err,
|
|
424
|
+
str: err,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
isZero() {
|
|
428
|
+
const err = badType('num');
|
|
429
|
+
return selectRaw(this, {
|
|
430
|
+
arr: err,
|
|
431
|
+
bool: err,
|
|
432
|
+
foreign: err,
|
|
433
|
+
lambda: err,
|
|
434
|
+
num: n => n === 0,
|
|
435
|
+
obj: err,
|
|
436
|
+
sink: err,
|
|
437
|
+
str: err,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Determines the order beteween `this` and the given argument (`that`). The behavior of this method is dictated by
|
|
442
|
+
* the following principles:
|
|
443
|
+
*
|
|
444
|
+
* (i) if a < b then b >= a (i.e., it provides a consistent answer regardless of the whether `this` is `a`
|
|
445
|
+
* and `that` is `b` or vice versa)
|
|
446
|
+
* (ii) ordering two values of different type result in runtime error.
|
|
447
|
+
* (iii) orderingg a value with itself evaluates to `0`
|
|
448
|
+
*
|
|
449
|
+
* Principles (i) and (iii) realizes the intuitive behavior of comparisons. (ii) realizes the idea that
|
|
450
|
+
* "one cannot compare oranges and apples". This is essentially a design decision. We could have gone with defining
|
|
451
|
+
* some order between types (the tag of a Value object), but we feel that a saner approach is to say "we do not know
|
|
452
|
+
* how to sort an array containing numbers and booleans".
|
|
453
|
+
*
|
|
454
|
+
* IMPORTANT: these principles overpower other principles. In parituclar, the principles that "an expression with
|
|
455
|
+
* sink evaluates to sink" is trumped by comparison principle (ii)
|
|
456
|
+
*
|
|
457
|
+
* @param that
|
|
458
|
+
* @returns
|
|
459
|
+
*/
|
|
460
|
+
order(that) {
|
|
461
|
+
const err = (_u, t) => {
|
|
462
|
+
throw new Error(`Cannot compare a value of type ${t}`);
|
|
463
|
+
};
|
|
464
|
+
if (this.inner.tag !== that.inner.tag) {
|
|
465
|
+
throw new Error(`Cannot compare a ${this.inner.tag} value with a value of another type (${that.inner.tag})`);
|
|
466
|
+
}
|
|
467
|
+
return select(this, {
|
|
468
|
+
arr: err,
|
|
469
|
+
bool: lhs => {
|
|
470
|
+
const rhs = that.assertBool();
|
|
471
|
+
return lhs && !rhs ? 1 : !lhs && rhs ? -1 : 0;
|
|
472
|
+
},
|
|
473
|
+
foreign: err,
|
|
474
|
+
lambda: err,
|
|
475
|
+
num: () => {
|
|
476
|
+
const d = this.minus(that).assertNum();
|
|
477
|
+
return d < 0 ? -1 : d > 0 ? 1 : 0;
|
|
478
|
+
},
|
|
479
|
+
obj: err,
|
|
480
|
+
str: a => {
|
|
481
|
+
const rhs = that.assertStr();
|
|
482
|
+
const d = a.localeCompare(rhs);
|
|
483
|
+
return d < 0 ? -1 : d > 0 ? 1 : 0;
|
|
484
|
+
},
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
static toStringOrNumber(input) {
|
|
488
|
+
if (typeof input === 'string') {
|
|
489
|
+
return input;
|
|
490
|
+
}
|
|
491
|
+
const err = badType('str', 'num');
|
|
492
|
+
return selectRaw(input, {
|
|
493
|
+
arr: err,
|
|
494
|
+
bool: err,
|
|
495
|
+
foreign: err,
|
|
496
|
+
lambda: err,
|
|
497
|
+
num: a => a,
|
|
498
|
+
obj: err,
|
|
499
|
+
sink: err,
|
|
500
|
+
str: a => a,
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
access(indexValue, callEvaluator) {
|
|
504
|
+
const err = badType('obj', 'str', 'arr');
|
|
505
|
+
return select(this, {
|
|
506
|
+
arr: a => {
|
|
507
|
+
if (typeof indexValue === 'string') {
|
|
508
|
+
return (0, find_array_method_1.findArrayMethod)(a, indexValue, callEvaluator);
|
|
509
|
+
}
|
|
510
|
+
const i = indexValue.assertNum();
|
|
511
|
+
if (i < 0 || i > a.length) {
|
|
512
|
+
throw new Error(`array index (${i}) is out of bounds (length = ${a.length})`);
|
|
513
|
+
}
|
|
514
|
+
return a[i];
|
|
515
|
+
},
|
|
516
|
+
bool: err,
|
|
517
|
+
foreign: err,
|
|
518
|
+
lambda: err,
|
|
519
|
+
num: err,
|
|
520
|
+
obj: o => o[Value.toStringOrNumber(indexValue)],
|
|
521
|
+
str: s => (0, find_string_method_1.findStringMethod)(s, indexValue),
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
call(args, evaluator) {
|
|
525
|
+
const err = badType('lambda', 'foreign');
|
|
526
|
+
return select(this, {
|
|
527
|
+
arr: err,
|
|
528
|
+
bool: err,
|
|
529
|
+
foreign: f => from(f(...args)),
|
|
530
|
+
lambda: l => evaluator(l.ast.formalArgs.map(a => a.t.text), l.ast.body, l.table),
|
|
531
|
+
num: err,
|
|
532
|
+
obj: err,
|
|
533
|
+
str: err,
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
keys() {
|
|
537
|
+
const err = badType('obj');
|
|
538
|
+
return select(this, {
|
|
539
|
+
arr: err,
|
|
540
|
+
bool: err,
|
|
541
|
+
foreign: err,
|
|
542
|
+
lambda: err,
|
|
543
|
+
num: err,
|
|
544
|
+
obj: a => Object.keys(a),
|
|
545
|
+
str: err,
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
entries() {
|
|
549
|
+
const err = badType('obj');
|
|
550
|
+
return select(this, {
|
|
551
|
+
arr: err,
|
|
552
|
+
bool: err,
|
|
553
|
+
foreign: err,
|
|
554
|
+
lambda: err,
|
|
555
|
+
num: err,
|
|
556
|
+
obj: a => Object.entries(a),
|
|
557
|
+
str: err,
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
fromEntries() {
|
|
561
|
+
const err = badType('arr');
|
|
562
|
+
return select(this, {
|
|
563
|
+
arr: a => Object.fromEntries(a.map(x => selectRaw(x, {
|
|
564
|
+
arr: pair => {
|
|
565
|
+
pair.length === 2 || (0, fail_me_1.failMe)(`each entry must be a [key, value] pair`);
|
|
566
|
+
return [pair[0].assertStr(), pair[1]];
|
|
567
|
+
},
|
|
568
|
+
bool: err,
|
|
569
|
+
foreign: err,
|
|
570
|
+
lambda: err,
|
|
571
|
+
num: err,
|
|
572
|
+
obj: err,
|
|
573
|
+
sink: err,
|
|
574
|
+
str: err,
|
|
575
|
+
}))),
|
|
576
|
+
bool: err,
|
|
577
|
+
foreign: err,
|
|
578
|
+
lambda: err,
|
|
579
|
+
num: err,
|
|
580
|
+
obj: err,
|
|
581
|
+
str: err,
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
toString() {
|
|
585
|
+
return this.inner.val?.toString() ?? 'sink';
|
|
586
|
+
}
|
|
587
|
+
toJSON() {
|
|
588
|
+
const copy = (v) => {
|
|
589
|
+
return selectRaw(v, {
|
|
590
|
+
arr: a => a.map(x => copy(x)),
|
|
591
|
+
bool: a => a,
|
|
592
|
+
foreign: a => a.toString(),
|
|
593
|
+
lambda: a => (0, ast_node_1.show)(a.ast),
|
|
594
|
+
num: a => a,
|
|
595
|
+
obj: a => Object.fromEntries(Object.entries(a).map(([k, x]) => [k, copy(x)])),
|
|
596
|
+
sink: () => undefined,
|
|
597
|
+
str: a => a,
|
|
598
|
+
});
|
|
599
|
+
};
|
|
600
|
+
return copy(this);
|
|
601
|
+
}
|
|
602
|
+
export() {
|
|
603
|
+
return this.toJSON();
|
|
604
|
+
}
|
|
605
|
+
static from(u) {
|
|
606
|
+
return from(u);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
exports.Value = Value;
|
|
610
|
+
function from(u) {
|
|
611
|
+
if (u instanceof Value) {
|
|
612
|
+
return u;
|
|
613
|
+
}
|
|
614
|
+
if (typeof u === 'boolean') {
|
|
615
|
+
return Value.bool(u);
|
|
616
|
+
}
|
|
617
|
+
if (typeof u === 'number') {
|
|
618
|
+
return Value.num(u);
|
|
619
|
+
}
|
|
620
|
+
if (typeof u === 'string') {
|
|
621
|
+
return Value.str(u);
|
|
622
|
+
}
|
|
623
|
+
if (Array.isArray(u)) {
|
|
624
|
+
return Value.arr(u.map(curr => from(curr)));
|
|
625
|
+
}
|
|
626
|
+
if (typeof u === 'undefined') {
|
|
627
|
+
return Value.sink();
|
|
628
|
+
}
|
|
629
|
+
if (u && typeof u === 'object') {
|
|
630
|
+
return Value.obj(Object.fromEntries(Object.entries(u).map(([k, v]) => [k, from(v)])));
|
|
631
|
+
}
|
|
632
|
+
throw new Error(`cannot convert ${JSON.stringify(u)} to Value`);
|
|
633
|
+
}
|
|
634
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQWtEO0FBQ2xELHVDQUFrQztBQUNsQywyREFBb0U7QUFDcEUsNkRBQXVEO0FBRXZELCtEQUF5RDtBQUV6RCwyQ0FBc0M7QUFrQ3RDLFNBQVMsWUFBWSxDQUFDLENBQVU7SUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxNQUFNLE9BQU8sR0FDWCxDQUFDLFFBQWEsRUFBRSxHQUFHLFlBQW1CLEVBQUUsRUFBRSxDQUMxQyxDQUFDLEVBQVcsRUFBRSxPQUFZLEVBQUUsQ0FBUSxFQUFFLEVBQUU7SUFDdEMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixRQUFRLGNBQWMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUN2RjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IscUNBQXFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxjQUFjLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMzRyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsU0FBUyxDQUFJLENBQVEsRUFBRSxLQUFrQjtJQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3JCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7UUFDdkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtLQUMxQztJQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7UUFDeEIsT0FB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|