Skip to content

Commit 0f92521

Browse files
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`.
1 parent 85c3b83 commit 0f92521

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

crates/oxc_ast/src/ast/jsx.rs

+24-3
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,30 @@ pub struct JSXMemberExpression<'a> {
133133

134134
impl<'a> JSXMemberExpression<'a> {
135135
pub fn get_object_identifier(&self) -> &JSXIdentifier {
136-
match &self.object {
137-
JSXMemberExpressionObject::Identifier(ident) => ident,
138-
JSXMemberExpressionObject::MemberExpression(expr) => expr.get_object_identifier(),
136+
let mut member_expr = self;
137+
loop {
138+
match &member_expr.object {
139+
JSXMemberExpressionObject::Identifier(ident) => {
140+
break ident;
141+
}
142+
JSXMemberExpressionObject::MemberExpression(expr) => {
143+
member_expr = expr;
144+
}
145+
}
146+
}
147+
}
148+
149+
pub fn get_object_identifier_mut(&mut self) -> &mut JSXIdentifier<'a> {
150+
let mut member_expr = self;
151+
loop {
152+
match &mut member_expr.object {
153+
JSXMemberExpressionObject::Identifier(ident) => {
154+
break &mut *ident;
155+
}
156+
JSXMemberExpressionObject::MemberExpression(expr) => {
157+
member_expr = expr;
158+
}
159+
}
139160
}
140161
}
141162
}

0 commit comments

Comments
 (0)