fez-lisp 1.5.135 → 1.5.136
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 +1 -1
- package/src/check.js +18 -8
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -147,6 +147,12 @@ export const setPropToAbstraction = (stats, prop) => {
|
|
147
147
|
(stats[prop][0] = APPLY)
|
148
148
|
)
|
149
149
|
}
|
150
|
+
export const setPropToCollection = (stats, prop) => {
|
151
|
+
return (
|
152
|
+
(stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
|
153
|
+
(stats[prop][0] = COLLECTION)
|
154
|
+
)
|
155
|
+
}
|
150
156
|
export const setProp = (stats, prop, value) => {
|
151
157
|
return (
|
152
158
|
(stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
|
@@ -440,6 +446,9 @@ const IfApplyBranch = ({ leaf, branch, re, prop, ref, env }) => {
|
|
440
446
|
ref,
|
441
447
|
prop
|
442
448
|
})
|
449
|
+
case KEYWORDS.CREATE_ARRAY:
|
450
|
+
setPropToReturnRef(ref[STATS], prop, initArrayType({ rem: re, env }))
|
451
|
+
break
|
443
452
|
case KEYWORDS.ANONYMOUS_FUNCTION:
|
444
453
|
setPropToAbstraction(ref[STATS], prop)
|
445
454
|
ref[STATS][RETURNS] = [UNKNOWN]
|
@@ -569,10 +578,10 @@ const resolveSetter = (first, rest, env) => {
|
|
569
578
|
case APPLY:
|
570
579
|
if (env[right[VALUE]]) {
|
571
580
|
if (right[VALUE] === KEYWORDS.CREATE_ARRAY) {
|
572
|
-
current[STATS][TYPE_PROP][1] =
|
581
|
+
current[STATS][TYPE_PROP][1] = initArrayType({
|
573
582
|
rem: rest.at(-1),
|
574
583
|
env
|
575
|
-
})
|
584
|
+
})[RETURNS][1]
|
576
585
|
break
|
577
586
|
}
|
578
587
|
if (hasSubReturn(env[right[VALUE]][STATS]))
|
@@ -652,7 +661,11 @@ const initArrayType = ({ rem, env }) => {
|
|
652
661
|
[TYPE_PROP]: [APPLY],
|
653
662
|
[RETURNS]: [COLLECTION, new Set(sub ? [...sub] : [main])]
|
654
663
|
}
|
655
|
-
}
|
664
|
+
} else
|
665
|
+
return {
|
666
|
+
[TYPE_PROP]: [APPLY],
|
667
|
+
[RETURNS]: [COLLECTION, new Set([])]
|
668
|
+
}
|
656
669
|
}
|
657
670
|
const resolveRetunType = ({ returns, rem, stack, prop, exp, name, env }) => {
|
658
671
|
if (returns[TYPE] === ATOM) {
|
@@ -661,10 +674,7 @@ const resolveRetunType = ({ returns, rem, stack, prop, exp, name, env }) => {
|
|
661
674
|
} else {
|
662
675
|
switch (returns[VALUE]) {
|
663
676
|
case KEYWORDS.CREATE_ARRAY:
|
664
|
-
{
|
665
|
-
const r = initArrayType({ rem, env })
|
666
|
-
if (r) setPropToSubReturn(env[name][STATS], prop, r)
|
667
|
-
}
|
677
|
+
setPropToSubReturn(env[name][STATS], prop, initArrayType({ rem, env }))
|
668
678
|
break
|
669
679
|
case KEYWORDS.IF:
|
670
680
|
resolveCondition({ rem, name, env, exp, prop })
|
@@ -739,7 +749,7 @@ export const typeCheck = (ast) => {
|
|
739
749
|
const first = exp[0]
|
740
750
|
const actual =
|
741
751
|
rest[i][0][VALUE] === KEYWORDS.CREATE_ARRAY
|
742
|
-
? initArrayType({ rem: rest[i], env })
|
752
|
+
? initArrayType({ rem: rest[i], env })
|
743
753
|
: env[rest[i][0][VALUE]][STATS]
|
744
754
|
const expected = args[i][STATS]
|
745
755
|
retryArgs(args[i][STATS], exp, stack, () =>
|