@@ -659,6 +659,29 @@ world`},
659659 Exp1 : & BoolNode {Value : true },
660660 Exp2 : & IdentifierNode {Value : "x" }},
661661 },
662+ {
663+ "1; 2; 3" ,
664+ & SequenceNode {
665+ Nodes : []Node {
666+ & IntegerNode {Value : 1 },
667+ & IntegerNode {Value : 2 },
668+ & IntegerNode {Value : 3 },
669+ },
670+ },
671+ },
672+ {
673+ "1; (2; 3)" ,
674+ & SequenceNode {
675+ Nodes : []Node {
676+ & IntegerNode {Value : 1 },
677+ & SequenceNode {
678+ Nodes : []Node {
679+ & IntegerNode {Value : 2 },
680+ & IntegerNode {Value : 3 }},
681+ },
682+ },
683+ },
684+ },
662685 {
663686 "true ? 1; 2; 3 : 4" ,
664687 & ConditionalNode {
@@ -707,6 +730,115 @@ world`},
707730 & IntegerNode {Value : 5 },
708731 & IntegerNode {Value : 6 }}}},
709732 },
733+ {
734+ `all(ls, if true { 1 } else { 2 })` ,
735+ & BuiltinNode {
736+ Name : "all" ,
737+ Arguments : []Node {
738+ & IdentifierNode {Value : "ls" },
739+ & PredicateNode {
740+ Node : & ConditionalNode {
741+ Cond : & BoolNode {Value : true },
742+ Exp1 : & IntegerNode {Value : 1 },
743+ Exp2 : & IntegerNode {Value : 2 }}}}},
744+ },
745+ {
746+ `let x = if true { 1 } else { 2 }; x` ,
747+ & VariableDeclaratorNode {
748+ Name : "x" ,
749+ Value : & ConditionalNode {
750+ Cond : & BoolNode {Value : true },
751+ Exp1 : & IntegerNode {Value : 1 },
752+ Exp2 : & IntegerNode {Value : 2 }},
753+ Expr : & IdentifierNode {Value : "x" }},
754+ },
755+ {
756+ `call(if true { 1 } else { 2 })` ,
757+ & CallNode {
758+ Callee : & IdentifierNode {Value : "call" },
759+ Arguments : []Node {
760+ & ConditionalNode {
761+ Cond : & BoolNode {Value : true },
762+ Exp1 : & IntegerNode {Value : 1 },
763+ Exp2 : & IntegerNode {Value : 2 }}}},
764+ },
765+ {
766+ `[if true { 1 } else { 2 }]` ,
767+ & ArrayNode {
768+ Nodes : []Node {
769+ & ConditionalNode {
770+ Cond : & BoolNode {Value : true },
771+ Exp1 : & IntegerNode {Value : 1 },
772+ Exp2 : & IntegerNode {Value : 2 }}}},
773+ },
774+ {
775+ `map(ls, { 1; 2; 3 })` ,
776+ & BuiltinNode {
777+ Name : "map" ,
778+ Arguments : []Node {
779+ & IdentifierNode {Value : "ls" },
780+ & PredicateNode {
781+ Node : & SequenceNode {
782+ Nodes : []Node {
783+ & IntegerNode {Value : 1 },
784+ & IntegerNode {Value : 2 },
785+ & IntegerNode {Value : 3 },
786+ },
787+ },
788+ },
789+ }},
790+ },
791+ {
792+ `let x = 1; 2; 3 + x` ,
793+ & VariableDeclaratorNode {
794+ Name : "x" ,
795+ Value : & IntegerNode {Value : 1 },
796+ Expr : & SequenceNode {
797+ Nodes : []Node {
798+ & IntegerNode {Value : 2 },
799+ & BinaryNode {
800+ Operator : "+" ,
801+ Left : & IntegerNode {Value : 3 },
802+ Right : & IdentifierNode {Value : "x" },
803+ },
804+ },
805+ },
806+ },
807+ },
808+ {
809+ `let x = 1; let y = 2; 3; 4; x + y` ,
810+ & VariableDeclaratorNode {
811+ Name : "x" ,
812+ Value : & IntegerNode {Value : 1 },
813+ Expr : & VariableDeclaratorNode {
814+ Name : "y" ,
815+ Value : & IntegerNode {Value : 2 },
816+ Expr : & SequenceNode {
817+ Nodes : []Node {
818+ & IntegerNode {Value : 3 },
819+ & IntegerNode {Value : 4 },
820+ & BinaryNode {
821+ Operator : "+" ,
822+ Left : & IdentifierNode {Value : "x" },
823+ Right : & IdentifierNode {Value : "y" },
824+ },
825+ },
826+ }}},
827+ },
828+ {
829+ `let x = (1; 2; 3); x` ,
830+ & VariableDeclaratorNode {
831+ Name : "x" ,
832+ Value : & SequenceNode {
833+ Nodes : []Node {
834+ & IntegerNode {Value : 1 },
835+ & IntegerNode {Value : 2 },
836+ & IntegerNode {Value : 3 },
837+ },
838+ },
839+ Expr : & IdentifierNode {Value : "x" },
840+ },
841+ },
710842 }
711843 for _ , test := range tests {
712844 t .Run (test .input , func (t * testing.T ) {
@@ -788,6 +920,27 @@ func TestParse_error(t *testing.T) {
788920 {`1 not == [1, 2, 5]` , `unexpected token Operator("==") (1:7)
789921 | 1 not == [1, 2, 5]
790922 | ......^` },
923+ {`foo(1; 2; 3)` , `unexpected token Operator(";") (1:6)
924+ | foo(1; 2; 3)
925+ | .....^` },
926+ {
927+ `map(ls, 1; 2; 3)` ,
928+ `unexpected token Operator(";") (1:10)
929+ | map(ls, 1; 2; 3)
930+ | .........^` ,
931+ },
932+ {
933+ `[1; 2; 3]` ,
934+ `unexpected token Operator(";") (1:3)
935+ | [1; 2; 3]
936+ | ..^` ,
937+ },
938+ {
939+ `1 + if true { 2 } else { 3 }` ,
940+ `unexpected token Operator("if") (1:5)
941+ | 1 + if true { 2 } else { 3 }
942+ | ....^` ,
943+ },
791944 }
792945
793946 for _ , test := range tests {
0 commit comments