Title: [155264] trunk/Source/WebCore
Revision
155264
Author
[email protected]
Date
2013-09-07 15:30:41 -0700 (Sat, 07 Sep 2013)

Log Message

Simplify ComposedShadowTreeWalker parent traversal
https://bugs.webkit.org/show_bug.cgi?id=120971

Reviewed by Andreas Kling.

Combine a bunch of parent traversal functions into one.

* dom/ComposedShadowTreeWalker.cpp:
(WebCore::ComposedShadowTreeWalker::traverseParent):
(WebCore::ComposedShadowTreeWalker::previous):
* dom/ComposedShadowTreeWalker.h:
        
    Remove unused fromFirstChild.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (155263 => 155264)


--- trunk/Source/WebCore/ChangeLog	2013-09-07 22:20:15 UTC (rev 155263)
+++ trunk/Source/WebCore/ChangeLog	2013-09-07 22:30:41 UTC (rev 155264)
@@ -1,3 +1,19 @@
+2013-09-07  Antti Koivisto  <[email protected]>
+
+        Simplify ComposedShadowTreeWalker parent traversal
+        https://bugs.webkit.org/show_bug.cgi?id=120971
+
+        Reviewed by Andreas Kling.
+
+        Combine a bunch of parent traversal functions into one.
+
+        * dom/ComposedShadowTreeWalker.cpp:
+        (WebCore::ComposedShadowTreeWalker::traverseParent):
+        (WebCore::ComposedShadowTreeWalker::previous):
+        * dom/ComposedShadowTreeWalker.h:
+        
+            Remove unused fromFirstChild.
+
 2013-09-07  Anders Carlsson  <[email protected]>
 
         Get rid of PassOwnArrayPtr

Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp (155263 => 155264)


--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp	2013-09-07 22:20:15 UTC (rev 155263)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp	2013-09-07 22:30:41 UTC (rev 155264)
@@ -52,13 +52,6 @@
     return false;
 }
 
-ComposedShadowTreeWalker ComposedShadowTreeWalker::fromFirstChild(const Node* node, Policy policy)
-{
-    ComposedShadowTreeWalker walker(node, policy);
-    walker.firstChild();
-    return walker;
-}
-
 void ComposedShadowTreeWalker::firstChild()
 {
     assertPrecondition();
@@ -178,16 +171,6 @@
     return 0;
 }
 
-inline Node* ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents(const Node* node) const
-{
-    ASSERT(node);
-    if (!node->isInsertionPoint())
-        return const_cast<Node*>(node);
-    const InsertionPoint* insertionPoint = toInsertionPoint(node);
-    return insertionPoint->hasDistribution() ? 0 :
-        insertionPoint->isActive() ? traverseParent(node) : const_cast<Node*>(node);
-}
-
 void ComposedShadowTreeWalker::parent()
 {
     assertPrecondition();
@@ -195,8 +178,6 @@
     assertPostcondition();
 }
 
-// FIXME: Use an iterative algorithm so that it can be inlined.
-// https://bugs.webkit.org/show_bug.cgi?id=90415
 Node* ComposedShadowTreeWalker::traverseParent(const Node* node) const
 {
     if (node->isPseudoElement())
@@ -208,26 +189,23 @@
     if (nodeCanBeDistributed(node)) {
         if (InsertionPoint* insertionPoint = findInsertionPointOf(node))
             return traverseParent(insertionPoint);
-        return 0;
+        return nullptr;
     }
-    return traverseParentInCurrentTree(node);
-}
+    ContainerNode* parent = node->parentNode();
+    if (!parent)
+        return nullptr;
 
-inline Node* ComposedShadowTreeWalker::traverseParentInCurrentTree(const Node* node) const
-{
-    if (Node* parent = node->parentNode())
-        return parent->isShadowRoot() ? traverseParentBackToShadowRootOrHost(toShadowRoot(parent)) : traverseNodeEscapingFallbackContents(parent);
-    return 0;
-}
+    if (parent->isShadowRoot())
+        return canCrossUpperBoundary() ? toShadowRoot(parent)->hostElement() : parent;
 
-Node* ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost(const ShadowRoot* shadowRoot) const
-{
-    ASSERT(shadowRoot);
-
-    if (canCrossUpperBoundary())
-        return shadowRoot->hostElement();
-
-    return const_cast<ShadowRoot*>(shadowRoot);
+    if (parent->isInsertionPoint()) {
+        const InsertionPoint* insertionPoint = toInsertionPoint(parent);
+        if (insertionPoint->hasDistribution())
+            return nullptr;
+        if (insertionPoint->isActive())
+            return traverseParent(parent);
+    }
+    return parent;
 }
 
 Node* ComposedShadowTreeWalker::traverseNextSibling(const Node* node)
@@ -266,7 +244,7 @@
             n = child;
         m_node = n;
     } else
-        parent();
+        m_node = traverseParent(m_node);
     assertPostcondition();
 }
 

Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h (155263 => 155264)


--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h	2013-09-07 22:20:15 UTC (rev 155263)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h	2013-09-07 22:30:41 UTC (rev 155264)
@@ -52,10 +52,6 @@
 
     ComposedShadowTreeWalker(const Node*, Policy = CrossUpperBoundary, StartPolicy = CannotStartFromShadowBoundary);
 
-    // For a common use case such as:
-    // for (ComposedShadowTreeWalker walker = ComposedShadowTreeWalker::fromFirstChild(node); walker.get(); walker.nextSibling())
-    static ComposedShadowTreeWalker fromFirstChild(const Node*, Policy = CrossUpperBoundary);
-
     Node* get() const { return const_cast<Node*>(m_node); }
 
     void firstChild();
@@ -115,10 +111,6 @@
 
     static Node* escapeFallbackContentElement(const Node*, TraversalDirection);
 
-    Node* traverseNodeEscapingFallbackContents(const Node*) const;
-    Node* traverseParentInCurrentTree(const Node*) const;
-    Node* traverseParentBackToShadowRootOrHost(const ShadowRoot*) const;
-
     const Node* m_node;
     Policy m_policy;
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to