@@ -1699,11 +1699,15 @@ fn variant_types(@crate_ctxt cx, &ast.variant v) -> vec[@ty.t] {
1699
1699
ret tys;
1700
1700
}
1701
1701
1702
- fn type_of_variant( @crate_ctxt cx, & ast. variant v) -> TypeRef {
1702
+ fn type_of_variant( @crate_ctxt cx,
1703
+ & ast. variant v,
1704
+ vec[ ast. ty_param] ty_params,
1705
+ vec[ @ty. t] ty_param_substs) -> TypeRef {
1703
1706
let vec[ TypeRef ] lltys = vec( ) ;
1704
1707
auto tys = variant_types( cx, v) ;
1705
1708
for ( @ty. t typ in tys) {
1706
- lltys += vec( type_of( cx, typ) ) ;
1709
+ auto typ2 = ty. substitute_ty_params( ty_params, ty_param_substs, typ) ;
1710
+ lltys += vec( type_of( cx, typ2) ) ;
1707
1711
}
1708
1712
ret T_struct ( lltys) ;
1709
1713
}
@@ -1850,6 +1854,8 @@ fn iter_structural_ty_full(@block_ctxt cx,
1850
1854
1851
1855
auto next_cx = new_sub_block_ctxt( bcx, "tag-iter-next" ) ;
1852
1856
1857
+ auto ty_params = tag_ty_params( bcx. fcx. ccx, tid) ;
1858
+
1853
1859
auto i = 0 u;
1854
1860
for ( ast. variant variant in variants) {
1855
1861
auto variant_cx = new_sub_block_ctxt( bcx,
@@ -1859,7 +1865,8 @@ fn iter_structural_ty_full(@block_ctxt cx,
1859
1865
1860
1866
if ( _vec. len[ ast. variant_arg] ( variant. args) > 0 u) {
1861
1867
// N-ary variant.
1862
- auto llvarty = type_of_variant( bcx. fcx. ccx, variants. ( i) ) ;
1868
+ auto llvarty = type_of_variant( bcx. fcx. ccx, variants. ( i) ,
1869
+ ty_params, tps) ;
1863
1870
1864
1871
auto fn_ty = ty. ann_to_type( variants. ( i) . ann) ;
1865
1872
alt ( fn_ty. struct ) {
@@ -1870,8 +1877,6 @@ fn iter_structural_ty_full(@block_ctxt cx,
1870
1877
auto llvarp_b = variant_cx. build.
1871
1878
TruncOrBitCast ( llunion_b_ptr, T_ptr ( llvarty) ) ;
1872
1879
1873
- auto ty_params = tag_ty_params( bcx. fcx. ccx, tid) ;
1874
-
1875
1880
auto j = 0 u;
1876
1881
for ( ty. arg a in args) {
1877
1882
auto v = vec( C_int ( 0 ) , C_int ( j as int) ) ;
0 commit comments