diff options
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; |