fez-lisp 1.5.134 → 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 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.134",
5
+ "version": "1.5.136",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
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] = (initArrayType({
581
+ current[STATS][TYPE_PROP][1] = initArrayType({
573
582
  rem: rest.at(-1),
574
583
  env
575
- }) ?? { [RETURNS]: [COLLECTION, new Set([])] })[RETURNS][1]
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 }) ?? env[rest[i][0][VALUE]][STATS]
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, () =>
package/src/compiler.js CHANGED
@@ -42,6 +42,17 @@ const toCamelCase = (name) => {
42
42
  const dashToLodashes = (name) => name.replace(new RegExp(/-/g), '_')
43
43
  const keywordToHelper = (name) => {
44
44
  switch (name) {
45
+ case STATIC_TYPES.ABSTRACTION:
46
+ case STATIC_TYPES.COLLECTION:
47
+ case STATIC_TYPES.UNKNOWN:
48
+ case STATIC_TYPES.ATOM:
49
+ case STATIC_TYPES.PREDICATE:
50
+ case STATIC_TYPES.ANY:
51
+ case STATIC_TYPES.NUMBER:
52
+ case DEBUG.ASSERT:
53
+ case DEBUG.LOG:
54
+ case DEBUG.STRING:
55
+ return '__identity'
45
56
  case TRUE_WORD:
46
57
  return '__true'
47
58
  case FALSE_WORD:
@@ -114,7 +125,7 @@ const Helpers = {
114
125
  or: `or=(a, b)=>+(a||b)`,
115
126
  get: 'get=(arr,i)=>arr[i]',
116
127
  length: 'length=(arr)=>arr.length',
117
- __tco: `__tco=fn=>(...args)=>{let result=fn(...args);while(typeof result==='function')result=result();return result}`,
128
+ __identity: `__identity=(x)=>x`,
118
129
  atom_predicate: `atom_predicate=(number)=>+(typeof number==='number')`,
119
130
  lambda_predicate: `lambda_predicate=(fn)=>+(typeof fn==='function')`,
120
131
  __error: `__error=(error)=>{throw new Error(error.map((x)=>String.fromCharCode(x)).join(''))}`,