fez-lisp 1.5.51 → 1.5.52
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/README.md +4 -4
- package/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/check.js +36 -3
- package/src/macros.js +95 -85
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -415,7 +415,7 @@ export const typeCheck = (ast) => {
|
|
415
415
|
[UNKNOWN, PLACEHOLDER],
|
416
416
|
[UNKNOWN, PLACEHOLDER]
|
417
417
|
],
|
418
|
-
[RETURNS]: [
|
418
|
+
[RETURNS]: [UNKNOWN]
|
419
419
|
}
|
420
420
|
},
|
421
421
|
[KEYWORDS.NOT]: {
|
@@ -587,7 +587,16 @@ export const typeCheck = (ast) => {
|
|
587
587
|
const re = rem.slice(2)
|
588
588
|
if (re[0][TYPE] === ATOM || re[1][TYPE] === ATOM) {
|
589
589
|
env[name][STATS][prop][0] = ATOM
|
590
|
-
|
590
|
+
if (
|
591
|
+
getSuffix(re[0][VALUE]) === PREDICATE_SUFFIX ||
|
592
|
+
getSuffix(re[1][VALUE]) === PREDICATE_SUFFIX
|
593
|
+
)
|
594
|
+
env[name][STATS][RETURNS] = [ATOM, PREDICATE]
|
595
|
+
} else if (
|
596
|
+
!isLeaf(re[0]) &&
|
597
|
+
env[re[0][0][VALUE]] &&
|
598
|
+
env[re[0][0][VALUE]][STATS][RETURNS][0] !== UNKNOWN
|
599
|
+
) {
|
591
600
|
env[name][STATS][prop] =
|
592
601
|
env[re[0][0][VALUE]][STATS][RETURNS]
|
593
602
|
if (
|
@@ -603,11 +612,36 @@ export const typeCheck = (ast) => {
|
|
603
612
|
}
|
604
613
|
}
|
605
614
|
// env[name][STATS] = env[re[0][0][VALUE]][STATS]
|
615
|
+
} else if (
|
616
|
+
!isLeaf(re[1]) &&
|
617
|
+
env[re[1][0][VALUE]] &&
|
618
|
+
env[re[1][0][VALUE]][STATS][RETURNS][0] !== UNKNOWN
|
619
|
+
) {
|
620
|
+
env[name][STATS][prop] =
|
621
|
+
env[re[1][0][VALUE]][STATS][RETURNS]
|
622
|
+
if (
|
623
|
+
re[1][0][TYPE] === APPLY &&
|
624
|
+
!name.startsWith(OPTIMIZED_PREFIX)
|
625
|
+
) {
|
626
|
+
switch (re[1][0][VALUE]) {
|
627
|
+
case KEYWORDS.ANONYMOUS_FUNCTION:
|
628
|
+
env[name][STATS][RETURNS] = [UNKNOWN]
|
629
|
+
env[name][STATS][ARGS_COUNT] =
|
630
|
+
re[1].length - 2
|
631
|
+
break
|
632
|
+
}
|
633
|
+
}
|
634
|
+
// env[name][STATS] = env[re[0][0][VALUE]][STATS]
|
606
635
|
} else if (env[re[0][VALUE]]) {
|
607
636
|
env[name][STATS][prop][0] =
|
608
637
|
env[re[0][VALUE]][STATS][TYPE_PROP][0]
|
609
638
|
env[name][STATS][RETURNS][1] =
|
610
639
|
env[re[0][VALUE]][STATS][RETURNS][1]
|
640
|
+
} else if (env[re[1][VALUE]]) {
|
641
|
+
env[name][STATS][prop][1] =
|
642
|
+
env[re[1][VALUE]][STATS][TYPE_PROP][0]
|
643
|
+
env[name][STATS][RETURNS][1] =
|
644
|
+
env[re[1][VALUE]][STATS][RETURNS][1]
|
611
645
|
} else env[name][STATS][prop] = [UNKNOWN]
|
612
646
|
}
|
613
647
|
break
|
@@ -924,7 +958,6 @@ export const typeCheck = (ast) => {
|
|
924
958
|
const alternative = isLeaf(re[1])
|
925
959
|
? copy[re[1][VALUE]]
|
926
960
|
: copy[re[1][0][VALUE]]
|
927
|
-
|
928
961
|
// todo check if condition matches alternative
|
929
962
|
if (
|
930
963
|
concequent &&
|
package/src/macros.js
CHANGED
@@ -11,6 +11,7 @@ import {
|
|
11
11
|
KEYWORDS,
|
12
12
|
PLACEHOLDER,
|
13
13
|
PREDICATE_SUFFIX,
|
14
|
+
STATIC_TYPES,
|
14
15
|
TRUE,
|
15
16
|
TYPE,
|
16
17
|
VALUE,
|
@@ -529,7 +530,7 @@ export const deSuggarAst = (ast, scope) => {
|
|
529
530
|
)
|
530
531
|
}
|
531
532
|
const args = last.slice(1, -1)
|
532
|
-
const newName = `${OPTIMIZED_PREFIX}
|
533
|
+
const newName = `${OPTIMIZED_PREFIX}${name}::*${performance
|
533
534
|
.now()
|
534
535
|
.toString()
|
535
536
|
.replace('.', 0)}*`
|
@@ -549,76 +550,79 @@ export const deSuggarAst = (ast, scope) => {
|
|
549
550
|
)
|
550
551
|
|
551
552
|
exp[exp.length - 1] = [
|
552
|
-
[APPLY,
|
553
|
+
[APPLY, STATIC_TYPES.UNKNOWN],
|
553
554
|
[
|
554
|
-
[APPLY, KEYWORDS.
|
555
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
555
556
|
[
|
556
|
-
[APPLY, KEYWORDS.
|
557
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
557
558
|
[
|
558
|
-
[APPLY, KEYWORDS.
|
559
|
-
[
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
[
|
575
|
-
[WORD, '*fn*'],
|
559
|
+
[APPLY, KEYWORDS.BLOCK],
|
560
|
+
[
|
561
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
562
|
+
[WORD, newName],
|
563
|
+
last
|
564
|
+
],
|
565
|
+
args.length < 5
|
566
|
+
? [
|
567
|
+
[
|
568
|
+
APPLY,
|
569
|
+
`optimization:tail-calls-${args.length}`
|
570
|
+
],
|
571
|
+
[WORD, newName]
|
572
|
+
]
|
573
|
+
: [
|
574
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
575
|
+
[WORD, newName],
|
576
576
|
[
|
577
577
|
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
578
|
-
|
578
|
+
[WORD, '*fn*'],
|
579
579
|
[
|
580
|
-
[APPLY, KEYWORDS.
|
581
|
-
|
582
|
-
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
583
|
-
[WORD, '*res*'],
|
584
|
-
[
|
585
|
-
[APPLY, KEYWORDS.CREATE_ARRAY],
|
586
|
-
[[APPLY, '*fn*'], ...args]
|
587
|
-
]
|
588
|
-
],
|
580
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
581
|
+
...args,
|
589
582
|
[
|
590
|
-
[APPLY, KEYWORDS.
|
583
|
+
[APPLY, KEYWORDS.BLOCK],
|
591
584
|
[
|
592
|
-
[APPLY, KEYWORDS.
|
585
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
586
|
+
[WORD, '*res*'],
|
593
587
|
[
|
594
|
-
[APPLY, KEYWORDS.
|
595
|
-
[
|
596
|
-
[ATOM, 0]
|
588
|
+
[APPLY, KEYWORDS.CREATE_ARRAY],
|
589
|
+
[[APPLY, '*fn*'], ...args]
|
597
590
|
]
|
598
591
|
],
|
599
592
|
[
|
600
|
-
[APPLY, KEYWORDS.
|
601
|
-
[WORD, '*res*'],
|
602
|
-
[ATOM, 0],
|
593
|
+
[APPLY, KEYWORDS.LOOP],
|
603
594
|
[
|
604
|
-
[APPLY, KEYWORDS.
|
595
|
+
[APPLY, KEYWORDS.IS_LAMBDA],
|
605
596
|
[
|
606
597
|
[APPLY, KEYWORDS.GET_ARRAY],
|
607
598
|
[WORD, '*res*'],
|
608
599
|
[ATOM, 0]
|
609
600
|
]
|
601
|
+
],
|
602
|
+
[
|
603
|
+
[APPLY, KEYWORDS.SET_ARRAY],
|
604
|
+
[WORD, '*res*'],
|
605
|
+
[ATOM, 0],
|
606
|
+
[
|
607
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
608
|
+
[
|
609
|
+
[APPLY, KEYWORDS.GET_ARRAY],
|
610
|
+
[WORD, '*res*'],
|
611
|
+
[ATOM, 0]
|
612
|
+
]
|
613
|
+
]
|
610
614
|
]
|
615
|
+
],
|
616
|
+
[
|
617
|
+
[APPLY, KEYWORDS.GET_ARRAY],
|
618
|
+
[WORD, '*res*'],
|
619
|
+
[ATOM, 0]
|
611
620
|
]
|
612
|
-
],
|
613
|
-
[
|
614
|
-
[APPLY, KEYWORDS.GET_ARRAY],
|
615
|
-
[WORD, '*res*'],
|
616
|
-
[ATOM, 0]
|
617
621
|
]
|
618
622
|
]
|
619
623
|
]
|
620
624
|
]
|
621
|
-
|
625
|
+
]
|
622
626
|
]
|
623
627
|
]
|
624
628
|
]
|
@@ -630,7 +634,7 @@ export const deSuggarAst = (ast, scope) => {
|
|
630
634
|
)
|
631
635
|
}
|
632
636
|
const args = last.slice(1, -1)
|
633
|
-
const newName = `${OPTIMIZED_PREFIX}
|
637
|
+
const newName = `${OPTIMIZED_PREFIX}${name}::*${performance
|
634
638
|
.now()
|
635
639
|
.toString()
|
636
640
|
.replace('.', 0)}*`
|
@@ -647,55 +651,61 @@ export const deSuggarAst = (ast, scope) => {
|
|
647
651
|
const keyName = newName + ':key'
|
648
652
|
|
649
653
|
exp[exp.length - 1] = [
|
650
|
-
[APPLY,
|
654
|
+
[APPLY, STATIC_TYPES.UNKNOWN],
|
651
655
|
[
|
652
|
-
[APPLY, KEYWORDS.
|
656
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
653
657
|
[
|
654
|
-
[APPLY, KEYWORDS.
|
655
|
-
[
|
656
|
-
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
657
|
-
[WORD, memoName],
|
658
|
-
[[APPLY, 'new:map64']]
|
659
|
-
],
|
658
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
660
659
|
[
|
661
|
-
[APPLY, KEYWORDS.
|
662
|
-
[
|
660
|
+
[APPLY, KEYWORDS.BLOCK],
|
661
|
+
[
|
662
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
663
|
+
[WORD, memoName],
|
664
|
+
[[APPLY, 'new:map64']]
|
665
|
+
],
|
663
666
|
[
|
664
|
-
[APPLY, KEYWORDS.
|
665
|
-
|
667
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
668
|
+
[WORD, newName],
|
666
669
|
[
|
667
|
-
[APPLY, KEYWORDS.
|
670
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
671
|
+
...args,
|
668
672
|
[
|
669
|
-
[APPLY, KEYWORDS.
|
670
|
-
[WORD, keyName],
|
673
|
+
[APPLY, KEYWORDS.BLOCK],
|
671
674
|
[
|
672
|
-
[APPLY,
|
673
|
-
[
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
[WORD, keyName]
|
682
|
-
],
|
683
|
-
[
|
684
|
-
[APPLY, 'map:get'],
|
685
|
-
[WORD, memoName],
|
686
|
-
[WORD, keyName]
|
675
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
676
|
+
[WORD, keyName],
|
677
|
+
[
|
678
|
+
[APPLY, 'from:string-or-number->key'],
|
679
|
+
[
|
680
|
+
[APPLY, KEYWORDS.CREATE_ARRAY],
|
681
|
+
...args
|
682
|
+
]
|
683
|
+
]
|
687
684
|
],
|
688
685
|
[
|
689
|
-
[APPLY,
|
690
|
-
[
|
691
|
-
|
692
|
-
|
686
|
+
[APPLY, KEYWORDS.IF],
|
687
|
+
[
|
688
|
+
[APPLY, 'map:exists?'],
|
689
|
+
[WORD, memoName],
|
690
|
+
[WORD, keyName]
|
691
|
+
],
|
692
|
+
[
|
693
|
+
[APPLY, 'map:get'],
|
694
|
+
[WORD, memoName],
|
695
|
+
[WORD, keyName]
|
696
|
+
],
|
697
|
+
[
|
698
|
+
[APPLY, 'map:set-and-get!'],
|
699
|
+
[WORD, memoName],
|
700
|
+
[WORD, keyName],
|
701
|
+
last.at(-1)
|
702
|
+
]
|
693
703
|
]
|
694
704
|
]
|
695
705
|
]
|
696
|
-
]
|
697
|
-
|
698
|
-
|
706
|
+
],
|
707
|
+
[WORD, newName]
|
708
|
+
]
|
699
709
|
]
|
700
710
|
]
|
701
711
|
]
|