@@ -81,12 +81,10 @@ impl<'tcx> TraitAliasExpansionInfo<'tcx> {
81
81
82
82
pub fn expand_trait_aliases < ' tcx > (
83
83
tcx : TyCtxt < ' tcx > ,
84
- trait_refs : impl IntoIterator < Item = ( ty:: PolyTraitRef < ' tcx > , Span ) > ,
84
+ trait_refs : impl Iterator < Item = ( ty:: PolyTraitRef < ' tcx > , Span ) > ,
85
85
) -> TraitAliasExpander < ' tcx > {
86
- let items: Vec < _ > = trait_refs
87
- . into_iter ( )
88
- . map ( |( trait_ref, span) | TraitAliasExpansionInfo :: new ( trait_ref, span) )
89
- . collect ( ) ;
86
+ let items: Vec < _ > =
87
+ trait_refs. map ( |( trait_ref, span) | TraitAliasExpansionInfo :: new ( trait_ref, span) ) . collect ( ) ;
90
88
TraitAliasExpander { tcx, stack : items }
91
89
}
92
90
@@ -199,7 +197,7 @@ pub fn impl_trait_ref_and_oblig<'a, 'tcx>(
199
197
param_env : ty:: ParamEnv < ' tcx > ,
200
198
impl_def_id : DefId ,
201
199
impl_substs : SubstsRef < ' tcx > ,
202
- ) -> ( ty:: TraitRef < ' tcx > , Vec < PredicateObligation < ' tcx > > ) {
200
+ ) -> ( ty:: TraitRef < ' tcx > , impl Iterator < Item = PredicateObligation < ' tcx > > ) {
203
201
let impl_trait_ref = selcx. tcx ( ) . impl_trait_ref ( impl_def_id) . unwrap ( ) ;
204
202
let impl_trait_ref = impl_trait_ref. subst ( selcx. tcx ( ) , impl_substs) ;
205
203
let Normalized { value : impl_trait_ref, obligations : normalization_obligations1 } =
@@ -210,13 +208,11 @@ pub fn impl_trait_ref_and_oblig<'a, 'tcx>(
210
208
let Normalized { value : predicates, obligations : normalization_obligations2 } =
211
209
super :: normalize ( selcx, param_env, ObligationCause :: dummy ( ) , & predicates) ;
212
210
let impl_obligations =
213
- predicates_for_generics ( ObligationCause :: dummy ( ) , 0 , param_env, & predicates) ;
211
+ predicates_for_generics ( ObligationCause :: dummy ( ) , 0 , param_env, predicates) ;
214
212
215
- let impl_obligations: Vec < _ > = impl_obligations
216
- . into_iter ( )
217
- . chain ( normalization_obligations1)
218
- . chain ( normalization_obligations2)
219
- . collect ( ) ;
213
+ let impl_obligations = impl_obligations
214
+ . chain ( normalization_obligations1. into_iter ( ) )
215
+ . chain ( normalization_obligations2. into_iter ( ) ) ;
220
216
221
217
( impl_trait_ref, impl_obligations)
222
218
}
@@ -226,20 +222,16 @@ pub fn predicates_for_generics<'tcx>(
226
222
cause : ObligationCause < ' tcx > ,
227
223
recursion_depth : usize ,
228
224
param_env : ty:: ParamEnv < ' tcx > ,
229
- generic_bounds : & ty:: InstantiatedPredicates < ' tcx > ,
230
- ) -> Vec < PredicateObligation < ' tcx > > {
225
+ generic_bounds : ty:: InstantiatedPredicates < ' tcx > ,
226
+ ) -> impl Iterator < Item = PredicateObligation < ' tcx > > {
231
227
debug ! ( "predicates_for_generics(generic_bounds={:?})" , generic_bounds) ;
232
228
233
- generic_bounds
234
- . predicates
235
- . iter ( )
236
- . map ( |& predicate| Obligation {
237
- cause : cause. clone ( ) ,
238
- recursion_depth,
239
- param_env,
240
- predicate,
241
- } )
242
- . collect ( )
229
+ generic_bounds. predicates . into_iter ( ) . map ( move |predicate| Obligation {
230
+ cause : cause. clone ( ) ,
231
+ recursion_depth,
232
+ param_env,
233
+ predicate,
234
+ } )
243
235
}
244
236
245
237
pub fn predicate_for_trait_ref < ' tcx > (
0 commit comments