diff options
| author | Graydon Hoare <[email protected]> | 2010-12-02 19:12:09 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-12-02 19:12:09 -0800 |
| commit | 1e9c8b923d78e6169d1d99bfccf675a10f904a76 (patch) | |
| tree | 506db450e954dad3a600a68972c4c60cc261dfdd /src | |
| parent | Change order of basic blocks in copy_ty, makes nicer disassembly. (diff) | |
| download | rust-1e9c8b923d78e6169d1d99bfccf675a10f904a76.tar.xz rust-1e9c8b923d78e6169d1d99bfccf675a10f904a76.zip | |
Implement translation for deref unop.
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/middle/trans.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 58d700e5..647aa806 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -867,8 +867,16 @@ impure fn trans_unary(@block_ctxt cx, ast.unop op, sub = copy_ty(sub.bcx, true, body, e_val, e_ty); ret res(sub.bcx, box); } - case (_) { - cx.fcx.ccx.sess.unimpl("expr variant in trans_unary"); + case (ast.deref) { + sub.val = sub.bcx.build.GEP(sub.val, + vec(C_int(0), + C_int(abi.box_rc_field_body))); + auto e_ty = node_ann_type(sub.bcx.fcx.ccx, a); + if (typeck.type_is_scalar(e_ty) || + typeck.type_is_nil(e_ty)) { + sub.val = sub.bcx.build.Load(sub.val); + } + ret sub; } } fail; |