Added workaround for pre-NLL compiler bug
@@ -18,18 +18,27 @@ pub fn list(rule: Rule) -> Rule {
// TODO: Use box syntax when it gets stabilized.
match expr {
Expr::Seq(l, r) => match *l {
- Expr::Rep(l) => match *l {
+ Expr::Rep(l) => {
+ let l = *l;
+ match l {
Expr::Seq(l1, l2) => {
// Converts `(rule ~ rest)* ~ rule` to `rule ~ (rest ~ rule)*`,
// avoiding matching the last `rule` twice.
if l1 == r {
- Expr::Seq(l1, Box::new(Expr::Rep(Box::new(Expr::Seq(l2, r)))))
+ Expr::Seq(
+ l1,
+ Box::new(Expr::Rep(Box::new(Expr::Seq(l2, r)))),
+ )
} else {
- Expr::Seq(Box::new(Expr::Rep(Box::new(Expr::Seq(l1, l2)))), r)
+ Expr::Seq(
+ Box::new(Expr::Rep(Box::new(Expr::Seq(l1, l2)))),
+ r,
+ )
}
}
expr => Expr::Seq(Box::new(Expr::Rep(Box::new(expr))), r),
- },
+ }
+ }
expr => Expr::Seq(Box::new(expr), r),
},
expr => expr,
