From 1e9c8b923d78e6169d1d99bfccf675a10f904a76 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Thu, 2 Dec 2010 19:12:09 -0800 Subject: [PATCH] Implement translation for deref unop. --- src/comp/middle/trans.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 58d700e5b37..647aa8068bc 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;