fez-lisp 1.3.24 → 1.3.26

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.3.24",
5
+ "version": "1.3.26",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
package/src/macros.js CHANGED
@@ -394,14 +394,11 @@ export const deSuggarAst = (ast, scope) => {
394
394
  case KEYWORDS.DEFINE_VARIABLE:
395
395
  {
396
396
  if (!isLeaf(exp[1]) && exp[1][0][TYPE] === APPLY) {
397
- const left = exp[1]
397
+ const left = exp[1].slice(1)
398
398
  const right = exp.at(-1)
399
- const isList =
400
- left[left.length - 2][VALUE] === KEYWORDS.BITWISE_NOT
401
399
  let newScope
402
- if (isList) {
400
+ if (exp[1][0][VALUE] === SUGGAR.CREATE_LIST) {
403
401
  const lastLeft = left.pop()
404
- left.pop() // tail separator
405
402
  const vars = left
406
403
  if (
407
404
  !isLeaf(right) &&
@@ -409,7 +406,7 @@ export const deSuggarAst = (ast, scope) => {
409
406
  right[0][VALUE] === SUGGAR.CREATE_LIST
410
407
  ) {
411
408
  throw new SyntaxError(
412
- `Destrcuturing requires right hadnd side to be a word but got an apply ${stringifyArgs(
409
+ `Destructuring requires right hand side to be a word but got an apply ${stringifyArgs(
413
410
  exp
414
411
  )}`
415
412
  )
@@ -450,14 +447,12 @@ export const deSuggarAst = (ast, scope) => {
450
447
  }
451
448
  vars[0][TYPE] = WORD
452
449
  exp.length = 0
453
- } else {
450
+ } else if (exp[1][0][VALUE] === KEYWORDS.CREATE_ARRAY) {
454
451
  const lastLeft = left.pop()
455
452
  // const isList = exp[i][exp[i].length - 2][VALUE] === KEYWORDS.BITWISE_NOT
456
453
  const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
457
454
  const vars = left
458
- const indexes = vars
459
- .map((x, i) => (x[VALUE] === PLACEHOLDER ? -1 : i))
460
- .filter((x) => x !== -1)
455
+ const indexes = vars.map((x, i) => [i, x])
461
456
  vars[0][TYPE] = WORD
462
457
  exp.length = 0
463
458
  if (
@@ -466,16 +461,18 @@ export const deSuggarAst = (ast, scope) => {
466
461
  right[0][VALUE] === KEYWORDS.CREATE_ARRAY
467
462
  ) {
468
463
  throw new SyntaxError(
469
- `Destrcuturing requires right hadnd side to be a word but got an apply ${stringifyArgs(
464
+ `Destructuring requires right hand side to be a word but got an apply ${stringifyArgs(
470
465
  exp
471
466
  )}`
472
467
  )
473
468
  } else {
474
- newScope = indexes.map((i) => [
475
- [APPLY, KEYWORDS.DEFINE_VARIABLE],
476
- vars[i],
477
- [[APPLY, KEYWORDS.GET_ARRAY], right, [ATOM, i]]
478
- ])
469
+ newScope = indexes
470
+ .filter((x) => x[1][VALUE] !== PLACEHOLDER)
471
+ .map(([i]) => [
472
+ [APPLY, KEYWORDS.DEFINE_VARIABLE],
473
+ vars[i],
474
+ [[APPLY, KEYWORDS.GET_ARRAY], right, [ATOM, i]]
475
+ ])
479
476
  if (isSlicing)
480
477
  newScope.push([
481
478
  [APPLY, KEYWORDS.DEFINE_VARIABLE],
@@ -484,7 +481,7 @@ export const deSuggarAst = (ast, scope) => {
484
481
  [APPLY, KEYWORDS.CALL_FUNCTION],
485
482
  SLICE,
486
483
  right,
487
- [ATOM, indexes.at(-1) + 1]
484
+ [ATOM, indexes.at(-1)[0] + 1]
488
485
  ]
489
486
  ])
490
487
  }
@@ -500,17 +497,17 @@ export const deSuggarAst = (ast, scope) => {
500
497
  const block = exp.at(-1)
501
498
  const newBlock = [[APPLY, KEYWORDS.BLOCK]]
502
499
  for (let i = 1; i < exp.length - 1; ++i) {
503
- if (!isLeaf(exp[i]) && exp[i][0][TYPE] === APPLY) {
504
- const isList =
505
- exp[i][exp[i].length - 2][VALUE] ===
506
- KEYWORDS.BITWISE_NOT
507
- if (isList) {
508
- const left = exp[i]
500
+ if (
501
+ !isLeaf(exp[i]) &&
502
+ exp[i][0][TYPE] === APPLY &&
503
+ (exp[i][0][VALUE] === KEYWORDS.CREATE_ARRAY ||
504
+ exp[i][0][VALUE] === SUGGAR.CREATE_LIST)
505
+ ) {
506
+ if (exp[i][0][VALUE] === SUGGAR.CREATE_LIST) {
507
+ const left = exp[i].slice(1)
509
508
  const right = [WORD, `_arg${i}`]
510
509
  const lastLeft = left.pop()
511
510
 
512
- left.pop() // tail separator
513
-
514
511
  const vars = left
515
512
  const indexes = vars
516
513
  .map((x, i) => [x, i])
@@ -552,39 +549,37 @@ export const deSuggarAst = (ast, scope) => {
552
549
  left[0][TYPE] = WORD
553
550
  exp[i] = right
554
551
  exp[i].length = 2
555
- } else {
556
- const left = exp[i]
552
+ } else if (exp[i][0][VALUE] === KEYWORDS.CREATE_ARRAY) {
553
+ const left = exp[i].slice(1)
557
554
  const right = [WORD, `_arg${i}`]
558
555
  left[0][TYPE] = WORD
559
556
  const lastLeft = left.pop()
560
557
  const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
561
558
  const vars = left
562
- const indexes = vars
563
- .map((x, i) => (x[VALUE] === PLACEHOLDER ? -1 : i))
564
- .filter((x) => x !== -1)
565
- {
566
- // const tempBlcok = [...block[VALUE]]
567
- newBlock.push(
568
- ...indexes.map((i) => [
559
+ const indexes = vars.map((x, i) => [i, x])
560
+ // const tempBlcok = [...block[VALUE]]
561
+ newBlock.push(
562
+ ...indexes
563
+ .filter((x) => x[1][VALUE] !== PLACEHOLDER)
564
+ .map(([i]) => [
569
565
  [APPLY, KEYWORDS.DEFINE_VARIABLE],
570
566
  vars[i],
571
567
  [[APPLY, KEYWORDS.GET_ARRAY], right, [ATOM, i]]
572
568
  ])
573
- )
574
- if (isSlicing)
575
- newBlock.push([
576
- [APPLY, KEYWORDS.DEFINE_VARIABLE],
577
- lastLeft,
578
- [
579
- [APPLY, KEYWORDS.CALL_FUNCTION],
580
- SLICE,
581
- right,
582
- [ATOM, indexes.at(-1) + 1]
583
- ]
584
- ])
585
- exp[i] = right
586
- exp[i].length = 2
587
- }
569
+ )
570
+ if (isSlicing)
571
+ newBlock.push([
572
+ [APPLY, KEYWORDS.DEFINE_VARIABLE],
573
+ lastLeft,
574
+ [
575
+ [APPLY, KEYWORDS.CALL_FUNCTION],
576
+ SLICE,
577
+ right,
578
+ [ATOM, indexes.at(-1)[0] + 1]
579
+ ]
580
+ ])
581
+ exp[i] = right
582
+ exp[i].length = 2
588
583
  }
589
584
  exp[exp.length - 1] = newBlock.concat(
590
585
  hasBlock(block) ? block.slice(1) : [block]
@@ -610,6 +605,7 @@ export const deSuggarAst = (ast, scope) => {
610
605
  }
611
606
  }
612
607
  evaluate(ast)
608
+ iron(ast)
613
609
  return ast
614
610
  }
615
611
  export const replaceStrings = (source) => {
@@ -675,10 +671,10 @@ export const replaceQuotes = (source) =>
675
671
  .replaceAll(/\`\(/g, `(${SUGGAR.CREATE_LIST} `)
676
672
  .replaceAll(/\(\)/g, `(${KEYWORDS.CREATE_ARRAY})`)
677
673
  .replaceAll(/\[\]/g, `(${KEYWORDS.CREATE_ARRAY})`)
678
- .replaceAll(/\{\}/g, `(${KEYWORDS.CREATE_LIST})`)
674
+ .replaceAll(/\{\}/g, `(${SUGGAR.CREATE_LIST})`)
679
675
  .replaceAll(/\[/g, `(${KEYWORDS.CREATE_ARRAY} `)
680
676
  .replaceAll(/\]/g, ')')
681
- .replaceAll(/\{/g, `(${KEYWORDS.CREATE_LIST} `)
677
+ .replaceAll(/\{/g, `(${SUGGAR.CREATE_LIST} `)
682
678
  .replaceAll(/\}/g, ')')
683
679
 
684
680
  export const replaceParens = (source) =>