@@ -21,16 +21,20 @@ impl<'a> PeepholeOptimizations {
2121 stmts : & mut oxc_allocator:: Vec < ' a , Statement < ' a > > ,
2222 ctx : & mut TraverseCtx < ' a > ,
2323 ) {
24- self . try_replace_if ( stmts, ctx) ;
25- let changed = self . changed ;
26- while self . changed {
27- self . changed = false ;
28- self . try_replace_if ( stmts, ctx) ;
24+ let mut changed = false ;
25+ let mut changed2 = false ;
26+ Self :: try_replace_if ( stmts, & mut changed2, ctx) ;
27+ while changed2 {
28+ changed2 = false ;
29+ Self :: try_replace_if ( stmts, & mut changed2, ctx) ;
2930 if stmts. iter ( ) . any ( |stmt| matches ! ( stmt, Statement :: EmptyStatement ( _) ) ) {
3031 stmts. retain ( |stmt| !matches ! ( stmt, Statement :: EmptyStatement ( _) ) ) ;
3132 }
33+ changed = changed2;
34+ }
35+ if changed {
36+ self . mark_current_function_as_changed ( ) ;
3237 }
33- self . changed = self . changed || changed;
3438 }
3539
3640 pub fn minimize_conditions_exit_statement (
@@ -64,7 +68,7 @@ impl<'a> PeepholeOptimizations {
6468 _ => None ,
6569 } {
6670 * stmt = folded_stmt;
67- self . changed = true ;
71+ self . mark_current_function_as_changed ( ) ;
6872 } ;
6973 }
7074
@@ -87,7 +91,7 @@ impl<'a> PeepholeOptimizations {
8791 }
8892 }
8993 if changed {
90- self . changed = true ;
94+ self . mark_current_function_as_changed ( ) ;
9195 } else {
9296 break ;
9397 }
@@ -99,7 +103,7 @@ impl<'a> PeepholeOptimizations {
99103 _ => None ,
100104 } {
101105 * expr = folded_expr;
102- self . changed = true ;
106+ self . mark_current_function_as_changed ( ) ;
103107 } ;
104108 }
105109
@@ -236,7 +240,11 @@ impl<'a> PeepholeOptimizations {
236240 None
237241 }
238242
239- fn try_replace_if ( & mut self , stmts : & mut Vec < ' a , Statement < ' a > > , ctx : & mut TraverseCtx < ' a > ) {
243+ fn try_replace_if (
244+ stmts : & mut Vec < ' a , Statement < ' a > > ,
245+ changed : & mut bool ,
246+ ctx : & mut TraverseCtx < ' a > ,
247+ ) {
240248 for i in 0 ..stmts. len ( ) {
241249 let Statement :: IfStatement ( if_stmt) = & stmts[ i] else {
242250 continue ;
@@ -268,15 +276,15 @@ impl<'a> PeepholeOptimizations {
268276 alternate,
269277 ) ;
270278 stmts[ i] = ctx. ast . statement_return ( if_stmt. span , Some ( argument) ) ;
271- self . changed = true ;
279+ * changed = true ;
272280 break ;
273281 } else if else_branch. is_some ( ) && Self :: statement_must_exit_parent ( then_branch) {
274282 let Statement :: IfStatement ( if_stmt) = & mut stmts[ i] else {
275283 unreachable ! ( ) ;
276284 } ;
277285 let else_branch = if_stmt. alternate . take ( ) . unwrap ( ) ;
278286 stmts. insert ( i + 1 , else_branch) ;
279- self . changed = true ;
287+ * changed = true ;
280288 }
281289 }
282290 }
0 commit comments