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/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.119",
5
+ "version": "1.5.121",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
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
- (isUnknownReturn(stats) || isAnyReturn(stats)) && (stats[RETURNS][0] = APPLY)
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
- setTypeToReturn(env[name][STATS], env[returns[VALUE]][STATS])
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
- arg[i][STATS][TYPE_PROP] =
828
- env[ARG[VALUE]][STATS][RETURNS]
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
- arg[i][STATS] = env[ARG[VALUE]][STATS]
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
- setReturn(env[name][STATS], args[i][STATS])
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
- } else if (
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][TYPE_PROP] =
1157
- args[i][STATS][TYPE_PROP]
1158
- env[rest[i][VALUE]][STATS][RETURNS] =
1159
- args[i][STATS][RETURNS]
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
- return `[${
1189
- T[1] instanceof Set
1190
- ? [...T[1]]
1191
- .map((x) =>
1192
- x === COLLECTION
1193
- ? formatSubType([x])
1194
- : toTypeNamesAnyToUknown(x)
1195
- )
1196
- .join(' ')
1197
- : toTypeNamesAnyToUknown(ANY)
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