Skip to content

Commit e704ce9

Browse files
committed
Resolve FIXME and cleanup
1 parent fbe5aa5 commit e704ce9

File tree

2 files changed

+8
-20
lines changed

2 files changed

+8
-20
lines changed

src/libcore/iter/mod.rs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff 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

src/libcore/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
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)]

0 commit comments

Comments
 (0)