Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
refactor(parser): simplify parsing extends clause (#9773)
I am trying to reserve space for non-empty Vec, and I came across this method has two of the same logic parsing extends clause.
  • Loading branch information
Dunqing committed Mar 14, 2025
commit 3945385d549381360c24c5a592c87e8e81a5d97b
20 changes: 6 additions & 14 deletions crates/oxc_parser/src/js/class.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,21 +133,9 @@ impl<'a> ParserImpl<'a> {
/// extends `LeftHandSideExpression`[?Yield, ?Await]
fn parse_extends_clause(&mut self) -> Result<Extends<'a>> {
self.bump_any(); // bump `extends`
let mut extends = self.ast.vec();

let span = self.start_span();
let mut first_extends = self.parse_lhs_expression_or_higher()?;
let first_type_argument;
if let Expression::TSInstantiationExpression(expr) = first_extends {
let expr = expr.unbox();
first_extends = expr.expression;
first_type_argument = Some(expr.type_parameters);
} else {
first_type_argument = self.try_parse_type_arguments()?;
}
extends.push((first_extends, first_type_argument, self.end_span(span)));

while self.eat(Kind::Comma) {
let mut extends = self.ast.vec();
loop {
let span = self.start_span();
let mut extend = self.parse_lhs_expression_or_higher()?;
let type_argument;
Expand All @@ -160,6 +148,10 @@ impl<'a> ParserImpl<'a> {
}

extends.push((extend, type_argument, self.end_span(span)));

if !self.eat(Kind::Comma) {
break;
}
}

Ok(extends)
Expand Down
Loading