Skip to content

Commit c8a2c44

Browse files
committed
Expand generic info in lval_result.
1 parent bc41628 commit c8a2c44

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

src/comp/middle/trans.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,22 +1757,25 @@ impure fn trans_alt(@block_ctxt cx, @ast.expr expr, vec[ast.arm] arms)
17571757
ret res(last_cx, C_nil());
17581758
}
17591759

1760+
type generic_info = rec(@ty.t monotype,
1761+
vec[ValueRef] tydescs);
1762+
17601763
type lval_result = rec(result res,
17611764
bool is_mem,
1762-
option.t[vec[ValueRef]] lltys,
1765+
option.t[generic_info] generic,
17631766
option.t[ValueRef] llobj);
17641767

17651768
fn lval_mem(@block_ctxt cx, ValueRef val) -> lval_result {
17661769
ret rec(res=res(cx, val),
17671770
is_mem=true,
1768-
lltys=none[vec[ValueRef]],
1771+
generic=none[generic_info],
17691772
llobj=none[ValueRef]);
17701773
}
17711774

17721775
fn lval_val(@block_ctxt cx, ValueRef val) -> lval_result {
17731776
ret rec(res=res(cx, val),
17741777
is_mem=false,
1775-
lltys=none[vec[ValueRef]],
1778+
generic=none[generic_info],
17761779
llobj=none[ValueRef]);
17771780
}
17781781

@@ -1802,21 +1805,23 @@ fn trans_path(@block_ctxt cx, &ast.path p, &option.t[ast.def] dopt,
18021805
check (cx.fcx.ccx.item_ids.contains_key(did));
18031806

18041807
auto fn_item = cx.fcx.ccx.items.get(did);
1808+
auto lv = lval_val(cx, cx.fcx.ccx.fn_pairs.get(did));
18051809
auto monoty = node_ann_type(cx.fcx.ccx, ann);
18061810
auto tys = ty.resolve_ty_params(fn_item, monoty);
1807-
auto vt = none[vec[ValueRef]];
18081811

18091812
if (_vec.len[@ty.t](tys) != 0u) {
18101813
let vec[ValueRef] tydescs = vec();
18111814
for (@ty.t t in tys) {
18121815
append[ValueRef](tydescs,
18131816
get_tydesc(cx, t));
18141817
}
1815-
vt = some[vec[ValueRef]](tydescs);
1818+
auto gen = rec( monotype = monoty,
1819+
tydescs = tydescs );
1820+
lv = rec(generic = some[generic_info](gen)
1821+
with lv);
18161822
}
18171823

1818-
auto lv = lval_val(cx, cx.fcx.ccx.fn_pairs.get(did));
1819-
ret rec(lltys = vt with lv);
1824+
ret lv;
18201825
}
18211826
case (ast.def_obj(?did)) {
18221827
check (cx.fcx.ccx.fn_pairs.contains_key(did));
@@ -1968,7 +1973,7 @@ impure fn trans_cast(@block_ctxt cx, @ast.expr e, &ast.ann ann) -> result {
19681973
impure fn trans_args(@block_ctxt cx,
19691974
ValueRef llclosure,
19701975
option.t[ValueRef] llobj,
1971-
option.t[vec[ValueRef]] lltydescs,
1976+
option.t[generic_info] gen,
19721977
&vec[@ast.expr] es,
19731978
@ty.t fn_ty)
19741979
-> tup(@block_ctxt, vec[ValueRef]) {
@@ -1981,9 +1986,9 @@ impure fn trans_args(@block_ctxt cx,
19811986
case (_) { fail; }
19821987
}
19831988

1984-
alt (lltydescs) {
1985-
case (some[vec[ValueRef]](?tys)) {
1986-
for (ValueRef t in tys) {
1989+
alt (gen) {
1990+
case (some[generic_info](?g)) {
1991+
for (ValueRef t in g.tydescs) {
19871992
vs += t;
19881993
}
19891994
}
@@ -2277,7 +2282,7 @@ impure fn trans_call(@block_ctxt cx, @ast.expr f,
22772282
auto ret_ty = ty.ann_to_type(ann);
22782283
auto args_res = trans_args(f_res.res.bcx,
22792284
llclosure, f_res.llobj,
2280-
f_res.lltys,
2285+
f_res.generic,
22812286
args, fn_ty);
22822287

22832288
auto real_retval = args_res._0.build.FastCall(faddr, args_res._1);

0 commit comments

Comments
 (0)