diff options
Diffstat (limited to 'components/style/sequential.rs')
-rw-r--r-- | components/style/sequential.rs | 19 |
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); + } } |