From 4e029622899f0f4441c0308b5137a4ead1b98cf0 Mon Sep 17 00:00:00 2001 From: Homer McMillan Date: Sat, 9 Feb 2019 15:49:51 -0500 Subject: [PATCH] Fix range reversed #421 --- vm/src/obj/objrange.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/vm/src/obj/objrange.rs b/vm/src/obj/objrange.rs index 221e98da5..c2dea3745 100644 --- a/vm/src/obj/objrange.rs +++ b/vm/src/obj/objrange.rs @@ -95,14 +95,25 @@ impl RangeType { #[inline] pub fn reversed(&self) -> Self { + // compute the last element that is actually contained within the range + // this is the new start + let remainder = ((&self.end - &self.start) % &self.step).abs(); + let start = if rem.is_zero() { + &self.end - &self.step + } else { + &self.end - &remainder + }; + match self.step.sign() { - Sign::Plus => RangeType { - start: &self.end - 1, - end: &self.start - 1, - step: -&self.step, + Sign::Plus => { + RangeType { + start, + end: &self.start - 1, + step: -&self.step, + } }, Sign::Minus => RangeType { - start: &self.end + 1, + start, end: &self.start + 1, step: -&self.step, },