fez-lisp 1.5.22 → 1.5.23
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/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/check.js +44 -67
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -21,12 +21,6 @@ const RETURNS = 'returns'
|
|
21
21
|
const SCOPE_NAME = '__scope__'
|
22
22
|
const SUBTYPE = 'subtype'
|
23
23
|
const PREDICATE = 3
|
24
|
-
const xor = (A, B) => {
|
25
|
-
const out = new Set()
|
26
|
-
B.forEach((element) => !A.has(element) && out.add(element))
|
27
|
-
A.forEach((element) => !B.has(element) && out.add(element))
|
28
|
-
return out
|
29
|
-
}
|
30
24
|
const toTypeNames = (type) => {
|
31
25
|
switch (type) {
|
32
26
|
case APPLY:
|
@@ -48,7 +42,7 @@ export const typeCheck = (ast) => {
|
|
48
42
|
[UNKNOWN, PLACEHOLDER],
|
49
43
|
[APPLY, PLACEHOLDER]
|
50
44
|
],
|
51
|
-
[ARGS_COUNT]:
|
45
|
+
[ARGS_COUNT]: 2,
|
52
46
|
[RETURNS]: UNKNOWN
|
53
47
|
}
|
54
48
|
},
|
@@ -83,7 +77,7 @@ export const typeCheck = (ast) => {
|
|
83
77
|
[KEYWORDS.LOOP]: {
|
84
78
|
[STATS]: {
|
85
79
|
type: APPLY,
|
86
|
-
[ARGS_COUNT]:
|
80
|
+
[ARGS_COUNT]: 2,
|
87
81
|
[ARGS]: [
|
88
82
|
[ATOM, PLACEHOLDER, PREDICATE],
|
89
83
|
[UNKNOWN, PLACEHOLDER]
|
@@ -95,7 +89,7 @@ export const typeCheck = (ast) => {
|
|
95
89
|
[KEYWORDS.ADDITION]: {
|
96
90
|
[STATS]: {
|
97
91
|
type: APPLY,
|
98
|
-
[ARGS_COUNT]:
|
92
|
+
[ARGS_COUNT]: 2,
|
99
93
|
[ARGS]: [
|
100
94
|
[ATOM, PLACEHOLDER],
|
101
95
|
[ATOM, PLACEHOLDER]
|
@@ -106,7 +100,7 @@ export const typeCheck = (ast) => {
|
|
106
100
|
[KEYWORDS.MULTIPLICATION]: {
|
107
101
|
[STATS]: {
|
108
102
|
type: APPLY,
|
109
|
-
[ARGS_COUNT]:
|
103
|
+
[ARGS_COUNT]: 2,
|
110
104
|
[ARGS]: [
|
111
105
|
[ATOM, PLACEHOLDER],
|
112
106
|
[ATOM, PLACEHOLDER]
|
@@ -117,7 +111,7 @@ export const typeCheck = (ast) => {
|
|
117
111
|
[KEYWORDS.SUBTRACTION]: {
|
118
112
|
[STATS]: {
|
119
113
|
type: APPLY,
|
120
|
-
[ARGS_COUNT]:
|
114
|
+
[ARGS_COUNT]: 2,
|
121
115
|
[ARGS]: [
|
122
116
|
[ATOM, PLACEHOLDER],
|
123
117
|
[ATOM, PLACEHOLDER]
|
@@ -128,7 +122,7 @@ export const typeCheck = (ast) => {
|
|
128
122
|
[KEYWORDS.DIVISION]: {
|
129
123
|
[STATS]: {
|
130
124
|
type: APPLY,
|
131
|
-
[ARGS_COUNT]:
|
125
|
+
[ARGS_COUNT]: 2,
|
132
126
|
[ARGS]: [
|
133
127
|
[ATOM, PLACEHOLDER],
|
134
128
|
[ATOM, PLACEHOLDER]
|
@@ -139,7 +133,7 @@ export const typeCheck = (ast) => {
|
|
139
133
|
[KEYWORDS.REMAINDER_OF_DIVISION]: {
|
140
134
|
[STATS]: {
|
141
135
|
type: APPLY,
|
142
|
-
[ARGS_COUNT]:
|
136
|
+
[ARGS_COUNT]: 2,
|
143
137
|
[ARGS]: [
|
144
138
|
[ATOM, PLACEHOLDER],
|
145
139
|
[ATOM, PLACEHOLDER]
|
@@ -150,7 +144,7 @@ export const typeCheck = (ast) => {
|
|
150
144
|
[KEYWORDS.BITWISE_AND]: {
|
151
145
|
[STATS]: {
|
152
146
|
type: APPLY,
|
153
|
-
[ARGS_COUNT]:
|
147
|
+
[ARGS_COUNT]: 2,
|
154
148
|
[ARGS]: [
|
155
149
|
[ATOM, PLACEHOLDER],
|
156
150
|
[ATOM, PLACEHOLDER]
|
@@ -161,7 +155,7 @@ export const typeCheck = (ast) => {
|
|
161
155
|
[KEYWORDS.BITWISE_NOT]: {
|
162
156
|
[STATS]: {
|
163
157
|
type: APPLY,
|
164
|
-
[ARGS_COUNT]:
|
158
|
+
[ARGS_COUNT]: 1,
|
165
159
|
[ARGS]: [[ATOM, PLACEHOLDER]],
|
166
160
|
[RETURNS]: ATOM
|
167
161
|
}
|
@@ -169,7 +163,7 @@ export const typeCheck = (ast) => {
|
|
169
163
|
[KEYWORDS.BITWISE_OR]: {
|
170
164
|
[STATS]: {
|
171
165
|
type: APPLY,
|
172
|
-
[ARGS_COUNT]:
|
166
|
+
[ARGS_COUNT]: 2,
|
173
167
|
[ARGS]: [
|
174
168
|
[ATOM, PLACEHOLDER],
|
175
169
|
[ATOM, PLACEHOLDER]
|
@@ -180,7 +174,7 @@ export const typeCheck = (ast) => {
|
|
180
174
|
[KEYWORDS.BITWISE_XOR]: {
|
181
175
|
[STATS]: {
|
182
176
|
type: APPLY,
|
183
|
-
[ARGS_COUNT]:
|
177
|
+
[ARGS_COUNT]: 2,
|
184
178
|
[ARGS]: [
|
185
179
|
[ATOM, PLACEHOLDER],
|
186
180
|
[ATOM, PLACEHOLDER]
|
@@ -191,7 +185,7 @@ export const typeCheck = (ast) => {
|
|
191
185
|
[KEYWORDS.BITWISE_LEFT_SHIFT]: {
|
192
186
|
[STATS]: {
|
193
187
|
type: APPLY,
|
194
|
-
[ARGS_COUNT]:
|
188
|
+
[ARGS_COUNT]: 2,
|
195
189
|
[ARGS]: [
|
196
190
|
[ATOM, PLACEHOLDER],
|
197
191
|
[ATOM, PLACEHOLDER]
|
@@ -202,7 +196,7 @@ export const typeCheck = (ast) => {
|
|
202
196
|
[KEYWORDS.BITWISE_RIGHT_SHIFT]: {
|
203
197
|
[STATS]: {
|
204
198
|
type: APPLY,
|
205
|
-
[ARGS_COUNT]:
|
199
|
+
[ARGS_COUNT]: 2,
|
206
200
|
[ARGS]: [
|
207
201
|
[ATOM, PLACEHOLDER],
|
208
202
|
[ATOM, PLACEHOLDER]
|
@@ -213,7 +207,7 @@ export const typeCheck = (ast) => {
|
|
213
207
|
[KEYWORDS.GET_ARRAY]: {
|
214
208
|
[STATS]: {
|
215
209
|
type: APPLY,
|
216
|
-
[ARGS_COUNT]:
|
210
|
+
[ARGS_COUNT]: 2,
|
217
211
|
[ARGS]: [
|
218
212
|
[UNKNOWN, PLACEHOLDER],
|
219
213
|
[ATOM, PLACEHOLDER]
|
@@ -224,7 +218,7 @@ export const typeCheck = (ast) => {
|
|
224
218
|
[KEYWORDS.SET_ARRAY]: {
|
225
219
|
[STATS]: {
|
226
220
|
type: APPLY,
|
227
|
-
[ARGS_COUNT]:
|
221
|
+
[ARGS_COUNT]: 3,
|
228
222
|
[ARGS]: [
|
229
223
|
[UNKNOWN, PLACEHOLDER],
|
230
224
|
[ATOM, PLACEHOLDER],
|
@@ -236,7 +230,7 @@ export const typeCheck = (ast) => {
|
|
236
230
|
[KEYWORDS.POP_ARRAY]: {
|
237
231
|
[STATS]: {
|
238
232
|
type: APPLY,
|
239
|
-
[ARGS_COUNT]:
|
233
|
+
[ARGS_COUNT]: 1,
|
240
234
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
241
235
|
[RETURNS]: UNKNOWN
|
242
236
|
}
|
@@ -244,7 +238,7 @@ export const typeCheck = (ast) => {
|
|
244
238
|
[KEYWORDS.ARRAY_LENGTH]: {
|
245
239
|
[STATS]: {
|
246
240
|
type: APPLY,
|
247
|
-
[ARGS_COUNT]:
|
241
|
+
[ARGS_COUNT]: 1,
|
248
242
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
249
243
|
[RETURNS]: ATOM
|
250
244
|
}
|
@@ -252,7 +246,7 @@ export const typeCheck = (ast) => {
|
|
252
246
|
[KEYWORDS.IF]: {
|
253
247
|
[STATS]: {
|
254
248
|
type: APPLY,
|
255
|
-
[ARGS_COUNT]:
|
249
|
+
[ARGS_COUNT]: 3,
|
256
250
|
[ARGS]: [
|
257
251
|
[ATOM, PLACEHOLDER, PREDICATE],
|
258
252
|
[UNKNOWN, PLACEHOLDER],
|
@@ -264,7 +258,7 @@ export const typeCheck = (ast) => {
|
|
264
258
|
[KEYWORDS.NOT]: {
|
265
259
|
[STATS]: {
|
266
260
|
type: APPLY,
|
267
|
-
[ARGS_COUNT]:
|
261
|
+
[ARGS_COUNT]: 1,
|
268
262
|
[ARGS]: [[ATOM, PLACEHOLDER, PREDICATE]],
|
269
263
|
[RETURNS]: ATOM,
|
270
264
|
[SUBTYPE]: PREDICATE
|
@@ -273,7 +267,7 @@ export const typeCheck = (ast) => {
|
|
273
267
|
[KEYWORDS.EQUAL]: {
|
274
268
|
[STATS]: {
|
275
269
|
type: APPLY,
|
276
|
-
[ARGS_COUNT]:
|
270
|
+
[ARGS_COUNT]: 2,
|
277
271
|
[ARGS]: [
|
278
272
|
[ATOM, PLACEHOLDER],
|
279
273
|
[ATOM, PLACEHOLDER]
|
@@ -285,7 +279,7 @@ export const typeCheck = (ast) => {
|
|
285
279
|
[KEYWORDS.LESS_THAN]: {
|
286
280
|
[STATS]: {
|
287
281
|
type: APPLY,
|
288
|
-
[ARGS_COUNT]:
|
282
|
+
[ARGS_COUNT]: 2,
|
289
283
|
[ARGS]: [
|
290
284
|
[ATOM, PLACEHOLDER],
|
291
285
|
[ATOM, PLACEHOLDER]
|
@@ -297,7 +291,7 @@ export const typeCheck = (ast) => {
|
|
297
291
|
[KEYWORDS.GREATHER_THAN]: {
|
298
292
|
[STATS]: {
|
299
293
|
type: APPLY,
|
300
|
-
[ARGS_COUNT]:
|
294
|
+
[ARGS_COUNT]: 2,
|
301
295
|
[ARGS]: [
|
302
296
|
[ATOM, PLACEHOLDER],
|
303
297
|
[ATOM, PLACEHOLDER]
|
@@ -309,7 +303,7 @@ export const typeCheck = (ast) => {
|
|
309
303
|
[KEYWORDS.GREATHER_THAN_OR_EQUAL]: {
|
310
304
|
[STATS]: {
|
311
305
|
type: APPLY,
|
312
|
-
[ARGS_COUNT]:
|
306
|
+
[ARGS_COUNT]: 2,
|
313
307
|
[ARGS]: [
|
314
308
|
[ATOM, PLACEHOLDER],
|
315
309
|
[ATOM, PLACEHOLDER]
|
@@ -321,7 +315,7 @@ export const typeCheck = (ast) => {
|
|
321
315
|
[KEYWORDS.LESS_THAN_OR_EQUAL]: {
|
322
316
|
[STATS]: {
|
323
317
|
type: APPLY,
|
324
|
-
[ARGS_COUNT]:
|
318
|
+
[ARGS_COUNT]: 2,
|
325
319
|
[ARGS]: [
|
326
320
|
[ATOM, PLACEHOLDER],
|
327
321
|
[ATOM, PLACEHOLDER]
|
@@ -333,7 +327,7 @@ export const typeCheck = (ast) => {
|
|
333
327
|
[KEYWORDS.AND]: {
|
334
328
|
[STATS]: {
|
335
329
|
type: APPLY,
|
336
|
-
[ARGS_COUNT]:
|
330
|
+
[ARGS_COUNT]: 2,
|
337
331
|
[ARGS]: [
|
338
332
|
[ATOM, PLACEHOLDER, PREDICATE],
|
339
333
|
[ATOM, PLACEHOLDER, PREDICATE]
|
@@ -345,7 +339,7 @@ export const typeCheck = (ast) => {
|
|
345
339
|
[KEYWORDS.OR]: {
|
346
340
|
[STATS]: {
|
347
341
|
type: APPLY,
|
348
|
-
[ARGS_COUNT]:
|
342
|
+
[ARGS_COUNT]: 2,
|
349
343
|
[ARGS]: [
|
350
344
|
[ATOM, PLACEHOLDER, PREDICATE],
|
351
345
|
[ATOM, PLACEHOLDER, PREDICATE]
|
@@ -357,7 +351,7 @@ export const typeCheck = (ast) => {
|
|
357
351
|
[KEYWORDS.IS_ATOM]: {
|
358
352
|
[STATS]: {
|
359
353
|
type: APPLY,
|
360
|
-
[ARGS_COUNT]:
|
354
|
+
[ARGS_COUNT]: 1,
|
361
355
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
362
356
|
[RETURNS]: ATOM,
|
363
357
|
[SUBTYPE]: PREDICATE
|
@@ -366,7 +360,7 @@ export const typeCheck = (ast) => {
|
|
366
360
|
[KEYWORDS.IS_LAMBDA]: {
|
367
361
|
[STATS]: {
|
368
362
|
type: APPLY,
|
369
|
-
[ARGS_COUNT]:
|
363
|
+
[ARGS_COUNT]: 1,
|
370
364
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
371
365
|
[RETURNS]: ATOM,
|
372
366
|
[SUBTYPE]: PREDICATE
|
@@ -375,7 +369,7 @@ export const typeCheck = (ast) => {
|
|
375
369
|
[KEYWORDS.ERROR]: {
|
376
370
|
[STATS]: {
|
377
371
|
type: APPLY,
|
378
|
-
[ARGS_COUNT]:
|
372
|
+
[ARGS_COUNT]: 1,
|
379
373
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
380
374
|
[RETURNS]: UNKNOWN
|
381
375
|
}
|
@@ -419,7 +413,7 @@ export const typeCheck = (ast) => {
|
|
419
413
|
env[name] = {
|
420
414
|
[STATS]: {
|
421
415
|
type: APPLY,
|
422
|
-
[ARGS_COUNT]:
|
416
|
+
[ARGS_COUNT]: n - 2,
|
423
417
|
[ARGS]: []
|
424
418
|
}
|
425
419
|
}
|
@@ -494,18 +488,15 @@ export const typeCheck = (ast) => {
|
|
494
488
|
else if (
|
495
489
|
env[first[VALUE]][STATS].type === APPLY &&
|
496
490
|
env[first[VALUE]][STATS][ARGS_COUNT] !== VARIADIC &&
|
497
|
-
|
491
|
+
env[first[VALUE]][STATS][ARGS_COUNT] !== rest.length
|
498
492
|
) {
|
499
|
-
const argCount = [...env[first[VALUE]][STATS][ARGS_COUNT]]
|
500
493
|
errorStack.set(
|
501
494
|
key,
|
502
495
|
`Incorrect number of arguments for (${
|
503
496
|
first[VALUE]
|
504
|
-
}). Expected ${
|
505
|
-
|
506
|
-
|
507
|
-
: `(= ${argCount[0]})`
|
508
|
-
} but got ${rest.length} (${stringifyArgs(exp)})`
|
497
|
+
}). Expected (= ${
|
498
|
+
env[first[VALUE]][STATS][ARGS_COUNT]
|
499
|
+
}) but got ${rest.length} (${stringifyArgs(exp)})`
|
509
500
|
)
|
510
501
|
} else {
|
511
502
|
const isSpecial = SPECIAL_FORMS_SET.has(first[VALUE])
|
@@ -514,9 +505,7 @@ export const typeCheck = (ast) => {
|
|
514
505
|
if (!env[first[VALUE]][STATS][ARGS_COUNT]) {
|
515
506
|
env[first[VALUE]][STATS][RETURNS] = UNKNOWN
|
516
507
|
env[first[VALUE]][STATS].type = APPLY
|
517
|
-
env[first[VALUE]][STATS][ARGS_COUNT] =
|
518
|
-
rest.length
|
519
|
-
])
|
508
|
+
env[first[VALUE]][STATS][ARGS_COUNT] = rest.length
|
520
509
|
}
|
521
510
|
}
|
522
511
|
// also type of arg
|
@@ -532,24 +521,17 @@ export const typeCheck = (ast) => {
|
|
532
521
|
args[i][STATS][ARGS_COUNT] !== VARIADIC &&
|
533
522
|
env[rest[i][VALUE]][STATS][ARGS_COUNT] !== VARIADIC
|
534
523
|
) {
|
535
|
-
const argCount = [...args[i][STATS][ARGS_COUNT]]
|
536
524
|
if (
|
537
|
-
|
538
|
-
|
539
|
-
env[rest[i][VALUE]][STATS][ARGS_COUNT]
|
540
|
-
).size !== 0
|
525
|
+
args[i][STATS][ARGS_COUNT] !==
|
526
|
+
env[rest[i][VALUE]][STATS][ARGS_COUNT]
|
541
527
|
) {
|
542
528
|
errorStack.set(
|
543
529
|
key,
|
544
530
|
`Incorrect number of arguments for (${
|
545
531
|
first[VALUE]
|
546
|
-
}). Expected ${
|
547
|
-
|
548
|
-
|
549
|
-
.map((x) => `(= ${x})`)
|
550
|
-
.join(' ')})`
|
551
|
-
: `(= ${argCount[0]})`
|
552
|
-
} but got ${rest.length} (${stringifyArgs(exp)})`
|
532
|
+
}). Expected (= ${
|
533
|
+
args[i][STATS][ARGS_COUNT]
|
534
|
+
}) but got ${rest.length} (${stringifyArgs(exp)})`
|
553
535
|
)
|
554
536
|
}
|
555
537
|
} else if (
|
@@ -559,19 +541,14 @@ export const typeCheck = (ast) => {
|
|
559
541
|
rest[i][0][TYPE] === APPLY &&
|
560
542
|
rest[i][0][VALUE] === KEYWORDS.ANONYMOUS_FUNCTION
|
561
543
|
) {
|
562
|
-
|
563
|
-
if (!args[i][STATS][ARGS_COUNT].has(rest[i].length - 2))
|
544
|
+
if (args[i][STATS][ARGS_COUNT] !== rest[i].length - 2)
|
564
545
|
errorStack.set(
|
565
546
|
key,
|
566
547
|
`Incorrect number of arguments for (${
|
567
548
|
first[VALUE]
|
568
|
-
}). Expected ${
|
569
|
-
|
570
|
-
|
571
|
-
.map((x) => `(= ${x})`)
|
572
|
-
.join(' ')})`
|
573
|
-
: `(= ${argCount[0]})`
|
574
|
-
} but got ${rest.length} (${stringifyArgs(exp)})`
|
549
|
+
}). Expected (= ${
|
550
|
+
args[i][STATS][ARGS_COUNT]
|
551
|
+
}) but got ${rest.length} (${stringifyArgs(exp)})`
|
575
552
|
)
|
576
553
|
}
|
577
554
|
|