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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/check.js +105 -16
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "fez-lisp",
3
3
  "description": "Lisp interpreted & compiled to JavaScript",
4
4
  "author": "AT290690",
5
- "version": "1.5.35",
5
+ "version": "1.5.36",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: APPLY }
53
+ [STATS]: {
54
+ type: APPLY,
55
+ retried: 0,
56
+ [ARGS_COUNT]: VARIADIC,
57
+ [RETURNS]: APPLY
58
+ }
51
59
  },
52
60
  [DEBUG.ASSERT]: {
53
- [STATS]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
61
+ [STATS]: {
62
+ type: APPLY,
63
+ retried: 0,
64
+ [ARGS_COUNT]: VARIADIC,
65
+ [RETURNS]: UNKNOWN
66
+ }
54
67
  },
55
68
  [DEBUG.SIGNATURE]: {
56
- [STATS]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
85
+ [STATS]: {
86
+ type: APPLY,
87
+ retried: 0,
88
+ [ARGS_COUNT]: VARIADIC,
89
+ [RETURNS]: UNKNOWN
90
+ }
63
91
  },
64
92
  [KEYWORDS.BLOCK]: {
65
- [STATS]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: APPLY }
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: UNKNOWN }
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]: { type: APPLY, [ARGS_COUNT]: VARIADIC, [RETURNS]: APPLY }
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
- !env[name].retried
580
+ env[name][STATS].retried < DEFINITON_RETRY_COUNT
496
581
  ) {
497
- env[name].retried = true
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]] = { [STATS]: { type: UNKNOWN } }
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
- !retry.retried &&
824
+ retry[STATS].retried < RETRY_COUNT &&
737
825
  args[i][STATS].type === UNKNOWN
738
826
  ) {
739
- retry.retried = true
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
- !env[rest[i][0][VALUE]].retried
862
+ env[rest[i][0][VALUE]][STATS].retried <
863
+ RETRY_COUNT
775
864
  ) {
776
- env[rest[i][0][VALUE]].retried = true
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))