From 1d1ff8db7af7b7e3169df212a3b774c2bdfdc836 Mon Sep 17 00:00:00 2001 From: Jeong Yunwon Date: Fri, 10 Jun 2022 11:44:42 +0900 Subject: [PATCH] wrap_index without abs --- vm/src/sliceable.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vm/src/sliceable.rs b/vm/src/sliceable.rs index 8f1288cc49..7a4a3d0b5a 100644 --- a/vm/src/sliceable.rs +++ b/vm/src/sliceable.rs @@ -308,14 +308,15 @@ impl SequenceIndexOp for isize { } fn wrapped_at(&self, len: usize) -> Option { - let neg = self.is_negative(); - let p = self.unsigned_abs(); - if neg { - len.checked_sub(p) - } else if p >= len { + let mut p = *self; + if p < 0 { + // casting to isize is ok because it is used by wrapping_add + p = p.wrapping_add(len as isize); + } + if p < 0 || (p as usize) >= len { None } else { - Some(p) + Some(p as usize) } } }