@@ -879,7 +879,11 @@ fn type_of_inner(&@crate_ctxt cx, &span sp, &ty::t t) -> TypeRef {
879
879
llty = abs_pair;
880
880
}
881
881
case ( ty:: ty_res ( _, ?sub, ?tps) ) {
882
- auto sub1 = ty:: substitute_type_params ( cx. tcx , tps, sub) ;
882
+ // FIXME: Remove this vec->ivec conversion.
883
+ auto tps_ivec = ~[ ] ;
884
+ for ( ty:: t typ in tps) { tps_ivec += ~[ typ] ; }
885
+
886
+ auto sub1 = ty:: substitute_type_params ( cx. tcx , tps_ivec, sub) ;
883
887
ret T_struct ( [ T_i32 ( ) , type_of_inner ( cx, sp, sub1) ] ) ;
884
888
}
885
889
case ( ty:: ty_var ( _) ) {
@@ -1240,7 +1244,12 @@ fn simplify_type(&@crate_ctxt ccx, &ty::t typ) -> ty::t {
1240
1244
ty:: mk_nil ( ccx. tcx ) ) ] ) ;
1241
1245
}
1242
1246
case ( ty:: ty_res ( _, ?sub, ?tps) ) {
1243
- auto sub1 = ty:: substitute_type_params ( ccx. tcx , tps, sub) ;
1247
+ // FIXME: Remove this vec->ivec conversion.
1248
+ auto tps_ivec = ~[ ] ;
1249
+ for ( ty:: t typ in tps) { tps_ivec += ~[ typ] ; }
1250
+
1251
+ auto sub1 = ty:: substitute_type_params ( ccx. tcx , tps_ivec,
1252
+ sub) ;
1244
1253
ret ty:: mk_imm_tup ( ccx. tcx , ~[ ty:: mk_int ( ccx. tcx ) ,
1245
1254
simplify_type ( ccx, sub1) ] ) ;
1246
1255
}
@@ -1259,36 +1268,35 @@ fn static_size_of_tag(&@crate_ctxt cx, &span sp, &ty::t t) -> uint {
1259
1268
"static_size_of_tag()" ) ;
1260
1269
}
1261
1270
if ( cx. tag_sizes . contains_key ( t) ) { ret cx. tag_sizes . get ( t) ; }
1262
- auto tid;
1263
- let vec[ ty:: t] subtys;
1264
1271
alt ( ty:: struct ( cx. tcx , t) ) {
1265
- case ( ty:: ty_tag ( ?tid_, ?subtys_) ) { tid = tid_; subtys = subtys_; }
1272
+ case ( ty:: ty_tag ( ?tid, ?subtys) ) {
1273
+ // Compute max(variant sizes).
1274
+
1275
+ auto max_size = 0 u;
1276
+ auto variants = ty:: tag_variants ( cx. tcx , tid) ;
1277
+ for ( ty:: variant_info variant in variants) {
1278
+ // TODO: Remove this vec->ivec conversion.
1279
+ auto args = ~[ ] ;
1280
+ for ( ty:: t typ in variant. args) { args += ~[ typ] ; }
1281
+
1282
+ auto tup_ty = simplify_type( cx, ty:: mk_imm_tup( cx. tcx, args) ) ;
1283
+ // Perform any type parameter substitutions.
1284
+
1285
+ tup_ty = ty:: substitute_type_params( cx. tcx, subtys, tup_ty) ;
1286
+ // Here we possibly do a recursive call.
1287
+
1288
+ auto this_size = llsize_of_real( cx, type_of( cx, sp, tup_ty) ) ;
1289
+ if ( max_size < this_size) { max_size = this_size; }
1290
+ }
1291
+ cx. tag_sizes. insert ( t , max_size ) ;
1292
+ ret max_size;
1293
+ }
1266
1294
case ( _) {
1267
1295
cx. tcx . sess . span_fatal ( sp,
1268
1296
"non-tag passed to " +
1269
1297
"static_size_of_tag()" ) ;
1270
1298
}
1271
1299
}
1272
- // Compute max(variant sizes).
1273
-
1274
- auto max_size = 0 u;
1275
- auto variants = ty:: tag_variants ( cx. tcx , tid) ;
1276
- for ( ty:: variant_info variant in variants) {
1277
- // TODO: Remove this vec->ivec conversion.
1278
- auto args = ~[ ] ;
1279
- for ( ty:: t typ in variant. args) { args += ~[ typ] ; }
1280
-
1281
- auto tup_ty = simplify_type( cx, ty:: mk_imm_tup( cx. tcx, args) ) ;
1282
- // Perform any type parameter substitutions.
1283
-
1284
- tup_ty = ty:: substitute_type_params( cx. tcx, subtys, tup_ty) ;
1285
- // Here we possibly do a recursive call.
1286
-
1287
- auto this_size = llsize_of_real( cx, type_of( cx, sp, tup_ty) ) ;
1288
- if ( max_size < this_size) { max_size = this_size; }
1289
- }
1290
- cx. tag_sizes. insert ( t , max_size ) ;
1291
- ret max_size;
1292
1300
}
1293
1301
1294
1302
fn dynamic_size_of ( & @block_ctxt cx , ty:: t t) -> result {
@@ -1516,7 +1524,7 @@ fn GEP_tup_like(&@block_ctxt cx, &ty::t t, ValueRef base, &vec[int] ixs) ->
1516
1524
// appropriate. @llblobptr is the data part of a tag value; its actual type is
1517
1525
// meaningless, as it will be cast away.
1518
1526
fn GEP_tag ( @block_ctxt cx , ValueRef llblobptr , & ast:: def_id tag_id,
1519
- & ast:: def_id variant_id , & vec [ ty:: t ] ty_substs , int ix) -> result {
1527
+ & ast:: def_id variant_id , & ty:: t[ ] ty_substs, int ix) -> result {
1520
1528
auto variant =
1521
1529
ty:: tag_variant_with_id( cx. fcx. lcx. ccx. tcx, tag_id, variant_id) ;
1522
1530
// Synthesize a tuple type so that GEP_tup_like() can work its magic.
@@ -2138,8 +2146,12 @@ fn make_drop_glue(&@block_ctxt cx, ValueRef v0, &ty::t t) {
2138
2146
2139
2147
fn trans_res_drop( @block_ctxt cx, ValueRef rs, & ast:: def_id did,
2140
2148
ty:: t inner_t, & vec[ ty:: t] tps) -> result {
2149
+ // FIXME: Remove this vec->ivec conversion.
2150
+ auto tps_ivec = ~[ ] ;
2151
+ for ( ty:: t tp in tps) { tps_ivec += ~[ tp] ; }
2152
+
2141
2153
auto ccx = cx. fcx. lcx. ccx;
2142
- auto inner_t_s = ty:: substitute_type_params( ccx. tcx, tps , inner_t) ;
2154
+ auto inner_t_s = ty:: substitute_type_params( ccx. tcx, tps_ivec , inner_t) ;
2143
2155
auto tup_ty = ty:: mk_imm_tup( ccx. tcx, ~[ ty:: mk_int( ccx. tcx) , inner_t_s] ) ;
2144
2156
auto drop_cx = new_sub_block_ctxt( cx, "drop res") ;
2145
2157
auto next_cx = new_sub_block_ctxt( cx, "next") ;
@@ -2645,7 +2657,7 @@ fn iter_structural_ty_full(&@block_ctxt cx, ValueRef av, ValueRef bv,
2645
2657
}
2646
2658
2647
2659
fn iter_variant( @block_ctxt cx, ValueRef a_tup, ValueRef b_tup,
2648
- & ty:: variant_info variant, & vec [ ty:: t] tps,
2660
+ & ty:: variant_info variant, & ty:: t[ ] tps,
2649
2661
& ast:: def_id tid, & val_pair_and_ty_fn f) -> result {
2650
2662
if ( vec:: len[ ty:: t] ( variant. args) == 0 u) {
2651
2663
ret rslt( cx, C_nil ( ) ) ;
@@ -2707,8 +2719,12 @@ fn iter_structural_ty_full(&@block_ctxt cx, ValueRef av, ValueRef bv,
2707
2719
}
2708
2720
}
2709
2721
case ( ty:: ty_res( _, ?inner, ?tps) ) {
2722
+ // FIXME: Remove this vec->ivec conversion.
2723
+ auto tps_ivec = ~[ ] ;
2724
+ for ( ty:: t tp in tps) { tps_ivec += ~[ tp] ; }
2725
+
2710
2726
auto inner1 = ty:: substitute_type_params( cx. fcx. lcx. ccx. tcx,
2711
- tps , inner) ;
2727
+ tps_ivec , inner) ;
2712
2728
r = GEP_tup_like ( r. bcx, t, av, [ 0 , 1 ] ) ;
2713
2729
auto llfld_a = r. val;
2714
2730
r = GEP_tup_like ( r. bcx, t, bv, [ 0 , 1 ] ) ;
@@ -4137,8 +4153,12 @@ fn autoderef_lval(&@block_ctxt cx, ValueRef v, &ty::t t, bool is_lval)
4137
4153
} else { v1 = body; }
4138
4154
}
4139
4155
case ( ty:: ty_res( ?did, ?inner, ?tps) ) {
4156
+ // FIXME: Remove this vec->ivec conversion.
4157
+ auto tps_ivec = ~[ ] ;
4158
+ for ( ty:: t tp in tps) { tps_ivec += ~[ tp] ; }
4159
+
4140
4160
if ( is_lval) { v1 = cx. build. Load ( v1) ; }
4141
- t1 = ty:: substitute_type_params( ccx. tcx, tps , inner) ;
4161
+ t1 = ty:: substitute_type_params( ccx. tcx, tps_ivec , inner) ;
4142
4162
v1 = cx. build. GEP ( v1, [ C_int ( 0 ) , C_int ( 1 ) ] ) ;
4143
4163
}
4144
4164
case ( ty:: ty_tag( ?did, ?tps) ) {
@@ -4712,14 +4732,19 @@ fn trans_pat_match(&@block_ctxt cx, &@ast::pat pat, ValueRef llval,
4712
4732
matched_cx. build. GEP ( lltagptr, [ C_int ( 0 ) , C_int ( 1 ) ] ) ;
4713
4733
}
4714
4734
}
4735
+
4715
4736
auto ty_params = ty:: node_id_to_type_params
4716
4737
( cx. fcx. lcx. ccx. tcx, pat. id) ;
4738
+ // FIXME: Remove this vec->ivec conversion.
4739
+ auto tps_ivec = ~[ ] ;
4740
+ for ( ty:: t tp in ty_params) { tps_ivec += ~[ tp] ; }
4741
+
4717
4742
if ( vec:: len( subpats) > 0 u) {
4718
4743
auto i = 0 ;
4719
4744
for ( @ast:: pat subpat in subpats) {
4720
4745
auto rslt =
4721
4746
GEP_tag ( matched_cx, llblobptr, vdef. _0, vdef. _1,
4722
- ty_params , i) ;
4747
+ tps_ivec , i) ;
4723
4748
auto llsubvalptr = rslt. val;
4724
4749
matched_cx = rslt. bcx;
4725
4750
auto llsubval =
@@ -4773,14 +4798,19 @@ fn trans_pat_binding(&@block_ctxt cx, &@ast::pat pat, ValueRef llval,
4773
4798
( llval, T_opaque_tag_ptr ( cx. fcx. lcx. ccx. tn) ) ;
4774
4799
llblobptr = cx. build. GEP ( lltagptr, [ C_int ( 0 ) , C_int ( 1 ) ] ) ;
4775
4800
}
4801
+
4776
4802
auto ty_param_substs =
4777
4803
ty:: node_id_to_type_params( cx. fcx. lcx. ccx. tcx, pat. id) ;
4804
+ // FIXME: Remove this vec->ivec conversion.
4805
+ auto tps_ivec = ~[ ] ;
4806
+ for ( ty:: t tp in ty_param_substs) { tps_ivec += ~[ tp] ; }
4807
+
4778
4808
auto this_cx = cx;
4779
4809
auto i = 0 ;
4780
4810
for ( @ast:: pat subpat in subpats) {
4781
4811
auto rslt =
4782
- GEP_tag ( this_cx, llblobptr, vdef. _0, vdef. _1,
4783
- ty_param_substs , i) ;
4812
+ GEP_tag ( this_cx, llblobptr, vdef. _0, vdef. _1, tps_ivec ,
4813
+ i) ;
4784
4814
this_cx = rslt. bcx;
4785
4815
auto subpat_res =
4786
4816
trans_pat_binding( this_cx, subpat, rslt. val, true) ;
@@ -8478,10 +8508,10 @@ fn trans_tag_variant(@local_ctxt cx, ast::node_id tag_id,
8478
8508
create_llargs_for_fn_args( fcx, ast:: proto_fn, none[ ty_self_pair] ,
8479
8509
ty:: ret_ty_of_fn( cx. ccx. tcx, variant. node. id) ,
8480
8510
fn_args, ty_params) ;
8481
- let vec [ ty:: t] ty_param_substs = [ ] ;
8511
+ let ty:: t[ ] ty_param_substs = ~ [ ] ;
8482
8512
i = 0 u;
8483
8513
for ( ast:: ty_param tp in ty_params) {
8484
- ty_param_substs += [ ty:: mk_param( cx. ccx. tcx, i) ] ;
8514
+ ty_param_substs += ~ [ ty:: mk_param( cx. ccx. tcx, i) ] ;
8485
8515
i += 1 u;
8486
8516
}
8487
8517
auto arg_tys = arg_tys_of_fn( cx. ccx, variant. node. id) ;
0 commit comments