From 7eb839b7c23431e351ee702ad37f1a0c148295d1 Mon Sep 17 00:00:00 2001
From: Aaron Councilman <aaronjc4@illinois.edu>
Date: Tue, 28 Jan 2025 13:08:15 -0600
Subject: [PATCH] Allow dangling commas in argument lists

---
 juno_frontend/src/lang.y      | 11 +++++------
 juno_samples/cava/src/cava.jn |  4 ++--
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/juno_frontend/src/lang.y b/juno_frontend/src/lang.y
index d294d9a1..e980773f 100644
--- a/juno_frontend/src/lang.y
+++ b/juno_frontend/src/lang.y
@@ -174,13 +174,12 @@ FuncDecl -> Result<Top, ()>
                           body : $11? }) }
   ;
 Arguments -> Result<Vec<(Option<Span>, VarBind)>, ()>
-  :                        { Ok(vec![]) }
-  | ArgBind                { Ok(vec![$1?]) }
-  | ArgumentsS ',' ArgBind { flatten($1, $3) }
+  : ArgumentsList { Ok($1?.into_iter().collect()) }
   ;
-ArgumentsS -> Result<Vec<(Option<Span>, VarBind)>, ()>
-  : ArgBind                { Ok(vec![$1?]) }
-  | ArgumentsS ',' ArgBind { flatten($1, $3) }
+ArgumentsList -> Result<VecDeque<(Option<Span>, VarBind)>, ()>
+  :                             { Ok(VecDeque::new()) }
+  | ArgBind                     { Ok(VecDeque::from([$1?])) }
+  | ArgBind ',' ArgumentsList   { let mut lst = $3?; lst.push_front($1?); Ok(lst) }
   ;
 ArgBind -> Result<(Option<Span>, VarBind), ()>
   : 'inout' VarBind { Ok((Some(span_of_tok($1)?), $2?)) }
diff --git a/juno_samples/cava/src/cava.jn b/juno_samples/cava/src/cava.jn
index fb51beeb..f3096ec3 100644
--- a/juno_samples/cava/src/cava.jn
+++ b/juno_samples/cava/src/cava.jn
@@ -206,8 +206,8 @@ fn cava<r, c, num_ctrl_pts : usize>(
   ctrl_pts : f32[num_ctrl_pts, CHAN],
   weights : f32[num_ctrl_pts, CHAN],
   coefs : f32[4, CHAN],
-  tonemap : f32[256, CHAN]) 
--> u8[CHAN, r, c] {
+  tonemap : f32[256, CHAN],
+) -> u8[CHAN, r, c] {
   let scaled = scale::<r, c>(input);
   let demosc = demosaic::<r, c>(scaled);
   let denosd = denoise::<r, c>(demosc);
-- 
GitLab