fez-lisp 1.4.15 → 1.4.17

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.4.15",
5
+ "version": "1.4.17",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
@@ -776,7 +776,6 @@ export const keywords = {
776
776
  }`
777
777
  )
778
778
  const localEnv = Object.create(env)
779
- // localEnv[KEYWORDS.BLOCK] = block[KEYWORDS.BLOCK]
780
779
  for (let i = 0; i < props.length; ++i) {
781
780
  const value = evaluate(props[i], scope)
782
781
  Object.defineProperty(localEnv, params[i][VALUE], {
package/src/macros.js CHANGED
@@ -403,15 +403,11 @@ export const deSuggarAst = (ast, scope) => {
403
403
  if (exp[1][0][VALUE] === SUGGAR.CREATE_LIST) {
404
404
  const lastLeft = left.pop()
405
405
  const vars = left
406
- if (
407
- !isLeaf(right) &&
408
- right[0][TYPE] === APPLY &&
409
- right[0][VALUE] === SUGGAR.CREATE_LIST
410
- ) {
406
+ if (!isLeaf(right) && right[0][TYPE] !== WORD) {
411
407
  throw new SyntaxError(
412
- `Destructuring requires right hand side to be a word but got an apply ${stringifyArgs(
408
+ `Destructuring requires right hand side to be a word but got an apply\n(${stringifyArgs(
413
409
  exp
414
- )}`
410
+ )})`
415
411
  )
416
412
  } else {
417
413
  newScope = vars
@@ -451,24 +447,21 @@ export const deSuggarAst = (ast, scope) => {
451
447
  vars[0][TYPE] = WORD
452
448
  exp.length = 0
453
449
  } else if (exp[1][0][VALUE] === KEYWORDS.CREATE_ARRAY) {
454
- const lastLeft = left.pop()
455
- // const isList = exp[i][exp[i].length - 2][VALUE] === KEYWORDS.BITWISE_NOT
456
- const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
457
- const vars = left
458
- const indexes = vars.map((x, i) => [i, x])
459
- vars[0][TYPE] = WORD
460
- exp.length = 0
461
- if (
462
- !isLeaf(right) &&
463
- right[0][TYPE] === APPLY &&
464
- right[0][VALUE] === KEYWORDS.CREATE_ARRAY
465
- ) {
450
+ if (!isLeaf(right) && right[0][TYPE] !== WORD) {
466
451
  throw new SyntaxError(
467
- `Destructuring requires right hand side to be a word but got an apply ${stringifyArgs(
452
+ `Destructuring requires right hand side to be a word but got an apply\n(${stringifyArgs(
468
453
  exp
469
- )}`
454
+ )})`
470
455
  )
471
456
  } else {
457
+ const lastLeft = left.pop()
458
+ // const isList = exp[i][exp[i].length - 2][VALUE] === KEYWORDS.BITWISE_NOT
459
+ const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
460
+ const vars = left
461
+ const indexes = vars.map((x, i) => [i, x])
462
+
463
+ vars[0][TYPE] = WORD
464
+ exp.length = 0
472
465
  newScope = indexes
473
466
  .filter((x) => x[1][VALUE] !== PLACEHOLDER)
474
467
  .map(([i]) => [
@@ -520,6 +513,7 @@ export const deSuggarAst = (ast, scope) => {
520
513
  },
521
514
  last
522
515
  )
516
+
523
517
  exp[exp.length - 1] = [
524
518
  [APPLY, KEYWORDS.CALL_FUNCTION],
525
519
  [
@@ -531,58 +525,66 @@ export const deSuggarAst = (ast, scope) => {
531
525
  [WORD, newName],
532
526
  last
533
527
  ],
534
- [
535
- [APPLY, KEYWORDS.CALL_FUNCTION],
536
- [WORD, newName],
537
- [
538
- [APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
539
- [WORD, '*fn*'],
540
- [
541
- [APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
542
- ...args,
528
+ args.length < 5
529
+ ? [
543
530
  [
544
- [APPLY, KEYWORDS.BLOCK],
545
- [
546
- [APPLY, KEYWORDS.DEFINE_VARIABLE],
547
- [WORD, '*res*'],
548
- [
549
- [APPLY, KEYWORDS.CREATE_ARRAY],
550
- [[APPLY, '*fn*'], ...args]
551
- ]
552
- ],
531
+ APPLY,
532
+ `optimization:tail-calls-${args.length}`
533
+ ],
534
+ [WORD, newName]
535
+ ]
536
+ : [
537
+ [APPLY, KEYWORDS.CALL_FUNCTION],
538
+ [WORD, newName],
539
+ [
540
+ [APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
541
+ [WORD, '*fn*'],
553
542
  [
554
- [APPLY, KEYWORDS.LOOP],
543
+ [APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
544
+ ...args,
555
545
  [
556
- [APPLY, KEYWORDS.IS_LAMBDA],
546
+ [APPLY, KEYWORDS.BLOCK],
557
547
  [
558
- [APPLY, KEYWORDS.GET_ARRAY],
548
+ [APPLY, KEYWORDS.DEFINE_VARIABLE],
559
549
  [WORD, '*res*'],
560
- [ATOM, 0]
561
- ]
562
- ],
563
- [
564
- [APPLY, KEYWORDS.SET_ARRAY],
565
- [WORD, '*res*'],
566
- [ATOM, 0],
550
+ [
551
+ [APPLY, KEYWORDS.CREATE_ARRAY],
552
+ [[APPLY, '*fn*'], ...args]
553
+ ]
554
+ ],
567
555
  [
568
- [APPLY, KEYWORDS.CALL_FUNCTION],
556
+ [APPLY, KEYWORDS.LOOP],
557
+ [
558
+ [APPLY, KEYWORDS.IS_LAMBDA],
559
+ [
560
+ [APPLY, KEYWORDS.GET_ARRAY],
561
+ [WORD, '*res*'],
562
+ [ATOM, 0]
563
+ ]
564
+ ],
569
565
  [
570
- [APPLY, KEYWORDS.GET_ARRAY],
566
+ [APPLY, KEYWORDS.SET_ARRAY],
571
567
  [WORD, '*res*'],
572
- [ATOM, 0]
568
+ [ATOM, 0],
569
+ [
570
+ [APPLY, KEYWORDS.CALL_FUNCTION],
571
+ [
572
+ [APPLY, KEYWORDS.GET_ARRAY],
573
+ [WORD, '*res*'],
574
+ [ATOM, 0]
575
+ ]
576
+ ]
573
577
  ]
578
+ ],
579
+ [
580
+ [APPLY, KEYWORDS.GET_ARRAY],
581
+ [WORD, '*res*'],
582
+ [ATOM, 0]
574
583
  ]
575
584
  ]
576
- ],
577
- [
578
- [APPLY, KEYWORDS.GET_ARRAY],
579
- [WORD, '*res*'],
580
- [ATOM, 0]
581
585
  ]
582
586
  ]
583
587
  ]
584
- ]
585
- ]
586
588
  ]
587
589
  ]
588
590
  ]
@@ -659,6 +661,7 @@ export const deSuggarAst = (ast, scope) => {
659
661
  ]
660
662
  ]
661
663
  ]
664
+ deSuggarAst(exp[exp.length - 1])
662
665
  }
663
666
  }
664
667
  }