From 333e2e04c4663650b70ac595404ed2008a1ba854 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Fri, 13 Sep 2024 02:46:57 +0000 Subject: [PATCH] perf(index): remove `Idx` bounds-checks from `first` + `last` methods (#5726) The following methods of `IndexVec` call `Idx::from_usize` which performs a bounds check, with a panicking branch: * `first` * `first_mut` * `last` * `last_mut` These bounds checks are unnecessary. Remove them by delegating to the underlying `Vec`'s methods. --- crates/oxc_index/src/idxslice.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/oxc_index/src/idxslice.rs b/crates/oxc_index/src/idxslice.rs index 0ccac7be1f98e..ab5f9d2c4e0a8 100644 --- a/crates/oxc_index/src/idxslice.rs +++ b/crates/oxc_index/src/idxslice.rs @@ -409,26 +409,25 @@ impl IndexSlice { /// Return the the last element, if we are not empty. #[inline(always)] pub fn last(&self) -> Option<&T> { - self.len().checked_sub(1).and_then(|i| self.get(I::from_usize(i))) + self.raw.last() } /// Return the the last element, if we are not empty. #[inline] pub fn last_mut(&mut self) -> Option<&mut T> { - let i = self.len().checked_sub(1)?; - self.get_mut(I::from_usize(i)) + self.raw.last_mut() } /// Return the the first element, if we are not empty. #[inline] pub fn first(&self) -> Option<&T> { - self.get(I::from_usize(0)) + self.raw.first() } /// Return the the first element, if we are not empty. #[inline] pub fn first_mut(&mut self) -> Option<&mut T> { - self.get_mut(I::from_usize(0)) + self.raw.first_mut() } /// Copies elements from one part of the slice to another part of itself,