mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 04:42:10 +00:00
refactor(transformer/decorators): optimizing code with ast.private_field (#2249)
This commit is contained in:
parent
f4674f33b2
commit
de6d2f5dc5
2 changed files with 102 additions and 99 deletions
|
|
@ -599,6 +599,21 @@ impl<'a> AstBuilder<'a> {
|
||||||
self.member_expression(self.static_member(span, object, property, optional))
|
self.member_expression(self.static_member(span, object, property, optional))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn private_field(
|
||||||
|
&self,
|
||||||
|
span: Span,
|
||||||
|
object: Expression<'a>,
|
||||||
|
field: PrivateIdentifier,
|
||||||
|
optional: bool,
|
||||||
|
) -> MemberExpression<'a> {
|
||||||
|
MemberExpression::PrivateFieldExpression(PrivateFieldExpression {
|
||||||
|
span,
|
||||||
|
object,
|
||||||
|
field,
|
||||||
|
optional,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn private_field_expression(
|
pub fn private_field_expression(
|
||||||
&self,
|
&self,
|
||||||
span: Span,
|
span: Span,
|
||||||
|
|
@ -606,12 +621,7 @@ impl<'a> AstBuilder<'a> {
|
||||||
field: PrivateIdentifier,
|
field: PrivateIdentifier,
|
||||||
optional: bool,
|
optional: bool,
|
||||||
) -> Expression<'a> {
|
) -> Expression<'a> {
|
||||||
self.member_expression(MemberExpression::PrivateFieldExpression(PrivateFieldExpression {
|
self.member_expression(self.private_field(span, object, field, optional))
|
||||||
span,
|
|
||||||
object,
|
|
||||||
field,
|
|
||||||
optional,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_expression(
|
pub fn new_expression(
|
||||||
|
|
|
||||||
|
|
@ -371,8 +371,7 @@ impl<'a> Decorators<'a> {
|
||||||
}
|
}
|
||||||
} else if has_member_decorator {
|
} else if has_member_decorator {
|
||||||
// https://github.com/babel/babel/blob/eccbd203383487f6957dcf086aa83d773691560b/packages/babel-helpers/src/helpers/applyDecs2305.ts#L7-L45
|
// https://github.com/babel/babel/blob/eccbd203383487f6957dcf086aa83d773691560b/packages/babel-helpers/src/helpers/applyDecs2305.ts#L7-L45
|
||||||
let get_decorator_info =
|
let get_decorator_info = |key: &PropertyKey<'a>,
|
||||||
|key: &PropertyKey<'a>,
|
|
||||||
flag: u8,
|
flag: u8,
|
||||||
decorator: &Decorator<'a>,
|
decorator: &Decorator<'a>,
|
||||||
ast: &AstBuilder<'a>| {
|
ast: &AstBuilder<'a>| {
|
||||||
|
|
@ -410,7 +409,7 @@ impl<'a> Decorators<'a> {
|
||||||
false,
|
false,
|
||||||
ast.new_vec(),
|
ast.new_vec(),
|
||||||
));
|
));
|
||||||
let private_identifier = ast.private_field_expression(
|
let private_field = ast.private_field(
|
||||||
SPAN,
|
SPAN,
|
||||||
ast.identifier_reference_expression(IdentifierReference::new(
|
ast.identifier_reference_expression(IdentifierReference::new(
|
||||||
SPAN,
|
SPAN,
|
||||||
|
|
@ -437,7 +436,7 @@ impl<'a> Decorators<'a> {
|
||||||
ast.new_vec(),
|
ast.new_vec(),
|
||||||
ast.new_vec_single(ast.expression_statement(
|
ast.new_vec_single(ast.expression_statement(
|
||||||
SPAN,
|
SPAN,
|
||||||
ast.copy(&private_identifier),
|
ast.member_expression(ast.copy(&private_field)),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
|
|
@ -465,7 +464,7 @@ impl<'a> Decorators<'a> {
|
||||||
let params = ast.formal_parameters(
|
let params = ast.formal_parameters(
|
||||||
SPAN,
|
SPAN,
|
||||||
FormalParameterKind::ArrowFormalParameters,
|
FormalParameterKind::ArrowFormalParameters,
|
||||||
ast.copy(&items),
|
items,
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -479,25 +478,19 @@ impl<'a> Decorators<'a> {
|
||||||
ast.function_body(
|
ast.function_body(
|
||||||
SPAN,
|
SPAN,
|
||||||
ast.new_vec(),
|
ast.new_vec(),
|
||||||
ast.new_vec_single(
|
ast.new_vec_single(ast.expression_statement(
|
||||||
ast.expression_statement(
|
|
||||||
SPAN,
|
SPAN,
|
||||||
ast.assignment_expression(
|
ast.assignment_expression(
|
||||||
SPAN,
|
SPAN,
|
||||||
AssignmentOperator::Assign,
|
AssignmentOperator::Assign,
|
||||||
ast.simple_assignment_target_member_expression(
|
ast.simple_assignment_target_member_expression(
|
||||||
ast.copy(
|
private_field,
|
||||||
private_identifier
|
|
||||||
.get_member_expr()
|
|
||||||
.unwrap(),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
ast.identifier_reference_expression(
|
ast.identifier_reference_expression(
|
||||||
IdentifierReference::new(SPAN, "v".into()),
|
IdentifierReference::new(SPAN, "v".into()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue