diff --git a/crates/oxc_parser/src/js/expression.rs b/crates/oxc_parser/src/js/expression.rs index f27755ad61323..8427fb6106ca7 100644 --- a/crates/oxc_parser/src/js/expression.rs +++ b/crates/oxc_parser/src/js/expression.rs @@ -13,7 +13,7 @@ use crate::{ diagnostics, lexer::{Kind, TokenValue}, list::SeparatedList, - Parser, + Context, Parser, }; impl<'a> Parser<'a> { @@ -635,7 +635,7 @@ impl<'a> Parser<'a> { // parse `new ident` without arguments let arguments = if self.at(Kind::LParen) { - CallArguments::parse(self)?.elements + self.with_context(Context::In, CallArguments::parse)?.elements } else { self.ast.new_vec() }; @@ -743,10 +743,7 @@ impl<'a> Parser<'a> { optional: bool, type_parameters: Option>>, ) -> Result> { - let has_in = self.ctx.has_in(); - self.ctx = self.ctx.and_in(true); - let call_arguments = CallArguments::parse(self)?; - self.ctx = self.ctx.and_in(has_in); + let call_arguments = self.with_context(Context::In, CallArguments::parse)?; Ok(self.ast.call_expression( self.end_span(lhs_span), lhs, diff --git a/crates/oxc_parser/src/js/statement.rs b/crates/oxc_parser/src/js/statement.rs index ffd6b78f99f1e..e34bc832984e6 100644 --- a/crates/oxc_parser/src/js/statement.rs +++ b/crates/oxc_parser/src/js/statement.rs @@ -7,12 +7,7 @@ use super::{ grammar::CoverGrammar, list::SwitchCases, }; -use crate::{ - diagnostics, - lexer::Kind, - list::NormalList, - Parser, {Context, StatementContext}, -}; +use crate::{diagnostics, lexer::Kind, list::NormalList, Context, Parser, StatementContext}; impl<'a> Parser<'a> { /// diff --git a/crates/oxc_parser/src/lib.rs b/crates/oxc_parser/src/lib.rs index 8d62fdff6169e..b8cc2dc2e522a 100644 --- a/crates/oxc_parser/src/lib.rs +++ b/crates/oxc_parser/src/lib.rs @@ -286,7 +286,12 @@ mod test { assert!(!ret.errors.is_empty()); } - let pass = ["async(...null)", "null?async():null", "switch(null){case async():}"]; + let pass = [ + "async(...null)", + "null?async():null", + "switch(null){case async():}", + "for(new null(null in null);;);", + ]; for source in pass { let ret = Parser::new(&allocator, source, source_type).parse();