macro_rules! arr {
[] => { ... };
(@push $array:ident ($($val:tt)+)) => { ... };
(@push_and_continue $array:ident ($($val:tt)+) ($($rest:tt)+)) => { ... };
(@push_and_continue $array:ident ($($val:tt)+)) => { ... };
(@next_value $array:ident ($($rest:tt)*)) => { ... };
(@flat_expr_or_continue $array:ident (...[$($val:tt)*], $($rest:tt)*)) => { ... };
(@flat_expr_or_continue $array:ident (...[$($val:tt)*])) => { ... };
(@flat_expr_or_continue $array:ident (...$val:expr , $($rest:tt)*)) => { ... };
(@flat_expr_or_continue $array:ident (...$val:expr)) => { ... };
(@flat_expr_or_continue $array:ident ($($rest:tt)*)) => { ... };
[$($tt:tt)*] => { ... };
}