File tree 2 files changed +8
-20
lines changed
2 files changed +8
-20
lines changed Original file line number Diff line number Diff line change @@ -1868,18 +1868,11 @@ impl<I: Iterator> Iterator for Peekable<I> {
1868
1868
1869
1869
#[ inline]
1870
1870
fn nth ( & mut self , n : usize ) -> Option < I :: Item > {
1871
- // FIXME(#43234): merge these when borrow-checking gets better.
1872
- if n == 0 {
1873
- match self . peeked . take ( ) {
1874
- Some ( v) => v,
1875
- None => self . iter . nth ( n) ,
1876
- }
1877
- } else {
1878
- match self . peeked . take ( ) {
1879
- Some ( None ) => None ,
1880
- Some ( Some ( _) ) => self . iter . nth ( n - 1 ) ,
1881
- None => self . iter . nth ( n) ,
1882
- }
1871
+ match self . peeked . take ( ) {
1872
+ Some ( None ) => None ,
1873
+ Some ( v @ Some ( _) ) if n == 0 => v,
1874
+ Some ( Some ( _) ) => self . iter . nth ( n - 1 ) ,
1875
+ None => self . iter . nth ( n) ,
1883
1876
}
1884
1877
}
1885
1878
@@ -1978,14 +1971,8 @@ impl<I: Iterator> Peekable<I> {
1978
1971
#[ inline]
1979
1972
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1980
1973
pub fn peek ( & mut self ) -> Option < & I :: Item > {
1981
- if self . peeked . is_none ( ) {
1982
- self . peeked = Some ( self . iter . next ( ) ) ;
1983
- }
1984
- match self . peeked {
1985
- Some ( Some ( ref value) ) => Some ( value) ,
1986
- Some ( None ) => None ,
1987
- _ => unreachable ! ( ) ,
1988
- }
1974
+ let iter = & mut self . iter ;
1975
+ self . peeked . get_or_insert_with ( || iter. next ( ) ) . as_ref ( )
1989
1976
}
1990
1977
}
1991
1978
Original file line number Diff line number Diff line change 92
92
#![ feature( link_llvm_intrinsics) ]
93
93
#![ feature( never_type) ]
94
94
#![ feature( nll) ]
95
+ #![ feature( bind_by_move_pattern_guards) ]
95
96
#![ feature( exhaustive_patterns) ]
96
97
#![ feature( no_core) ]
97
98
#![ feature( on_unimplemented) ]
You can’t perform that action at this time.
0 commit comments