Reference pattern
diff --git a/src/expr.rs b/src/expr.rs
index 1b9a7d5..9b9ab2c 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -887,7 +887,8 @@
|
pat_tuple
// TODO: Box
- // TODO: Ref
+ |
+ pat_ref
|
pat_lit
// TODO: Vec
@@ -947,6 +948,13 @@
})
));
+ named!(pat_ref -> Pat, do_parse!(
+ punct!("&") >>
+ mutability: mutability >>
+ pat: pat >>
+ (Pat::Ref(Box::new(pat), mutability))
+ ));
+
named!(pat_lit -> Pat, map!(lit, |lit| Pat::Lit(Box::new(lit))));
named!(pat_range -> Pat, do_parse!(
@@ -1395,7 +1403,11 @@
tokens.append("box");
inner.to_tokens(tokens);
}
- Pat::Ref(ref _target, _mutability) => unimplemented!(),
+ Pat::Ref(ref target, mutability) => {
+ tokens.append("&");
+ mutability.to_tokens(tokens);
+ target.to_tokens(tokens);
+ }
Pat::Lit(ref lit) => lit.to_tokens(tokens),
Pat::Range(ref lo, ref hi) => {
lo.to_tokens(tokens);