diff --git a/crates/oxc_parser/src/cursor.rs b/crates/oxc_parser/src/cursor.rs index c43fae0cba762..1786340729cda 100644 --- a/crates/oxc_parser/src/cursor.rs +++ b/crates/oxc_parser/src/cursor.rs @@ -237,13 +237,14 @@ impl<'a> ParserImpl<'a> { } } + #[inline] pub(crate) fn re_lex_right_angle(&mut self) -> Kind { if self.fatal_error.is_some() { return Kind::Eof; } let kind = self.cur_kind(); if kind == Kind::RAngle { - self.token = self.lexer.next_right_angle(); + self.token = self.lexer.re_lex_right_angle(); self.token.kind() } else { kind diff --git a/crates/oxc_parser/src/lexer/mod.rs b/crates/oxc_parser/src/lexer/mod.rs index eaae2729997f0..99d5247be67fd 100644 --- a/crates/oxc_parser/src/lexer/mod.rs +++ b/crates/oxc_parser/src/lexer/mod.rs @@ -217,7 +217,6 @@ impl<'a> Lexer<'a> { fn finish_next(&mut self, kind: Kind) -> Token { self.token.set_kind(kind); self.token.set_end(self.offset()); - debug_assert!(self.token.start() <= self.token.end()); let token = self.token; self.trivia_builder.handle_token(token); self.token = Token::default(); diff --git a/crates/oxc_parser/src/lexer/punctuation.rs b/crates/oxc_parser/src/lexer/punctuation.rs index 478f1b65e033a..fe49184750538 100644 --- a/crates/oxc_parser/src/lexer/punctuation.rs +++ b/crates/oxc_parser/src/lexer/punctuation.rs @@ -58,9 +58,12 @@ impl Lexer<'_> { } } - pub(crate) fn next_right_angle(&mut self) -> Token { + pub(crate) fn re_lex_right_angle(&mut self) -> Token { + self.token.set_start(self.offset()); let kind = self.read_right_angle(); - self.lookahead.clear(); + if kind != Kind::RAngle { + self.lookahead.clear(); + } self.finish_next(kind) }