From aaa944d66b9d3aeb4bcf73f41651da1570a521a8 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Sat, 22 Jun 2024 04:47:58 +0000 Subject: [PATCH] improve(transformer): avoid reallocating strings (#3817) Re-use existing `Atom`s rather than allocating duplicate strings in TS transforms. --- crates/oxc_transformer/src/typescript/enum.rs | 2 +- crates/oxc_transformer/src/typescript/namespace.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/oxc_transformer/src/typescript/enum.rs b/crates/oxc_transformer/src/typescript/enum.rs index 894c59fae2820..c9964ad4ebb1c 100644 --- a/crates/oxc_transformer/src/typescript/enum.rs +++ b/crates/oxc_transformer/src/typescript/enum.rs @@ -570,7 +570,7 @@ impl<'a, 'b> VisitMut<'a> for IdentifierReferenceRename<'a, 'b> { // enum_name.identifier let ident_reference = IdentifierReference::new(SPAN, self.enum_name.clone()); let object = self.ctx.ast.identifier_reference_expression(ident_reference); - let property = self.ctx.ast.identifier_name(SPAN, &ident.name); + let property = IdentifierName::new(SPAN, ident.name.clone()); Some(self.ctx.ast.static_member_expression(SPAN, object, property, false)) } _ => None, diff --git a/crates/oxc_transformer/src/typescript/namespace.rs b/crates/oxc_transformer/src/typescript/namespace.rs index 8e3fac9060e16..08926f7e02704 100644 --- a/crates/oxc_transformer/src/typescript/namespace.rs +++ b/crates/oxc_transformer/src/typescript/namespace.rs @@ -421,12 +421,12 @@ impl<'a> TypeScript<'a> { // name.item_name = item_name fn create_assignment_statement(&self, name: &Atom<'a>, item_name: &Atom<'a>) -> Expression<'a> { - let ident = self.ctx.ast.identifier_reference(SPAN, name.as_str()); + let ident = IdentifierReference::new(SPAN, name.clone()); let object = self.ctx.ast.identifier_reference_expression(ident); let property = IdentifierName::new(SPAN, item_name.clone()); let left = self.ctx.ast.static_member(SPAN, object, property, false); let left = AssignmentTarget::from(left); - let ident = self.ctx.ast.identifier_reference(SPAN, item_name.as_str()); + let ident = IdentifierReference::new(SPAN, item_name.clone()); let right = self.ctx.ast.identifier_reference_expression(ident); let op = AssignmentOperator::Assign; self.ctx.ast.assignment_expression(SPAN, op, left, right)