diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 418a86bc5e0..9a2134450de 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -669,7 +669,7 @@ impl Stylist { { debug_assert!(pseudo.is_precomputed()); - let rule_node = self.rule_node_for_precomputed_pseudo(guards, pseudo, None); + let rule_node = self.rule_node_for_precomputed_pseudo(guards, pseudo, vec![]); self.precomputed_values_for_pseudo_with_rule_node::( guards, @@ -709,42 +709,40 @@ impl Stylist { ) } - /// Returns the rule node for given precomputed pseudo-element. + /// Returns the rule node for a given precomputed pseudo-element. /// - /// If we want to include extra declarations to this precomputed pseudo-element, - /// we can provide a vector of ApplicableDeclarationBlock to extra_declarations - /// argument. This is useful for providing extra @page rules. + /// If we want to include extra declarations to this precomputed + /// pseudo-element, we can provide a vector of ApplicableDeclarationBlocks + /// to extra_declarations. This is useful for @page rules. pub fn rule_node_for_precomputed_pseudo( &self, guards: &StylesheetGuards, pseudo: &PseudoElement, - extra_declarations: Option>, + mut extra_declarations: Vec, ) -> StrongRuleNode { - let mut decl; + let mut declarations_with_extra; let declarations = match self .cascade_data .user_agent .precomputed_pseudo_element_decls .get(pseudo) { - Some(declarations) => match extra_declarations { - Some(mut extra_decls) => { - decl = declarations.clone(); - decl.append(&mut extra_decls); - Some(&decl) - }, - None => Some(declarations), + Some(declarations) => { + if !extra_declarations.is_empty() { + declarations_with_extra = declarations.clone(); + declarations_with_extra.append(&mut extra_declarations); + &*declarations_with_extra + } else { + &**declarations + } }, - None => extra_declarations.as_ref(), + None => &[], }; - match declarations { - Some(decls) => self.rule_tree.insert_ordered_rules_with_important( - decls.into_iter().map(|a| a.clone().for_rule_tree()), - guards, - ), - None => self.rule_tree.root().clone(), - } + self.rule_tree.insert_ordered_rules_with_important( + declarations.into_iter().map(|a| a.clone().for_rule_tree()), + guards, + ) } /// Returns the style for an anonymous box of the given type.