Allow using constants in pattern
diff --git a/src/expr.rs b/src/expr.rs
index c312b5f..fffdfba 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1031,22 +1031,26 @@
(Pat::Ref(Box::new(pat), mutability))
));
- named!(pat_lit -> Pat, map!(lit_maybe_neg, |lit| Pat::Lit(Box::new(lit))));
+ named!(pat_lit -> Pat, map!(pat_lit_expr, |lit| Pat::Lit(Box::new(lit))));
named!(pat_range -> Pat, do_parse!(
- lo: lit_maybe_neg >>
+ lo: pat_lit_expr >>
punct!("...") >>
- hi: lit_maybe_neg >>
+ hi: pat_lit_expr >>
(Pat::Range(Box::new(lo), Box::new(hi)))
));
- named!(lit_maybe_neg -> Expr, do_parse!(
+ named!(pat_lit_expr -> Expr, do_parse!(
neg: option!(punct!("-")) >>
- v: lit >>
+ v: alt!(
+ lit => { Expr::Lit }
+ |
+ path => { |p| Expr::Path(None, p) }
+ ) >>
(if neg.is_some() {
- Expr::Unary(UnOp::Neg, Box::new(Expr::Lit(v)))
+ Expr::Unary(UnOp::Neg, Box::new(v))
} else {
- Expr::Lit(v)
+ v
})
));