diff options
| author | Brian Anderson <[email protected]> | 2011-03-12 21:00:39 -0500 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-03-14 16:41:46 -0700 |
| commit | a309f74a94f99127cf0667999d4080450bb62491 (patch) | |
| tree | 5db947a5cf1ef3e20d42b1eb5a231ae7f8cc4e73 /src | |
| parent | Fix typo in expr_recv parsing (diff) | |
| download | rust-a309f74a94f99127cf0667999d4080450bb62491.tar.xz rust-a309f74a94f99127cf0667999d4080450bb62491.zip | |
Reorganize evaluation of expr_send/recv to put them closer to expr_assign, to which they are similar
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/front/ast.rs | 4 | ||||
| -rw-r--r-- | src/comp/middle/fold.rs | 59 |
2 files changed, 32 insertions, 31 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index d768f935..8507298d 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -232,6 +232,8 @@ tag expr_ { expr_block(block, ann); expr_assign(@expr /* TODO: @expr|is_lval */, @expr, ann); expr_assign_op(binop, @expr /* TODO: @expr|is_lval */, @expr, ann); + expr_send(@expr /* TODO: @expr|is_lval */, @expr, ann); + expr_recv(@expr /* TODO: @expr|is_lval */, @expr, ann); expr_field(@expr, ident, ann); expr_index(@expr, @expr, ann); expr_path(path, option.t[def], ann); @@ -244,8 +246,6 @@ tag expr_ { expr_check_expr(@expr); expr_port(ann); expr_chan(@expr, ann); - expr_send(@expr /* TODO: @expr|is_lval */, @expr, ann); - expr_recv(@expr /* TODO: @expr|is_lval */, @expr, ann); } type lit = spanned[lit_]; diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index 320033cd..8de85749 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -144,6 +144,12 @@ type ast_fold[ENV] = ann a) -> @expr) fold_expr_assign_op, (fn(&ENV e, &span sp, + @expr lhs, @expr rhs, ann a) -> @expr) fold_expr_send, + + (fn(&ENV e, &span sp, + @expr lhs, @expr rhs, ann a) -> @expr) fold_expr_recv, + + (fn(&ENV e, &span sp, @expr e, ident i, ann a) -> @expr) fold_expr_field, @@ -185,11 +191,6 @@ type ast_fold[ENV] = (fn(&ENV e, &span sp, @expr e, ann a) -> @expr) fold_expr_chan, - (fn(&ENV e, &span sp, - @expr lhs, @expr rhs, ann a) -> @expr) fold_expr_send, - - (fn(&ENV e, &span sp, - @expr lhs, @expr rhs, ann a) -> @expr) fold_expr_recv, // Decl folds. (fn(&ENV e, &span sp, @@ -664,6 +665,18 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr { ret fld.fold_expr_assign_op(env_, e.span, op, llhs, rrhs, t); } + case (ast.expr_send(?lhs, ?rhs, ?t)) { + auto llhs = fold_expr(env_, fld, lhs); + auto rrhs = fold_expr(env_, fld, rhs); + ret fld.fold_expr_send(env_, e.span, llhs, rrhs, t); + } + + case (ast.expr_recv(?lhs, ?rhs, ?t)) { + auto llhs = fold_expr(env_, fld, lhs); + auto rrhs = fold_expr(env_, fld, rhs); + ret fld.fold_expr_recv(env_, e.span, llhs, rrhs, t); + } + case (ast.expr_field(?e, ?i, ?t)) { auto ee = fold_expr(env_, fld, e); ret fld.fold_expr_field(env_, e.span, ee, i, t); @@ -737,18 +750,6 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr { auto ee = fold_expr(env_, fld, x); ret fld.fold_expr_chan(env_, e.span, ee, t); } - - case (ast.expr_send(?lhs, ?rhs, ?t)) { - auto llhs = fold_expr(env_, fld, lhs); - auto rrhs = fold_expr(env_, fld, rhs); - ret fld.fold_expr_send(env_, e.span, llhs, rrhs, t); - } - - case (ast.expr_recv(?lhs, ?rhs, ?t)) { - auto llhs = fold_expr(env_, fld, lhs); - auto rrhs = fold_expr(env_, fld, rhs); - ret fld.fold_expr_recv(env_, e.span, llhs, rrhs, t); - } } fail; @@ -1237,6 +1238,16 @@ fn identity_fold_expr_assign_op[ENV](&ENV env, &span sp, ast.binop op, ret @respan(sp, ast.expr_assign_op(op, lhs, rhs, a)); } +fn identity_fold_expr_send[ENV](&ENV e, &span sp, + @expr lhs, @expr rhs, ann a) -> @expr { + ret @respan(sp, ast.expr_send(lhs, rhs, a)); +} + +fn identity_fold_expr_recv[ENV](&ENV e, &span sp, + @expr lhs, @expr rhs, ann a) -> @expr { + ret @respan(sp, ast.expr_recv(lhs, rhs, a)); +} + fn identity_fold_expr_field[ENV](&ENV env, &span sp, @expr e, ident i, ann a) -> @expr { ret @respan(sp, ast.expr_field(e, i, a)); @@ -1295,16 +1306,6 @@ fn identity_fold_expr_chan[ENV](&ENV e, &span sp, @expr x, ann a) -> @expr { ret @respan(sp, ast.expr_chan(x, a)); } -fn identity_fold_expr_send[ENV](&ENV e, &span sp, - @expr lhs, @expr rhs, ann a) -> @expr { - ret @respan(sp, ast.expr_send(lhs, rhs, a)); -} - -fn identity_fold_expr_recv[ENV](&ENV e, &span sp, - @expr lhs, @expr rhs, ann a) -> @expr { - ret @respan(sp, ast.expr_recv(lhs, rhs, a)); -} - // Decl identities. fn identity_fold_decl_local[ENV](&ENV e, &span sp, @@ -1565,6 +1566,8 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] { fold_expr_assign = bind identity_fold_expr_assign[ENV](_,_,_,_,_), fold_expr_assign_op = bind identity_fold_expr_assign_op[ENV](_,_,_,_,_,_), + fold_expr_send = bind identity_fold_expr_send[ENV](_,_,_,_,_), + fold_expr_recv = bind identity_fold_expr_recv[ENV](_,_,_,_,_), fold_expr_field = bind identity_fold_expr_field[ENV](_,_,_,_,_), fold_expr_index = bind identity_fold_expr_index[ENV](_,_,_,_,_), fold_expr_path = bind identity_fold_expr_path[ENV](_,_,_,_,_), @@ -1578,8 +1581,6 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] { = bind identity_fold_expr_check_expr[ENV](_,_,_), fold_expr_port = bind identity_fold_expr_port[ENV](_,_,_), fold_expr_chan = bind identity_fold_expr_chan[ENV](_,_,_,_), - fold_expr_send = bind identity_fold_expr_send[ENV](_,_,_,_,_), - fold_expr_recv = bind identity_fold_expr_recv[ENV](_,_,_,_,_), fold_decl_local = bind identity_fold_decl_local[ENV](_,_,_), fold_decl_item = bind identity_fold_decl_item[ENV](_,_,_), |