aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/fold.rs
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-03-14 16:59:04 -0700
committerGraydon Hoare <[email protected]>2011-03-14 16:59:04 -0700
commit7f5bffc3ea8545be1916dd089e4f25a360c83950 (patch)
tree877d7e430339360c8645a1983707d04088d1cba2 /src/comp/middle/fold.rs
parentRename check_assignment_like to check_assignment since it turned out not to b... (diff)
parentMerge branch 'master' into recursive-elseif (diff)
downloadrust-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.rs30
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](_,_,_,_,_,_),