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/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/interpreter.js +0 -1
- package/src/macros.js +62 -59
package/package.json
CHANGED
package/src/interpreter.js
CHANGED
@@ -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
|
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
|
-
|
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
|
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
|
-
[
|
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
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
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.
|
543
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
544
|
+
...args,
|
555
545
|
[
|
556
|
-
[APPLY, KEYWORDS.
|
546
|
+
[APPLY, KEYWORDS.BLOCK],
|
557
547
|
[
|
558
|
-
[APPLY, KEYWORDS.
|
548
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
559
549
|
[WORD, '*res*'],
|
560
|
-
[
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
[WORD, '*res*'],
|
566
|
-
[ATOM, 0],
|
550
|
+
[
|
551
|
+
[APPLY, KEYWORDS.CREATE_ARRAY],
|
552
|
+
[[APPLY, '*fn*'], ...args]
|
553
|
+
]
|
554
|
+
],
|
567
555
|
[
|
568
|
-
[APPLY, KEYWORDS.
|
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.
|
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
|
}
|