fez-lisp 1.5.142 → 1.5.143

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 +37 -3
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.142",
5
+ "version": "1.5.143",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
package/src/check.js CHANGED
@@ -209,6 +209,8 @@ export const setTypeToAtom = (stats) =>
209
209
  export const setTypeToCollection = (stats) =>
210
210
  (isUnknownType(stats) || isAnyType(stats)) &&
211
211
  (stats[TYPE_PROP][0] = COLLECTION)
212
+ export const setTypeToAbstraction = (stats) =>
213
+ (isUnknownType(stats) || isAnyType(stats)) && (stats[TYPE_PROP][0] = APPLY)
212
214
  export const setReturnToAbbstraction = (stats) =>
213
215
  isUnknownReturn(stats) && (stats[RETURNS][0] = APPLY)
214
216
  export const setTypeRef = (stats, value) =>
@@ -739,13 +741,45 @@ const resolveReturnType = ({ returns, rem, stack, prop, exp, name, env }) => {
739
741
  // env[name][STATS][TYPE_PROP] =
740
742
  const genericReturn =
741
743
  rem.slice(1)[env[returns[VALUE]][STATS][RETURNS][2]]
742
- switch (genericReturn[TYPE]) {
744
+ const head = isLeaf(genericReturn)
745
+ ? genericReturn
746
+ : genericReturn[0]
747
+ switch (head[TYPE]) {
743
748
  case ATOM:
744
749
  setTypeToAtom(env[name][STATS])
745
750
  break
746
751
  case WORD:
747
- if (env[genericReturn[VALUE]])
748
- setStatsRef(env[name], env[genericReturn[VALUE]])
752
+ if (env[head[VALUE]])
753
+ setStatsRef(env[name], env[head[VALUE]])
754
+ break
755
+ case APPLY:
756
+ case KEYWORDS.ANONYMOUS_FUNCTION:
757
+ {
758
+ setTypeToAbstraction(env[name][STATS])
759
+ checkReturnType({
760
+ exp: [genericReturn],
761
+ stack,
762
+ name,
763
+ env
764
+ })
765
+ }
766
+ break
767
+ case KEYWORDS.CREATE_ARRAY:
768
+ {
769
+ setTypeToCollection(env[name][STATS])
770
+ setPropToSubReturn(
771
+ env[name][STATS],
772
+ TYPE_PROP,
773
+ initArrayType({ rem: genericReturn, env })
774
+ )
775
+ }
776
+ break
777
+ default:
778
+ if (env[head[VALUE]])
779
+ setTypeToReturn(
780
+ env[name][STATS],
781
+ env[head[VALUE]][STATS]
782
+ )
749
783
  break
750
784
  }
751
785
  } else