diff options
| author | Marijn Haverbeke <[email protected]> | 2011-03-25 16:28:16 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <[email protected]> | 2011-03-27 14:11:23 +0200 |
| commit | 6ecdc04788334420db05d9894e18d1d7a605ab4f (patch) | |
| tree | aba6169530f041b59507490b9ab28b1ac2835d18 /src/comp/middle/fold.rs | |
| parent | shootout: Hoist out the vector indexing on nbody; don't rely on LICM, which i... (diff) | |
| download | rust-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.rs | 22 |
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](_,_,_), |