perf(ast): box PropertyKey enum

This commit is contained in:
Boshen 2023-02-21 11:39:39 +08:00
parent cf278a2760
commit c640b4fb08
4 changed files with 11 additions and 9 deletions

View file

@ -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>),
}

View file

@ -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(),
}

View file

@ -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(),
};

View file

@ -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))
}