@@ -49,10 +49,9 @@ pub trait AstConv<'tcx> {
49
49
50
50
fn default_constness_for_trait_bounds ( & self ) -> Constness ;
51
51
52
- /// Returns predicates in scope of the form `X: Foo<T>`, where `X`
53
- /// is a type parameter `X` with the given id `def_id` and T
54
- /// matches `assoc_name`. This is a subset of the full set of
55
- /// predicates.
52
+ /// Returns predicates in scope of the form `X: Foo`, where `X` is
53
+ /// a type parameter `X` with the given id `def_id`. This is a
54
+ /// subset of the full set of predicates.
56
55
///
57
56
/// This is used for one specific purpose: resolving "short-hand"
58
57
/// associated type references like `T::Item`. In principle, we
@@ -61,12 +60,7 @@ pub trait AstConv<'tcx> {
61
60
/// but this can lead to cycle errors. The problem is that we have
62
61
/// to do this resolution *in order to create the predicates in
63
62
/// the first place*. Hence, we have this "special pass".
64
- fn get_type_parameter_bounds (
65
- & self ,
66
- span : Span ,
67
- def_id : DefId ,
68
- assoc_name : Ident ,
69
- ) -> ty:: GenericPredicates < ' tcx > ;
63
+ fn get_type_parameter_bounds ( & self , span : Span , def_id : DefId ) -> ty:: GenericPredicates < ' tcx > ;
70
64
71
65
/// Returns the lifetime to use when a lifetime is omitted (and not elided).
72
66
fn re_infer ( & self , param : Option < & ty:: GenericParamDef > , span : Span )
@@ -768,7 +762,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
768
762
}
769
763
770
764
// Returns `true` if a bounds list includes `?Sized`.
771
- pub fn is_unsized ( & self , ast_bounds : & [ & hir:: GenericBound < ' _ > ] , span : Span ) -> bool {
765
+ pub fn is_unsized ( & self , ast_bounds : & [ hir:: GenericBound < ' _ > ] , span : Span ) -> bool {
772
766
let tcx = self . tcx ( ) ;
773
767
774
768
// Try to find an unbound in bounds.
@@ -826,7 +820,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
826
820
fn add_bounds (
827
821
& self ,
828
822
param_ty : Ty < ' tcx > ,
829
- ast_bounds : & [ & hir:: GenericBound < ' _ > ] ,
823
+ ast_bounds : & [ hir:: GenericBound < ' _ > ] ,
830
824
bounds : & mut Bounds < ' tcx > ,
831
825
) {
832
826
let constness = self . default_constness_for_trait_bounds ( ) ;
@@ -841,7 +835,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
841
835
hir:: GenericBound :: Trait ( _, hir:: TraitBoundModifier :: Maybe ) => { }
842
836
hir:: GenericBound :: LangItemTrait ( lang_item, span, hir_id, args) => self
843
837
. instantiate_lang_item_trait_ref (
844
- * lang_item, * span, * hir_id, args, param_ty, bounds,
838
+ lang_item, span, hir_id, args, param_ty, bounds,
845
839
) ,
846
840
hir:: GenericBound :: Outlives ( ref l) => {
847
841
bounds. region_bounds . push ( ( self . ast_region_to_region ( l, None ) , l. span ) )
@@ -872,42 +866,6 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
872
866
ast_bounds : & [ hir:: GenericBound < ' _ > ] ,
873
867
sized_by_default : SizedByDefault ,
874
868
span : Span ,
875
- ) -> Bounds < ' tcx > {
876
- let ast_bounds: Vec < _ > = ast_bounds. iter ( ) . collect ( ) ;
877
- self . compute_bounds_inner ( param_ty, & ast_bounds, sized_by_default, span)
878
- }
879
-
880
- /// Convert the bounds in `ast_bounds` that refer to traits which define an associated type
881
- /// named `assoc_name` into ty::Bounds. Ignore the rest.
882
- pub fn compute_bounds_that_match_assoc_type (
883
- & self ,
884
- param_ty : Ty < ' tcx > ,
885
- ast_bounds : & [ hir:: GenericBound < ' _ > ] ,
886
- sized_by_default : SizedByDefault ,
887
- span : Span ,
888
- assoc_name : Ident ,
889
- ) -> Bounds < ' tcx > {
890
- let mut result = Vec :: new ( ) ;
891
-
892
- for ast_bound in ast_bounds {
893
- if let Some ( trait_ref) = ast_bound. trait_ref ( ) {
894
- if let Some ( trait_did) = trait_ref. trait_def_id ( ) {
895
- if self . tcx ( ) . trait_may_define_assoc_type ( trait_did, assoc_name) {
896
- result. push ( ast_bound) ;
897
- }
898
- }
899
- }
900
- }
901
-
902
- self . compute_bounds_inner ( param_ty, & result, sized_by_default, span)
903
- }
904
-
905
- fn compute_bounds_inner (
906
- & self ,
907
- param_ty : Ty < ' tcx > ,
908
- ast_bounds : & [ & hir:: GenericBound < ' _ > ] ,
909
- sized_by_default : SizedByDefault ,
910
- span : Span ,
911
869
) -> Bounds < ' tcx > {
912
870
let mut bounds = Bounds :: default ( ) ;
913
871
@@ -1077,8 +1035,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
1077
1035
// Calling `skip_binder` is okay, because `add_bounds` expects the `param_ty`
1078
1036
// parameter to have a skipped binder.
1079
1037
let param_ty = tcx. mk_projection ( assoc_ty. def_id , candidate. skip_binder ( ) . substs ) ;
1080
- let ast_bounds: Vec < _ > = ast_bounds. iter ( ) . collect ( ) ;
1081
- self . add_bounds ( param_ty, & ast_bounds, bounds) ;
1038
+ self . add_bounds ( param_ty, ast_bounds, bounds) ;
1082
1039
}
1083
1040
}
1084
1041
Ok ( ( ) )
@@ -1395,24 +1352,21 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
1395
1352
ty_param_def_id, assoc_name, span,
1396
1353
) ;
1397
1354
1398
- let predicates = & self
1399
- . get_type_parameter_bounds ( span, ty_param_def_id. to_def_id ( ) , assoc_name)
1400
- . predicates ;
1355
+ let predicates =
1356
+ & self . get_type_parameter_bounds ( span, ty_param_def_id. to_def_id ( ) ) . predicates ;
1401
1357
1402
1358
debug ! ( "find_bound_for_assoc_item: predicates={:#?}" , predicates) ;
1403
1359
1404
1360
let param_hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( ty_param_def_id) ;
1405
1361
let param_name = tcx. hir ( ) . ty_param_name ( param_hir_id) ;
1406
1362
self . one_bound_for_assoc_type (
1407
1363
|| {
1408
- traits:: transitive_bounds_that_define_assoc_type (
1364
+ traits:: transitive_bounds (
1409
1365
tcx,
1410
1366
predicates. iter ( ) . filter_map ( |( p, _) | {
1411
1367
p. to_opt_poly_trait_ref ( ) . map ( |trait_ref| trait_ref. value )
1412
1368
} ) ,
1413
- assoc_name,
1414
1369
)
1415
- . into_iter ( )
1416
1370
} ,
1417
1371
|| param_name. to_string ( ) ,
1418
1372
assoc_name,
0 commit comments