refactor(ast): StaticMemberExpression::get_first_object use loop instead of recursion (#7065)

Follow-on after #6969. Pure refactor. Loops are generally cheaper than recursion.
This commit is contained in:
overlookmotel 2024-11-01 16:36:25 +00:00
parent 4012e6ba0c
commit b0211a1f9e

View file

@ -512,16 +512,23 @@ impl<'a> ComputedMemberExpression<'a> {
impl<'a> StaticMemberExpression<'a> { impl<'a> StaticMemberExpression<'a> {
#[allow(missing_docs)] #[allow(missing_docs)]
pub fn get_first_object(&self) -> &Expression<'a> { pub fn get_first_object(&self) -> &Expression<'a> {
match &self.object { let mut object = &self.object;
Expression::StaticMemberExpression(member) => member.get_first_object(), loop {
match object {
Expression::StaticMemberExpression(member) => {
object = &member.object;
continue;
}
Expression::ChainExpression(chain) => { Expression::ChainExpression(chain) => {
if let ChainElement::StaticMemberExpression(expr) = &chain.expression { if let ChainElement::StaticMemberExpression(member) = &chain.expression {
expr.get_first_object() object = &member.object;
} else { continue;
&self.object
} }
} }
_ => &self.object, _ => {}
}
return object;
} }
} }
} }