fez-lisp 1.5.119 → 1.5.121
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 +27 -17
- package/src/types.js +14 -13
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -178,15 +178,12 @@ export const setReturnToAtom = (stats) => {
|
|
178
178
|
export const setTypeToAtom = (stats) =>
|
179
179
|
(isUnknownType(stats) || isAnyType(stats)) && (stats[TYPE_PROP][0] = ATOM)
|
180
180
|
export const setReturnToAbbstraction = (stats) =>
|
181
|
-
|
181
|
+
isUnknownReturn(stats) && (stats[RETURNS][0] = APPLY)
|
182
182
|
export const setTypeRef = (stats, value) =>
|
183
183
|
(isUnknownType(stats) || isAnyType(stats)) &&
|
184
184
|
(stats[TYPE_PROP] = value[TYPE_PROP])
|
185
185
|
export const setReturnRef = (stats, value) => {
|
186
|
-
return (
|
187
|
-
(isUnknownReturn(stats) || isAnyReturn(stats)) &&
|
188
|
-
(stats[RETURNS] = value[RETURNS])
|
189
|
-
)
|
186
|
+
return isUnknownReturn(stats) && (stats[RETURNS] = value[RETURNS])
|
190
187
|
}
|
191
188
|
export const setReturnToTypeRef = (stats, value) => {
|
192
189
|
return (
|
@@ -194,6 +191,7 @@ export const setReturnToTypeRef = (stats, value) => {
|
|
194
191
|
(stats[RETURNS] = value[TYPE_PROP])
|
195
192
|
)
|
196
193
|
}
|
194
|
+
export const setStatsRef = (a, b) => (a[STATS] = b[STATS])
|
197
195
|
export const setTypeToReturnRef = (stats, value) => {
|
198
196
|
return (
|
199
197
|
(isUnknownType(stats) || isAnyType(stats)) &&
|
@@ -498,7 +496,10 @@ const resolveRetunType = ({ returns, rem, stack, prop, exp, name, env }) => {
|
|
498
496
|
// Here is upon application to store the result in the variable
|
499
497
|
if (isUnknownType(env[name][STATS]))
|
500
498
|
stack.prepend(() => {
|
501
|
-
|
499
|
+
setTypeToReturnRef(
|
500
|
+
env[name][STATS],
|
501
|
+
env[returns[VALUE]][STATS]
|
502
|
+
)
|
502
503
|
// env[name][STATS][TYPE_PROP][0] =
|
503
504
|
// env[returns[VALUE]][STATS][RETURNS][0]
|
504
505
|
// this seems to be able to be deleted
|
@@ -701,6 +702,7 @@ export const typeCheck = (ast) => {
|
|
701
702
|
counter: 0
|
702
703
|
}
|
703
704
|
}
|
705
|
+
|
704
706
|
const ref = env[copy[SCOPE_NAME]]
|
705
707
|
if (!ref) continue
|
706
708
|
ref[STATS][ARGUMENTS][i] = copy[param[VALUE]]
|
@@ -824,13 +826,15 @@ export const typeCheck = (ast) => {
|
|
824
826
|
case APPLY:
|
825
827
|
// passing arg asA APPLICATION
|
826
828
|
if (isUnknownType(arg[i][STATS]))
|
827
|
-
|
828
|
-
|
829
|
+
setTypeToReturnRef(
|
830
|
+
arg[i][STATS],
|
831
|
+
env[ARG[VALUE]][STATS]
|
832
|
+
)
|
829
833
|
break
|
830
834
|
case WORD:
|
831
835
|
// if param is a word we assosiate them by referanc
|
832
|
-
if (isUnknownType(arg[i][STATS]))
|
833
|
-
|
836
|
+
// if (isUnknownType(arg[i][STATS]))
|
837
|
+
setStatsRef(arg[i], env[ARG[VALUE]])
|
834
838
|
break
|
835
839
|
}
|
836
840
|
}
|
@@ -900,7 +904,7 @@ export const typeCheck = (ast) => {
|
|
900
904
|
// what if it's a global function used elsewhere where the return type mwould be different
|
901
905
|
// THIS willgive lambda return types but refactor is needed still
|
902
906
|
if (!SPECIAL_FORMS_SET.has(name))
|
903
|
-
|
907
|
+
setReturnRef(env[name][STATS], args[i][STATS])
|
904
908
|
break
|
905
909
|
}
|
906
910
|
|
@@ -979,6 +983,7 @@ export const typeCheck = (ast) => {
|
|
979
983
|
? getType(env[rest[i][VALUE]][STATS])
|
980
984
|
: UNKNOWN
|
981
985
|
: rest[i][TYPE]
|
986
|
+
|
982
987
|
if (T === ATOM && !isUnknownType(args[i][STATS])) {
|
983
988
|
if (getType(args[i][STATS]) !== ATOM)
|
984
989
|
throw new TypeError(
|
@@ -1127,7 +1132,6 @@ export const typeCheck = (ast) => {
|
|
1127
1132
|
}
|
1128
1133
|
}
|
1129
1134
|
}
|
1130
|
-
|
1131
1135
|
if (
|
1132
1136
|
T === COLLECTION &&
|
1133
1137
|
env[rest[i][VALUE]] &&
|
@@ -1146,17 +1150,23 @@ export const typeCheck = (ast) => {
|
|
1146
1150
|
)
|
1147
1151
|
} else if (isUnknownType(args[i][STATS])) {
|
1148
1152
|
retry(args[i][STATS], stack, () => check(exp, env, scope))
|
1149
|
-
}
|
1153
|
+
}
|
1154
|
+
// TOODO maybe we don't need this
|
1155
|
+
else if (
|
1150
1156
|
env[rest[i][VALUE]] &&
|
1151
1157
|
!isUnknownType(args[i][STATS]) &&
|
1152
1158
|
isUnknownType(env[rest[i][VALUE]][STATS]) &&
|
1153
1159
|
getType(args[i][STATS]) !== APPLY
|
1154
1160
|
) {
|
1155
1161
|
// REFF ASSIGMENT
|
1156
|
-
env[rest[i][VALUE]][STATS][
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1162
|
+
setTypeRef(env[rest[i][VALUE]][STATS], args[i][STATS])
|
1163
|
+
setReturnRef(env[rest[i][VALUE]][STATS], args[i][STATS])
|
1164
|
+
} else if (
|
1165
|
+
env[rest[i][VALUE]] &&
|
1166
|
+
!isUnknownType(args[i][STATS]) &&
|
1167
|
+
isUnknownType(env[rest[i][VALUE]][STATS])
|
1168
|
+
) {
|
1169
|
+
setStatsRef(env[rest[i][VALUE]], args[i])
|
1160
1170
|
}
|
1161
1171
|
} else if (env[rest[i][0][VALUE]]) {
|
1162
1172
|
const match = () => {
|
package/src/types.js
CHANGED
@@ -44,7 +44,8 @@ export const toTypeNames = (type) => {
|
|
44
44
|
case UNKNOWN:
|
45
45
|
return 'Unknown'
|
46
46
|
case COLLECTION:
|
47
|
-
return '
|
47
|
+
return 'Array'
|
48
|
+
// return '[]'
|
48
49
|
case ANY:
|
49
50
|
return 'Any'
|
50
51
|
default:
|
@@ -1184,18 +1185,18 @@ export const SPECIAL_FORM_TYPES = {
|
|
1184
1185
|
|
1185
1186
|
export const formatSubType = (T) => {
|
1186
1187
|
switch (T[0]) {
|
1187
|
-
case COLLECTION:
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1188
|
+
// case COLLECTION:
|
1189
|
+
// return `[${
|
1190
|
+
// T[1] instanceof Set
|
1191
|
+
// ? [...T[1]]
|
1192
|
+
// .map((x) =>
|
1193
|
+
// x === COLLECTION
|
1194
|
+
// ? formatSubType([x])
|
1195
|
+
// : toTypeNamesAnyToUknown(x)
|
1196
|
+
// )
|
1197
|
+
// .join(' ')
|
1198
|
+
// : toTypeNamesAnyToUknown(ANY)
|
1199
|
+
// }]`
|
1199
1200
|
case ATOM:
|
1200
1201
|
return `${
|
1201
1202
|
T[1] instanceof Set
|