From ab8509edaa06ea0031c421282a792dfe2a857b2e Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Wed, 31 Jul 2024 00:28:46 +0000 Subject: [PATCH] perf(parser): use `-` not `saturating_sub` (#4561) Follow-on after #4304. Avoid using `saturating_sub` when plain `-` will do. `-` is cheaper - it's a single assembly instruction, whereas `saturating_sub` is usually 3 instructions. https://godbolt.org/z/fo8Tcx6bK --- crates/oxc_parser/src/lexer/source.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/oxc_parser/src/lexer/source.rs b/crates/oxc_parser/src/lexer/source.rs index 8c108ba6d..88b0fe6e8 100644 --- a/crates/oxc_parser/src/lexer/source.rs +++ b/crates/oxc_parser/src/lexer/source.rs @@ -501,9 +501,11 @@ impl<'a> Source<'a> { /// Peek next two bytes of source without consuming them. #[inline] pub(super) fn peek_2_bytes(&self) -> Option<[u8; 2]> { - if (self.end as usize).saturating_sub(self.ptr as usize) >= 2 { + // `end` is always >= `ptr` so `end - ptr` cannot wrap around. + // No need to use checked/saturating subtraction here. + if (self.end as usize) - (self.ptr as usize) >= 2 { // SAFETY: The check above ensures that there are at least 2 bytes to - // read from `self.ptr` without overflowing past `self.end`. + // read from `self.ptr` without reading past `self.end` let bytes = unsafe { self.position().read2() }; Some(bytes) } else {