Add parsers for break, continue and return expressions. (#21)
Added parsers for break, continue and return
diff --git a/src/expr.rs b/src/expr.rs
index facc57e..e94fe9e 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -370,9 +370,12 @@
expr_block
// TODO: Path
// TODO: AddrOf
- // TODO: Break
- // TODO: Continue
- // TODO: Ret
+ |
+ expr_break
+ |
+ expr_continue
+ |
+ expr_ret
// TODO: Mac
// TODO: Struct
// TODO: Repeat
@@ -570,6 +573,30 @@
))
));
+ named!(expr_continue -> Expr, do_parse!(
+ keyword!("continue") >>
+ lbl: option!(label) >>
+ (Expr::Continue(
+ lbl,
+ ))
+ ));
+
+ named!(expr_break -> Expr, do_parse!(
+ keyword!("break") >>
+ lbl: option!(label) >>
+ (Expr::Break(
+ lbl,
+ ))
+ ));
+
+ named!(expr_ret -> Expr, do_parse!(
+ keyword!("return") >>
+ ret_value: option!(expr) >>
+ (Expr::Ret(
+ ret_value.map(Box::new),
+ ))
+ ));
+
named!(expr_block -> Expr, map!(block, |b| Expr::Block(Box::new(b))));
named!(block -> Block, do_parse!(