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> {
#[allow(missing_docs)]
pub fn get_first_object(&self) -> &Expression<'a> {
match &self.object {
Expression::StaticMemberExpression(member) => member.get_first_object(),
Expression::ChainExpression(chain) => {
if let ChainElement::StaticMemberExpression(expr) = &chain.expression {
expr.get_first_object()
} else {
&self.object
let mut object = &self.object;
loop {
match object {
Expression::StaticMemberExpression(member) => {
object = &member.object;
continue;
}
Expression::ChainExpression(chain) => {
if let ChainElement::StaticMemberExpression(member) = &chain.expression {
object = &member.object;
continue;
}
}
_ => {}
}
_ => &self.object,
return object;
}
}
}