File tree Expand file tree Collapse file tree 2 files changed +8
-20
lines changed Expand file tree Collapse file tree 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> {
18681868
18691869 #[ inline]
18701870 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) ,
18831876 }
18841877 }
18851878
@@ -1978,14 +1971,8 @@ impl<I: Iterator> Peekable<I> {
19781971 #[ inline]
19791972 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
19801973 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 ( )
19891976 }
19901977}
19911978
Original file line number Diff line number Diff line change 9292#![ feature( link_llvm_intrinsics) ]
9393#![ feature( never_type) ]
9494#![ feature( nll) ]
95+ #![ feature( bind_by_move_pattern_guards) ]
9596#![ feature( exhaustive_patterns) ]
9697#![ feature( no_core) ]
9798#![ feature( on_unimplemented) ]
You can’t perform that action at this time.
0 commit comments