fez-lisp 1.5.64 → 1.5.66

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/src/check.js CHANGED
@@ -34,8 +34,7 @@ const TYPE_PROP = 'type'
34
34
  const SIGNATURE = 'name'
35
35
  const PREDICATE = 3
36
36
  const COLLECTION = 4
37
- const RETRY_COUNT = 1
38
- const DEFINITON_RETRY_COUNT = 1
37
+ const MAX_RETRY_DEFINITION = 1
39
38
  const toTypeNames = (type) => {
40
39
  switch (type) {
41
40
  case APPLY:
@@ -125,12 +124,12 @@ export const typeCheck = (ast) => {
125
124
  [STATS]: {
126
125
  [TYPE_PROP]: [APPLY],
127
126
  [SIGNATURE]: toTypeNames(APPLY),
128
- retried: RETRY_COUNT,
127
+ retried: Infinity,
129
128
  [ARGS_COUNT]: 1,
130
129
  [ARGUMENTS]: [
131
130
  {
132
131
  [STATS]: {
133
- retried: RETRY_COUNT,
132
+ retried: Infinity,
134
133
  [SIGNATURE]: PLACEHOLDER,
135
134
  [TYPE_PROP]: [UNKNOWN],
136
135
  [RETURNS]: [UNKNOWN],
@@ -147,12 +146,12 @@ export const typeCheck = (ast) => {
147
146
  [STATS]: {
148
147
  [TYPE_PROP]: [APPLY],
149
148
  [SIGNATURE]: toTypeNames(ATOM),
150
- retried: RETRY_COUNT,
149
+ retried: Infinity,
151
150
  [ARGS_COUNT]: 1,
152
151
  [ARGUMENTS]: [
153
152
  {
154
153
  [STATS]: {
155
- retried: RETRY_COUNT,
154
+ retried: Infinity,
156
155
  [SIGNATURE]: PLACEHOLDER,
157
156
  [TYPE_PROP]: [UNKNOWN],
158
157
  [RETURNS]: [UNKNOWN],
@@ -169,12 +168,12 @@ export const typeCheck = (ast) => {
169
168
  [STATS]: {
170
169
  [TYPE_PROP]: [APPLY, PREDICATE],
171
170
  [SIGNATURE]: toTypeNames(PREDICATE),
172
- retried: RETRY_COUNT,
171
+ retried: Infinity,
173
172
  [ARGS_COUNT]: 1,
174
173
  [ARGUMENTS]: [
175
174
  {
176
175
  [STATS]: {
177
- retried: RETRY_COUNT,
176
+ retried: Infinity,
178
177
  [SIGNATURE]: PLACEHOLDER,
179
178
  [TYPE_PROP]: [UNKNOWN],
180
179
  [RETURNS]: [UNKNOWN],
@@ -191,12 +190,12 @@ export const typeCheck = (ast) => {
191
190
  [STATS]: {
192
191
  [TYPE_PROP]: [APPLY],
193
192
  [SIGNATURE]: toTypeNames(COLLECTION),
194
- retried: RETRY_COUNT,
193
+ retried: Infinity,
195
194
  [ARGS_COUNT]: 1,
196
195
  [ARGUMENTS]: [
197
196
  {
198
197
  [STATS]: {
199
- retried: RETRY_COUNT,
198
+ retried: Infinity,
200
199
  [SIGNATURE]: PLACEHOLDER,
201
200
  [TYPE_PROP]: [UNKNOWN],
202
201
  [RETURNS]: [UNKNOWN],
@@ -213,12 +212,12 @@ export const typeCheck = (ast) => {
213
212
  [STATS]: {
214
213
  [TYPE_PROP]: [APPLY],
215
214
  [SIGNATURE]: toTypeNames(UNKNOWN),
216
- retried: RETRY_COUNT,
215
+ retried: Infinity,
217
216
  [ARGS_COUNT]: 1,
218
217
  [ARGUMENTS]: [
219
218
  {
220
219
  [STATS]: {
221
- retried: RETRY_COUNT,
220
+ retried: Infinity,
222
221
  [SIGNATURE]: PLACEHOLDER,
223
222
  [TYPE_PROP]: [UNKNOWN],
224
223
  [RETURNS]: [UNKNOWN],
@@ -235,7 +234,7 @@ export const typeCheck = (ast) => {
235
234
  [STATS]: {
236
235
  [TYPE_PROP]: [APPLY],
237
236
  [SIGNATURE]: DEBUG.LOG,
238
- retried: RETRY_COUNT,
237
+ retried: Infinity,
239
238
  [ARGUMENTS]: [
240
239
  {
241
240
  [STATS]: {
@@ -268,7 +267,7 @@ export const typeCheck = (ast) => {
268
267
  [STATS]: {
269
268
  [TYPE_PROP]: [APPLY],
270
269
  [SIGNATURE]: DEBUG.STRING,
271
- retried: RETRY_COUNT,
270
+ retried: Infinity,
272
271
  [ARGS_COUNT]: 1,
273
272
  [ARGUMENTS]: [
274
273
  {
@@ -290,7 +289,7 @@ export const typeCheck = (ast) => {
290
289
  [STATS]: {
291
290
  [TYPE_PROP]: [APPLY],
292
291
  [SIGNATURE]: DEBUG.ASSERT,
293
- retried: RETRY_COUNT,
292
+ retried: Infinity,
294
293
  [ARGS_COUNT]: VARIADIC,
295
294
  [RETURNS]: [UNKNOWN]
296
295
  }
@@ -299,7 +298,7 @@ export const typeCheck = (ast) => {
299
298
  [STATS]: {
300
299
  [TYPE_PROP]: [APPLY],
301
300
  [SIGNATURE]: DEBUG.SIGNATURE,
302
- retried: RETRY_COUNT,
301
+ retried: Infinity,
303
302
  [ARGS_COUNT]: VARIADIC,
304
303
  [RETURNS]: [UNKNOWN]
305
304
  }
@@ -308,7 +307,7 @@ export const typeCheck = (ast) => {
308
307
  [STATS]: {
309
308
  [TYPE_PROP]: [APPLY],
310
309
  [SIGNATURE]: DEBUG.TYPE_SIGNATURE,
311
- retried: RETRY_COUNT,
310
+ retried: Infinity,
312
311
  [ARGS_COUNT]: VARIADIC,
313
312
  [RETURNS]: [UNKNOWN]
314
313
  }
@@ -317,7 +316,7 @@ export const typeCheck = (ast) => {
317
316
  [STATS]: {
318
317
  [TYPE_PROP]: [APPLY],
319
318
  [SIGNATURE]: DEBUG.LIST_THEMES,
320
- retried: RETRY_COUNT,
319
+ retried: Infinity,
321
320
  [ARGS_COUNT]: VARIADIC,
322
321
  [RETURNS]: [UNKNOWN]
323
322
  }
@@ -326,7 +325,7 @@ export const typeCheck = (ast) => {
326
325
  [STATS]: {
327
326
  [TYPE_PROP]: [APPLY],
328
327
  [SIGNATURE]: DEBUG.SET_THEME,
329
- retried: RETRY_COUNT,
328
+ retried: Infinity,
330
329
  [ARGS_COUNT]: VARIADIC,
331
330
  [RETURNS]: [UNKNOWN]
332
331
  }
@@ -335,7 +334,7 @@ export const typeCheck = (ast) => {
335
334
  [STATS]: {
336
335
  [TYPE_PROP]: [APPLY],
337
336
  [SIGNATURE]: KEYWORDS.BLOCK,
338
- retried: RETRY_COUNT,
337
+ retried: Infinity,
339
338
  [ARGS_COUNT]: VARIADIC,
340
339
  [RETURNS]: [UNKNOWN]
341
340
  }
@@ -344,7 +343,7 @@ export const typeCheck = (ast) => {
344
343
  [STATS]: {
345
344
  [TYPE_PROP]: [APPLY],
346
345
  [SIGNATURE]: KEYWORDS.ANONYMOUS_FUNCTION,
347
- retried: RETRY_COUNT,
346
+ retried: Infinity,
348
347
  [ARGS_COUNT]: VARIADIC,
349
348
  [RETURNS]: [APPLY]
350
349
  }
@@ -353,7 +352,7 @@ export const typeCheck = (ast) => {
353
352
  [STATS]: {
354
353
  [TYPE_PROP]: [APPLY],
355
354
  [SIGNATURE]: KEYWORDS.CALL_FUNCTION,
356
- retried: RETRY_COUNT,
355
+ retried: Infinity,
357
356
  [ARGS_COUNT]: VARIADIC,
358
357
  [RETURNS]: [UNKNOWN]
359
358
  }
@@ -362,7 +361,7 @@ export const typeCheck = (ast) => {
362
361
  [STATS]: {
363
362
  [TYPE_PROP]: [APPLY],
364
363
  [SIGNATURE]: KEYWORDS.CREATE_ARRAY,
365
- retried: RETRY_COUNT,
364
+ retried: Infinity,
366
365
  [ARGS_COUNT]: VARIADIC,
367
366
  [RETURNS]: [COLLECTION]
368
367
  }
@@ -371,7 +370,7 @@ export const typeCheck = (ast) => {
371
370
  [STATS]: {
372
371
  [TYPE_PROP]: [APPLY],
373
372
  [SIGNATURE]: KEYWORDS.LOOP,
374
- retried: RETRY_COUNT,
373
+ retried: Infinity,
375
374
  [ARGS_COUNT]: 2,
376
375
  [ARGUMENTS]: [
377
376
  {
@@ -404,7 +403,7 @@ export const typeCheck = (ast) => {
404
403
  [STATS]: {
405
404
  [TYPE_PROP]: [APPLY],
406
405
  [SIGNATURE]: KEYWORDS.ADDITION,
407
- retried: RETRY_COUNT,
406
+ retried: Infinity,
408
407
  [ARGS_COUNT]: 2,
409
408
  [ARGUMENTS]: [
410
409
  {
@@ -437,7 +436,7 @@ export const typeCheck = (ast) => {
437
436
  [STATS]: {
438
437
  [TYPE_PROP]: [APPLY],
439
438
  [SIGNATURE]: KEYWORDS.MULTIPLICATION,
440
- retried: RETRY_COUNT,
439
+ retried: Infinity,
441
440
  [ARGS_COUNT]: 2,
442
441
  [ARGUMENTS]: [
443
442
  {
@@ -470,7 +469,7 @@ export const typeCheck = (ast) => {
470
469
  [STATS]: {
471
470
  [TYPE_PROP]: [APPLY],
472
471
  [SIGNATURE]: KEYWORDS.SUBTRACTION,
473
- retried: RETRY_COUNT,
472
+ retried: Infinity,
474
473
  [ARGS_COUNT]: 2,
475
474
  [ARGUMENTS]: [
476
475
  {
@@ -503,7 +502,7 @@ export const typeCheck = (ast) => {
503
502
  [STATS]: {
504
503
  [TYPE_PROP]: [APPLY],
505
504
  [SIGNATURE]: KEYWORDS.DIVISION,
506
- retried: RETRY_COUNT,
505
+ retried: Infinity,
507
506
  [ARGS_COUNT]: 2,
508
507
  [ARGUMENTS]: [
509
508
  {
@@ -535,7 +534,7 @@ export const typeCheck = (ast) => {
535
534
  [KEYWORDS.REMAINDER_OF_DIVISION]: {
536
535
  [STATS]: {
537
536
  [TYPE_PROP]: [APPLY],
538
- retried: RETRY_COUNT,
537
+ retried: Infinity,
539
538
  [ARGS_COUNT]: 2,
540
539
  [ARGUMENTS]: [
541
540
  {
@@ -568,7 +567,7 @@ export const typeCheck = (ast) => {
568
567
  [STATS]: {
569
568
  [TYPE_PROP]: [APPLY],
570
569
  [SIGNATURE]: KEYWORDS.BITWISE_AND,
571
- retried: RETRY_COUNT,
570
+ retried: Infinity,
572
571
  [ARGS_COUNT]: 2,
573
572
  [ARGUMENTS]: [
574
573
  {
@@ -601,7 +600,7 @@ export const typeCheck = (ast) => {
601
600
  [STATS]: {
602
601
  [TYPE_PROP]: [APPLY],
603
602
  [SIGNATURE]: KEYWORDS.BITWISE_NOT,
604
- retried: RETRY_COUNT,
603
+ retried: Infinity,
605
604
  [ARGS_COUNT]: 1,
606
605
  [ARGUMENTS]: [
607
606
  {
@@ -623,7 +622,7 @@ export const typeCheck = (ast) => {
623
622
  [STATS]: {
624
623
  [TYPE_PROP]: [APPLY],
625
624
  [SIGNATURE]: KEYWORDS.BITWISE_OR,
626
- retried: RETRY_COUNT,
625
+ retried: Infinity,
627
626
  [ARGS_COUNT]: 2,
628
627
  [ARGUMENTS]: [
629
628
  {
@@ -656,7 +655,7 @@ export const typeCheck = (ast) => {
656
655
  [STATS]: {
657
656
  [TYPE_PROP]: [APPLY],
658
657
  [SIGNATURE]: KEYWORDS.BITWISE_XOR,
659
- retried: RETRY_COUNT,
658
+ retried: Infinity,
660
659
  [ARGS_COUNT]: 2,
661
660
  [ARGUMENTS]: [
662
661
  {
@@ -689,7 +688,7 @@ export const typeCheck = (ast) => {
689
688
  [STATS]: {
690
689
  [TYPE_PROP]: [APPLY],
691
690
  [SIGNATURE]: KEYWORDS.BITWISE_LEFT_SHIFT,
692
- retried: RETRY_COUNT,
691
+ retried: Infinity,
693
692
  [ARGS_COUNT]: 2,
694
693
  [ARGUMENTS]: [
695
694
  {
@@ -722,7 +721,7 @@ export const typeCheck = (ast) => {
722
721
  [STATS]: {
723
722
  [TYPE_PROP]: [APPLY],
724
723
  [SIGNATURE]: KEYWORDS.BITWISE_RIGHT_SHIFT,
725
- retried: RETRY_COUNT,
724
+ retried: Infinity,
726
725
  [ARGS_COUNT]: 2,
727
726
  [ARGUMENTS]: [
728
727
  {
@@ -755,7 +754,7 @@ export const typeCheck = (ast) => {
755
754
  [STATS]: {
756
755
  [TYPE_PROP]: [APPLY],
757
756
  [SIGNATURE]: KEYWORDS.GET_ARRAY,
758
- retried: RETRY_COUNT,
757
+ retried: Infinity,
759
758
  [ARGS_COUNT]: 2,
760
759
  [ARGUMENTS]: [
761
760
  {
@@ -787,7 +786,7 @@ export const typeCheck = (ast) => {
787
786
  [KEYWORDS.SET_ARRAY]: {
788
787
  [STATS]: {
789
788
  [TYPE_PROP]: [APPLY],
790
- retried: RETRY_COUNT,
789
+ retried: Infinity,
791
790
  [ARGS_COUNT]: 3,
792
791
  [ARGUMENTS]: [
793
792
  {
@@ -831,7 +830,7 @@ export const typeCheck = (ast) => {
831
830
  [STATS]: {
832
831
  [TYPE_PROP]: [APPLY],
833
832
  [SIGNATURE]: KEYWORDS.POP_ARRAY,
834
- retried: RETRY_COUNT,
833
+ retried: Infinity,
835
834
  [ARGS_COUNT]: 1,
836
835
  [ARGUMENTS]: [
837
836
  {
@@ -853,7 +852,7 @@ export const typeCheck = (ast) => {
853
852
  [STATS]: {
854
853
  [TYPE_PROP]: [APPLY],
855
854
  [SIGNATURE]: KEYWORDS.ARRAY_LENGTH,
856
- retried: RETRY_COUNT,
855
+ retried: Infinity,
857
856
  [ARGS_COUNT]: 1,
858
857
  [ARGUMENTS]: [
859
858
  {
@@ -875,7 +874,7 @@ export const typeCheck = (ast) => {
875
874
  [STATS]: {
876
875
  [TYPE_PROP]: [APPLY],
877
876
  [SIGNATURE]: KEYWORDS.IF,
878
- retried: RETRY_COUNT,
877
+ retried: Infinity,
879
878
  [ARGS_COUNT]: 3,
880
879
  [ARGUMENTS]: [
881
880
  {
@@ -919,12 +918,12 @@ export const typeCheck = (ast) => {
919
918
  [STATS]: {
920
919
  [TYPE_PROP]: [APPLY, PREDICATE],
921
920
  [SIGNATURE]: KEYWORDS.NOT,
922
- retried: RETRY_COUNT,
921
+ retried: Infinity,
923
922
  [ARGS_COUNT]: 1,
924
923
  [ARGUMENTS]: [
925
924
  {
926
925
  [STATS]: {
927
- retried: RETRY_COUNT,
926
+ retried: Infinity,
928
927
  [SIGNATURE]: PLACEHOLDER,
929
928
  [TYPE_PROP]: [ATOM, PREDICATE],
930
929
  [RETURNS]: [ATOM, PREDICATE],
@@ -941,12 +940,12 @@ export const typeCheck = (ast) => {
941
940
  [STATS]: {
942
941
  [TYPE_PROP]: [APPLY, PREDICATE],
943
942
  [SIGNATURE]: KEYWORDS.EQUAL,
944
- retried: RETRY_COUNT,
943
+ retried: Infinity,
945
944
  [ARGS_COUNT]: 2,
946
945
  [ARGUMENTS]: [
947
946
  {
948
947
  [STATS]: {
949
- retried: RETRY_COUNT,
948
+ retried: Infinity,
950
949
  [SIGNATURE]: PLACEHOLDER,
951
950
  [TYPE_PROP]: [ATOM],
952
951
  [RETURNS]: [ATOM],
@@ -957,7 +956,7 @@ export const typeCheck = (ast) => {
957
956
  },
958
957
  {
959
958
  [STATS]: {
960
- retried: RETRY_COUNT,
959
+ retried: Infinity,
961
960
  [SIGNATURE]: PLACEHOLDER,
962
961
  [TYPE_PROP]: [ATOM],
963
962
  [RETURNS]: [ATOM],
@@ -973,13 +972,13 @@ export const typeCheck = (ast) => {
973
972
  [KEYWORDS.LESS_THAN]: {
974
973
  [STATS]: {
975
974
  [TYPE_PROP]: [APPLY, PREDICATE],
976
- retried: RETRY_COUNT,
975
+ retried: Infinity,
977
976
  [SIGNATURE]: KEYWORDS.LESS_THAN,
978
977
  [ARGS_COUNT]: 2,
979
978
  [ARGUMENTS]: [
980
979
  {
981
980
  [STATS]: {
982
- retried: RETRY_COUNT,
981
+ retried: Infinity,
983
982
  [SIGNATURE]: PLACEHOLDER,
984
983
  [TYPE_PROP]: [ATOM],
985
984
  [RETURNS]: [ATOM],
@@ -990,7 +989,7 @@ export const typeCheck = (ast) => {
990
989
  },
991
990
  {
992
991
  [STATS]: {
993
- retried: RETRY_COUNT,
992
+ retried: Infinity,
994
993
  [SIGNATURE]: PLACEHOLDER,
995
994
  [TYPE_PROP]: [ATOM],
996
995
  [RETURNS]: [ATOM],
@@ -1007,12 +1006,12 @@ export const typeCheck = (ast) => {
1007
1006
  [STATS]: {
1008
1007
  [TYPE_PROP]: [APPLY, PREDICATE],
1009
1008
  [SIGNATURE]: KEYWORDS.GREATHER_THAN,
1010
- retried: RETRY_COUNT,
1009
+ retried: Infinity,
1011
1010
  [ARGS_COUNT]: 2,
1012
1011
  [ARGUMENTS]: [
1013
1012
  {
1014
1013
  [STATS]: {
1015
- retried: RETRY_COUNT,
1014
+ retried: Infinity,
1016
1015
  [SIGNATURE]: PLACEHOLDER,
1017
1016
  [TYPE_PROP]: [ATOM],
1018
1017
  [RETURNS]: [ATOM],
@@ -1023,7 +1022,7 @@ export const typeCheck = (ast) => {
1023
1022
  },
1024
1023
  {
1025
1024
  [STATS]: {
1026
- retried: RETRY_COUNT,
1025
+ retried: Infinity,
1027
1026
  [SIGNATURE]: PLACEHOLDER,
1028
1027
  [TYPE_PROP]: [ATOM],
1029
1028
  [RETURNS]: [ATOM],
@@ -1040,12 +1039,12 @@ export const typeCheck = (ast) => {
1040
1039
  [STATS]: {
1041
1040
  [TYPE_PROP]: [APPLY, PREDICATE],
1042
1041
  [SIGNATURE]: KEYWORDS.GREATHER_THAN_OR_EQUAL,
1043
- retried: RETRY_COUNT,
1042
+ retried: Infinity,
1044
1043
  [ARGS_COUNT]: 2,
1045
1044
  [ARGUMENTS]: [
1046
1045
  {
1047
1046
  [STATS]: {
1048
- retried: RETRY_COUNT,
1047
+ retried: Infinity,
1049
1048
  [SIGNATURE]: PLACEHOLDER,
1050
1049
  [TYPE_PROP]: [ATOM],
1051
1050
  [RETURNS]: [ATOM],
@@ -1056,7 +1055,7 @@ export const typeCheck = (ast) => {
1056
1055
  },
1057
1056
  {
1058
1057
  [STATS]: {
1059
- retried: RETRY_COUNT,
1058
+ retried: Infinity,
1060
1059
  [SIGNATURE]: PLACEHOLDER,
1061
1060
  [TYPE_PROP]: [ATOM],
1062
1061
  [RETURNS]: [ATOM],
@@ -1073,12 +1072,12 @@ export const typeCheck = (ast) => {
1073
1072
  [STATS]: {
1074
1073
  [TYPE_PROP]: [APPLY, PREDICATE],
1075
1074
  [SIGNATURE]: KEYWORDS.LESS_THAN_OR_EQUAL,
1076
- retried: RETRY_COUNT,
1075
+ retried: Infinity,
1077
1076
  [ARGS_COUNT]: 2,
1078
1077
  [ARGUMENTS]: [
1079
1078
  {
1080
1079
  [STATS]: {
1081
- retried: RETRY_COUNT,
1080
+ retried: Infinity,
1082
1081
  [SIGNATURE]: PLACEHOLDER,
1083
1082
  [TYPE_PROP]: [ATOM],
1084
1083
  [RETURNS]: [ATOM],
@@ -1089,7 +1088,7 @@ export const typeCheck = (ast) => {
1089
1088
  },
1090
1089
  {
1091
1090
  [STATS]: {
1092
- retried: RETRY_COUNT,
1091
+ retried: Infinity,
1093
1092
  [SIGNATURE]: PLACEHOLDER,
1094
1093
  [TYPE_PROP]: [ATOM],
1095
1094
  [RETURNS]: [ATOM],
@@ -1106,12 +1105,12 @@ export const typeCheck = (ast) => {
1106
1105
  [STATS]: {
1107
1106
  [TYPE_PROP]: [APPLY, PREDICATE],
1108
1107
  [SIGNATURE]: KEYWORDS.AND,
1109
- retried: RETRY_COUNT,
1108
+ retried: Infinity,
1110
1109
  [ARGS_COUNT]: 2,
1111
1110
  [ARGUMENTS]: [
1112
1111
  {
1113
1112
  [STATS]: {
1114
- retried: RETRY_COUNT,
1113
+ retried: Infinity,
1115
1114
  [SIGNATURE]: PLACEHOLDER,
1116
1115
  [TYPE_PROP]: [ATOM, PREDICATE],
1117
1116
  [RETURNS]: [ATOM, PREDICATE],
@@ -1122,7 +1121,7 @@ export const typeCheck = (ast) => {
1122
1121
  },
1123
1122
  {
1124
1123
  [STATS]: {
1125
- retried: RETRY_COUNT,
1124
+ retried: Infinity,
1126
1125
  [SIGNATURE]: PLACEHOLDER,
1127
1126
  [TYPE_PROP]: [ATOM, PREDICATE],
1128
1127
  [RETURNS]: [ATOM, PREDICATE],
@@ -1139,12 +1138,12 @@ export const typeCheck = (ast) => {
1139
1138
  [STATS]: {
1140
1139
  [TYPE_PROP]: [APPLY, PREDICATE],
1141
1140
  [SIGNATURE]: KEYWORDS.OR,
1142
- retried: RETRY_COUNT,
1141
+ retried: Infinity,
1143
1142
  [ARGS_COUNT]: 2,
1144
1143
  [ARGUMENTS]: [
1145
1144
  {
1146
1145
  [STATS]: {
1147
- retried: RETRY_COUNT,
1146
+ retried: Infinity,
1148
1147
  [SIGNATURE]: PLACEHOLDER,
1149
1148
  [TYPE_PROP]: [ATOM, PREDICATE],
1150
1149
  [RETURNS]: [ATOM, PREDICATE],
@@ -1155,7 +1154,7 @@ export const typeCheck = (ast) => {
1155
1154
  },
1156
1155
  {
1157
1156
  [STATS]: {
1158
- retried: RETRY_COUNT,
1157
+ retried: Infinity,
1159
1158
  [SIGNATURE]: PLACEHOLDER,
1160
1159
  [TYPE_PROP]: [ATOM, PREDICATE],
1161
1160
  [RETURNS]: [ATOM, PREDICATE],
@@ -1172,12 +1171,12 @@ export const typeCheck = (ast) => {
1172
1171
  [STATS]: {
1173
1172
  [TYPE_PROP]: [APPLY, PREDICATE],
1174
1173
  [SIGNATURE]: KEYWORDS.IS_ATOM,
1175
- retried: RETRY_COUNT,
1174
+ retried: Infinity,
1176
1175
  [ARGS_COUNT]: 1,
1177
1176
  [ARGUMENTS]: [
1178
1177
  {
1179
1178
  [STATS]: {
1180
- retried: RETRY_COUNT,
1179
+ retried: Infinity,
1181
1180
  [SIGNATURE]: PLACEHOLDER,
1182
1181
  [TYPE_PROP]: [UNKNOWN],
1183
1182
  [RETURNS]: [UNKNOWN],
@@ -1194,12 +1193,12 @@ export const typeCheck = (ast) => {
1194
1193
  [STATS]: {
1195
1194
  [TYPE_PROP]: [APPLY, PREDICATE],
1196
1195
  [SIGNATURE]: KEYWORDS.IS_LAMBDA,
1197
- retried: RETRY_COUNT,
1196
+ retried: Infinity,
1198
1197
  [ARGS_COUNT]: 1,
1199
1198
  [ARGUMENTS]: [
1200
1199
  {
1201
1200
  [STATS]: {
1202
- retried: RETRY_COUNT,
1201
+ retried: Infinity,
1203
1202
  [SIGNATURE]: PLACEHOLDER,
1204
1203
  [TYPE_PROP]: [UNKNOWN],
1205
1204
  [RETURNS]: [UNKNOWN],
@@ -1216,12 +1215,12 @@ export const typeCheck = (ast) => {
1216
1215
  [STATS]: {
1217
1216
  [TYPE_PROP]: [APPLY],
1218
1217
  [SIGNATURE]: KEYWORDS.ERROR,
1219
- retried: RETRY_COUNT,
1218
+ retried: Infinity,
1220
1219
  [ARGS_COUNT]: 1,
1221
1220
  [ARGUMENTS]: [
1222
1221
  {
1223
1222
  [STATS]: {
1224
- retried: RETRY_COUNT,
1223
+ retried: Infinity,
1225
1224
  [SIGNATURE]: PLACEHOLDER,
1226
1225
  [TYPE_PROP]: [COLLECTION],
1227
1226
  [RETURNS]: [COLLECTION],
@@ -1466,13 +1465,14 @@ export const typeCheck = (ast) => {
1466
1465
  const isPredicate = getSuffix(name) === PREDICATE_SUFFIX
1467
1466
  resolveRetunType(returns, rem, RETURNS, isPredicate)
1468
1467
  }
1468
+ const rightHand = rest.at(-1)
1469
1469
  if (
1470
- rest.at(-1) &&
1471
- rest.at(-1)[0] &&
1472
- rest.at(-1)[0][TYPE] === APPLY &&
1473
- rest.at(-1)[0][VALUE] === KEYWORDS.ANONYMOUS_FUNCTION
1470
+ rightHand &&
1471
+ rightHand[0] &&
1472
+ rightHand[0][TYPE] === APPLY &&
1473
+ rightHand[0][VALUE] === KEYWORDS.ANONYMOUS_FUNCTION
1474
1474
  ) {
1475
- const n = rest.at(-1).length
1475
+ const n = rightHand.length
1476
1476
  env[name] = {
1477
1477
  [STATS]: {
1478
1478
  [TYPE_PROP]: [APPLY],
@@ -1486,20 +1486,21 @@ export const typeCheck = (ast) => {
1486
1486
  checkReturnType()
1487
1487
  if (
1488
1488
  env[name][STATS][RETURNS][0] === UNKNOWN &&
1489
- env[name][STATS].retried < DEFINITON_RETRY_COUNT
1489
+ env[name][STATS].retried < MAX_RETRY_DEFINITION
1490
1490
  ) {
1491
1491
  env[name][STATS].retried += 1
1492
1492
  stack.unshift(() => {
1493
1493
  checkReturnType()
1494
- check(rest.at(-1), env, exp)
1494
+ check(rightHand, env, exp)
1495
1495
  })
1496
- check(rest.at(-1), env, exp)
1496
+ check(rightHand, env, exp)
1497
1497
  } else {
1498
- check(rest.at(-1), env, exp)
1498
+ check(rightHand, env, exp)
1499
1499
  }
1500
1500
  } else {
1501
+ const isL = isLeaf(rightHand)
1501
1502
  // if (!(name in env)) {
1502
- if (rest[1][TYPE] === WORD) {
1503
+ if (isL && rightHand[TYPE] === WORD) {
1503
1504
  env[name] = env[rest[1][VALUE]]
1504
1505
 
1505
1506
  if (
@@ -1516,115 +1517,114 @@ export const typeCheck = (ast) => {
1516
1517
  warningStack.add(
1517
1518
  `${name} is assigned to ${rest[1][VALUE]} which ends in (${MUTATION_SUFFIX}) so ${name} must also end in (${MUTATION_SUFFIX}) (check #18)`
1518
1519
  )
1519
- } else {
1520
- const isL = isLeaf(rest.at(-1))
1521
- const right = isL ? rest.at(-1) : rest.at(-1)[0]
1522
- if (isL && right[TYPE] === ATOM) {
1523
- const isPredicate = getSuffix(name) === PREDICATE_SUFFIX
1524
- // This never happens
1525
- // if (
1526
- // isPredicate &&
1527
- // right[VALUE] !== TRUE &&
1528
- // right[VALUE] !== FALSE
1529
- // ) {
1530
- // }
1531
- env[name] = {
1532
- [STATS]: {
1533
- retried: 0,
1534
- [TYPE_PROP]: [ATOM],
1535
- [RETURNS]: [ATOM]
1536
- }
1537
- }
1538
- if (isPredicate) {
1539
- env[name][STATS][TYPE_PROP][1] = PREDICATE
1540
- env[name][STATS][RETURNS] = [ATOM, PREDICATE]
1520
+ } else if (isL && rightHand[TYPE] === ATOM) {
1521
+ const isPredicate = getSuffix(name) === PREDICATE_SUFFIX
1522
+ // This never happens
1523
+ // if (
1524
+ // isPredicate &&
1525
+ // right[VALUE] !== TRUE &&
1526
+ // right[VALUE] !== FALSE
1527
+ // ) {
1528
+ // }
1529
+ env[name] = {
1530
+ [STATS]: {
1531
+ retried: 0,
1532
+ [TYPE_PROP]: [ATOM],
1533
+ [RETURNS]: [ATOM]
1541
1534
  }
1542
- } else {
1543
- const isPredicate = getSuffix(name) === PREDICATE_SUFFIX
1544
- if (
1545
- right &&
1546
- right[VALUE] &&
1547
- getSuffix(right[VALUE]) === PREDICATE_SUFFIX &&
1548
- !isPredicate
1549
- )
1535
+ }
1536
+ if (isPredicate) {
1537
+ if (rightHand[VALUE] !== TRUE && rightHand !== FALSE) {
1550
1538
  warningStack.add(
1551
- `${name} is assigned to ${right[VALUE]} which ends in (${PREDICATE_SUFFIX}) so ${name} must also end in (${PREDICATE_SUFFIX}) (check #19)`
1539
+ `${name} ends in (${PREDICATE_SUFFIX}) and is expected to return (Predicate) but the (Atom) value is neither ${TRUE} or ${FALSE} (${stringifyArgs(
1540
+ exp
1541
+ )}) (check #14)`
1552
1542
  )
1553
- env[name] = {
1554
- [STATS]: {
1555
- retried: 0,
1556
- [TYPE_PROP]: [
1557
- isL
1558
- ? right[TYPE]
1559
- : env[right?.[VALUE]]?.[STATS]?.[RETURNS]?.[0] ??
1560
- UNKNOWN
1561
- ],
1562
- [RETURNS]: [UNKNOWN]
1563
- }
1564
- }
1565
- if (isPredicate) {
1543
+ } else {
1566
1544
  env[name][STATS][TYPE_PROP][1] = PREDICATE
1567
1545
  env[name][STATS][RETURNS] = [ATOM, PREDICATE]
1568
1546
  }
1569
- if (right && right[VALUE]) {
1570
- if (right[VALUE] === KEYWORDS.CALL_FUNCTION) {
1571
- if (isLeaf(rest.at(-1).at(-1))) {
1572
- const fnName = rest.at(-1).at(-1)[VALUE]
1573
- const fn = env[fnName]
1574
- if (
1575
- !isPredicate &&
1576
- fn[STATS][RETURNS][1] === PREDICATE
1577
- ) {
1578
- warningStack.add(
1579
- `${name} is assigned to ${fnName} which ends in (${PREDICATE_SUFFIX}) so ${name} must also end in (${PREDICATE_SUFFIX}) (check #24)`
1580
- )
1581
- } else if (
1582
- isPredicate &&
1583
- fn[STATS][RETURNS][1] !== PREDICATE
1584
- ) {
1585
- warningStack.add(
1586
- `${name} ends in (${PREDICATE_SUFFIX}) and is expected to return (Predicate) but it doesn't (check #25)`
1587
- )
1588
- }
1589
- env[name][STATS][TYPE_PROP] = fn[STATS][RETURNS]
1590
- env[name][STATS][RETURNS] = fn[STATS][RETURNS]
1591
- } else {
1592
- const body = rest.at(-1).at(-1).at(-1)
1593
- const rem = hasBlock(body) ? body.at(-1) : body
1594
- const returns = isLeaf(rem) ? rem : rem[0]
1595
- resolveRetunType(
1596
- returns,
1597
- rem,
1598
- TYPE_PROP,
1599
- isPredicate
1547
+ }
1548
+ } else {
1549
+ const right = rightHand[0]
1550
+ const isPredicate = getSuffix(name) === PREDICATE_SUFFIX
1551
+ if (
1552
+ right &&
1553
+ right[VALUE] &&
1554
+ getSuffix(right[VALUE]) === PREDICATE_SUFFIX &&
1555
+ !isPredicate
1556
+ )
1557
+ warningStack.add(
1558
+ `${name} is assigned to ${right[VALUE]} which ends in (${PREDICATE_SUFFIX}) so ${name} must also end in (${PREDICATE_SUFFIX}) (check #19)`
1559
+ )
1560
+ env[name] = {
1561
+ [STATS]: {
1562
+ retried: 0,
1563
+ [TYPE_PROP]: [
1564
+ isL
1565
+ ? right[TYPE]
1566
+ : env[right?.[VALUE]]?.[STATS]?.[RETURNS]?.[0] ??
1567
+ UNKNOWN
1568
+ ],
1569
+ [RETURNS]: [UNKNOWN]
1570
+ }
1571
+ }
1572
+ if (isPredicate) {
1573
+ env[name][STATS][TYPE_PROP][1] = PREDICATE
1574
+ env[name][STATS][RETURNS] = [ATOM, PREDICATE]
1575
+ }
1576
+ if (right && right[VALUE]) {
1577
+ if (right[VALUE] === KEYWORDS.CALL_FUNCTION) {
1578
+ if (isLeaf(rightHand.at(-1))) {
1579
+ const fnName = rightHand.at(-1)[VALUE]
1580
+ const fn = env[fnName]
1581
+ if (
1582
+ !isPredicate &&
1583
+ fn[STATS][RETURNS][1] === PREDICATE
1584
+ ) {
1585
+ warningStack.add(
1586
+ `${name} is assigned to ${fnName} which ends in (${PREDICATE_SUFFIX}) so ${name} must also end in (${PREDICATE_SUFFIX}) (check #24)`
1587
+ )
1588
+ } else if (
1589
+ isPredicate &&
1590
+ fn[STATS][RETURNS][1] !== PREDICATE
1591
+ ) {
1592
+ warningStack.add(
1593
+ `${name} ends in (${PREDICATE_SUFFIX}) and is expected to return (Predicate) but it doesn't (check #25)`
1600
1594
  )
1601
1595
  }
1596
+ env[name][STATS][TYPE_PROP] = fn[STATS][RETURNS]
1597
+ env[name][STATS][RETURNS] = fn[STATS][RETURNS]
1602
1598
  } else {
1603
- const body = rest.at(-1)
1599
+ const body = rightHand.at(-1).at(-1)
1604
1600
  const rem = hasBlock(body) ? body.at(-1) : body
1605
1601
  const returns = isLeaf(rem) ? rem : rem[0]
1606
1602
  resolveRetunType(returns, rem, TYPE_PROP, isPredicate)
1607
1603
  }
1608
- if (env[right[VALUE]]?.[STATS]?.[RETURNS]?.[1]) {
1609
- if (
1610
- env[right[VALUE]][STATS][RETURNS][1] ===
1611
- PREDICATE &&
1612
- !isPredicate
1613
- ) {
1614
- warningStack.add(
1615
- `${name} is assigned to the result of a (${toTypeNames(
1616
- PREDICATE
1617
- )}) so ${name} must end in (${PREDICATE_SUFFIX}) (check #23)`
1618
- )
1619
- }
1620
- env[name][STATS][RETURNS] =
1621
- env[right[VALUE]][STATS][RETURNS]
1604
+ } else {
1605
+ const body = rightHand
1606
+ const rem = hasBlock(body) ? body.at(-1) : body
1607
+ const returns = isLeaf(rem) ? rem : rem[0]
1608
+ resolveRetunType(returns, rem, TYPE_PROP, isPredicate)
1609
+ }
1610
+ if (env[right[VALUE]]?.[STATS]?.[RETURNS]?.[1]) {
1611
+ if (
1612
+ env[right[VALUE]][STATS][RETURNS][1] === PREDICATE &&
1613
+ !isPredicate
1614
+ ) {
1615
+ warningStack.add(
1616
+ `${name} is assigned to the result of a (${toTypeNames(
1617
+ PREDICATE
1618
+ )}) so ${name} must end in (${PREDICATE_SUFFIX}) (check #23)`
1619
+ )
1622
1620
  }
1621
+ env[name][STATS][RETURNS] =
1622
+ env[right[VALUE]][STATS][RETURNS]
1623
1623
  }
1624
1624
  }
1625
1625
  }
1626
1626
  // }
1627
- check(rest.at(-1), env, scope)
1627
+ check(rightHand, env, scope)
1628
1628
  }
1629
1629
  Types.set(withScope(name, env), () => formatType(name, env))
1630
1630
  }
@@ -2111,16 +2111,17 @@ export const typeCheck = (ast) => {
2111
2111
  )
2112
2112
  } else {
2113
2113
  const retry = env[rest[i][VALUE]]
2114
+ // if (
2115
+ // retry &&
2116
+ // retry[STATS].retried < RETRY_COUNT &&
2117
+ // args[i][STATS][TYPE_PROP][0] === UNKNOWN
2118
+ // ) {
2119
+ // retry[STATS].retried += 1
2120
+ // stack.unshift(() => check(exp, env, scope))
2121
+ // } else
2114
2122
  if (
2115
- retry &&
2116
- retry[STATS].retried < RETRY_COUNT &&
2117
- args[i][STATS][TYPE_PROP][0] === UNKNOWN
2118
- ) {
2119
- retry[STATS].retried += 1
2120
- stack.unshift(() => check(exp, env, scope))
2121
- } else if (
2122
2123
  args[i][STATS][TYPE_PROP][0] === UNKNOWN &&
2123
- args[i][STATS].retried < DEFINITON_RETRY_COUNT
2124
+ args[i][STATS].retried < MAX_RETRY_DEFINITION
2124
2125
  ) {
2125
2126
  args[i][STATS].retried += 1
2126
2127
  stack.unshift(() => check(exp, env, scope))