Skip to content

Commit 5cbc257

Browse files
committed
Renovate expr_tup translation
1 parent b673b26 commit 5cbc257

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/librustc/middle/trans/expr.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ use lib;
126126
use lib::llvm::{ValueRef, TypeRef, llvm, True};
127127
use middle::borrowck::root_map_key;
128128
use middle::trans::_match;
129+
use middle::trans::adt;
129130
use middle::trans::base;
130131
use middle::trans::base::*;
131132
use middle::trans::build::*;
@@ -602,7 +603,8 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr,
602603
return trans_rec_or_struct(bcx, (*fields), base, expr.id, dest);
603604
}
604605
ast::expr_tup(ref args) => {
605-
return trans_tup(bcx, *args, dest);
606+
let repr = adt::represent_type(bcx.ccx(), expr_ty(bcx, expr));
607+
return trans_adt(bcx, &repr, 0, *args, dest);
606608
}
607609
ast::expr_lit(@codemap::spanned {node: ast::lit_str(s), _}) => {
608610
return tvec::trans_lit_str(bcx, expr, s, dest);
@@ -1249,7 +1251,8 @@ fn trans_rec_or_struct(bcx: block,
12491251
}
12501252
}
12511253

1252-
fn trans_tup(bcx: block, elts: &[@ast::expr], dest: Dest) -> block {
1254+
fn trans_adt(bcx: block, repr: &adt::Repr, discr: int, elts: &[@ast::expr],
1255+
dest: Dest) -> block {
12531256
let _icx = bcx.insn_ctxt("trans_tup");
12541257
let mut bcx = bcx;
12551258
let addr = match dest {
@@ -1262,8 +1265,9 @@ fn trans_tup(bcx: block, elts: &[@ast::expr], dest: Dest) -> block {
12621265
SaveIn(pos) => pos,
12631266
};
12641267
let mut temp_cleanups = ~[];
1268+
adt::trans_set_discr(bcx, repr, addr, discr);
12651269
for vec::eachi(elts) |i, e| {
1266-
let dest = GEPi(bcx, addr, [0u, i]);
1270+
let dest = adt::trans_GEP(bcx, repr, addr, discr, i);
12671271
let e_ty = expr_ty(bcx, *e);
12681272
bcx = trans_into(bcx, *e, SaveIn(dest));
12691273
add_clean_temp_mem(bcx, dest, e_ty);

0 commit comments

Comments
 (0)