From 69969488257a9120ab81ebb1df673838d63921b3 Mon Sep 17 00:00:00 2001 From: overlookmotel Date: Sat, 13 Jan 2024 02:34:05 +0000 Subject: [PATCH] refactor(parser): remove extraneous code from regex parsing (#2008) This PR removes some code in parsing regexp flags which is extraneous: ```rs if !ch.is_ascii_lowercase() { self.error(diagnostics::RegExpFlag(ch, self.current_offset())); continue; } ``` Which is followed by: ```rs let flag = if let Ok(flag) = RegExpFlags::try_from(ch) { flag } else { self.error(diagnostics::RegExpFlag(ch, self.current_offset())); continue; }; ``` `!ch.is_ascii_lowercase()` is equivalent to `ch < 'a' || ch > 'z'`. The compiler implements `RegExpFlags::try_from(ch)` as `ch < 'd' || ch > 'y'` and then a jump table. So `ch.is_ascii_lowercase()` does nothing that `RegExpFlags::try_from(ch)` doesn't do already. https://godbolt.org/z/51GPPY9nx (this PR built on top of #2007 for ease) --- crates/oxc_parser/src/lexer/mod.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/oxc_parser/src/lexer/mod.rs b/crates/oxc_parser/src/lexer/mod.rs index e41a1cad9..f563a64c7 100644 --- a/crates/oxc_parser/src/lexer/mod.rs +++ b/crates/oxc_parser/src/lexer/mod.rs @@ -870,10 +870,6 @@ impl<'a> Lexer<'a> { while let Some(ch @ ('$' | '_' | 'a'..='z' | 'A'..='Z' | '0'..='9')) = self.peek() { self.current.chars.next(); - if !ch.is_ascii_lowercase() { - self.error(diagnostics::RegExpFlag(ch, self.current_offset())); - continue; - } let flag = if let Ok(flag) = RegExpFlags::try_from(ch) { flag } else {