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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/check.js +20 -10
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.38",
5
+ "version": "1.5.39",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
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 (const param of params) {
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].push(copy[param[VALUE]])
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 #8)`
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
- if (errorStack.size)
950
- throw new TypeError(
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
  }