From fb28ce6bbea8118de2d6349da6855237431aaa2c Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Thu, 16 Apr 2020 16:20:47 +0200 Subject: [PATCH] Make StrongRuleNode::ensure_child take a StrongRuleNode for the root --- components/style/rule_tree/core.rs | 5 +++-- components/style/rule_tree/mod.rs | 16 ++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/components/style/rule_tree/core.rs b/components/style/rule_tree/core.rs index 226108da9b7..d1aaa0d26a3 100644 --- a/components/style/rule_tree/core.rs +++ b/components/style/rule_tree/core.rs @@ -367,7 +367,7 @@ impl StrongRuleNode { StrongRuleNode { p } } - pub(super) fn downgrade(&self) -> WeakRuleNode { + fn downgrade(&self) -> WeakRuleNode { unsafe { WeakRuleNode::from_ptr(self.p) } } @@ -378,7 +378,7 @@ impl StrongRuleNode { pub(super) fn ensure_child( &self, - root: WeakRuleNode, + root: &StrongRuleNode, source: StyleSource, level: CascadeLevel, ) -> StrongRuleNode { @@ -404,6 +404,7 @@ impl StrongRuleNode { key, |node| unsafe { (*node.ptr()).key() }, move || { + let root = root.downgrade(); let strong = StrongRuleNode::new(Box::new(RuleNode::new(root, self.clone(), source, level))); let weak = strong.downgrade(); diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs index 5bf66ad563f..41f87935df4 100644 --- a/components/style/rule_tree/mod.rs +++ b/components/style/rule_tree/mod.rs @@ -95,7 +95,7 @@ impl RuleTree { debug_assert!(transition.is_none()); transition = Some(source); } else { - current = current.ensure_child(self.root().downgrade(), source, level); + current = current.ensure_child(self.root(), source, level); } } @@ -131,7 +131,7 @@ impl RuleTree { for (source, shadow_cascade_order) in important_author.drain(..) { current = current.ensure_child( - self.root().downgrade(), + self.root(), source, AuthorImportant { shadow_cascade_order: -shadow_cascade_order, @@ -140,15 +140,15 @@ impl RuleTree { } for source in important_user.drain(..) { - current = current.ensure_child(self.root().downgrade(), source, UserImportant); + current = current.ensure_child(self.root(), source, UserImportant); } for source in important_ua.drain(..) { - current = current.ensure_child(self.root().downgrade(), source, UAImportant); + current = current.ensure_child(self.root(), source, UAImportant); } if let Some(source) = transition { - current = current.ensure_child(self.root().downgrade(), source, Transitions); + current = current.ensure_child(self.root(), source, Transitions); } current @@ -182,7 +182,7 @@ impl RuleTree { { let mut current = from; for (source, level) in iter { - current = current.ensure_child(self.root().downgrade(), source, level); + current = current.ensure_child(self.root(), source, level); } current } @@ -262,7 +262,7 @@ impl RuleTree { if level.is_important() { if pdb.read_with(level.guard(guards)).any_important() { current = current.ensure_child( - self.root().downgrade(), + self.root(), StyleSource::from_declarations(pdb.clone_arc()), level, ); @@ -271,7 +271,7 @@ impl RuleTree { } else { if pdb.read_with(level.guard(guards)).any_normal() { current = current.ensure_child( - self.root().downgrade(), + self.root(), StyleSource::from_declarations(pdb.clone_arc()), level, );