diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-07-31 17:31:24 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-07-31 17:33:20 -0700 |
| commit | c88933d714f12be6bdca80cc9583a1e5670cfc62 (patch) | |
| tree | 8d17f1dc5cec7892ff7cc71bb4b5cf0d3a883f1b /src/rustc | |
| parent | c4bb8f8aafd25b9d5e68481af7088ab9e47c1e29 (diff) | |
| download | rust-c88933d714f12be6bdca80cc9583a1e5670cfc62.tar.gz rust-c88933d714f12be6bdca80cc9583a1e5670cfc62.zip | |
rustc: Implement unary move. Closes #917.
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/borrowck/categorization.rs | 3 | ||||
| -rw-r--r-- | src/rustc/middle/liveness.rs | 11 | ||||
| -rw-r--r-- | src/rustc/middle/trans/base.rs | 2 | ||||
| -rw-r--r-- | src/rustc/middle/trans/type_use.rs | 2 | ||||
| -rw-r--r-- | src/rustc/middle/typeck/check.rs | 2 |
5 files changed, 14 insertions, 6 deletions
diff --git a/src/rustc/middle/borrowck/categorization.rs b/src/rustc/middle/borrowck/categorization.rs index 6f5b5d139d3..36b35dbbdbc 100644 --- a/src/rustc/middle/borrowck/categorization.rs +++ b/src/rustc/middle/borrowck/categorization.rs @@ -181,7 +181,8 @@ impl public_methods for borrowck_ctxt { ast::expr_new(*) | ast::expr_binary(*) | ast::expr_while(*) | ast::expr_block(*) | ast::expr_loop(*) | ast::expr_alt(*) | ast::expr_lit(*) | ast::expr_break | ast::expr_mac(*) | - ast::expr_again | ast::expr_rec(*) | ast::expr_struct(*) { + ast::expr_again | ast::expr_rec(*) | ast::expr_struct(*) | + ast::expr_unary_move(*) { ret self.cat_rvalue(expr, expr_ty); } } diff --git a/src/rustc/middle/liveness.rs b/src/rustc/middle/liveness.rs index e7d88b9b2b8..8a65a1b0567 100644 --- a/src/rustc/middle/liveness.rs +++ b/src/rustc/middle/liveness.rs @@ -470,8 +470,8 @@ fn visit_expr(expr: @expr, &&self: @ir_maps, vt: vt<@ir_maps>) { expr_loop_body(*) | expr_do_body(*) | expr_cast(*) | expr_unary(*) | expr_fail(*) | expr_break | expr_again | expr_lit(_) | expr_ret(*) | - expr_block(*) | expr_move(*) | expr_assign(*) | expr_swap(*) | - expr_assign_op(*) | expr_mac(*) | expr_struct(*) { + expr_block(*) | expr_move(*) | expr_unary_move(*) | expr_assign(*) | + expr_swap(*) | expr_assign_op(*) | expr_mac(*) | expr_struct(*) => { visit::visit_expr(expr, self, vt); } } @@ -1104,6 +1104,7 @@ class liveness { expr_assert(e) | expr_addr_of(_, e) | expr_copy(e) | + expr_unary_move(e) | expr_loop_body(e) | expr_do_body(e) | expr_cast(e, _) | @@ -1430,6 +1431,12 @@ fn check_expr(expr: @expr, &&self: @liveness, vt: vt<@liveness>) { visit::visit_expr(expr, self, vt); } + expr_unary_move(r) { + self.check_move_from_expr(r, vt); + + visit::visit_expr(expr, self, vt); + } + expr_assign_op(_, l, _) { self.check_lvalue(l, vt); diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index 2e5d5051a79..96e7c74f25d 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -3682,7 +3682,7 @@ fn trans_expr(bcx: block, e: @ast::expr, dest: dest) -> block { ast::expr_do_body(blk) { ret trans_expr(bcx, blk, dest); } - ast::expr_copy(a) { + ast::expr_copy(a) | ast::expr_unary_move(a) { if !expr_is_lval(bcx, a) { ret trans_expr(bcx, a, dest); } diff --git a/src/rustc/middle/trans/type_use.rs b/src/rustc/middle/trans/type_use.rs index 6bb19724afe..8ab6fbfc6eb 100644 --- a/src/rustc/middle/trans/type_use.rs +++ b/src/rustc/middle/trans/type_use.rs @@ -158,7 +158,7 @@ fn mark_for_expr(cx: ctx, e: @expr) { expr_rec(_, _) | expr_struct(*) | expr_tup(_) | expr_unary(box(_), _) | expr_unary(uniq(_), _) | expr_binary(add, _, _) | - expr_copy(_) | expr_move(_, _) { + expr_copy(_) | expr_move(_, _) | expr_unary_move(_) { node_type_needs(cx, use_repr, e.id); } expr_cast(base, _) { diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index 1f589a1b960..db9084cbad1 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -1416,7 +1416,7 @@ fn check_expr_with_unifier(fcx: @fn_ctxt, bot = check_expr_with(fcx, e, ty::mk_bool(tcx)); fcx.write_nil(id); } - ast::expr_copy(a) { + ast::expr_copy(a) | ast::expr_unary_move(a) { bot = check_expr(fcx, a, expected); fcx.write_ty(id, fcx.expr_ty(a)); } |
