Factor out label parsing
diff --git a/src/expr.rs b/src/expr.rs
index 907a247..facc57e 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -336,7 +336,7 @@
#[cfg(feature = "parsing")]
pub mod parsing {
use super::*;
- use {Ident, Ty};
+ use {Ident, Lifetime, Ty};
use generics::parsing::lifetime;
use ident::parsing::ident;
use lit::parsing::lit;
@@ -549,24 +549,24 @@
));
named!(expr_loop -> Expr, do_parse!(
- lt: option!(terminated!(lifetime, punct!(":"))) >>
+ lbl: option!(terminated!(label, punct!(":"))) >>
keyword!("loop") >>
loop_block: block >>
(Expr::Loop(
Box::new(loop_block),
- lt.map(|lt| lt.ident),
+ lbl,
))
));
named!(expr_while -> Expr, do_parse!(
- lt: option!(terminated!(lifetime, punct!(":"))) >>
+ lbl: option!(terminated!(label, punct!(":"))) >>
keyword!("while") >>
cond: expr >>
while_block: block >>
(Expr::While(
Box::new(cond),
Box::new(while_block),
- lt.map(|lt| lt.ident),
+ lbl,
))
));
@@ -614,6 +614,8 @@
punct!(";") >>
(Stmt::Semi(Box::new(e)))
));
+
+ named!(label -> Ident, map!(lifetime, |lt: Lifetime| lt.ident));
}
#[cfg(feature = "printing")]