diff options
| author | Graydon Hoare <[email protected]> | 2011-03-14 16:59:04 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-03-14 16:59:04 -0700 |
| commit | 7f5bffc3ea8545be1916dd089e4f25a360c83950 (patch) | |
| tree | 877d7e430339360c8645a1983707d04088d1cba2 /src/comp/middle/fold.rs | |
| parent | Rename check_assignment_like to check_assignment since it turned out not to b... (diff) | |
| parent | Merge branch 'master' into recursive-elseif (diff) | |
| download | rust-7f5bffc3ea8545be1916dd089e4f25a360c83950.tar.xz rust-7f5bffc3ea8545be1916dd089e4f25a360c83950.zip | |
Merge remote branch 'brson/recursive-elseif'
Diffstat (limited to 'src/comp/middle/fold.rs')
| -rw-r--r-- | src/comp/middle/fold.rs | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index 8de85749..1fc91693 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -107,8 +107,7 @@ type ast_fold[ENV] = (fn(&ENV e, &span sp, @expr cond, &block thn, - &vec[tup(@expr, block)] elifs, - &option.t[block] els, + &option.t[@expr] els, ann a) -> @expr) fold_expr_if, (fn(&ENV e, &span sp, @@ -590,27 +589,17 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr { ret fld.fold_expr_cast(env_, e.span, ee, tt, at); } - case (ast.expr_if(?cnd, ?thn, ?elifs, ?els, ?t)) { + case (ast.expr_if(?cnd, ?thn, ?els, ?t)) { auto ccnd = fold_expr(env_, fld, cnd); auto tthn = fold_block(env_, fld, thn); - - let vec[tup(@ast.expr, ast.block)] eelifs = vec(); - for (tup(@expr, block) elif in elifs) { - auto elifcnd = elif._0; - auto elifthn = elif._1; - auto elifccnd = fold_expr(env_, fld, elifcnd); - auto eliftthn = fold_block(env_, fld, elifthn); - eelifs += tup(elifccnd, eliftthn); - } - - auto eels = none[block]; + auto eels = none[@expr]; alt (els) { - case (some[block](?b)) { - eels = some(fold_block(env_, fld, b)); + case (some[@expr](?e)) { + eels = some(fold_expr(env_, fld, e)); } case (_) { /* fall through */ } } - ret fld.fold_expr_if(env_, e.span, ccnd, tthn, eelifs, eels, t); + ret fld.fold_expr_if(env_, e.span, ccnd, tthn, eels, t); } case (ast.expr_for(?decl, ?seq, ?body, ?t)) { @@ -1189,9 +1178,8 @@ fn identity_fold_expr_cast[ENV](&ENV env, &span sp, @ast.expr e, fn identity_fold_expr_if[ENV](&ENV env, &span sp, @expr cond, &block thn, - &vec[tup(@expr, block)] elifs, - &option.t[block] els, ann a) -> @expr { - ret @respan(sp, ast.expr_if(cond, thn, elifs, els, a)); + &option.t[@expr] els, ann a) -> @expr { + ret @respan(sp, ast.expr_if(cond, thn, els, a)); } fn identity_fold_expr_for[ENV](&ENV env, &span sp, @@ -1554,7 +1542,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] { fold_expr_unary = bind identity_fold_expr_unary[ENV](_,_,_,_,_), fold_expr_lit = bind identity_fold_expr_lit[ENV](_,_,_,_), fold_expr_cast = bind identity_fold_expr_cast[ENV](_,_,_,_,_), - fold_expr_if = bind identity_fold_expr_if[ENV](_,_,_,_,_,_,_), + fold_expr_if = bind identity_fold_expr_if[ENV](_,_,_,_,_,_), fold_expr_for = bind identity_fold_expr_for[ENV](_,_,_,_,_,_), fold_expr_for_each = bind identity_fold_expr_for_each[ENV](_,_,_,_,_,_), |