refactor(ast): clean up some methods

This commit is contained in:
Boshen 2023-10-15 10:49:35 +08:00
parent 1661385c1a
commit 47872200e5
No known key found for this signature in database
GPG key ID: 9C7A8C8AB22BEBD1
10 changed files with 17 additions and 27 deletions

View file

@ -108,10 +108,6 @@ impl<'a> AstBuilder<'a> {
BooleanLiteral { span, value } BooleanLiteral { span, value }
} }
pub fn null_literal(&self, span: Span) -> NullLiteral {
NullLiteral { span }
}
pub fn bigint_literal(&self, span: Span, value: BigInt) -> BigintLiteral { pub fn bigint_literal(&self, span: Span, value: BigInt) -> BigintLiteral {
BigintLiteral { span, value } BigintLiteral { span, value }
} }
@ -166,23 +162,14 @@ impl<'a> AstBuilder<'a> {
Expression::BigintLiteral(self.alloc(literal)) Expression::BigintLiteral(self.alloc(literal))
} }
pub fn literal_template_expression(&mut self, literal: TemplateLiteral<'a>) -> Expression<'a> { pub fn literal_template_expression(&self, literal: TemplateLiteral<'a>) -> Expression<'a> {
Expression::TemplateLiteral(self.alloc(literal)) Expression::TemplateLiteral(self.alloc(literal))
} }
pub fn identifier_reference_expression( pub fn identifier_reference_expression(&self, ident: IdentifierReference) -> Expression<'a> {
&mut self,
ident: IdentifierReference,
) -> Expression<'a> {
Expression::Identifier(self.alloc(ident)) Expression::Identifier(self.alloc(ident))
} }
/* ---------- Identifiers ---------- */
pub fn identifier_expression(&self, identifier: IdentifierReference) -> Expression<'a> {
Expression::Identifier(self.alloc(identifier))
}
/* ---------- Statements ---------- */ /* ---------- Statements ---------- */
pub fn directive(&self, span: Span, expression: StringLiteral, directive: Atom) -> Directive { pub fn directive(&self, span: Span, expression: StringLiteral, directive: Atom) -> Directive {
@ -865,7 +852,10 @@ impl<'a> AstBuilder<'a> {
BindingPattern { kind, type_annotation, optional } BindingPattern { kind, type_annotation, optional }
} }
pub fn binding_identifier(&self, identifier: BindingIdentifier) -> BindingPatternKind<'a> { pub fn binding_pattern_identifier(
&self,
identifier: BindingIdentifier,
) -> BindingPatternKind<'a> {
BindingPatternKind::BindingIdentifier(self.alloc(identifier)) BindingPatternKind::BindingIdentifier(self.alloc(identifier))
} }

View file

@ -933,7 +933,7 @@ impl<'a> Compressor<'a> {
} }
fn move_out_expression(&mut self, expr: &mut Expression<'a>) -> Expression<'a> { fn move_out_expression(&mut self, expr: &mut Expression<'a>) -> Expression<'a> {
let null_literal = self.ast.null_literal(expr.span()); let null_literal = NullLiteral::new(expr.span());
let null_expr = self.ast.literal_null_expression(null_literal); let null_expr = self.ast.literal_null_expression(null_literal);
mem::replace(expr, null_expr) mem::replace(expr, null_expr)
} }

View file

@ -30,7 +30,7 @@ impl<'a> Parser<'a> {
} }
fn parse_binding_pattern_identifier(&mut self) -> Result<BindingPatternKind<'a>> { fn parse_binding_pattern_identifier(&mut self) -> Result<BindingPatternKind<'a>> {
self.parse_binding_identifier().map(|ident| self.ast.binding_identifier(ident)) self.parse_binding_identifier().map(|ident| self.ast.binding_pattern_identifier(ident))
} }
/// Section 14.3.3 Object Binding Pattern /// Section 14.3.3 Object Binding Pattern
@ -91,7 +91,7 @@ impl<'a> Parser<'a> {
if let PropertyKey::Identifier(ident) = &key { if let PropertyKey::Identifier(ident) = &key {
shorthand = true; shorthand = true;
let binding_identifier = BindingIdentifier::new(ident.span, ident.name.clone()); let binding_identifier = BindingIdentifier::new(ident.span, ident.name.clone());
let identifier = self.ast.binding_identifier(binding_identifier); let identifier = self.ast.binding_pattern_identifier(binding_identifier);
let left = self.ast.binding_pattern(identifier, None, false); let left = self.ast.binding_pattern(identifier, None, false);
self.with_context(Context::In, |p| p.parse_initializer(span, left))? self.with_context(Context::In, |p| p.parse_initializer(span, left))?
} else { } else {

View file

@ -47,7 +47,7 @@ impl<'a> Parser<'a> {
/// `PrimaryExpression`: Identifier Reference /// `PrimaryExpression`: Identifier Reference
pub(crate) fn parse_identifier_expression(&mut self) -> Result<Expression<'a>> { pub(crate) fn parse_identifier_expression(&mut self) -> Result<Expression<'a>> {
let ident = self.parse_identifier_reference()?; let ident = self.parse_identifier_reference()?;
Ok(self.ast.identifier_expression(ident)) Ok(self.ast.identifier_reference_expression(ident))
} }
pub(crate) fn parse_identifier_reference(&mut self) -> Result<IdentifierReference> { pub(crate) fn parse_identifier_reference(&mut self) -> Result<IdentifierReference> {
@ -506,7 +506,7 @@ impl<'a> Parser<'a> {
fn parse_decorator_member_expression(&mut self) -> Result<Expression<'a>> { fn parse_decorator_member_expression(&mut self) -> Result<Expression<'a>> {
let lhs_span = self.start_span(); let lhs_span = self.start_span();
let lhs = self.parse_identifier_reference()?; let lhs = self.parse_identifier_reference()?;
let mut lhs = self.ast.identifier_expression(lhs); let mut lhs = self.ast.identifier_reference_expression(lhs);
while self.at(Kind::Dot) { while self.at(Kind::Dot) {
lhs = self.parse_static_member_expression(lhs_span, lhs, false)?; lhs = self.parse_static_member_expression(lhs_span, lhs, false)?;
} }

View file

@ -215,7 +215,7 @@ impl<'a> Parser<'a> {
self.ctx = self.ctx.union_await_if(r#async).union_yield_if(generator); self.ctx = self.ctx.union_await_if(r#async).union_yield_if(generator);
let params_span = self.start_span(); let params_span = self.start_span();
let param = self.parse_binding_identifier()?; let param = self.parse_binding_identifier()?;
let ident = self.ast.binding_identifier(param); let ident = self.ast.binding_pattern_identifier(param);
let pattern = self.ast.binding_pattern(ident, None, false); let pattern = self.ast.binding_pattern(ident, None, false);
let params_span = self.end_span(params_span); let params_span = self.end_span(params_span);
let formal_parameter = self.ast.formal_parameter( let formal_parameter = self.ast.formal_parameter(

View file

@ -431,7 +431,7 @@ impl<'a> Parser<'a> {
let span = self.start_span(); let span = self.start_span();
let (ident_span, name) = self.parse_identifier_kind(Kind::This); let (ident_span, name) = self.parse_identifier_kind(Kind::This);
let type_annotation = self.parse_ts_type_annotation()?; let type_annotation = self.parse_ts_type_annotation()?;
let kind = self.ast.binding_identifier(BindingIdentifier::new(ident_span, name)); let kind = self.ast.binding_pattern_identifier(BindingIdentifier::new(ident_span, name));
let binding = self.ast.binding_pattern(kind, type_annotation, /* optional */ false); let binding = self.ast.binding_pattern(kind, type_annotation, /* optional */ false);
Ok(self.ast.formal_parameter( Ok(self.ast.formal_parameter(
self.end_span(span), self.end_span(span),

View file

@ -28,7 +28,7 @@ impl<'a> ExponentiationOperator<'a> {
let right = self.ast.move_expression(&mut binary_expression.right); let right = self.ast.move_expression(&mut binary_expression.right);
// Math.pow // Math.pow
let ident_math = IdentifierReference::new(Span::default(), "Math".into()); let ident_math = IdentifierReference::new(Span::default(), "Math".into());
let object = self.ast.identifier_expression(ident_math); let object = self.ast.identifier_reference_expression(ident_math);
let property = IdentifierName::new(Span::default(), "pow".into()); let property = IdentifierName::new(Span::default(), "pow".into());
let callee = self.ast.static_member_expression(Span::default(), object, property, false); let callee = self.ast.static_member_expression(Span::default(), object, property, false);
// Math.pow(left, right) // Math.pow(left, right)

View file

@ -22,7 +22,7 @@ impl<'a> OptionalCatchBinding<'a> {
return; return;
} }
let binding_identifier = BindingIdentifier::new(Span::default(), "_unused".into()); let binding_identifier = BindingIdentifier::new(Span::default(), "_unused".into());
let binding_pattern_kind = self.ast.binding_identifier(binding_identifier); let binding_pattern_kind = self.ast.binding_pattern_identifier(binding_identifier);
let binding_pattern = self.ast.binding_pattern(binding_pattern_kind, None, false); let binding_pattern = self.ast.binding_pattern(binding_pattern_kind, None, false);
clause.param = Some(binding_pattern); clause.param = Some(binding_pattern);
} }

View file

@ -35,7 +35,7 @@ impl<'a> LogicalAssignmentOperators<'a> {
let left2 = match &assignment_expr.left { let left2 = match &assignment_expr.left {
AssignmentTarget::SimpleAssignmentTarget(target) => match target { AssignmentTarget::SimpleAssignmentTarget(target) => match target {
SimpleAssignmentTarget::AssignmentTargetIdentifier(ident) => { SimpleAssignmentTarget::AssignmentTargetIdentifier(ident) => {
self.ast.identifier_expression((*ident).clone()) self.ast.identifier_reference_expression((*ident).clone())
} }
SimpleAssignmentTarget::MemberAssignmentTarget(member_expr) => { SimpleAssignmentTarget::MemberAssignmentTarget(member_expr) => {
let member_expr = self.ast.copy(&**member_expr); let member_expr = self.ast.copy(&**member_expr);

View file

@ -36,7 +36,7 @@ impl<'a> RegexpFlags<'a> {
return; return;
} }
let ident = IdentifierReference::new(Span::default(), Atom::from("RegExp")); let ident = IdentifierReference::new(Span::default(), Atom::from("RegExp"));
let callee = self.ast.identifier_expression(ident); let callee = self.ast.identifier_reference_expression(ident);
let pattern = self.ast.string_literal(Span::default(), Atom::from(regex.pattern.as_str())); let pattern = self.ast.string_literal(Span::default(), Atom::from(regex.pattern.as_str()));
let flags = self.ast.string_literal(Span::default(), Atom::from(regex.flags.to_string())); let flags = self.ast.string_literal(Span::default(), Atom::from(regex.flags.to_string()));
let pattern_literal = self.ast.literal_string_expression(pattern); let pattern_literal = self.ast.literal_string_expression(pattern);