]> git.lizzy.rs Git - rust.git/commitdiff
Resolve FIXME and cleanup
authorShotaro Yamada <sinkuu@sinkuu.xyz>
Sat, 8 Dec 2018 11:15:49 +0000 (20:15 +0900)
committerShotaro Yamada <sinkuu@sinkuu.xyz>
Sat, 8 Dec 2018 15:01:09 +0000 (00:01 +0900)
src/libcore/iter/mod.rs
src/libcore/lib.rs

index 83d35324bc2507cc1f45ea2ac095cc4f2bb126b3..bc5bbc2217cd3fd63d4652b14a6f905ba5866a9c 100644 (file)
@@ -1868,18 +1868,11 @@ fn count(mut self) -> usize {
 
     #[inline]
     fn nth(&mut self, n: usize) -> Option<I::Item> {
-        // FIXME(#43234): merge these when borrow-checking gets better.
-        if n == 0 {
-            match self.peeked.take() {
-                Some(v) => v,
-                None => self.iter.nth(n),
-            }
-        } else {
-            match self.peeked.take() {
-                Some(None) => None,
-                Some(Some(_)) => self.iter.nth(n - 1),
-                None => self.iter.nth(n),
-            }
+        match self.peeked.take() {
+            Some(None) => None,
+            Some(v @ Some(_)) if n == 0 => v,
+            Some(Some(_)) => self.iter.nth(n - 1),
+            None => self.iter.nth(n),
         }
     }
 
@@ -1978,14 +1971,8 @@ impl<I: Iterator> Peekable<I> {
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn peek(&mut self) -> Option<&I::Item> {
-        if self.peeked.is_none() {
-            self.peeked = Some(self.iter.next());
-        }
-        match self.peeked {
-            Some(Some(ref value)) => Some(value),
-            Some(None) => None,
-            _ => unreachable!(),
-        }
+        let iter = &mut self.iter;
+        self.peeked.get_or_insert_with(|| iter.next()).as_ref()
     }
 }
 
index 726e891df0ccf2f4e4c63d4dee08121594785f5d..1287e11cff47bc1be6f74d76dc605c82614fb3b7 100644 (file)
@@ -92,6 +92,7 @@
 #![feature(link_llvm_intrinsics)]
 #![feature(never_type)]
 #![feature(nll)]
+#![feature(bind_by_move_pattern_guards)]
 #![feature(exhaustive_patterns)]
 #![feature(no_core)]
 #![feature(on_unimplemented)]