perf(transformer/class-properties): replace recursion with loop (#7652)

Follow-on after #7575. Small optimization. Replace recursive function calls with a loop.
This commit is contained in:
overlookmotel 2024-12-05 01:01:11 +00:00
parent 0c9cc48806
commit 6c82589daf

View file

@ -1216,20 +1216,35 @@ impl<'a, 'ctx> ClassProperties<'a, 'ctx> {
/// Recursively check if the expression has optional expression.
#[inline]
fn has_optional_expression(expr: &Expression<'a>) -> bool {
match expr {
Expression::CallExpression(call) => {
call.optional || Self::has_optional_expression(call.callee.get_inner_expression())
let mut expr = expr;
loop {
match expr {
Expression::CallExpression(call) => {
if call.optional {
return true;
}
expr = call.callee.get_inner_expression();
}
Expression::StaticMemberExpression(member) => {
if member.optional {
return true;
}
expr = &member.object;
}
Expression::ComputedMemberExpression(member) => {
if member.optional {
return true;
}
expr = &member.object;
}
Expression::PrivateFieldExpression(member) => {
if member.optional {
return true;
}
expr = &member.object;
}
_ => return false,
}
Expression::StaticMemberExpression(member) => {
member.optional || Self::has_optional_expression(&member.object)
}
Expression::ComputedMemberExpression(member) => {
member.optional || Self::has_optional_expression(&member.object)
}
Expression::PrivateFieldExpression(member) => {
member.optional || Self::has_optional_expression(&member.object)
}
_ => false,
}
}