@@ -478,35 +478,29 @@ pub fn note_unique_llvm_symbol(ccx: &CrateContext, sym: ~str) {
478478pub fn get_res_dtor ( ccx : & CrateContext ,
479479 did : ast:: DefId ,
480480 parent_id : ast:: DefId ,
481- substs : & [ ty:: t ] )
481+ substs : & ty:: substs )
482482 -> ValueRef {
483483 let _icx = push_ctxt ( "trans_res_dtor" ) ;
484484 let did = if did. krate != ast:: LOCAL_CRATE {
485485 inline:: maybe_instantiate_inline ( ccx, did)
486486 } else {
487487 did
488488 } ;
489- if !substs. is_empty ( ) {
489+
490+ if !substs. tps . is_empty ( ) || !substs. self_ty . is_none ( ) {
490491 assert_eq ! ( did. krate, ast:: LOCAL_CRATE ) ;
491- let tsubsts = ty:: substs {
492- regions : ty:: ErasedRegions ,
493- self_ty : None ,
494- tps : Vec :: from_slice ( substs) ,
495- } ;
496492
497- let vtables = typeck:: check:: vtable:: trans_resolve_method ( ccx. tcx ( ) , did. node , & tsubsts ) ;
498- let ( val, _) = monomorphize:: monomorphic_fn ( ccx, did, & tsubsts , vtables, None , None ) ;
493+ let vtables = typeck:: check:: vtable:: trans_resolve_method ( ccx. tcx ( ) , did. node , substs ) ;
494+ let ( val, _) = monomorphize:: monomorphic_fn ( ccx, did, substs , vtables, None , None ) ;
499495
500496 val
501497 } else if did. krate == ast:: LOCAL_CRATE {
502498 get_item_val ( ccx, did. node )
503499 } else {
504500 let tcx = ccx. tcx ( ) ;
505501 let name = csearch:: get_symbol ( & ccx. sess ( ) . cstore , did) ;
506- let class_ty = ty:: subst_tps ( tcx,
507- substs,
508- None ,
509- ty:: lookup_item_type ( tcx, parent_id) . ty ) ;
502+ let class_ty = ty:: subst ( tcx, substs,
503+ ty:: lookup_item_type ( tcx, parent_id) . ty ) ;
510504 let llty = type_of_dtor ( ccx, class_ty) ;
511505
512506 get_extern_fn ( & mut * ccx. externs . borrow_mut ( ) , ccx. llmod , name,
@@ -670,7 +664,7 @@ pub fn iter_structural_ty<'r,
670664 repr : & adt:: Repr ,
671665 av : ValueRef ,
672666 variant : & ty:: VariantInfo ,
673- tps : & [ ty:: t ] ,
667+ substs : & ty:: substs ,
674668 f : val_and_ty_fn < ' r , ' b > )
675669 -> & ' b Block < ' b > {
676670 let _icx = push_ctxt ( "iter_variant" ) ;
@@ -680,7 +674,7 @@ pub fn iter_structural_ty<'r,
680674 for ( i, & arg) in variant. args . iter ( ) . enumerate ( ) {
681675 cx = f ( cx,
682676 adt:: trans_field_ptr ( cx, repr, av, variant. disr_val , i) ,
683- ty:: subst_tps ( tcx, tps , None , arg) ) ;
677+ ty:: subst ( tcx, substs , arg) ) ;
684678 }
685679 return cx;
686680 }
@@ -722,7 +716,7 @@ pub fn iter_structural_ty<'r,
722716 match adt:: trans_switch ( cx, & * repr, av) {
723717 ( _match:: single, None ) => {
724718 cx = iter_variant ( cx, & * repr, av, & * * variants. get ( 0 ) ,
725- substs. tps . as_slice ( ) , f) ;
719+ substs, f) ;
726720 }
727721 ( _match:: switch, Some ( lldiscrim_a) ) => {
728722 cx = f ( cx, lldiscrim_a, ty:: mk_int ( ) ) ;
@@ -748,7 +742,7 @@ pub fn iter_structural_ty<'r,
748742 & * repr,
749743 av,
750744 & * * variant,
751- substs. tps . as_slice ( ) ,
745+ substs,
752746 |x, y, z| f ( x, y, z) ) ;
753747 Br ( variant_cx, next_cx. llbb ) ;
754748 }
@@ -1153,15 +1147,7 @@ pub fn new_fn_ctxt<'a>(ccx: &'a CrateContext,
11531147 } ,
11541148 id, param_substs. map( |s| s. repr( ccx. tcx( ) ) ) ) ;
11551149
1156- let substd_output_type = match param_substs {
1157- None => output_type,
1158- Some ( substs) => {
1159- ty:: subst_tps ( ccx. tcx ( ) ,
1160- substs. tys . as_slice ( ) ,
1161- substs. self_ty ,
1162- output_type)
1163- }
1164- } ;
1150+ let substd_output_type = output_type. substp ( ccx. tcx ( ) , param_substs) ;
11651151 let uses_outptr = type_of:: return_uses_outptr ( ccx, substd_output_type) ;
11661152 let debug_context = debuginfo:: create_function_debug_context ( ccx, id, param_substs, llfndecl) ;
11671153
@@ -1213,15 +1199,7 @@ pub fn init_function<'a>(fcx: &'a FunctionContext<'a>,
12131199
12141200 // This shouldn't need to recompute the return type,
12151201 // as new_fn_ctxt did it already.
1216- let substd_output_type = match fcx. param_substs {
1217- None => output_type,
1218- Some ( substs) => {
1219- ty:: subst_tps ( fcx. ccx . tcx ( ) ,
1220- substs. tys . as_slice ( ) ,
1221- substs. self_ty ,
1222- output_type)
1223- }
1224- } ;
1202+ let substd_output_type = output_type. substp ( fcx. ccx . tcx ( ) , fcx. param_substs ) ;
12251203
12261204 if !return_type_is_void ( fcx. ccx , substd_output_type) {
12271205 // If the function returns nil/bot, there is no real return
@@ -1508,18 +1486,8 @@ fn trans_enum_variant_or_tuple_like_struct(ccx: &CrateContext,
15081486 disr: ty:: Disr ,
15091487 param_substs: Option <& param_substs>,
15101488 llfndecl: ValueRef ) {
1511- let ctor_ty = {
1512- let no_substs: & [ ty:: t] = [ ] ;
1513- let ty_param_substs: & [ ty:: t] = match param_substs {
1514- Some ( substs) => substs. tys. as_slice( ) ,
1515- None => no_substs
1516- } ;
1517-
1518- ty:: subst_tps( ccx. tcx( ) ,
1519- ty_param_substs,
1520- None ,
1521- ty:: node_id_to_type( ccx. tcx( ) , ctor_id) )
1522- } ;
1489+ let ctor_ty = ty:: node_id_to_type( ccx. tcx( ) , ctor_id) ;
1490+ let ctor_ty = ctor_ty. substp( ccx. tcx( ) , param_substs) ;
15231491
15241492 let result_ty = match ty:: get( ctor_ty) . sty {
15251493 ty:: ty_bare_fn( ref bft) => bft. sig. output,
0 commit comments