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/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/macros.js +47 -51
package/package.json
CHANGED
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 (
|
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
|
-
`
|
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
|
-
`
|
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
|
475
|
-
[
|
476
|
-
|
477
|
-
|
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 (
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
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
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
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
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
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, `(${
|
674
|
+
.replaceAll(/\{\}/g, `(${SUGGAR.CREATE_LIST})`)
|
679
675
|
.replaceAll(/\[/g, `(${KEYWORDS.CREATE_ARRAY} `)
|
680
676
|
.replaceAll(/\]/g, ')')
|
681
|
-
.replaceAll(/\{/g, `(${
|
677
|
+
.replaceAll(/\{/g, `(${SUGGAR.CREATE_LIST} `)
|
682
678
|
.replaceAll(/\}/g, ')')
|
683
679
|
|
684
680
|
export const replaceParens = (source) =>
|