about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Burka <aburka@seas.upenn.edu>2016-03-04 18:57:43 -0500
committerAlex Burka <aburka@seas.upenn.edu>2016-03-04 18:57:43 -0500
commit430b3e19606cf76288a383b89428107756d4aa61 (patch)
tree52d8d22e59ea92784314871900ec0675e52fe3df
parenta928c8360c14660c6eeb4bfa29d6ad54ac0029f4 (diff)
downloadrust-430b3e19606cf76288a383b89428107756d4aa61.tar.gz
rust-430b3e19606cf76288a383b89428107756d4aa61.zip
remove under/overflow from next_back/next
-rw-r--r--src/libcore/iter.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 64933d0acf5..e37e52c6dc3 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -4605,8 +4605,10 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
             Empty { .. } => (None, None), // empty iterators yield no values
 
             NonEmpty { ref mut start, ref mut end } => {
-                let one = A::one();
-                if start <= end {
+                if start == end {
+                    (Some(mem::replace(end, A::one())), Some(mem::replace(start, A::one())))
+                } else if start < end {
+                    let one = A::one();
                     let mut n = &*start + &one;
                     mem::swap(&mut n, start);
 
@@ -4620,7 +4622,7 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
                     // ^ are we done yet?
                     Some(n)) // < the value to output
                 } else {
-                    (Some(mem::replace(start, one)), None)
+                    (Some(mem::replace(start, A::one())), None)
                 }
             }
         };
@@ -4664,15 +4666,17 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where
             Empty { .. } => return None,
 
             NonEmpty { ref mut start, ref mut end } => {
-                let one = A::one();
-                if start <= end {
+                if start == end {
+                    (Some(mem::replace(start, A::one())), Some(mem::replace(end, A::one())))
+                } else if start < end {
+                    let one = A::one();
                     let mut n = &*end - &one;
                     mem::swap(&mut n, end);
 
                     (if n == *start { Some(mem::replace(start, one)) } else { None },
                      Some(n))
                 } else {
-                    (Some(mem::replace(end, one)), None)
+                    (Some(mem::replace(end, A::one())), None)
                 }
             }
         };