@@ -1757,22 +1757,25 @@ impure fn trans_alt(@block_ctxt cx, @ast.expr expr, vec[ast.arm] arms)
1757
1757
ret res( last_cx, C_nil ( ) ) ;
1758
1758
}
1759
1759
1760
+ type generic_info = rec( @ty. t monotype,
1761
+ vec[ ValueRef ] tydescs) ;
1762
+
1760
1763
type lval_result = rec( result res,
1761
1764
bool is_mem,
1762
- option. t[ vec [ ValueRef ] ] lltys ,
1765
+ option. t[ generic_info ] generic ,
1763
1766
option. t[ ValueRef ] llobj) ;
1764
1767
1765
1768
fn lval_mem( @block_ctxt cx, ValueRef val) -> lval_result {
1766
1769
ret rec( res=res( cx, val) ,
1767
1770
is_mem=true ,
1768
- lltys =none[ vec [ ValueRef ] ] ,
1771
+ generic =none[ generic_info ] ,
1769
1772
llobj=none[ ValueRef ] ) ;
1770
1773
}
1771
1774
1772
1775
fn lval_val( @block_ctxt cx, ValueRef val) -> lval_result {
1773
1776
ret rec( res=res( cx, val) ,
1774
1777
is_mem=false ,
1775
- lltys =none[ vec [ ValueRef ] ] ,
1778
+ generic =none[ generic_info ] ,
1776
1779
llobj=none[ ValueRef ] ) ;
1777
1780
}
1778
1781
@@ -1802,21 +1805,23 @@ fn trans_path(@block_ctxt cx, &ast.path p, &option.t[ast.def] dopt,
1802
1805
check ( cx. fcx. ccx. item_ids. contains_key( did) ) ;
1803
1806
1804
1807
auto fn_item = cx. fcx. ccx. items. get( did) ;
1808
+ auto lv = lval_val( cx, cx. fcx. ccx. fn_pairs. get( did) ) ;
1805
1809
auto monoty = node_ann_type( cx. fcx. ccx, ann) ;
1806
1810
auto tys = ty. resolve_ty_params( fn_item, monoty) ;
1807
- auto vt = none[ vec[ ValueRef ] ] ;
1808
1811
1809
1812
if ( _vec. len[ @ty. t] ( tys) != 0 u) {
1810
1813
let vec[ ValueRef ] tydescs = vec( ) ;
1811
1814
for ( @ty. t t in tys) {
1812
1815
append[ ValueRef ] ( tydescs,
1813
1816
get_tydesc( cx, t) ) ;
1814
1817
}
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) ;
1816
1822
}
1817
1823
1818
- auto lv = lval_val( cx, cx. fcx. ccx. fn_pairs. get( did) ) ;
1819
- ret rec( lltys = vt with lv) ;
1824
+ ret lv;
1820
1825
}
1821
1826
case ( ast. def_obj( ?did) ) {
1822
1827
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 {
1968
1973
impure fn trans_args( @block_ctxt cx,
1969
1974
ValueRef llclosure,
1970
1975
option. t[ ValueRef ] llobj,
1971
- option. t[ vec [ ValueRef ] ] lltydescs ,
1976
+ option. t[ generic_info ] gen ,
1972
1977
& vec[ @ast. expr] es,
1973
1978
@ty. t fn_ty)
1974
1979
-> tup( @block_ctxt, vec[ ValueRef ] ) {
@@ -1981,9 +1986,9 @@ impure fn trans_args(@block_ctxt cx,
1981
1986
case ( _) { fail; }
1982
1987
}
1983
1988
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 ) {
1987
1992
vs += t;
1988
1993
}
1989
1994
}
@@ -2277,7 +2282,7 @@ impure fn trans_call(@block_ctxt cx, @ast.expr f,
2277
2282
auto ret_ty = ty. ann_to_type( ann) ;
2278
2283
auto args_res = trans_args( f_res. res. bcx,
2279
2284
llclosure, f_res. llobj,
2280
- f_res. lltys ,
2285
+ f_res. generic ,
2281
2286
args, fn_ty) ;
2282
2287
2283
2288
auto real_retval = args_res. _0. build. FastCall ( faddr, args_res. _1) ;
0 commit comments