@@ -107,15 +107,17 @@ impl<'a> Traverse<'a, MinifierState<'a>> for PeepholeOptimizations {
107107 }
108108
109109 fn exit_program ( & mut self , program : & mut Program < ' a > , ctx : & mut TraverseCtx < ' a > ) {
110- // Remove unused references by visiting the AST again and diff the collected references.
111- let refs_before =
112- ctx. scoping ( ) . resolved_references ( ) . flatten ( ) . copied ( ) . collect :: < FxHashSet < _ > > ( ) ;
113- let mut counter = ReferencesCounter :: default ( ) ;
114- counter. visit_program ( program) ;
115- for reference_id_to_remove in refs_before. difference ( & counter. refs ) {
116- ctx. scoping_mut ( ) . delete_reference ( * reference_id_to_remove) ;
117- }
118110 self . changed = ctx. state . changed ;
111+ if self . changed {
112+ // Remove unused references by visiting the AST again and diff the collected references.
113+ let refs_before =
114+ ctx. scoping ( ) . resolved_references ( ) . flatten ( ) . copied ( ) . collect :: < FxHashSet < _ > > ( ) ;
115+ let mut counter = ReferencesCounter :: default ( ) ;
116+ counter. visit_program ( program) ;
117+ for reference_id_to_remove in refs_before. difference ( & counter. refs ) {
118+ ctx. scoping_mut ( ) . delete_reference ( * reference_id_to_remove) ;
119+ }
120+ }
119121 }
120122
121123 fn exit_statements ( & mut self , stmts : & mut Vec < ' a , Statement < ' a > > , ctx : & mut TraverseCtx < ' a > ) {
@@ -416,15 +418,17 @@ impl<'a> Traverse<'a, MinifierState<'a>> for DeadCodeElimination {
416418 }
417419
418420 fn exit_program ( & mut self , program : & mut Program < ' a > , ctx : & mut TraverseCtx < ' a > ) {
419- // Remove unused references by visiting the AST again and diff the collected references.
420- let refs_before =
421- ctx. scoping ( ) . resolved_references ( ) . flatten ( ) . copied ( ) . collect :: < FxHashSet < _ > > ( ) ;
422- let mut counter = ReferencesCounter :: default ( ) ;
423- counter. visit_program ( program) ;
424- for reference_id_to_remove in refs_before. difference ( & counter. refs ) {
425- ctx. scoping_mut ( ) . delete_reference ( * reference_id_to_remove) ;
426- }
427421 self . changed = ctx. state . changed ;
422+ if self . changed {
423+ // Remove unused references by visiting the AST again and diff the collected references.
424+ let refs_before =
425+ ctx. scoping ( ) . resolved_references ( ) . flatten ( ) . copied ( ) . collect :: < FxHashSet < _ > > ( ) ;
426+ let mut counter = ReferencesCounter :: default ( ) ;
427+ counter. visit_program ( program) ;
428+ for reference_id_to_remove in refs_before. difference ( & counter. refs ) {
429+ ctx. scoping_mut ( ) . delete_reference ( * reference_id_to_remove) ;
430+ }
431+ }
428432 }
429433
430434 fn exit_variable_declarator (
0 commit comments