@@ -482,12 +482,23 @@ impl Compressor {
482
482
483
483
pub ( super ) fn compress_simple_block ( & mut self , simple_block : & mut SimpleBlock ) {
484
484
let mut names: AHashMap < Name , isize > = Default :: default ( ) ;
485
- let mut prev_rule : Option < ComponentValue > = None ;
485
+ let mut prev_rule_idx = None ;
486
486
let mut remove_rules_list = vec ! [ ] ;
487
487
let mut prev_index = 0 ;
488
- let mut index = 0 ;
489
488
490
- simple_block. value . retain_mut ( |rule| {
489
+ for index in 0 ..simple_block. value . len ( ) {
490
+ // We need two &mut
491
+ let ( a, b) = simple_block. value . split_at_mut ( index) ;
492
+
493
+ let mut prev_rule = match prev_rule_idx {
494
+ Some ( idx) => a. get_mut ( idx) ,
495
+ None => None ,
496
+ } ;
497
+ let rule = match b. first_mut ( ) {
498
+ Some ( v) => v,
499
+ None => continue ,
500
+ } ;
501
+
491
502
let result = match rule {
492
503
ComponentValue :: Rule ( box Rule :: AtRule ( box AtRule {
493
504
block : Some ( block) , ..
@@ -600,24 +611,24 @@ impl Compressor {
600
611
if self . is_mergeable_at_rule ( at_rule) =>
601
612
{
602
613
prev_index = index;
603
- prev_rule = Some ( rule . clone ( ) ) ;
614
+ prev_rule_idx = Some ( index ) ;
604
615
}
605
616
606
617
ComponentValue :: Rule ( box Rule :: QualifiedRule ( _) )
607
618
| ComponentValue :: StyleBlock ( box StyleBlock :: QualifiedRule ( _) ) => {
608
619
prev_index = index;
609
- prev_rule = Some ( rule . clone ( ) ) ;
620
+ prev_rule_idx = Some ( index ) ;
610
621
}
611
622
_ => {
612
- prev_rule = None ;
623
+ prev_rule_idx = None ;
613
624
}
614
625
}
615
-
616
- index += 1 ;
617
626
}
618
627
619
- result
620
- } ) ;
628
+ if !result {
629
+ remove_rules_list. push ( index) ;
630
+ }
631
+ }
621
632
622
633
if !names. is_empty ( ) {
623
634
self . discard_overridden (
0 commit comments