refactor(ast): replace recursion with loop (#3626)

Replace recursion with loop in
`JSXMemberExpression::get_object_identifier`.

Also add a mutable version
`JSXMemberExpression::get_object_identifier_mut`.
This commit is contained in:
overlookmotel 2024-06-11 14:56:08 +01:00 committed by GitHub
parent 85c3b83f5f
commit 0f925210af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -133,9 +133,30 @@ pub struct JSXMemberExpression<'a> {
impl<'a> JSXMemberExpression<'a> {
pub fn get_object_identifier(&self) -> &JSXIdentifier {
match &self.object {
JSXMemberExpressionObject::Identifier(ident) => ident,
JSXMemberExpressionObject::MemberExpression(expr) => expr.get_object_identifier(),
let mut member_expr = self;
loop {
match &member_expr.object {
JSXMemberExpressionObject::Identifier(ident) => {
break ident;
}
JSXMemberExpressionObject::MemberExpression(expr) => {
member_expr = expr;
}
}
}
}
pub fn get_object_identifier_mut(&mut self) -> &mut JSXIdentifier<'a> {
let mut member_expr = self;
loop {
match &mut member_expr.object {
JSXMemberExpressionObject::Identifier(ident) => {
break &mut *ident;
}
JSXMemberExpressionObject::MemberExpression(expr) => {
member_expr = expr;
}
}
}
}
}