aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/trans.rs12
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;