From 6391800749130ce2c6f1822197514cd1b48b38bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 2 Jul 2025 01:34:02 +0200 Subject: [PATCH 1/2] fix parsing multiple args there was infinite loop because of missing bump_token --- src/lib/parse.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/parse.rs b/src/lib/parse.rs index bc74e3b..7ec028c 100644 --- a/src/lib/parse.rs +++ b/src/lib/parse.rs @@ -314,7 +314,10 @@ where Some(Token { kind: TokenKind::Comma, .. - }) => continue, + }) => { + self.bump_token(); + continue; + } Some(..) => { args.push(self.parse_expr()?); } From 47b5cc7e9892180aec47e72173f32a2cecc30bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 2 Jul 2025 01:34:02 +0200 Subject: [PATCH 2/2] test parsing multiple args there was infinite loop because of missing bump_token --- src/lib/parse.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/lib/parse.rs b/src/lib/parse.rs index 7ec028c..5187b4d 100644 --- a/src/lib/parse.rs +++ b/src/lib/parse.rs @@ -639,6 +639,39 @@ fn test_sin_pi() { ) } +#[test] +fn test_parse_multiple_args() { + let item: ast::Item = parse_line("func(1, 2, 3)".chars()).unwrap(); + + assert_eq!( + item, + ast::Item { + span: (0, 13), + kind: ast::ItemKind::Expr(ast::Expr { + span: (0, 13), + kind: ast::ExprKind::Call { + name_span: (0, 4), + name: "func".to_string(), + args: vec![ + ast::Expr { + span: (5, 6), + kind: ast::ExprKind::Num(1.0), + }, + ast::Expr { + span: (8, 9), + kind: ast::ExprKind::Num(2.0), + }, + ast::Expr { + span: (11, 12), + kind: ast::ExprKind::Num(3.0), + }, + ] + } + }) + } + ); +} + #[test] fn fail_test_14_eq_12() { assert!(parse_line("14 = 12".chars()).is_err());