diff --git a/src/compiler/ast.rs b/src/compiler/ast.rs index 6c296a4..13dd9b1 100644 --- a/src/compiler/ast.rs +++ b/src/compiler/ast.rs @@ -13,5 +13,5 @@ pub enum Expression<'source> { Box>, Option>>, ), - FunCall(Vec>>), + FunCall(&'source str, Vec>>), } diff --git a/src/compiler/parser.rs b/src/compiler/parser.rs index f33b3f0..6472e71 100644 --- a/src/compiler/parser.rs +++ b/src/compiler/parser.rs @@ -488,8 +488,39 @@ mod tests { ]); assert_eq!( result, - FunCall(vec![Box::new(Identifier("a")), Box::new(Identifier("b")),]) + FunCall( + "f", + vec![Box::new(Identifier("a")), Box::new(Identifier("b")),] + ) ); + + let result = parse(&vec![ + new_id("f"), + new_punc("("), + new_id("a"), + new_punc(","), + new_int("1"), + new_id("+"), + new_int("2"), + new_punc(")"), + ]); + assert_eq!( + result, + FunCall( + "f", + vec![ + Box::new(Identifier("a")), + Box::new(BinaryOp( + Box::new(IntLiteral(1)), + "+", + Box::new(IntLiteral(2)), + )), + ] + ) + ); + + let result = parse(&vec![new_id("f"), new_punc("("), new_punc(")")]); + assert_eq!(result, FunCall("f", vec![])); } #[test] @@ -507,10 +538,13 @@ mod tests { ]); assert_eq!( result, - FunCall(vec![ - Box::new(Identifier("a")), - Box::new(FunCall(vec![Box::new(Identifier("b"))])), - ]) + FunCall( + "f", + vec![ + Box::new(Identifier("a")), + Box::new(FunCall("g", vec![Box::new(Identifier("b"))])), + ] + ) ); } @@ -529,7 +563,7 @@ mod tests { BinaryOp( Box::new(IntLiteral(1)), "+", - Box::new(FunCall(vec![Box::new(Identifier("a"))])) + Box::new(FunCall("f", vec![Box::new(Identifier("a"))])) ) ); }