File tree 1 file changed +13
-6
lines changed
library/core/src/iter/traits
1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -3094,16 +3094,23 @@ pub trait Iterator {
3094
3094
P : FnMut ( Self :: Item ) -> bool ,
3095
3095
{
3096
3096
#[ inline]
3097
- fn check < T > (
3098
- mut predicate : impl FnMut ( T ) -> bool ,
3099
- ) -> impl FnMut ( usize , T ) -> ControlFlow < usize , usize > {
3097
+ fn check < ' a , T > (
3098
+ mut predicate : impl FnMut ( T ) -> bool + ' a ,
3099
+ acc : & ' a mut usize ,
3100
+ ) -> impl FnMut ( ( ) , T ) -> ControlFlow < usize , ( ) > + ' a {
3100
3101
#[ rustc_inherit_overflow_checks]
3101
- move |i, x| {
3102
- if predicate ( x) { ControlFlow :: Break ( i) } else { ControlFlow :: Continue ( i + 1 ) }
3102
+ move |_, x| {
3103
+ if predicate ( x) {
3104
+ ControlFlow :: Break ( * acc)
3105
+ } else {
3106
+ * acc += 1 ;
3107
+ ControlFlow :: Continue ( ( ) )
3108
+ }
3103
3109
}
3104
3110
}
3105
3111
3106
- self . try_fold ( 0 , check ( predicate) ) . break_value ( )
3112
+ let mut acc = 0 ;
3113
+ self . try_fold ( ( ) , check ( predicate, & mut acc) ) . break_value ( )
3107
3114
}
3108
3115
3109
3116
/// Searches for an element in an iterator from the right, returning its
You can’t perform that action at this time.
0 commit comments