diff --git a/crates/oxc_ast/src/ast/js.rs b/crates/oxc_ast/src/ast/js.rs index 78dd3d9c0..265cfab2e 100644 --- a/crates/oxc_ast/src/ast/js.rs +++ b/crates/oxc_ast/src/ast/js.rs @@ -258,8 +258,8 @@ pub struct Property<'a> { #[derive(Debug, Serialize, PartialEq, Hash)] #[serde(untagged)] pub enum PropertyKey<'a> { - Identifier(IdentifierName), - PrivateIdentifier(PrivateIdentifier), + Identifier(Box<'a, IdentifierName>), + PrivateIdentifier(Box<'a, PrivateIdentifier>), Expression(Expression<'a>), } diff --git a/crates/oxc_parser/src/js/class.rs b/crates/oxc_parser/src/js/class.rs index eac4dea58..da3b941ef 100644 --- a/crates/oxc_parser/src/js/class.rs +++ b/crates/oxc_parser/src/js/class.rs @@ -309,7 +309,7 @@ impl<'a> Parser<'a> { match self.cur_kind() { Kind::PrivateIdentifier => { let private_ident = self.parse_private_identifier(); - Ok((PropertyKey::PrivateIdentifier(private_ident), false)) + Ok((PropertyKey::PrivateIdentifier(self.ast.alloc(private_ident)), false)) } _ => self.parse_property_name(), } diff --git a/crates/oxc_parser/src/js/grammar.rs b/crates/oxc_parser/src/js/grammar.rs index 92b38384f..75ea5920e 100644 --- a/crates/oxc_parser/src/js/grammar.rs +++ b/crates/oxc_parser/src/js/grammar.rs @@ -150,7 +150,7 @@ impl<'a> CoverGrammar<'a, Property<'a>> for AssignmentTargetProperty<'a> { if property.shorthand { let binding = match property.key { PropertyKey::Identifier(ident) => { - IdentifierReference { node: ident.node, name: ident.name } + IdentifierReference { node: ident.node, name: ident.unbox().name } } _ => return p.unexpected(), }; diff --git a/crates/oxc_parser/src/js/object.rs b/crates/oxc_parser/src/js/object.rs index ae67c20e0..7cd855183 100644 --- a/crates/oxc_parser/src/js/object.rs +++ b/crates/oxc_parser/src/js/object.rs @@ -120,10 +120,9 @@ impl<'a> Parser<'a> { Ok(self.ast.property( self.end_node(node), PropertyKind::Init, - PropertyKey::Identifier(IdentifierName { - node: identifier.node, - name: identifier.name, - }), + PropertyKey::Identifier( + self.ast.alloc(IdentifierName { node: identifier.node, name: identifier.name }), + ), PropertyValue::Expression(value), /* method */ false, /* shorthand */ true, @@ -167,7 +166,10 @@ impl<'a> Parser<'a> { computed = true; self.parse_computed_property_name().map(PropertyKey::Expression)? } - _ => PropertyKey::Identifier(self.parse_identifier_name()?), + _ => { + let ident = self.parse_identifier_name()?; + PropertyKey::Identifier(self.ast.alloc(ident)) + } }; Ok((key, computed)) }