fez-lisp 1.5.38 → 1.5.39
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 +20 -10
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -599,16 +599,20 @@ export const typeCheck = (ast) => {
|
|
599
599
|
env[name][STATS][SUB_RETURN_TYPE] !== PREDICATE
|
600
600
|
) {
|
601
601
|
warningStack.add(
|
602
|
-
`${name} ends in (${PREDICATE_SUFFIX}) and is expected to return (Predicate) but it doesn't (check #7)`
|
602
|
+
`${name} ends in (${PREDICATE_SUFFIX}) and is expected to return (Predicate) but it doesn't (try wrapping it in a (true?) or (false?)) (check #7)`
|
603
603
|
)
|
604
604
|
} else if (
|
605
605
|
!isPredicate &&
|
606
606
|
env[name][STATS][SUB_RETURN_TYPE] === PREDICATE
|
607
607
|
) {
|
608
608
|
warningStack.add(
|
609
|
-
`${name} should end in (${PREDICATE_SUFFIX}) because it return (Predicate) (check #8)`
|
609
|
+
`${name} should end in (${PREDICATE_SUFFIX}) because it return (Predicate) (try adding ? at the end of the lambda name) (check #8)`
|
610
610
|
)
|
611
611
|
}
|
612
|
+
if (isPredicate) {
|
613
|
+
env[name][STATS][RETURNS] = ATOM
|
614
|
+
env[name][STATS][SUB_RETURN_TYPE] = PREDICATE
|
615
|
+
}
|
612
616
|
// }
|
613
617
|
// if (
|
614
618
|
// env[name][STATS][RETURNS] === UNKNOWN &&
|
@@ -675,12 +679,20 @@ export const typeCheck = (ast) => {
|
|
675
679
|
.toString()
|
676
680
|
.replace('.', 0)
|
677
681
|
}
|
678
|
-
for (
|
682
|
+
for (let i = 0; i < params.length; ++i) {
|
683
|
+
const param = params[i]
|
679
684
|
copy[param[VALUE]] = {
|
680
685
|
[STATS]: { type: UNKNOWN, retried: 0 }
|
681
686
|
}
|
682
|
-
if (env[copy[SCOPE_NAME]])
|
683
|
-
env[copy[SCOPE_NAME]][STATS][ARGS]
|
687
|
+
if (env[copy[SCOPE_NAME]]) {
|
688
|
+
env[copy[SCOPE_NAME]][STATS][ARGS][i] = copy[param[VALUE]]
|
689
|
+
if (
|
690
|
+
param[VALUE][param[VALUE].length - 1] === PREDICATE_SUFFIX
|
691
|
+
) {
|
692
|
+
copy[param[VALUE]][STATS][RETURNS] = ATOM
|
693
|
+
copy[param[VALUE]][STATS][SUB_RETURN_TYPE] = PREDICATE
|
694
|
+
}
|
695
|
+
}
|
684
696
|
}
|
685
697
|
check(rest.at(-1), copy, copy)
|
686
698
|
}
|
@@ -707,7 +719,7 @@ export const typeCheck = (ast) => {
|
|
707
719
|
env[first[VALUE]][STATS][ARGS_COUNT]
|
708
720
|
}) but got ${rest.length} (${stringifyArgs(
|
709
721
|
exp
|
710
|
-
)}) (check #
|
722
|
+
)}) (check #15)`
|
711
723
|
)
|
712
724
|
} else {
|
713
725
|
const isSpecial = SPECIAL_FORMS_SET.has(first[VALUE])
|
@@ -946,9 +958,7 @@ export const typeCheck = (ast) => {
|
|
946
958
|
copy[SCOPE_NAME] = 'root'
|
947
959
|
check(copy, root, copy)
|
948
960
|
while (stack.length) stack.pop()()
|
949
|
-
|
950
|
-
|
951
|
-
[...new Set(errorStack.values()), ...warningStack].join('\n')
|
952
|
-
)
|
961
|
+
const issues = [...new Set(errorStack.values()), ...warningStack]
|
962
|
+
if (issues.length) throw new TypeError(issues.join('\n'))
|
953
963
|
return ast
|
954
964
|
}
|