fez-lisp 1.5.108 → 1.5.110

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/types.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getReturn, getType } from './check.js'
1
+ import { getReturn, getReturns, getType, getTypes } from './check.js'
2
2
  import {
3
3
  APPLY,
4
4
  ATOM,
@@ -19,24 +19,30 @@ export const TYPE_PROP = 'type'
19
19
  export const SIGNATURE = 'name'
20
20
  export const UNKNOWN = -1
21
21
  export const COLLECTION = 3
22
- export const PREDICATE = 4
23
- export const ANY = 5
22
+ export const PREDICATE = 5
23
+ export const NUMBER = 6
24
+ export const ANY = 4
24
25
  export const ANONYMOUS_FUNCTION_TYPE_PREFIX = 'lambda::annonymous::'
25
26
  export const MAX_ARGUMENT_RETRY = 1
26
27
  export const MAX_RETRY_DEFINITION = 100
27
28
  export const NIL = 'nil'
29
+ export const TRUE_WORD = 'true'
30
+ export const FALSE_WORD = 'false'
31
+ export const BOOLEAN_SUBTYPE = () => new Set([PREDICATE])
28
32
  export const toTypeNames = (type) => {
29
33
  switch (type) {
30
34
  case APPLY:
31
35
  return 'Abstraction'
36
+ case PREDICATE:
37
+ return 'Boolean'
38
+ case NUMBER:
39
+ return 'Number'
32
40
  case ATOM:
33
41
  return 'Atom'
34
42
  case UNKNOWN:
35
43
  return 'Unknown'
36
- case PREDICATE:
37
- return 'Predicate'
38
44
  case COLLECTION:
39
- return 'Collection'
45
+ return '[]'
40
46
  case ANY:
41
47
  return 'Any'
42
48
  default:
@@ -100,7 +106,7 @@ export const SPECIAL_FORM_TYPES = {
100
106
  },
101
107
  [STATIC_TYPES.PREDICATE]: {
102
108
  [STATS]: {
103
- [TYPE_PROP]: [APPLY, PREDICATE],
109
+ [TYPE_PROP]: [APPLY],
104
110
  [SIGNATURE]: STATIC_TYPES.PREDICATE,
105
111
  retried: Infinity,
106
112
  [ARG_COUNT]: 1,
@@ -111,13 +117,12 @@ export const SPECIAL_FORM_TYPES = {
111
117
  [SIGNATURE]: PLACEHOLDER,
112
118
  [TYPE_PROP]: [UNKNOWN],
113
119
  [RETURNS]: [UNKNOWN],
114
-
115
120
  [ARGUMENTS]: [],
116
121
  [ARG_COUNT]: 0
117
122
  }
118
123
  }
119
124
  ],
120
- [RETURNS]: [ATOM, PREDICATE]
125
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
121
126
  }
122
127
  },
123
128
  [STATIC_TYPES.COLLECTION]: {
@@ -333,8 +338,8 @@ export const SPECIAL_FORM_TYPES = {
333
338
  [STATS]: {
334
339
  retried: 0,
335
340
  [SIGNATURE]: PLACEHOLDER,
336
- [TYPE_PROP]: [ATOM, PREDICATE],
337
- [RETURNS]: [ATOM, PREDICATE],
341
+ [TYPE_PROP]: [ATOM],
342
+ [RETURNS]: [ATOM],
338
343
 
339
344
  [ARGUMENTS]: [],
340
345
  [ARG_COUNT]: 0
@@ -837,8 +842,8 @@ export const SPECIAL_FORM_TYPES = {
837
842
  [STATS]: {
838
843
  retried: 0,
839
844
  [SIGNATURE]: PLACEHOLDER,
840
- [TYPE_PROP]: [ATOM, PREDICATE],
841
- [RETURNS]: [ATOM, PREDICATE],
845
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
846
+ [RETURNS]: [ATOM],
842
847
 
843
848
  [ARGUMENTS]: [],
844
849
  [ARG_COUNT]: 0
@@ -850,7 +855,6 @@ export const SPECIAL_FORM_TYPES = {
850
855
  [SIGNATURE]: PLACEHOLDER,
851
856
  [TYPE_PROP]: [ANY],
852
857
  [RETURNS]: [ANY],
853
-
854
858
  [ARGUMENTS]: [],
855
859
  [ARG_COUNT]: 0
856
860
  }
@@ -861,7 +865,6 @@ export const SPECIAL_FORM_TYPES = {
861
865
  [SIGNATURE]: PLACEHOLDER,
862
866
  [TYPE_PROP]: [ANY],
863
867
  [RETURNS]: [ANY],
864
-
865
868
  [ARGUMENTS]: [],
866
869
  [ARG_COUNT]: 0
867
870
  }
@@ -872,7 +875,7 @@ export const SPECIAL_FORM_TYPES = {
872
875
  },
873
876
  [KEYWORDS.NOT]: {
874
877
  [STATS]: {
875
- [TYPE_PROP]: [APPLY, PREDICATE],
878
+ [TYPE_PROP]: [APPLY],
876
879
  [SIGNATURE]: KEYWORDS.NOT,
877
880
  retried: Infinity,
878
881
  [ARG_COUNT]: 1,
@@ -881,20 +884,19 @@ export const SPECIAL_FORM_TYPES = {
881
884
  [STATS]: {
882
885
  retried: Infinity,
883
886
  [SIGNATURE]: PLACEHOLDER,
884
- [TYPE_PROP]: [ATOM, PREDICATE],
885
- [RETURNS]: [ATOM, PREDICATE],
886
-
887
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
888
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()],
887
889
  [ARGUMENTS]: [],
888
890
  [ARG_COUNT]: 0
889
891
  }
890
892
  }
891
893
  ],
892
- [RETURNS]: [ATOM, PREDICATE]
894
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
893
895
  }
894
896
  },
895
897
  [KEYWORDS.EQUAL]: {
896
898
  [STATS]: {
897
- [TYPE_PROP]: [APPLY, PREDICATE],
899
+ [TYPE_PROP]: [APPLY],
898
900
  [SIGNATURE]: KEYWORDS.EQUAL,
899
901
  retried: Infinity,
900
902
  [ARG_COUNT]: 2,
@@ -905,7 +907,6 @@ export const SPECIAL_FORM_TYPES = {
905
907
  [SIGNATURE]: PLACEHOLDER,
906
908
  [TYPE_PROP]: [ATOM],
907
909
  [RETURNS]: [ATOM],
908
-
909
910
  [ARGUMENTS]: [],
910
911
  [ARG_COUNT]: 0
911
912
  }
@@ -916,18 +917,17 @@ export const SPECIAL_FORM_TYPES = {
916
917
  [SIGNATURE]: PLACEHOLDER,
917
918
  [TYPE_PROP]: [ATOM],
918
919
  [RETURNS]: [ATOM],
919
-
920
920
  [ARGUMENTS]: [],
921
921
  [ARG_COUNT]: 0
922
922
  }
923
923
  }
924
924
  ],
925
- [RETURNS]: [ATOM, PREDICATE]
925
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
926
926
  }
927
927
  },
928
928
  [KEYWORDS.LESS_THAN]: {
929
929
  [STATS]: {
930
- [TYPE_PROP]: [APPLY, PREDICATE],
930
+ [TYPE_PROP]: [APPLY],
931
931
  retried: Infinity,
932
932
  [SIGNATURE]: KEYWORDS.LESS_THAN,
933
933
  [ARG_COUNT]: 2,
@@ -938,7 +938,6 @@ export const SPECIAL_FORM_TYPES = {
938
938
  [SIGNATURE]: PLACEHOLDER,
939
939
  [TYPE_PROP]: [ATOM],
940
940
  [RETURNS]: [ATOM],
941
-
942
941
  [ARGUMENTS]: [],
943
942
  [ARG_COUNT]: 0
944
943
  }
@@ -949,18 +948,17 @@ export const SPECIAL_FORM_TYPES = {
949
948
  [SIGNATURE]: PLACEHOLDER,
950
949
  [TYPE_PROP]: [ATOM],
951
950
  [RETURNS]: [ATOM],
952
-
953
951
  [ARGUMENTS]: [],
954
952
  [ARG_COUNT]: 0
955
953
  }
956
954
  }
957
955
  ],
958
- [RETURNS]: [ATOM, PREDICATE]
956
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
959
957
  }
960
958
  },
961
959
  [KEYWORDS.GREATHER_THAN]: {
962
960
  [STATS]: {
963
- [TYPE_PROP]: [APPLY, PREDICATE],
961
+ [TYPE_PROP]: [APPLY],
964
962
  [SIGNATURE]: KEYWORDS.GREATHER_THAN,
965
963
  retried: Infinity,
966
964
  [ARG_COUNT]: 2,
@@ -982,18 +980,17 @@ export const SPECIAL_FORM_TYPES = {
982
980
  [SIGNATURE]: PLACEHOLDER,
983
981
  [TYPE_PROP]: [ATOM],
984
982
  [RETURNS]: [ATOM],
985
-
986
983
  [ARGUMENTS]: [],
987
984
  [ARG_COUNT]: 0
988
985
  }
989
986
  }
990
987
  ],
991
- [RETURNS]: [ATOM, PREDICATE]
988
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
992
989
  }
993
990
  },
994
991
  [KEYWORDS.GREATHER_THAN_OR_EQUAL]: {
995
992
  [STATS]: {
996
- [TYPE_PROP]: [APPLY, PREDICATE],
993
+ [TYPE_PROP]: [APPLY],
997
994
  [SIGNATURE]: KEYWORDS.GREATHER_THAN_OR_EQUAL,
998
995
  retried: Infinity,
999
996
  [ARG_COUNT]: 2,
@@ -1004,7 +1001,6 @@ export const SPECIAL_FORM_TYPES = {
1004
1001
  [SIGNATURE]: PLACEHOLDER,
1005
1002
  [TYPE_PROP]: [ATOM],
1006
1003
  [RETURNS]: [ATOM],
1007
-
1008
1004
  [ARGUMENTS]: [],
1009
1005
  [ARG_COUNT]: 0
1010
1006
  }
@@ -1015,18 +1011,17 @@ export const SPECIAL_FORM_TYPES = {
1015
1011
  [SIGNATURE]: PLACEHOLDER,
1016
1012
  [TYPE_PROP]: [ATOM],
1017
1013
  [RETURNS]: [ATOM],
1018
-
1019
1014
  [ARGUMENTS]: [],
1020
1015
  [ARG_COUNT]: 0
1021
1016
  }
1022
1017
  }
1023
1018
  ],
1024
- [RETURNS]: [ATOM, PREDICATE]
1019
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1025
1020
  }
1026
1021
  },
1027
1022
  [KEYWORDS.LESS_THAN_OR_EQUAL]: {
1028
1023
  [STATS]: {
1029
- [TYPE_PROP]: [APPLY, PREDICATE],
1024
+ [TYPE_PROP]: [APPLY],
1030
1025
  [SIGNATURE]: KEYWORDS.LESS_THAN_OR_EQUAL,
1031
1026
  retried: Infinity,
1032
1027
  [ARG_COUNT]: 2,
@@ -1037,7 +1032,6 @@ export const SPECIAL_FORM_TYPES = {
1037
1032
  [SIGNATURE]: PLACEHOLDER,
1038
1033
  [TYPE_PROP]: [ATOM],
1039
1034
  [RETURNS]: [ATOM],
1040
-
1041
1035
  [ARGUMENTS]: [],
1042
1036
  [ARG_COUNT]: 0
1043
1037
  }
@@ -1048,18 +1042,17 @@ export const SPECIAL_FORM_TYPES = {
1048
1042
  [SIGNATURE]: PLACEHOLDER,
1049
1043
  [TYPE_PROP]: [ATOM],
1050
1044
  [RETURNS]: [ATOM],
1051
-
1052
1045
  [ARGUMENTS]: [],
1053
1046
  [ARG_COUNT]: 0
1054
1047
  }
1055
1048
  }
1056
1049
  ],
1057
- [RETURNS]: [ATOM, PREDICATE]
1050
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1058
1051
  }
1059
1052
  },
1060
1053
  [KEYWORDS.AND]: {
1061
1054
  [STATS]: {
1062
- [TYPE_PROP]: [APPLY, PREDICATE],
1055
+ [TYPE_PROP]: [APPLY],
1063
1056
  [SIGNATURE]: KEYWORDS.AND,
1064
1057
  retried: Infinity,
1065
1058
  [ARG_COUNT]: 2,
@@ -1068,9 +1061,8 @@ export const SPECIAL_FORM_TYPES = {
1068
1061
  [STATS]: {
1069
1062
  retried: Infinity,
1070
1063
  [SIGNATURE]: PLACEHOLDER,
1071
- [TYPE_PROP]: [ATOM, PREDICATE],
1072
- [RETURNS]: [ATOM, PREDICATE],
1073
-
1064
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
1065
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()],
1074
1066
  [ARGUMENTS]: [],
1075
1067
  [ARG_COUNT]: 0
1076
1068
  }
@@ -1079,20 +1071,19 @@ export const SPECIAL_FORM_TYPES = {
1079
1071
  [STATS]: {
1080
1072
  retried: Infinity,
1081
1073
  [SIGNATURE]: PLACEHOLDER,
1082
- [TYPE_PROP]: [ATOM, PREDICATE],
1083
- [RETURNS]: [ATOM, PREDICATE],
1084
-
1074
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
1075
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()],
1085
1076
  [ARGUMENTS]: [],
1086
1077
  [ARG_COUNT]: 0
1087
1078
  }
1088
1079
  }
1089
1080
  ],
1090
- [RETURNS]: [ATOM, PREDICATE]
1081
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1091
1082
  }
1092
1083
  },
1093
1084
  [KEYWORDS.OR]: {
1094
1085
  [STATS]: {
1095
- [TYPE_PROP]: [APPLY, PREDICATE],
1086
+ [TYPE_PROP]: [APPLY],
1096
1087
  [SIGNATURE]: KEYWORDS.OR,
1097
1088
  retried: Infinity,
1098
1089
  [ARG_COUNT]: 2,
@@ -1101,9 +1092,8 @@ export const SPECIAL_FORM_TYPES = {
1101
1092
  [STATS]: {
1102
1093
  retried: Infinity,
1103
1094
  [SIGNATURE]: PLACEHOLDER,
1104
- [TYPE_PROP]: [ATOM, PREDICATE],
1105
- [RETURNS]: [ATOM, PREDICATE],
1106
-
1095
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
1096
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()],
1107
1097
  [ARGUMENTS]: [],
1108
1098
  [ARG_COUNT]: 0
1109
1099
  }
@@ -1112,20 +1102,19 @@ export const SPECIAL_FORM_TYPES = {
1112
1102
  [STATS]: {
1113
1103
  retried: Infinity,
1114
1104
  [SIGNATURE]: PLACEHOLDER,
1115
- [TYPE_PROP]: [ATOM, PREDICATE],
1116
- [RETURNS]: [ATOM, PREDICATE],
1117
-
1105
+ [TYPE_PROP]: [ATOM, BOOLEAN_SUBTYPE()],
1106
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()],
1118
1107
  [ARGUMENTS]: [],
1119
1108
  [ARG_COUNT]: 0
1120
1109
  }
1121
1110
  }
1122
1111
  ],
1123
- [RETURNS]: [ATOM, PREDICATE]
1112
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1124
1113
  }
1125
1114
  },
1126
1115
  [KEYWORDS.IS_ATOM]: {
1127
1116
  [STATS]: {
1128
- [TYPE_PROP]: [APPLY, PREDICATE],
1117
+ [TYPE_PROP]: [APPLY],
1129
1118
  [SIGNATURE]: KEYWORDS.IS_ATOM,
1130
1119
  retried: Infinity,
1131
1120
  [ARG_COUNT]: 1,
@@ -1142,12 +1131,12 @@ export const SPECIAL_FORM_TYPES = {
1142
1131
  }
1143
1132
  }
1144
1133
  ],
1145
- [RETURNS]: [ATOM, PREDICATE]
1134
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1146
1135
  }
1147
1136
  },
1148
1137
  [KEYWORDS.IS_LAMBDA]: {
1149
1138
  [STATS]: {
1150
- [TYPE_PROP]: [APPLY, PREDICATE],
1139
+ [TYPE_PROP]: [APPLY],
1151
1140
  [SIGNATURE]: KEYWORDS.IS_LAMBDA,
1152
1141
  retried: Infinity,
1153
1142
  [ARG_COUNT]: 1,
@@ -1164,7 +1153,7 @@ export const SPECIAL_FORM_TYPES = {
1164
1153
  }
1165
1154
  }
1166
1155
  ],
1167
- [RETURNS]: [ATOM, PREDICATE]
1156
+ [RETURNS]: [ATOM, BOOLEAN_SUBTYPE()]
1168
1157
  }
1169
1158
  },
1170
1159
  [KEYWORDS.ERROR]: {
@@ -1191,6 +1180,28 @@ export const SPECIAL_FORM_TYPES = {
1191
1180
  }
1192
1181
  }
1193
1182
 
1183
+ const formatSubType = (T) => {
1184
+ switch (T[0]) {
1185
+ case COLLECTION:
1186
+ return `[${
1187
+ T[1] instanceof Set
1188
+ ? [...T[1]]
1189
+ .map((x) =>
1190
+ x === COLLECTION ? formatSubType([x]) : toTypeNames(x)
1191
+ )
1192
+ .join(' ')
1193
+ : toTypeNames(ANY)
1194
+ }]`
1195
+ case ATOM:
1196
+ return `${
1197
+ T[1] instanceof Set
1198
+ ? [...T[1]].map((x) => toTypeNames(x)).join(' ')
1199
+ : toTypeNames(NUMBER)
1200
+ }`
1201
+ default:
1202
+ return toTypeNames(T[0])
1203
+ }
1204
+ }
1194
1205
  export const formatType = (name, env) => {
1195
1206
  const stats = env[name][STATS]
1196
1207
  const isAnonymous = typeof name === 'number'
@@ -1205,15 +1216,15 @@ export const formatType = (name, env) => {
1205
1216
  `${
1206
1217
  getType(x[STATS]) === APPLY
1207
1218
  ? `${formatType(i, stats[ARGUMENTS])}`
1208
- : `${toTypeNamesAnyToUknown(getType(x[STATS]))}`
1219
+ : `${formatSubType(getTypes(x[STATS]))}`
1209
1220
  }`
1210
1221
  ).join(' ') + ' '
1211
1222
  : ''
1212
1223
  // TODO format returned functions when type support is added
1213
- }(${KEYWORDS.BLOCK} ${toTypeNamesAnyToUknown(getReturn(stats))})${
1224
+ }(${KEYWORDS.BLOCK} ${formatSubType(getReturns(stats))})${
1214
1225
  isAnonymous ? '' : ')'
1215
1226
  })`
1216
- : `(let ${name} ${toTypeNamesAnyToUknown(getType(stats))})`
1227
+ : `(let ${name} ${formatSubType(getTypes(stats))})`
1217
1228
  : name
1218
1229
  }
1219
1230
 
package/src/utils.js CHANGED
@@ -33,6 +33,7 @@ export const formatErrorWithCallstack = (error, callstack) =>
33
33
  `${error.message}\n${formatCallstack(callstack)}`
34
34
  // TODO figure out why name is sometimes undefined
35
35
  export const getSuffix = (str) => (str ? str[str.length - 1] : '')
36
+ export const getPrefix = (str) => str?.split(':')[0]
36
37
  export const removeNoCode = (source) =>
37
38
  source
38
39
  .replace(/(;.+|;)/g, '')