aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/sequential.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/style/sequential.rs')
-rw-r--r--components/style/sequential.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/components/style/sequential.rs b/components/style/sequential.rs
index a5a9b519e57..56b8a563d27 100644
--- a/components/style/sequential.rs
+++ b/components/style/sequential.rs
@@ -9,20 +9,29 @@ use traversal::DomTraversalContext;
pub fn traverse_dom<N, C>(root: N,
shared: &C::SharedContext)
- where N: TNode,
- C: DomTraversalContext<N> {
+ where N: TNode,
+ C: DomTraversalContext<N>
+{
fn doit<'a, N, C>(context: &'a C, node: N)
- where N: TNode, C: DomTraversalContext<N> {
+ where N: TNode,
+ C: DomTraversalContext<N>
+ {
+ debug_assert!(context.should_process(node));
context.process_preorder(node);
for kid in node.children() {
- doit::<N, C>(context, kid);
+ context.pre_process_child_hook(node, kid);
+ if context.should_process(node) {
+ doit::<N, C>(context, kid);
+ }
}
context.process_postorder(node);
}
let context = C::new(shared, root.opaque());
- doit::<N, C>(&context, root);
+ if context.should_process(root) {
+ doit::<N, C>(&context, root);
+ }
}