aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/fold.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <[email protected]>2011-03-25 16:28:16 +0100
committerMarijn Haverbeke <[email protected]>2011-03-27 14:11:23 +0200
commit6ecdc04788334420db05d9894e18d1d7a605ab4f (patch)
treeaba6169530f041b59507490b9ab28b1ac2835d18 /src/comp/middle/fold.rs
parentshootout: Hoist out the vector indexing on nbody; don't rely on LICM, which i... (diff)
downloadrust-6ecdc04788334420db05d9894e18d1d7a605ab4f.tar.xz
rust-6ecdc04788334420db05d9894e18d1d7a605ab4f.zip
Add support for break and cont to rustc
Testing proper cleanup is hampered by https://github.com/graydon/rust/issues/293
Diffstat (limited to 'src/comp/middle/fold.rs')
-rw-r--r--src/comp/middle/fold.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs
index 27fad370..76715a28 100644
--- a/src/comp/middle/fold.rs
+++ b/src/comp/middle/fold.rs
@@ -170,6 +170,10 @@ type ast_fold[ENV] =
(fn(&ENV e, &span sp) -> @expr) fold_expr_fail,
+ (fn(&ENV e, &span sp) -> @expr) fold_expr_break,
+
+ (fn(&ENV e, &span sp) -> @expr) fold_expr_cont,
+
(fn(&ENV e, &span sp,
&option.t[@expr] rv) -> @expr) fold_expr_ret,
@@ -695,6 +699,14 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
ret fld.fold_expr_fail(env_, e.span);
}
+ case (ast.expr_break) {
+ ret fld.fold_expr_break(env_, e.span);
+ }
+
+ case (ast.expr_cont) {
+ ret fld.fold_expr_cont(env_, e.span);
+ }
+
case (ast.expr_ret(?oe)) {
auto oee = none[@expr];
alt (oe) {
@@ -1266,6 +1278,14 @@ fn identity_fold_expr_fail[ENV](&ENV env, &span sp) -> @expr {
ret @respan(sp, ast.expr_fail);
}
+fn identity_fold_expr_break[ENV](&ENV env, &span sp) -> @expr {
+ ret @respan(sp, ast.expr_break);
+}
+
+fn identity_fold_expr_cont[ENV](&ENV env, &span sp) -> @expr {
+ ret @respan(sp, ast.expr_cont);
+}
+
fn identity_fold_expr_ret[ENV](&ENV env, &span sp,
&option.t[@expr] rv) -> @expr {
ret @respan(sp, ast.expr_ret(rv));
@@ -1565,6 +1585,8 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
fold_expr_path = bind identity_fold_expr_path[ENV](_,_,_,_,_),
fold_expr_ext = bind identity_fold_expr_ext[ENV](_,_,_,_,_,_,_),
fold_expr_fail = bind identity_fold_expr_fail[ENV](_,_),
+ fold_expr_break = bind identity_fold_expr_break[ENV](_,_),
+ fold_expr_cont = bind identity_fold_expr_cont[ENV](_,_),
fold_expr_ret = bind identity_fold_expr_ret[ENV](_,_,_),
fold_expr_put = bind identity_fold_expr_put[ENV](_,_,_),
fold_expr_be = bind identity_fold_expr_be[ENV](_,_,_),