From 8f2efea1987564c300f0c2996e314b17f0c95f78 Mon Sep 17 00:00:00 2001 From: Boshen Date: Thu, 6 Apr 2023 21:39:13 +0800 Subject: [PATCH] fix(parser): fix [+In] Destructuring Binding Pattern Initializer --- crates/oxc_parser/src/js/binding.rs | 8 ++++---- crates/oxc_parser/src/lib.rs | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/oxc_parser/src/js/binding.rs b/crates/oxc_parser/src/js/binding.rs index 715ef20f9c66c..b303be47ebe81 100644 --- a/crates/oxc_parser/src/js/binding.rs +++ b/crates/oxc_parser/src/js/binding.rs @@ -3,7 +3,7 @@ use oxc_ast::{ast::*, Span}; use oxc_diagnostics::Result; use super::list::{ArrayPatternList, ObjectPatternProperties}; -use crate::{diagnostics, lexer::Kind, list::SeparatedList, Parser}; +use crate::{diagnostics, lexer::Kind, list::SeparatedList, Context, Parser}; impl<'a> Parser<'a> { /// Destructuring Binding Patterns @@ -66,15 +66,15 @@ impl<'a> Parser<'a> { /// `BindingElement` /// `SingleNameBinding` - /// `BindingPattern` Initializer + /// `BindingPattern`[?Yield, ?Await] `Initializer`[+In, ?Yield, ?Await]opt pub(crate) fn parse_binding_element(&mut self) -> Result> { let span = self.start_span(); let pattern = self.parse_binding_pattern()?.0; - self.parse_initializer(span, pattern) + self.with_context(Context::In, |p| p.parse_initializer(span, pattern)) } // object pattern property only has kind: init and method: false - // Result> { let span = self.start_span(); diff --git a/crates/oxc_parser/src/lib.rs b/crates/oxc_parser/src/lib.rs index 71f3c94aa9e35..2e0d8303783ae 100644 --- a/crates/oxc_parser/src/lib.rs +++ b/crates/oxc_parser/src/lib.rs @@ -292,6 +292,7 @@ mod test { "switch(null){case async():}", "for(new null(null in null);;);", "for(`${null in null}`;;);", + "for(var[l=null in null]in null);", ]; for source in pass {