diff --git a/crates/oxc_ast/src/ast_builder_impl.rs b/crates/oxc_ast/src/ast_builder_impl.rs index 4f4a7f030..3dc648715 100644 --- a/crates/oxc_ast/src/ast_builder_impl.rs +++ b/crates/oxc_ast/src/ast_builder_impl.rs @@ -69,16 +69,6 @@ impl<'a> AstBuilder<'a> { unsafe { std::mem::transmute_copy(src) } } - /// Moves the identifier reference out by replacing it with a dummy identifier reference. - #[inline] - pub fn move_identifier_reference( - self, - expr: &mut IdentifierReference<'a>, - ) -> IdentifierReference<'a> { - let dummy = self.identifier_reference(expr.span(), Atom::empty()); - mem::replace(expr, dummy) - } - /// Moves the expression out by replacing it with a null expression. #[inline] pub fn move_expression(self, expr: &mut Expression<'a>) -> Expression<'a> { @@ -86,18 +76,6 @@ impl<'a> AstBuilder<'a> { mem::replace(expr, null_expr) } - /// Moves the member expression out by replacing it with a dummy expression. - #[inline] - pub fn move_member_expression(self, expr: &mut MemberExpression<'a>) -> MemberExpression<'a> { - let dummy = self.member_expression_computed( - expr.span(), - self.expression_null_literal(expr.span()), - self.expression_null_literal(expr.span()), - false, - ); - mem::replace(expr, dummy) - } - #[inline] pub fn move_statement(self, stmt: &mut Statement<'a>) -> Statement<'a> { let empty_stmt = self.empty_statement(stmt.span()); diff --git a/crates/oxc_transformer/src/typescript/annotations.rs b/crates/oxc_transformer/src/typescript/annotations.rs index f96e51fd0..0f1c67a79 100644 --- a/crates/oxc_transformer/src/typescript/annotations.rs +++ b/crates/oxc_transformer/src/typescript/annotations.rs @@ -226,16 +226,20 @@ impl<'a> TypeScriptAnnotations<'a> { if let Some(expr) = target.get_expression_mut() { match expr.get_inner_expression_mut() { // `foo!++` to `foo++` - Expression::Identifier(ident) => { - *target = self.ctx.ast.simple_assignment_target_from_identifier_reference( - self.ctx.ast.move_identifier_reference(ident), - ); + inner_expr @ Expression::Identifier(_) => { + let inner_expr = self.ctx.ast.move_expression(inner_expr); + let Expression::Identifier(ident) = inner_expr else { + unreachable!(); + }; + *target = SimpleAssignmentTarget::AssignmentTargetIdentifier(ident); } // `foo.bar!++` to `foo.bar++` inner_expr @ match_member_expression!(Expression) => { - *target = SimpleAssignmentTarget::from( - self.ctx.ast.move_member_expression(inner_expr.to_member_expression_mut()), - ); + let inner_expr = self.ctx.ast.move_expression(inner_expr); + let Ok(member_expr) = MemberExpression::try_from(inner_expr) else { + unreachable!(); + }; + *target = SimpleAssignmentTarget::from(member_expr); } _ => { // This should be never hit until more syntax is added to the JavaScript/TypeScrips