diff options
| author | Patrick Walton <[email protected]> | 2010-10-12 16:30:44 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-10-12 16:30:44 -0700 |
| commit | 81a43ef6980e19f3965d2cbbe109a9c6f82fe287 (patch) | |
| tree | 777baeda9bce74c5fc0e8b7db04ece576f6bfe58 /src/comp/middle | |
| parent | rustc: Parse box types (diff) | |
| download | rust-81a43ef6980e19f3965d2cbbe109a9c6f82fe287.tar.xz rust-81a43ef6980e19f3965d2cbbe109a9c6f82fe287.zip | |
rustc: Add mutability to tuple literals
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/fold.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index 543a05e1..5445d3c1 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -47,7 +47,7 @@ type ast_fold[ENV] = vec[@expr] es) -> @expr) fold_expr_vec, (fn(&ENV e, &span sp, - vec[@expr] es) -> @expr) fold_expr_tup, + vec[tup(bool,@expr)] es) -> @expr) fold_expr_tup, (fn(&ENV e, &span sp, vec[tup(ident,@expr)] fields) -> @expr) fold_expr_rec, @@ -161,6 +161,11 @@ fn fold_exprs[ENV](&ENV env, ast_fold[ENV] fld, vec[@expr] e) -> vec[@expr] { ret _vec.map[@expr, @expr](fe, e); } +fn fold_tup_entry[ENV](&ENV env, ast_fold[ENV] fld, &tup(bool,@expr) e) + -> tup(bool,@expr) { + ret tup(e._0, fold_expr(env, fld, e._1)); +} + fn fold_rec_entry[ENV](&ENV env, ast_fold[ENV] fld, &tup(ident,@expr) e) -> tup(ident,@expr) { ret tup(e._0, fold_expr(env, fld, e._1)); @@ -181,8 +186,10 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr { } case (ast.expr_tup(?es)) { - auto ees = fold_exprs(env_, fld, es); - ret fld.fold_expr_vec(env_, e.span, ees); + let operator[tup(bool,@expr), tup(bool,@expr)] fe = + bind fold_tup_entry[ENV](env, fld, _); + auto ees = _vec.map[tup(bool,@expr), tup(bool,@expr)](fe, es); + ret fld.fold_expr_tup(env_, e.span, ees); } case (ast.expr_rec(?es)) { @@ -425,7 +432,8 @@ fn identity_fold_expr_vec[ENV](&ENV env, &span sp, vec[@expr] es) -> @expr { ret @respan(sp, ast.expr_vec(es)); } -fn identity_fold_expr_tup[ENV](&ENV env, &span sp, vec[@expr] es) -> @expr { +fn identity_fold_expr_tup[ENV](&ENV env, &span sp, vec[tup(bool, @expr)] es) + -> @expr { ret @respan(sp, ast.expr_tup(es)); } |