fez-lisp 1.5.35 → 1.5.36
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/package.json +1 -1
- package/src/check.js +105 -16
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -21,6 +21,8 @@ const RETURNS = 'returns'
|
|
21
21
|
const SCOPE_NAME = '__scope__'
|
22
22
|
const SUBTYPE = 'subtype'
|
23
23
|
const PREDICATE = 3
|
24
|
+
const RETRY_COUNT = 1
|
25
|
+
const DEFINITON_RETRY_COUNT = 1
|
24
26
|
const toTypeNames = (type) => {
|
25
27
|
switch (type) {
|
26
28
|
case APPLY:
|
@@ -38,6 +40,7 @@ export const typeCheck = (ast) => {
|
|
38
40
|
[DEBUG.LOG]: {
|
39
41
|
[STATS]: {
|
40
42
|
type: APPLY,
|
43
|
+
retried: 0,
|
41
44
|
[ARGS]: [
|
42
45
|
[UNKNOWN, PLACEHOLDER],
|
43
46
|
[APPLY, PLACEHOLDER]
|
@@ -47,35 +50,81 @@ export const typeCheck = (ast) => {
|
|
47
50
|
}
|
48
51
|
},
|
49
52
|
[DEBUG.STRING]: {
|
50
|
-
[STATS]: {
|
53
|
+
[STATS]: {
|
54
|
+
type: APPLY,
|
55
|
+
retried: 0,
|
56
|
+
[ARGS_COUNT]: VARIADIC,
|
57
|
+
[RETURNS]: APPLY
|
58
|
+
}
|
51
59
|
},
|
52
60
|
[DEBUG.ASSERT]: {
|
53
|
-
[STATS]: {
|
61
|
+
[STATS]: {
|
62
|
+
type: APPLY,
|
63
|
+
retried: 0,
|
64
|
+
[ARGS_COUNT]: VARIADIC,
|
65
|
+
[RETURNS]: UNKNOWN
|
66
|
+
}
|
54
67
|
},
|
55
68
|
[DEBUG.SIGNATURE]: {
|
56
|
-
[STATS]: {
|
69
|
+
[STATS]: {
|
70
|
+
type: APPLY,
|
71
|
+
retried: 0,
|
72
|
+
[ARGS_COUNT]: VARIADIC,
|
73
|
+
[RETURNS]: UNKNOWN
|
74
|
+
}
|
57
75
|
},
|
58
76
|
[DEBUG.LIST_THEMES]: {
|
59
|
-
[STATS]: {
|
77
|
+
[STATS]: {
|
78
|
+
type: APPLY,
|
79
|
+
retried: 0,
|
80
|
+
[ARGS_COUNT]: VARIADIC,
|
81
|
+
[RETURNS]: UNKNOWN
|
82
|
+
}
|
60
83
|
},
|
61
84
|
[DEBUG.SET_THEME]: {
|
62
|
-
[STATS]: {
|
85
|
+
[STATS]: {
|
86
|
+
type: APPLY,
|
87
|
+
retried: 0,
|
88
|
+
[ARGS_COUNT]: VARIADIC,
|
89
|
+
[RETURNS]: UNKNOWN
|
90
|
+
}
|
63
91
|
},
|
64
92
|
[KEYWORDS.BLOCK]: {
|
65
|
-
[STATS]: {
|
93
|
+
[STATS]: {
|
94
|
+
type: APPLY,
|
95
|
+
retried: 0,
|
96
|
+
[ARGS_COUNT]: VARIADIC,
|
97
|
+
[RETURNS]: UNKNOWN
|
98
|
+
}
|
66
99
|
},
|
67
100
|
[KEYWORDS.ANONYMOUS_FUNCTION]: {
|
68
|
-
[STATS]: {
|
101
|
+
[STATS]: {
|
102
|
+
type: APPLY,
|
103
|
+
retried: 0,
|
104
|
+
[ARGS_COUNT]: VARIADIC,
|
105
|
+
[RETURNS]: APPLY
|
106
|
+
}
|
69
107
|
},
|
70
108
|
[KEYWORDS.CALL_FUNCTION]: {
|
71
|
-
[STATS]: {
|
109
|
+
[STATS]: {
|
110
|
+
type: APPLY,
|
111
|
+
retried: 0,
|
112
|
+
[ARGS_COUNT]: VARIADIC,
|
113
|
+
[RETURNS]: UNKNOWN
|
114
|
+
}
|
72
115
|
},
|
73
116
|
[KEYWORDS.CREATE_ARRAY]: {
|
74
|
-
[STATS]: {
|
117
|
+
[STATS]: {
|
118
|
+
type: APPLY,
|
119
|
+
retried: 0,
|
120
|
+
[ARGS_COUNT]: VARIADIC,
|
121
|
+
[RETURNS]: APPLY
|
122
|
+
}
|
75
123
|
},
|
76
124
|
[KEYWORDS.LOOP]: {
|
77
125
|
[STATS]: {
|
78
126
|
type: APPLY,
|
127
|
+
retried: 0,
|
79
128
|
[ARGS_COUNT]: 2,
|
80
129
|
[ARGS]: [
|
81
130
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -88,6 +137,7 @@ export const typeCheck = (ast) => {
|
|
88
137
|
[KEYWORDS.ADDITION]: {
|
89
138
|
[STATS]: {
|
90
139
|
type: APPLY,
|
140
|
+
retried: 0,
|
91
141
|
[ARGS_COUNT]: 2,
|
92
142
|
[ARGS]: [
|
93
143
|
[ATOM, PLACEHOLDER],
|
@@ -99,6 +149,7 @@ export const typeCheck = (ast) => {
|
|
99
149
|
[KEYWORDS.MULTIPLICATION]: {
|
100
150
|
[STATS]: {
|
101
151
|
type: APPLY,
|
152
|
+
retried: 0,
|
102
153
|
[ARGS_COUNT]: 2,
|
103
154
|
[ARGS]: [
|
104
155
|
[ATOM, PLACEHOLDER],
|
@@ -110,6 +161,7 @@ export const typeCheck = (ast) => {
|
|
110
161
|
[KEYWORDS.SUBTRACTION]: {
|
111
162
|
[STATS]: {
|
112
163
|
type: APPLY,
|
164
|
+
retried: 0,
|
113
165
|
[ARGS_COUNT]: 2,
|
114
166
|
[ARGS]: [
|
115
167
|
[ATOM, PLACEHOLDER],
|
@@ -121,6 +173,7 @@ export const typeCheck = (ast) => {
|
|
121
173
|
[KEYWORDS.DIVISION]: {
|
122
174
|
[STATS]: {
|
123
175
|
type: APPLY,
|
176
|
+
retried: 0,
|
124
177
|
[ARGS_COUNT]: 2,
|
125
178
|
[ARGS]: [
|
126
179
|
[ATOM, PLACEHOLDER],
|
@@ -132,6 +185,7 @@ export const typeCheck = (ast) => {
|
|
132
185
|
[KEYWORDS.REMAINDER_OF_DIVISION]: {
|
133
186
|
[STATS]: {
|
134
187
|
type: APPLY,
|
188
|
+
retried: 0,
|
135
189
|
[ARGS_COUNT]: 2,
|
136
190
|
[ARGS]: [
|
137
191
|
[ATOM, PLACEHOLDER],
|
@@ -143,6 +197,7 @@ export const typeCheck = (ast) => {
|
|
143
197
|
[KEYWORDS.BITWISE_AND]: {
|
144
198
|
[STATS]: {
|
145
199
|
type: APPLY,
|
200
|
+
retried: 0,
|
146
201
|
[ARGS_COUNT]: 2,
|
147
202
|
[ARGS]: [
|
148
203
|
[ATOM, PLACEHOLDER],
|
@@ -154,6 +209,7 @@ export const typeCheck = (ast) => {
|
|
154
209
|
[KEYWORDS.BITWISE_NOT]: {
|
155
210
|
[STATS]: {
|
156
211
|
type: APPLY,
|
212
|
+
retried: 0,
|
157
213
|
[ARGS_COUNT]: 1,
|
158
214
|
[ARGS]: [[ATOM, PLACEHOLDER]],
|
159
215
|
[RETURNS]: ATOM
|
@@ -162,6 +218,7 @@ export const typeCheck = (ast) => {
|
|
162
218
|
[KEYWORDS.BITWISE_OR]: {
|
163
219
|
[STATS]: {
|
164
220
|
type: APPLY,
|
221
|
+
retried: 0,
|
165
222
|
[ARGS_COUNT]: 2,
|
166
223
|
[ARGS]: [
|
167
224
|
[ATOM, PLACEHOLDER],
|
@@ -173,6 +230,7 @@ export const typeCheck = (ast) => {
|
|
173
230
|
[KEYWORDS.BITWISE_XOR]: {
|
174
231
|
[STATS]: {
|
175
232
|
type: APPLY,
|
233
|
+
retried: 0,
|
176
234
|
[ARGS_COUNT]: 2,
|
177
235
|
[ARGS]: [
|
178
236
|
[ATOM, PLACEHOLDER],
|
@@ -184,6 +242,7 @@ export const typeCheck = (ast) => {
|
|
184
242
|
[KEYWORDS.BITWISE_LEFT_SHIFT]: {
|
185
243
|
[STATS]: {
|
186
244
|
type: APPLY,
|
245
|
+
retried: 0,
|
187
246
|
[ARGS_COUNT]: 2,
|
188
247
|
[ARGS]: [
|
189
248
|
[ATOM, PLACEHOLDER],
|
@@ -195,6 +254,7 @@ export const typeCheck = (ast) => {
|
|
195
254
|
[KEYWORDS.BITWISE_RIGHT_SHIFT]: {
|
196
255
|
[STATS]: {
|
197
256
|
type: APPLY,
|
257
|
+
retried: 0,
|
198
258
|
[ARGS_COUNT]: 2,
|
199
259
|
[ARGS]: [
|
200
260
|
[ATOM, PLACEHOLDER],
|
@@ -206,6 +266,7 @@ export const typeCheck = (ast) => {
|
|
206
266
|
[KEYWORDS.GET_ARRAY]: {
|
207
267
|
[STATS]: {
|
208
268
|
type: APPLY,
|
269
|
+
retried: 0,
|
209
270
|
[ARGS_COUNT]: 2,
|
210
271
|
[ARGS]: [
|
211
272
|
[UNKNOWN, PLACEHOLDER],
|
@@ -217,6 +278,7 @@ export const typeCheck = (ast) => {
|
|
217
278
|
[KEYWORDS.SET_ARRAY]: {
|
218
279
|
[STATS]: {
|
219
280
|
type: APPLY,
|
281
|
+
retried: 0,
|
220
282
|
[ARGS_COUNT]: 3,
|
221
283
|
[ARGS]: [
|
222
284
|
[UNKNOWN, PLACEHOLDER],
|
@@ -229,6 +291,7 @@ export const typeCheck = (ast) => {
|
|
229
291
|
[KEYWORDS.POP_ARRAY]: {
|
230
292
|
[STATS]: {
|
231
293
|
type: APPLY,
|
294
|
+
retried: 0,
|
232
295
|
[ARGS_COUNT]: 1,
|
233
296
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
234
297
|
[RETURNS]: UNKNOWN
|
@@ -237,6 +300,7 @@ export const typeCheck = (ast) => {
|
|
237
300
|
[KEYWORDS.ARRAY_LENGTH]: {
|
238
301
|
[STATS]: {
|
239
302
|
type: APPLY,
|
303
|
+
retried: 0,
|
240
304
|
[ARGS_COUNT]: 1,
|
241
305
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
242
306
|
[RETURNS]: ATOM
|
@@ -245,6 +309,7 @@ export const typeCheck = (ast) => {
|
|
245
309
|
[KEYWORDS.IF]: {
|
246
310
|
[STATS]: {
|
247
311
|
type: APPLY,
|
312
|
+
retried: 0,
|
248
313
|
[ARGS_COUNT]: 3,
|
249
314
|
[ARGS]: [
|
250
315
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -257,6 +322,7 @@ export const typeCheck = (ast) => {
|
|
257
322
|
[KEYWORDS.NOT]: {
|
258
323
|
[STATS]: {
|
259
324
|
type: APPLY,
|
325
|
+
retried: 0,
|
260
326
|
[ARGS_COUNT]: 1,
|
261
327
|
[ARGS]: [[ATOM, PLACEHOLDER, PREDICATE]],
|
262
328
|
[RETURNS]: ATOM,
|
@@ -266,6 +332,7 @@ export const typeCheck = (ast) => {
|
|
266
332
|
[KEYWORDS.EQUAL]: {
|
267
333
|
[STATS]: {
|
268
334
|
type: APPLY,
|
335
|
+
retried: 0,
|
269
336
|
[ARGS_COUNT]: 2,
|
270
337
|
[ARGS]: [
|
271
338
|
[ATOM, PLACEHOLDER],
|
@@ -278,6 +345,7 @@ export const typeCheck = (ast) => {
|
|
278
345
|
[KEYWORDS.LESS_THAN]: {
|
279
346
|
[STATS]: {
|
280
347
|
type: APPLY,
|
348
|
+
retried: 0,
|
281
349
|
[ARGS_COUNT]: 2,
|
282
350
|
[ARGS]: [
|
283
351
|
[ATOM, PLACEHOLDER],
|
@@ -290,6 +358,7 @@ export const typeCheck = (ast) => {
|
|
290
358
|
[KEYWORDS.GREATHER_THAN]: {
|
291
359
|
[STATS]: {
|
292
360
|
type: APPLY,
|
361
|
+
retried: 0,
|
293
362
|
[ARGS_COUNT]: 2,
|
294
363
|
[ARGS]: [
|
295
364
|
[ATOM, PLACEHOLDER],
|
@@ -302,6 +371,7 @@ export const typeCheck = (ast) => {
|
|
302
371
|
[KEYWORDS.GREATHER_THAN_OR_EQUAL]: {
|
303
372
|
[STATS]: {
|
304
373
|
type: APPLY,
|
374
|
+
retried: 0,
|
305
375
|
[ARGS_COUNT]: 2,
|
306
376
|
[ARGS]: [
|
307
377
|
[ATOM, PLACEHOLDER],
|
@@ -314,6 +384,7 @@ export const typeCheck = (ast) => {
|
|
314
384
|
[KEYWORDS.LESS_THAN_OR_EQUAL]: {
|
315
385
|
[STATS]: {
|
316
386
|
type: APPLY,
|
387
|
+
retried: 0,
|
317
388
|
[ARGS_COUNT]: 2,
|
318
389
|
[ARGS]: [
|
319
390
|
[ATOM, PLACEHOLDER],
|
@@ -326,6 +397,7 @@ export const typeCheck = (ast) => {
|
|
326
397
|
[KEYWORDS.AND]: {
|
327
398
|
[STATS]: {
|
328
399
|
type: APPLY,
|
400
|
+
retried: 0,
|
329
401
|
[ARGS_COUNT]: 2,
|
330
402
|
[ARGS]: [
|
331
403
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -338,6 +410,7 @@ export const typeCheck = (ast) => {
|
|
338
410
|
[KEYWORDS.OR]: {
|
339
411
|
[STATS]: {
|
340
412
|
type: APPLY,
|
413
|
+
retried: 0,
|
341
414
|
[ARGS_COUNT]: 2,
|
342
415
|
[ARGS]: [
|
343
416
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -350,6 +423,7 @@ export const typeCheck = (ast) => {
|
|
350
423
|
[KEYWORDS.IS_ATOM]: {
|
351
424
|
[STATS]: {
|
352
425
|
type: APPLY,
|
426
|
+
retried: 0,
|
353
427
|
[ARGS_COUNT]: 1,
|
354
428
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
355
429
|
[RETURNS]: ATOM,
|
@@ -359,6 +433,7 @@ export const typeCheck = (ast) => {
|
|
359
433
|
[KEYWORDS.IS_LAMBDA]: {
|
360
434
|
[STATS]: {
|
361
435
|
type: APPLY,
|
436
|
+
retried: 0,
|
362
437
|
[ARGS_COUNT]: 1,
|
363
438
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
364
439
|
[RETURNS]: ATOM,
|
@@ -368,6 +443,7 @@ export const typeCheck = (ast) => {
|
|
368
443
|
[KEYWORDS.ERROR]: {
|
369
444
|
[STATS]: {
|
370
445
|
type: APPLY,
|
446
|
+
retried: 0,
|
371
447
|
[ARGS_COUNT]: 1,
|
372
448
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
373
449
|
[RETURNS]: UNKNOWN
|
@@ -440,6 +516,7 @@ export const typeCheck = (ast) => {
|
|
440
516
|
env[name] = {
|
441
517
|
[STATS]: {
|
442
518
|
type: APPLY,
|
519
|
+
retried: 0,
|
443
520
|
[ARGS_COUNT]: n - 2,
|
444
521
|
[ARGS]: []
|
445
522
|
}
|
@@ -488,13 +565,21 @@ export const typeCheck = (ast) => {
|
|
488
565
|
}
|
489
566
|
}
|
490
567
|
}
|
568
|
+
// if (
|
569
|
+
// env[name][STATS][RETURNS] === UNKNOWN &&
|
570
|
+
// env[name][STATS].retried < RETRY_COUNT
|
571
|
+
// ) {
|
572
|
+
// env[name][STATS].retried += 1
|
573
|
+
// console.log(name, env[name][STATS])
|
574
|
+
// checkReturnType()
|
575
|
+
// }
|
491
576
|
}
|
492
577
|
checkReturnType()
|
493
578
|
if (
|
494
579
|
env[name][STATS][RETURNS] === UNKNOWN &&
|
495
|
-
|
580
|
+
env[name][STATS].retried < DEFINITON_RETRY_COUNT
|
496
581
|
) {
|
497
|
-
env[name].retried
|
582
|
+
env[name][STATS].retried += 1
|
498
583
|
stack.unshift(() => {
|
499
584
|
checkReturnType()
|
500
585
|
check(rest.at(-1), env, exp)
|
@@ -510,6 +595,7 @@ export const typeCheck = (ast) => {
|
|
510
595
|
else
|
511
596
|
env[name] = {
|
512
597
|
[STATS]: {
|
598
|
+
retried: 0,
|
513
599
|
type: isLeaf(rest.at(-1))
|
514
600
|
? rest.at(-1)[TYPE]
|
515
601
|
: env[rest.at(-1)[0]?.[VALUE]]?.[STATS]?.[
|
@@ -545,7 +631,9 @@ export const typeCheck = (ast) => {
|
|
545
631
|
.replace('.', 0)
|
546
632
|
}
|
547
633
|
for (const param of params) {
|
548
|
-
copy[param[VALUE]] = {
|
634
|
+
copy[param[VALUE]] = {
|
635
|
+
[STATS]: { type: UNKNOWN, retried: 0 }
|
636
|
+
}
|
549
637
|
if (env[copy[SCOPE_NAME]])
|
550
638
|
env[copy[SCOPE_NAME]][STATS][ARGS].push(copy[param[VALUE]])
|
551
639
|
}
|
@@ -733,10 +821,10 @@ export const typeCheck = (ast) => {
|
|
733
821
|
const retry = env[rest[i][VALUE]]
|
734
822
|
if (
|
735
823
|
retry &&
|
736
|
-
|
824
|
+
retry[STATS].retried < RETRY_COUNT &&
|
737
825
|
args[i][STATS].type === UNKNOWN
|
738
826
|
) {
|
739
|
-
retry.retried
|
827
|
+
retry[STATS].retried += 1
|
740
828
|
stack.unshift(() => check(exp, env, scope))
|
741
829
|
}
|
742
830
|
// console.log(
|
@@ -771,9 +859,10 @@ export const typeCheck = (ast) => {
|
|
771
859
|
rest[i].length &&
|
772
860
|
env[rest[i][0][VALUE]] &&
|
773
861
|
args[i][STATS].type === UNKNOWN &&
|
774
|
-
|
862
|
+
env[rest[i][0][VALUE]][STATS].retried <
|
863
|
+
RETRY_COUNT
|
775
864
|
) {
|
776
|
-
env[rest[i][0][VALUE]].retried
|
865
|
+
env[rest[i][0][VALUE]][STATS].retried += 1
|
777
866
|
if (!scope[SCOPE_NAME])
|
778
867
|
scope[SCOPE_NAME] = scope[1][VALUE]
|
779
868
|
stack.unshift(() => check(exp, env, scope))
|