CTTE: Convert Element and RenderObject iterator usage to use range-based for loops
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Dec 2013 18:05:45 +0000 (18:05 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Dec 2013 18:05:45 +0000 (18:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=125731

Reviewed by Andreas Kling.

Perform straight forward conversions. A few stragglers that do odd things remain.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@160598 268f45cc-cd09-0410-ab3c-d52691b4dbfc

53 files changed:
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AccessibilityNodeObject.cpp
Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Source/WebCore/accessibility/AccessibilityTable.cpp
Source/WebCore/dom/ChildNodeList.cpp
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/SelectorQuery.cpp
Source/WebCore/dom/TreeScope.cpp
Source/WebCore/editing/ApplyStyleCommand.cpp
Source/WebCore/editing/markup.cpp
Source/WebCore/html/HTMLAppletElement.cpp
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/html/HTMLFieldSetElement.cpp
Source/WebCore/html/HTMLFormElement.cpp
Source/WebCore/html/HTMLLabelElement.cpp
Source/WebCore/html/HTMLMapElement.cpp
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLObjectElement.cpp
Source/WebCore/loader/PlaceholderDocument.cpp
Source/WebCore/rendering/FilterEffectRenderer.cpp
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlockFlow.cpp
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderElement.cpp
Source/WebCore/rendering/RenderFrameSet.cpp
Source/WebCore/rendering/RenderInline.cpp
Source/WebCore/rendering/RenderTable.cpp
Source/WebCore/rendering/RenderTextFragment.cpp
Source/WebCore/rendering/RenderTreeAsText.cpp
Source/WebCore/rendering/RenderView.cpp
Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
Source/WebCore/rendering/svg/RenderSVGContainer.cpp
Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
Source/WebCore/rendering/svg/RenderSVGRoot.cpp
Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp
Source/WebCore/svg/SVGAltGlyphDefElement.cpp
Source/WebCore/svg/SVGAltGlyphItemElement.cpp
Source/WebCore/svg/SVGAnimateMotionElement.cpp
Source/WebCore/svg/SVGElement.cpp
Source/WebCore/svg/SVGFEComponentTransferElement.cpp
Source/WebCore/svg/SVGFELightElement.cpp
Source/WebCore/svg/SVGFEMergeElement.cpp
Source/WebCore/svg/SVGFontElement.cpp
Source/WebCore/svg/SVGFontFaceSrcElement.cpp
Source/WebCore/svg/SVGGradientElement.cpp
Source/WebCore/svg/SVGSVGElement.cpp
Source/WebCore/svg/SVGSwitchElement.cpp
Source/WebCore/svg/SVGUseElement.cpp
Source/WebCore/svg/animation/SMILTimeContainer.cpp

index d864b6e..4211219 100644 (file)
@@ -1,3 +1,12 @@
+2013-12-13  Sam Weinig  <sam@webkit.org>
+
+        CTTE: Convert Element and RenderObject iterator usage to use range-based for loops
+        https://bugs.webkit.org/show_bug.cgi?id=125731
+
+        Reviewed by Andreas Kling.
+
+        Perform straight forward conversions. A few stragglers that do odd things remain.
+
 2013-12-14  Joseph Pecoraro  <pecoraro@apple.com>
 
         Small string improvements to JSInjectedScriptHost::type and other bindings
index 64e54a7..08866e4 100644 (file)
@@ -1026,15 +1026,14 @@ Element* AccessibilityNodeObject::mouseButtonListener() const
 
     // check if our parent is a mouse button listener
     // FIXME: Do the continuation search like anchorElement does
-    auto lineage = elementLineage(node->isElementNode() ? toElement(node) : node->parentElement());
-    for (auto element = lineage.begin(), end = lineage.end(); element != end; ++element) {
+    for (auto& element : elementLineage(node->isElementNode() ? toElement(node) : node->parentElement())) {
         // If we've reached the body and this is not a control element, do not expose press action for this element.
         // It can cause false positives, where every piece of text is labeled as accepting press actions. 
-        if (element->hasTagName(bodyTag) && isStaticText())
+        if (element.hasTagName(bodyTag) && isStaticText())
             break;
         
-        if (element->hasEventListeners(eventNames().clickEvent) || element->hasEventListeners(eventNames().mousedownEvent) || element->hasEventListeners(eventNames().mouseupEvent))
-            return &*element;
+        if (element.hasEventListeners(eventNames().clickEvent) || element.hasEventListeners(eventNames().mousedownEvent) || element.hasEventListeners(eventNames().mouseupEvent))
+            return &element;
     }
 
     return 0;
@@ -1166,21 +1165,21 @@ static Element* siblingWithAriaRole(String role, Node* node)
 {
     ContainerNode* parent = node->parentNode();
     if (!parent)
-        return 0;
-    auto children = elementChildren(*parent);
-    for (auto sibling = children.begin(), end = children.end(); sibling != end; ++sibling) {
-        const AtomicString& siblingAriaRole = sibling->fastGetAttribute(roleAttr);
+        return nullptr;
+
+    for (auto& sibling : elementChildren(*parent)) {
+        const AtomicString& siblingAriaRole = sibling.fastGetAttribute(roleAttr);
         if (equalIgnoringCase(siblingAriaRole, role))
-            return &*sibling;
+            return &sibling;
     }
 
-    return 0;
+    return nullptr;
 }
 
 Element* AccessibilityNodeObject::menuElementForMenuButton() const
 {
     if (ariaRoleAttribute() != MenuButtonRole)
-        return 0;
+        return nullptr;
 
     return siblingWithAriaRole("menu", node());
 }
index 5022da7..717534a 100644 (file)
@@ -2754,13 +2754,12 @@ void AccessibilityRenderObject::addImageMapChildren()
     if (!map)
         return;
 
-    auto areaDescendants = descendantsOfType<HTMLAreaElement>(*map);
-    for (auto area = areaDescendants.begin(), end = areaDescendants.end(); area != end; ++area) {
+    for (auto& area : descendantsOfType<HTMLAreaElement>(*map)) {
         // add an <area> element for this child if it has a link
-        if (!area->isLink())
+        if (!area.isLink())
             continue;
         AccessibilityImageMapLink* areaObject = toAccessibilityImageMapLink(axObjectCache()->getOrCreate(ImageMapLinkRole));
-        areaObject->setHTMLAreaElement(&*area);
+        areaObject->setHTMLAreaElement(&area);
         areaObject->setHTMLMapElement(map);
         areaObject->setParent(this);
         if (!areaObject->accessibilityIsIgnored())
index b3d3c63..4091946 100644 (file)
@@ -124,9 +124,8 @@ bool AccessibilityTable::isDataTable() const
         return true;    
 
     // if there's a colgroup or col element, it's probably a data table.
-    auto tableChildren = elementChildren(*tableElement);
-    for (auto child = tableChildren.begin(), end = tableChildren.end(); child != end; ++child) {
-        if (child->hasTagName(colTag) || child->hasTagName(colgroupTag))
+    for (auto& child : elementChildren(*tableElement)) {
+        if (child.hasTagName(colTag) || child.hasTagName(colgroupTag))
             return true;
     }
     
index 68c3142..61c4cee 100644 (file)
@@ -94,9 +94,7 @@ Node* ChildNodeList::namedItem(const AtomicString& name) const
         if (!element || !m_parent.get().treeScope().containsMultipleElementsWithId(name))
             return nullptr;
     }
-    auto children = elementChildren(m_parent.get());
-    for (auto it = children.begin(), end = children.end(); it != end; ++it) {
-        auto& element = *it;
+    for (auto& element : elementChildren(m_parent.get())) {
         if (element.hasID() && element.idForStyleResolution() == name)
             return const_cast<Element*>(&element);
     }
index e94f273..9a8d71a 100644 (file)
@@ -656,13 +656,12 @@ void Document::buildAccessKeyMap(TreeScope* scope)
 {
     ASSERT(scope);
     ContainerNode* rootNode = scope->rootNode();
-    auto descendant = elementDescendants(*rootNode);
-    for (auto element = descendant.begin(), end = descendant.end(); element != end; ++element) {
-        const AtomicString& accessKey = element->fastGetAttribute(accesskeyAttr);
+    for (auto& element : elementDescendants(*rootNode)) {
+        const AtomicString& accessKey = element.fastGetAttribute(accesskeyAttr);
         if (!accessKey.isEmpty())
-            m_elementsByAccessKey.set(accessKey.impl(), &*element);
+            m_elementsByAccessKey.set(accessKey.impl(), &element);
 
-        if (ShadowRoot* root = element->shadowRoot())
+        if (ShadowRoot* root = element.shadowRoot())
             buildAccessKeyMap(root);
     }
 }
@@ -2579,9 +2578,8 @@ void Document::updateBaseURL()
     if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) {
         // Base URL change changes any relative visited links.
         // FIXME: There are other URLs in the tree that would need to be re-evaluated on dynamic base URL change. Style should be invalidated too.
-        auto anchorDescendants = descendantsOfType<HTMLAnchorElement>(*this);
-        for (auto anchor = anchorDescendants.begin(), end = anchorDescendants.end(); anchor != end; ++anchor)
-            anchor->invalidateCachedVisitedLinkHash();
+        for (auto& anchor : descendantsOfType<HTMLAnchorElement>(*this))
+            anchor.invalidateCachedVisitedLinkHash();
     }
 }
 
index 7a71db3..938b374 100644 (file)
@@ -165,10 +165,9 @@ static bool isSingleTagNameSelector(const CSSSelector& selector)
 template <typename SelectorQueryTrait>
 static inline void elementsForLocalName(const ContainerNode& rootNode, const AtomicString& localName, typename SelectorQueryTrait::OutputType& output)
 {
-    auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (element->tagQName().localName() == localName) {
-            SelectorQueryTrait::appendOutputForElement(output, &*element);
+    for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
+        if (element.tagQName().localName() == localName) {
+            SelectorQueryTrait::appendOutputForElement(output, &element);
             if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
                 return;
         }
@@ -178,9 +177,8 @@ static inline void elementsForLocalName(const ContainerNode& rootNode, const Ato
 template <typename SelectorQueryTrait>
 static inline void anyElement(const ContainerNode& rootNode, typename SelectorQueryTrait::OutputType& output)
 {
-    auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        SelectorQueryTrait::appendOutputForElement(output, &*element);
+    for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
+        SelectorQueryTrait::appendOutputForElement(output, &element);
         if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
             return;
     }
@@ -207,10 +205,9 @@ ALWAYS_INLINE void SelectorDataList::executeSingleTagNameSelectorData(const Cont
         }
     } else {
         // Fallback: NamespaceURI is set, selectorLocalName may be starAtom.
-        auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-        for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-            if (element->namespaceURI() == selectorNamespaceURI && (selectorLocalName == starAtom || element->tagQName().localName() == selectorLocalName)) {
-                SelectorQueryTrait::appendOutputForElement(output, &*element);
+        for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
+            if (element.namespaceURI() == selectorNamespaceURI && (selectorLocalName == starAtom || element.tagQName().localName() == selectorLocalName)) {
+                SelectorQueryTrait::appendOutputForElement(output, &element);
                 if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
                     return;
             }
@@ -230,10 +227,9 @@ ALWAYS_INLINE void SelectorDataList::executeSingleClassNameSelectorData(const Co
     ASSERT(isSingleClassNameSelector(*selectorData.selector));
 
     const AtomicString& className = selectorData.selector->value();
-    auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (element->hasClass() && element->classNames().contains(className)) {
-            SelectorQueryTrait::appendOutputForElement(output, &*element);
+    for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
+        if (element.hasClass() && element.classNames().contains(className)) {
+            SelectorQueryTrait::appendOutputForElement(output, &element);
             if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
                 return;
         }
@@ -245,10 +241,9 @@ ALWAYS_INLINE void SelectorDataList::executeSingleSelectorData(const ContainerNo
 {
     ASSERT(m_selectors.size() == 1);
 
-    auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (selectorMatches(selectorData, *element, rootNode)) {
-            SelectorQueryTrait::appendOutputForElement(output, &*element);
+    for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
+        if (selectorMatches(selectorData, element, rootNode)) {
+            SelectorQueryTrait::appendOutputForElement(output, &element);
             if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
                 return;
         }
@@ -259,11 +254,10 @@ template <typename SelectorQueryTrait>
 ALWAYS_INLINE void SelectorDataList::executeSingleMultiSelectorData(const ContainerNode& rootNode, typename SelectorQueryTrait::OutputType& output) const
 {
     unsigned selectorCount = m_selectors.size();
-    auto descendants = elementDescendants(const_cast<ContainerNode&>(rootNode));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
+    for (auto& element : elementDescendants(const_cast<ContainerNode&>(rootNode))) {
         for (unsigned i = 0; i < selectorCount; ++i) {
-            if (selectorMatches(m_selectors[i], *element, rootNode)) {
-                SelectorQueryTrait::appendOutputForElement(output, &*element);
+            if (selectorMatches(m_selectors[i], element, rootNode)) {
+                SelectorQueryTrait::appendOutputForElement(output, &element);
                 if (SelectorQueryTrait::shouldOnlyMatchFirstElement)
                     return;
                 break;
index 36bb3fe..feff2f9 100644 (file)
@@ -294,11 +294,10 @@ HTMLLabelElement* TreeScope::labelElementForId(const AtomicString& forAttributeV
         // Populate the map on first access.
         m_labelsByForAttribute = adoptPtr(new DocumentOrderedMap);
 
-        auto labelDescendants = descendantsOfType<HTMLLabelElement>(*rootNode());
-        for (auto label = labelDescendants.begin(), end = labelDescendants.end(); label != end; ++label) {
-            const AtomicString& forValue = label->fastGetAttribute(forAttr);
+        for (auto& label : descendantsOfType<HTMLLabelElement>(*rootNode())) {
+            const AtomicString& forValue = label.fastGetAttribute(forAttr);
             if (!forValue.isEmpty())
-                addLabel(*forValue.impl(), *label);
+                addLabel(*forValue.impl(), label);
         }
     }
 
@@ -336,16 +335,15 @@ Element* TreeScope::findAnchor(const String& name)
         return nullptr;
     if (Element* element = getElementById(name))
         return element;
-    auto anchorDescendants = descendantsOfType<HTMLAnchorElement>(*rootNode());
-    for (auto anchor = anchorDescendants.begin(), end = anchorDescendants.end(); anchor != end; ++anchor) {
+    for (auto& anchor : descendantsOfType<HTMLAnchorElement>(*rootNode())) {
         if (rootNode()->document().inQuirksMode()) {
             // Quirks mode, case insensitive comparison of names.
-            if (equalIgnoringCase(anchor->name(), name))
-                return &*anchor;
+            if (equalIgnoringCase(anchor.name(), name))
+                return &anchor;
         } else {
             // Strict mode, names need to match exactly.
-            if (anchor->name() == name)
-                return &*anchor;
+            if (anchor.name() == name)
+                return &anchor;
         }
     }
     return nullptr;
index eaf8e98..3f84dc8 100644 (file)
@@ -439,10 +439,9 @@ void ApplyStyleCommand::cleanupUnstyledAppleStyleSpans(ContainerNode* dummySpanA
     // all the children of the dummy's parent
 
     Vector<Element*> toRemove;
-    auto children = elementChildren(*dummySpanAncestor);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (isSpanWithoutAttributesOrUnstyledStyleSpan(&*child))
-            toRemove.append(&*child);
+    for (auto& child : elementChildren(*dummySpanAncestor)) {
+        if (isSpanWithoutAttributesOrUnstyledStyleSpan(&child))
+            toRemove.append(&child);
     }
     for (unsigned i = 0; i < toRemove.size(); ++i)
         removeNodePreservingChildren(toRemove[i]);
index 609daef..a93615a 100644 (file)
@@ -99,15 +99,14 @@ static void completeURLs(DocumentFragment* fragment, const String& baseURL)
 
     URL parsedBaseURL(ParsedURLString, baseURL);
 
-    auto descendants = elementDescendants(*fragment);
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (!element->hasAttributes())
+    for (auto& element : elementDescendants(*fragment)) {
+        if (!element.hasAttributes())
             continue;
-        unsigned length = element->attributeCount();
+        unsigned length = element.attributeCount();
         for (unsigned i = 0; i < length; i++) {
-            const Attribute& attribute = element->attributeAt(i);
-            if (element->isURLAttribute(attribute) && !attribute.value().isEmpty())
-                changes.append(AttributeChange(&*element, attribute.name(), URL(parsedBaseURL, attribute.value()).string()));
+            const Attribute& attribute = element.attributeAt(i);
+            if (element.isURLAttribute(attribute) && !attribute.value().isEmpty())
+                changes.append(AttributeChange(&element, attribute.name(), URL(parsedBaseURL, attribute.value()).string()));
         }
     }
 
@@ -892,9 +891,7 @@ PassRefPtr<DocumentFragment> createFragmentForTransformToFragment(const String&
 static Vector<Ref<HTMLElement>> collectElementsToRemoveFromFragment(ContainerNode& container)
 {
     Vector<Ref<HTMLElement>> toRemove;
-    auto children = childrenOfType<HTMLElement>(container);
-    for (auto it = children.begin(), end = children.end(); it != end; ++it) {
-        HTMLElement& element = *it;
+    for (auto& element : childrenOfType<HTMLElement>(container)) {
         if (isHTMLHtmlElement(element)) {
             toRemove.append(element);
             collectElementsToRemoveFromFragment(element);
index 708ca41..732d8e7 100644 (file)
@@ -148,13 +148,12 @@ void HTMLAppletElement::updateWidget(PluginCreationOption pluginCreationOption)
         paramValues.append(mayScript.string());
     }
 
-    auto paramChildren = childrenOfType<HTMLParamElement>(*this);
-    for (auto param = paramChildren.begin(), end = paramChildren.end(); param != end; ++param) {
-        if (param->name().isEmpty())
+    for (auto& param : childrenOfType<HTMLParamElement>(*this)) {
+        if (param.name().isEmpty())
             continue;
 
-        paramNames.append(param->name());
-        paramValues.append(param->value());
+        paramNames.append(param.name());
+        paramValues.append(param.value());
     }
 
     Frame* frame = document().frame();
index 09bd672..425f617 100644 (file)
@@ -744,9 +744,8 @@ TranslateAttributeMode HTMLElement::translateAttributeMode() const
 
 bool HTMLElement::translate() const
 {
-    auto lineage = lineageOfType<HTMLElement>(*this);
-    for (auto element = lineage.begin(), end = lineage.end(); element != end; ++element) {
-        TranslateAttributeMode mode = element->translateAttributeMode();
+    for (auto& element : lineageOfType<HTMLElement>(*this)) {
+        TranslateAttributeMode mode = element.translateAttributeMode();
         if (mode == TranslateAttributeInherit)
             continue;
         ASSERT(mode == TranslateAttributeYes || mode == TranslateAttributeNo);
@@ -793,9 +792,9 @@ HTMLFormElement* HTMLElement::virtualForm() const
     return HTMLFormElement::findClosestFormAncestor(*this);
 }
 
-static inline bool elementAffectsDirectionality(const Node* node)
+static inline bool elementAffectsDirectionality(const Node& node)
 {
-    return node->isHTMLElement() && (node->hasTagName(bdiTag) || toHTMLElement(node)->hasAttribute(dirAttr));
+    return node.isHTMLElement() && (node.hasTagName(bdiTag) || toHTMLElement(node).hasAttribute(dirAttr));
 }
 
 static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastNode = nullptr)
@@ -808,7 +807,7 @@ static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastN
         if (node->selfOrAncestorHasDirAutoAttribute() == flag)
             return;
 
-        if (elementAffectsDirectionality(node)) {
+        if (elementAffectsDirectionality(*node)) {
             if (node == lastNode)
                 return;
             node = NodeTraversal::nextSkippingChildren(node, firstNode);
@@ -908,10 +907,9 @@ void HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged(Element
     setHasDirAutoFlagRecursively(child, false);
     if (!renderer() || renderer()->style().direction() == textDirection)
         return;
-    auto lineage = elementLineage(this);
-    for (auto elementToAdjust = lineage.begin(), end = lineage.end(); elementToAdjust != end; ++elementToAdjust) {
-        if (elementAffectsDirectionality(&*elementToAdjust)) {
-            elementToAdjust->setNeedsStyleRecalc();
+    for (auto& elementToAdjust : elementLineage(this)) {
+        if (elementAffectsDirectionality(elementToAdjust)) {
+            elementToAdjust.setNeedsStyleRecalc();
             return;
         }
     }
@@ -932,7 +930,7 @@ void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Element* befo
     if (document().renderView() && (changeType == ElementRemoved || changeType == TextRemoved)) {
         Node* node = beforeChange ? beforeChange->nextSibling() : nullptr;
         for (; node; node = node->nextSibling()) {
-            if (elementAffectsDirectionality(node))
+            if (elementAffectsDirectionality(*node))
                 continue;
 
             setHasDirAutoFlagRecursively(node, false);
@@ -946,15 +944,14 @@ void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Element* befo
     if (beforeChange)
         oldMarkedNode = changeType == ElementInserted ? ElementTraversal::nextSibling(beforeChange) : beforeChange->nextSibling();
 
-    while (oldMarkedNode && elementAffectsDirectionality(oldMarkedNode))
+    while (oldMarkedNode && elementAffectsDirectionality(*oldMarkedNode))
         oldMarkedNode = oldMarkedNode->nextSibling();
     if (oldMarkedNode)
         setHasDirAutoFlagRecursively(oldMarkedNode, false);
 
-    auto lineage = lineageOfType<HTMLElement>(*this);
-    for (auto elementToAdjust = lineage.begin(), end = lineage.end(); elementToAdjust != end; ++elementToAdjust) {
-        if (elementAffectsDirectionality(&*elementToAdjust)) {
-            elementToAdjust->calculateAndAdjustDirectionality();
+    for (auto& elementToAdjust : lineageOfType<HTMLElement>(*this)) {
+        if (elementAffectsDirectionality(elementToAdjust)) {
+            elementToAdjust.calculateAndAdjustDirectionality();
             return;
         }
     }
index 8e3aecf..9279e4a 100644 (file)
@@ -51,9 +51,8 @@ PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName&
 
 void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base)
 {
-    auto formControlDescendants = descendantsOfType<HTMLFormControlElement>(*base);
-    for (auto control = formControlDescendants.begin(), end = formControlDescendants.end(); control != end; ++control)
-        control->ancestorDisabledStateWasChanged();
+    for (auto& control : descendantsOfType<HTMLFormControlElement>(*base))
+        control.ancestorDisabledStateWasChanged();
 }
 
 void HTMLFieldSetElement::disabledAttributeChanged()
@@ -67,9 +66,8 @@ void HTMLFieldSetElement::childrenChanged(const ChildChange& change)
 {
     HTMLFormControlElement::childrenChanged(change);
 
-    auto legendChildren = childrenOfType<HTMLLegendElement>(*this);
-    for (auto legend = legendChildren.begin(), end = legendChildren.end(); legend != end; ++legend)
-        invalidateDisabledStateUnder(&*legend);
+    for (auto& legend : childrenOfType<HTMLLegendElement>(*this))
+        invalidateDisabledStateUnder(&legend);
 }
 
 bool HTMLFieldSetElement::supportsFocus() const
@@ -108,12 +106,11 @@ void HTMLFieldSetElement::refreshElementsIfNeeded() const
 
     m_associatedElements.clear();
 
-    auto descendants = elementDescendants(const_cast<HTMLFieldSetElement&>(*this));
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (element->hasTagName(objectTag))
-            m_associatedElements.append(&toHTMLObjectElement(*element));
-        else if (element->isFormControlElement())
-            m_associatedElements.append(&toHTMLFormControlElement(*element));
+    for (auto& element : elementDescendants(const_cast<HTMLFieldSetElement&>(*this))) {
+        if (element.hasTagName(objectTag))
+            m_associatedElements.append(&toHTMLObjectElement(element));
+        else if (element.isFormControlElement())
+            m_associatedElements.append(&toHTMLFormControlElement(element));
     }
 }
 
index 3ec01b7..6ce185c 100644 (file)
@@ -475,8 +475,7 @@ unsigned HTMLFormElement::formElementIndex(FormAssociatedElement* associatedElem
         return currentAssociatedElementsAfterIndex;
 
     unsigned i = m_associatedElementsBeforeIndex;
-    for (auto it = descendants.begin(); it != end; ++it) {
-        HTMLElement& element = *it;
+    for (auto& element : descendants) {
         if (&element == &associatedHTMLElement)
             return i;
         if (!isHTMLFormControlElement(element) && !isHTMLObjectElement(element))
index 537d575..2ad9a38 100644 (file)
@@ -67,12 +67,11 @@ LabelableElement* HTMLLabelElement::control()
         // Search the children and descendants of the label element for a form element.
         // per http://dev.w3.org/html5/spec/Overview.html#the-label-element
         // the form element must be "labelable form-associated element".
-        auto labelableDescendants = descendantsOfType<LabelableElement>(*this);
-        for (auto labelableElement = labelableDescendants.begin(), end = labelableDescendants.end(); labelableElement != end; ++labelableElement) {
-            if (labelableElement->supportLabels())
-                return &*labelableElement;
+        for (auto& labelableElement : descendantsOfType<LabelableElement>(*this)) {
+            if (labelableElement.supportLabels())
+                return &labelableElement;
         }
-        return 0;
+        return nullptr;
     }
     
     // Find the first element whose id is controlId. If it is found and it is a labelable form control,
index 96eb8fb..bb1ba20 100644 (file)
@@ -59,12 +59,11 @@ bool HTMLMapElement::mapMouseEvent(LayoutPoint location, const LayoutSize& size,
 {
     HTMLAreaElement* defaultArea = 0;
 
-    auto areaDescendants = descendantsOfType<HTMLAreaElement>(*this);
-    for (auto area = areaDescendants.begin(), end = areaDescendants.end(); area != end; ++area) {
-        if (area->isDefault()) {
+    for (auto& area : descendantsOfType<HTMLAreaElement>(*this)) {
+        if (area.isDefault()) {
             if (!defaultArea)
-                defaultArea = &*area;
-        } else if (area->mapMouseEvent(location, size, result))
+                defaultArea = &area;
+        } else if (area.mapMouseEvent(location, size, result))
             return true;
     }
     
index b9a42c6..6421f2d 100644 (file)
@@ -1473,10 +1473,9 @@ void HTMLMediaElement::textTrackModeChanged(TextTrack* track)
     bool trackIsLoaded = true;
     if (track->trackType() == TextTrack::TrackElement) {
         trackIsLoaded = false;
-        auto trackChildren = childrenOfType<HTMLTrackElement>(*this);
-        for (auto trackElement = trackChildren.begin(), end = trackChildren.end(); trackElement != end; ++trackElement) {
-            if (trackElement->track() == track) {
-                if (trackElement->readyState() == HTMLTrackElement::LOADING || trackElement->readyState() == HTMLTrackElement::LOADED)
+        for (auto& trackElement : childrenOfType<HTMLTrackElement>(*this)) {
+            if (trackElement.track() == track) {
+                if (trackElement.readyState() == HTMLTrackElement::LOADING || trackElement.readyState() == HTMLTrackElement::LOADED)
                     trackIsLoaded = true;
                 break;
             }
@@ -1717,9 +1716,8 @@ void HTMLMediaElement::cancelPendingEventsAndCallbacks()
     LOG(Media, "HTMLMediaElement::cancelPendingEventsAndCallbacks");
     m_asyncEventQueue.cancelAllEvents();
 
-    auto sourceChildren = childrenOfType<HTMLSourceElement>(*this);
-    for (auto source = sourceChildren.begin(), end = sourceChildren.end(); source != end; ++source)
-        source->cancelPendingErrorEvent();
+    for (auto& source : childrenOfType<HTMLSourceElement>(*this))
+        source.cancelPendingErrorEvent();
 }
 
 Document* HTMLMediaElement::mediaPlayerOwningDocument()
index 3e1cac6..533dfe1 100644 (file)
@@ -154,22 +154,21 @@ void HTMLObjectElement::parametersForPlugin(Vector<String>& paramNames, Vector<S
     
     // Scan the PARAM children and store their name/value pairs.
     // Get the URL and type from the params if we don't already have them.
-    auto paramChildren = childrenOfType<HTMLParamElement>(*this);
-    for (auto param = paramChildren.begin(), end = paramChildren.end(); param != end; ++param) {
-        String name = param->name();
+    for (auto& param : childrenOfType<HTMLParamElement>(*this)) {
+        String name = param.name();
         if (name.isEmpty())
             continue;
 
         uniqueParamNames.add(name.impl());
-        paramNames.append(param->name());
-        paramValues.append(param->value());
+        paramNames.append(param.name());
+        paramValues.append(param.value());
 
         // FIXME: url adjustment does not belong in this function.
         if (url.isEmpty() && urlParameter.isEmpty() && (equalIgnoringCase(name, "src") || equalIgnoringCase(name, "movie") || equalIgnoringCase(name, "code") || equalIgnoringCase(name, "url")))
-            urlParameter = stripLeadingAndTrailingHTMLSpaces(param->value());
+            urlParameter = stripLeadingAndTrailingHTMLSpaces(param.value());
         // FIXME: serviceType calculation does not belong in this function.
         if (serviceType.isEmpty() && equalIgnoringCase(name, "type")) {
-            serviceType = param->value();
+            serviceType = param.value();
             size_t pos = serviceType.find(";");
             if (pos != notFound)
                 serviceType = serviceType.left(pos);
@@ -445,14 +444,13 @@ bool HTMLObjectElement::containsJavaApplet() const
     if (MIMETypeRegistry::isJavaAppletMIMEType(getAttribute(typeAttr)))
         return true;
 
-    auto children = elementChildren(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (child->hasTagName(paramTag) && equalIgnoringCase(child->getNameAttribute(), "type")
-            && MIMETypeRegistry::isJavaAppletMIMEType(child->getAttribute(valueAttr).string()))
+    for (auto& child : elementChildren(*this)) {
+        if (child.hasTagName(paramTag) && equalIgnoringCase(child.getNameAttribute(), "type")
+            && MIMETypeRegistry::isJavaAppletMIMEType(child.getAttribute(valueAttr).string()))
             return true;
-        if (child->hasTagName(objectTag) && static_cast<const HTMLObjectElement&>(*child).containsJavaApplet())
+        if (child.hasTagName(objectTag) && toHTMLObjectElement(child).containsJavaApplet())
             return true;
-        if (child->hasTagName(appletTag))
+        if (child.hasTagName(appletTag))
             return true;
     }
     
index 866f381..ac5cae9 100644 (file)
@@ -34,9 +34,8 @@ void PlaceholderDocument::createRenderTree()
 {
     ASSERT(!attached());
 
-    auto children = elementChildren(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child)
-        Style::attachRenderTree(*child);
+    for (auto& child : elementChildren(*this))
+        Style::attachRenderTree(child);
 
     setAttached(true);
 }
index ad9ceb5..4ace57e 100644 (file)
@@ -161,15 +161,13 @@ PassRefPtr<FilterEffect> FilterEffectRenderer::buildReferenceFilter(RenderElemen
     // This may need a spec clarification.
     auto builder = std::make_unique<SVGFilterBuilder>(previousEffect, SourceAlpha::create(this));
 
-    auto attributesChildren = childrenOfType<SVGFilterPrimitiveStandardAttributes>(*filter);
-    for (auto it = attributesChildren.begin(), end = attributesChildren.end(); it != end; ++it) {
-        SVGFilterPrimitiveStandardAttributes* effectElement = &*it;
-        effect = effectElement->build(builder.get(), this);
+    for (auto& effectElement : childrenOfType<SVGFilterPrimitiveStandardAttributes>(*filter)) {
+        effect = effectElement.build(builder.get(), this);
         if (!effect)
             continue;
 
-        effectElement->setStandardAttributes(effect.get());
-        builder->add(effectElement->result(), effect);
+        effectElement.setStandardAttributes(effect.get());
+        builder->add(effectElement.result(), effect);
         m_effects.append(effect);
     }
     return effect;
index 1ed5c9a..c29113f 100644 (file)
@@ -1455,9 +1455,8 @@ void RenderBlock::markShapeInsideDescendantsForLayout()
         return;
     }
 
-    auto blockChildren = childrenOfType<RenderBlock>(*this);
-    for (auto childBlock = blockChildren.begin(), end = blockChildren.end(); childBlock != end; ++childBlock)
-        childBlock->markShapeInsideDescendantsForLayout();
+    for (auto& childBlock : childrenOfType<RenderBlock>(*this))
+        childBlock.markShapeInsideDescendantsForLayout();
 }
 
 ShapeInsideInfo* RenderBlock::layoutShapeInsideInfo() const
index 5b4c4d5..2c2139c 100644 (file)
@@ -1774,15 +1774,14 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
         RenderBlockFlow* parentBlock = this;
         const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
 
-        auto ancestors = ancestorsOfType<RenderBlockFlow>(*this);
-        for (auto ancestor = ancestors.begin(), end = ancestors.end(); ancestor != end; ++ancestor) {
-            if (ancestor->isRenderView())
+        for (auto& ancestor : ancestorsOfType<RenderBlockFlow>(*this)) {
+            if (ancestor.isRenderView())
                 break;
-            if (ancestor->hasOverhangingFloats()) {
+            if (ancestor.hasOverhangingFloats()) {
                 for (auto it = floatingObjectSet.begin(), end = floatingObjectSet.end(); it != end; ++it) {
                     RenderBox& renderer = (*it)->renderer();
-                    if (ancestor->hasOverhangingFloat(renderer)) {
-                        parentBlock = &*ancestor;
+                    if (ancestor.hasOverhangingFloat(renderer)) {
+                        parentBlock = &ancestor;
                         break;
                     }
                 }
index 8944d73..0b54c38 100644 (file)
@@ -234,12 +234,11 @@ RenderBlockFlow* RenderBox::outermostBlockContainingFloatingObject()
 {
     ASSERT(isFloating());
     RenderBlockFlow* parentBlock = nullptr;
-    auto ancestors = ancestorsOfType<RenderBlockFlow>(*this);
-    for (auto ancestor = ancestors.begin(), end = ancestors.end(); ancestor != end; ++ancestor) {
-        if (ancestor->isRenderView())
+    for (auto& ancestor : ancestorsOfType<RenderBlockFlow>(*this)) {
+        if (ancestor.isRenderView())
             break;
-        if (!parentBlock || ancestor->containsFloat(*this))
-            parentBlock = &*ancestor;
+        if (!parentBlock || ancestor.containsFloat(*this))
+            parentBlock = &ancestor;
     }
     return parentBlock;
 }
@@ -1330,9 +1329,7 @@ bool RenderBox::foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, u
 {
     if (!maxDepthToTest)
         return false;
-    auto boxChildren = childrenOfType<RenderBox>(*this);
-    for (auto child = boxChildren.begin(), end = boxChildren.end(); child != end; ++child) {
-        const RenderBox& childBox = *child;
+    for (auto& childBox : childrenOfType<RenderBox>(*this)) {
         if (!isCandidateForOpaquenessTest(childBox))
             continue;
         LayoutPoint childLocation = childBox.location();
index 6088d99..0e66bff 100644 (file)
@@ -302,11 +302,10 @@ StyleDifference RenderElement::adjustStyleDifference(StyleDifference diff, unsig
 
 inline bool RenderElement::hasImmediateNonWhitespaceTextChildOrBorderOrOutline() const
 {
-    auto children = childrenOfType<RenderObject>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (child->isText() && !toRenderText(*child).isAllCollapsibleWhitespace())
+    for (auto& child : childrenOfType<RenderObject>(*this)) {
+        if (child.isText() && !toRenderText(child).isAllCollapsibleWhitespace())
             return true;
-        if (child->style().hasOutline() || child->style().hasBorder())
+        if (child.style().hasOutline() || child.style().hasBorder())
             return true;
     }
     return false;
@@ -439,9 +438,8 @@ void RenderElement::setStyle(PassRef<RenderStyle> style)
     styleDidChange(diff, &oldStyle.get());
 
     // Text renderers use their parent style. Notify them about the change.
-    auto textChildren = childrenOfType<RenderText>(*this);
-    for (auto child = textChildren.begin(), end = textChildren.end(); child != end; ++child)
-        child->styleDidChange(diff, &oldStyle.get());
+    for (auto& child : childrenOfType<RenderText>(*this))
+        child.styleDidChange(diff, &oldStyle.get());
 
     // FIXME: |this| might be destroyed here. This can currently happen for a RenderTextFragment when
     // its first-letter block gets an update in RenderTextFragment::styleDidChange. For RenderTextFragment(s),
@@ -678,9 +676,8 @@ static void addLayers(RenderElement& renderer, RenderLayer* parentLayer, RenderE
         return;
     }
 
-    auto children = childrenOfType<RenderElement>(renderer);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child)
-        addLayers(*child, parentLayer, newObject, beforeChild);
+    for (auto& child : childrenOfType<RenderElement>(renderer))
+        addLayers(child, parentLayer, newObject, beforeChild);
 }
 
 void RenderElement::addLayers(RenderLayer* parentLayer)
@@ -703,9 +700,8 @@ void RenderElement::removeLayers(RenderLayer* parentLayer)
         return;
     }
 
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child)
-        child->removeLayers(parentLayer);
+    for (auto& child : childrenOfType<RenderElement>(*this))
+        child.removeLayers(parentLayer);
 }
 
 void RenderElement::moveLayers(RenderLayer* oldParent, RenderLayer* newParent)
@@ -722,9 +718,8 @@ void RenderElement::moveLayers(RenderLayer* oldParent, RenderLayer* newParent)
         return;
     }
 
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child)
-        child->moveLayers(oldParent, newParent);
+    for (auto& child : childrenOfType<RenderElement>(*this))
+        child.moveLayers(oldParent, newParent);
 }
 
 RenderLayer* RenderElement::findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint, bool checkParent)
@@ -780,9 +775,7 @@ bool RenderElement::layerCreationAllowedForSubtree() const
 void RenderElement::propagateStyleToAnonymousChildren(StylePropagationType propagationType)
 {
     // FIXME: We could save this call when the change only affected non-inherited properties.
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        RenderElement& elementChild = *child;
+    for (auto& elementChild : childrenOfType<RenderElement>(*this)) {
         if (!elementChild.isAnonymous() || elementChild.style().styleType() != NOPSEUDO)
             continue;
 
index 416392f..26d66db 100644 (file)
@@ -714,10 +714,9 @@ bool RenderFrameSet::userResize(MouseEvent* evt)
 void RenderFrameSet::setIsResizing(bool isResizing)
 {
     m_isResizing = isResizing;
-    auto ancestors = ancestorsOfType<RenderFrameSet>(*this);
-    for (auto ancestor = ancestors.begin(), end = ancestors.end(); ancestor != end; ++ancestor)
-        ancestor->m_isChildResizing = isResizing;
-    frame().eventHandler().setResizingFrameSet(isResizing ? &frameSetElement() : 0);
+    for (auto& ancestor : ancestorsOfType<RenderFrameSet>(*this))
+        ancestor.m_isChildResizing = isResizing;
+    frame().eventHandler().setResizingFrameSet(isResizing ? &frameSetElement() : nullptr);
 }
 
 bool RenderFrameSet::isResizingRow() const
index 66951e7..a587a82 100644 (file)
@@ -1079,9 +1079,8 @@ LayoutRect RenderInline::clippedOverflowRectForRepaint(const RenderLayerModelObj
     cb->computeRectForRepaint(repaintContainer, repaintRect);
 
     if (outlineSize) {
-        auto children = childrenOfType<RenderElement>(*this);
-        for (auto child = children.begin(), end = children.end(); child != end; ++child)
-            repaintRect.unite(child->rectWithOutlineForRepaint(repaintContainer, outlineSize));
+        for (auto& child : childrenOfType<RenderElement>(*this))
+            repaintRect.unite(child.rectWithOutlineForRepaint(repaintContainer, outlineSize));
 
         if (RenderBoxModelObject* continuation = this->continuation()) {
             if (!continuation->isInline() && continuation->parent())
@@ -1095,9 +1094,8 @@ LayoutRect RenderInline::clippedOverflowRectForRepaint(const RenderLayerModelObj
 LayoutRect RenderInline::rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const
 {
     LayoutRect r(RenderBoxModelObject::rectWithOutlineForRepaint(repaintContainer, outlineWidth));
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child)
-        r.unite(child->rectWithOutlineForRepaint(repaintContainer, outlineWidth));
+    for (auto& child : childrenOfType<RenderElement>(*this))
+        r.unite(child.rectWithOutlineForRepaint(repaintContainer, outlineWidth));
     return r;
 }
 
@@ -1433,17 +1431,16 @@ void RenderInline::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint&
     AbsoluteRectsGeneratorContext context(rects, additionalOffset);
     generateLineBoxRects(context);
 
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (child->isListMarker())
+    for (auto& child : childrenOfType<RenderElement>(*this)) {
+        if (child.isListMarker())
             continue;
         FloatPoint pos(additionalOffset);
         // FIXME: This doesn't work correctly with transforms.
-        if (child->hasLayer())
-            pos = child->localToContainerPoint(FloatPoint(), paintContainer);
-        else if (child->isBox())
-            pos.move(toRenderBox(*child).locationOffset());
-        child->addFocusRingRects(rects, flooredIntPoint(pos), paintContainer);
+        if (child.hasLayer())
+            pos = child.localToContainerPoint(FloatPoint(), paintContainer);
+        else if (child.isBox())
+            pos.move(toRenderBox(child).locationOffset());
+        child.addFocusRingRects(rects, flooredIntPoint(pos), paintContainer);
     }
 
     if (RenderBoxModelObject* continuation = this->continuation()) {
index 74b026c..981eb40 100644 (file)
@@ -448,10 +448,9 @@ void RenderTable::layout()
 
     bool collapsing = collapseBorders();
 
-    auto children = childrenOfType<RenderElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (child->isTableSection()) {
-            RenderTableSection& section = toRenderTableSection(*child);
+    for (auto& child : childrenOfType<RenderElement>(*this)) {
+        if (child.isTableSection()) {
+            RenderTableSection& section = toRenderTableSection(child);
             if (m_columnLogicalWidthChanged)
                 section.setChildNeedsLayout(MarkOnlyThis);
             section.layoutIfNeeded();
@@ -459,9 +458,9 @@ void RenderTable::layout()
             if (collapsing)
                 section.recalcOuterBorder();
             ASSERT(!section.needsLayout());
-        } else if (child->isRenderTableCol()) {
-            toRenderTableCol(*child).layoutIfNeeded();
-            ASSERT(!child->needsLayout());
+        } else if (child.isRenderTableCol()) {
+            toRenderTableCol(child).layoutIfNeeded();
+            ASSERT(!child.needsLayout());
         }
     }
 
@@ -586,9 +585,8 @@ void RenderTable::recalcCollapsedBorders()
     m_collapsedBordersValid = true;
     m_collapsedBorders.clear();
 
-    auto sections = childrenOfType<RenderTableSection>(*this);
-    for (auto section = sections.begin(), end = sections.end(); section != end; ++section) {
-        for (RenderTableRow* row = section->firstRow(); row; row = row->nextRow()) {
+    for (auto& section : childrenOfType<RenderTableSection>(*this)) {
+        for (RenderTableRow* row = section.firstRow(); row; row = row->nextRow()) {
             for (RenderTableCell* cell = row->firstCell(); cell; cell = cell->nextCell()) {
                 ASSERT(cell->table() == this);
                 cell->collectBorderValues(m_collapsedBorders);
@@ -669,9 +667,7 @@ void RenderTable::paintObject(PaintInfo& paintInfo, const LayoutPoint& paintOffs
     info.phase = paintPhase;
     info.updateSubtreePaintRootForChildren(this);
 
-    auto boxChildren = childrenOfType<RenderBox>(*this);
-    for (auto child = boxChildren.begin(), end = boxChildren.end(); child != end; ++child) {
-        RenderBox& box = *child;
+    for (auto& box : childrenOfType<RenderBox>(*this)) {
         if (!box.hasSelfPaintingLayer() && (box.isTableSection() || box.isTableCaption())) {
             LayoutPoint childPoint = flipForWritingModeForChild(&box, paintOffset);
             box.paint(info, childPoint);
@@ -808,12 +804,11 @@ void RenderTable::splitColumn(unsigned position, unsigned firstSpan)
 
     // Propagate the change in our columns representation to the sections that don't need
     // cell recalc. If they do, they will be synced up directly with m_columns later.
-    auto sections = childrenOfType<RenderTableSection>(*this);
-    for (auto section = sections.begin(), end = sections.end(); section != end; ++section) {
-        if (section->needsCellRecalc())
+    for (auto& section : childrenOfType<RenderTableSection>(*this)) {
+        if (section.needsCellRecalc())
             continue;
 
-        section->splitColumn(position, firstSpan);
+        section.splitColumn(position, firstSpan);
     }
 
     m_columnPos.grow(numEffCols() + 1);
@@ -826,12 +821,11 @@ void RenderTable::appendColumn(unsigned span)
 
     // Propagate the change in our columns representation to the sections that don't need
     // cell recalc. If they do, they will be synced up directly with m_columns later.
-    auto sections = childrenOfType<RenderTableSection>(*this);
-    for (auto section = sections.begin(), end = sections.end(); section != end; ++section) {
-        if (section->needsCellRecalc())
+    for (auto& section : childrenOfType<RenderTableSection>(*this)) {
+        if (section.needsCellRecalc())
             continue;
 
-        section->appendColumn(newColumnIndex);
+        section.appendColumn(newColumnIndex);
     }
 
     m_columnPos.grow(numEffCols() + 1);
@@ -944,9 +938,8 @@ void RenderTable::recalcSections() const
 
     // repair column count (addChild can grow it too much, because it always adds elements to the last row of a section)
     unsigned maxCols = 0;
-    auto sections = childrenOfType<RenderTableSection>(*this);
-    for (auto section = sections.begin(), end = sections.end(); section != end; ++section) {
-        unsigned sectionCols = section->numColumns();
+    for (auto& section : childrenOfType<RenderTableSection>(*this)) {
+        unsigned sectionCols = section.numColumns();
         if (sectionCols > maxCols)
             maxCols = sectionCols;
     }
index 9a8a7b6..1414eaf 100644 (file)
@@ -112,10 +112,9 @@ RenderBlock* RenderTextFragment::blockForAccompanyingFirstLetter()
 {
     if (!m_firstLetter)
         return nullptr;
-    auto ancestorBlocks = ancestorsOfType<RenderBlock>(*m_firstLetter);
-    for (auto block = ancestorBlocks.begin(), end = ancestorBlocks.end(); block != end; ++block) {
-        if (block->style().hasPseudoStyle(FIRST_LETTER) && block->canHaveChildren())
-            return &*block;
+    for (auto& block : ancestorsOfType<RenderBlock>(*m_firstLetter)) {
+        if (block.style().hasPseudoStyle(FIRST_LETTER) && block.canHaveChildren())
+            return &block;
     }
     return nullptr;
 }
index 928a0cb..250c048 100644 (file)
@@ -917,12 +917,11 @@ static void writeCounterValuesFromChildren(TextStream& stream, const RenderEleme
 {
     if (!parent)
         return;
-    auto counters = childrenOfType<RenderCounter>(*parent);
-    for (auto counter = counters.begin(), end = counters.end(); counter != end; ++counter) {
+    for (auto& counter : childrenOfType<RenderCounter>(*parent)) {
         if (!isFirstCounter)
             stream << " ";
         isFirstCounter = false;
-        String str(counter->text());
+        String str(counter.text());
         stream << str;
     }
 }
index fdf7364..9ebca8c 100644 (file)
@@ -310,9 +310,7 @@ void RenderView::layout()
     if (relayoutChildren) {
         setChildNeedsLayout(MarkOnlyThis);
 
-        auto boxChildren = childrenOfType<RenderBox>(*this);
-        for (auto child = boxChildren.begin(), end = boxChildren.end(); child != end; ++child) {
-            RenderBox& box = *child;
+        for (auto& box : childrenOfType<RenderBox>(*this)) {
             if (box.hasRelativeLogicalHeight()
                 || box.hasViewportPercentageLogicalHeight()
                 || box.style().logicalHeight().isPercent()
index f5e7026..ef0f813 100644 (file)
@@ -184,9 +184,8 @@ RenderBox* RenderMathMLRoot::index() const
 
 void RenderMathMLRoot::layout()
 {
-    auto boxChildren = childrenOfType<RenderBox>(*this);
-    for (auto box = boxChildren.begin(), end = boxChildren.end(); box != end; ++box)
-        box->layoutIfNeeded();
+    for (auto& box : childrenOfType<RenderBox>(*this))
+        box.layoutIfNeeded();
 
     int baseHeight = firstChild() && firstChild()->isBox() ? roundToInt(toRenderBox(firstChild())->logicalHeight()) : style().fontSize();
     int frontWidth = lroundf(gFrontWidthEms * style().fontSize());
index 47740fc..5aaff86 100644 (file)
@@ -71,9 +71,8 @@ void RenderMathMLRow::layout()
         stretchLogicalHeight = style().fontSize();
     
     // Set the sizes of (possibly embellished) stretchy operator children.
-    auto children = childrenOfType<RenderMathMLBlock>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (auto renderMo = child->unembellishedOperator()) {
+    for (auto& child : childrenOfType<RenderMathMLBlock>(*this)) {
+        if (auto renderMo = child.unembellishedOperator()) {
             if (renderMo->stretchHeight() != stretchLogicalHeight)
                 renderMo->stretchToHeight(stretchLogicalHeight);
         }
index c40782b..fd43753 100644 (file)
@@ -140,9 +140,8 @@ void RenderSVGContainer::paint(PaintInfo& paintInfo, const LayoutPoint&)
 
         if (continueRendering) {
             childPaintInfo.updateSubtreePaintRootForChildren(this);
-            auto children = childrenOfType<RenderElement>(*this);
-            for (auto child = children.begin(), end = children.end(); child != end; ++child)
-                child->paint(childPaintInfo, IntPoint());
+            for (auto& child : childrenOfType<RenderElement>(*this))
+                child.paint(childPaintInfo, IntPoint());
         }
     }
     
index 3692b2e..53ce239 100644 (file)
@@ -220,9 +220,7 @@ bool RenderSVGResourceClipper::drawContentIntoMaskImage(ClipperData* clipperData
     view().frameView().setPaintBehavior(oldBehavior | PaintBehaviorRenderingSVGMask);
 
     // Draw all clipPath children into a global mask.
-    auto children = childrenOfType<SVGElement>(clipPathElement());
-    for (auto it = children.begin(), end = children.end(); it != end; ++it) {
-        SVGElement& child = *it;
+    for (auto& child : childrenOfType<SVGElement>(clipPathElement())) {
         auto renderer = child.renderer();
         if (!renderer)
             continue;
index 617e20a..0493745 100644 (file)
@@ -93,18 +93,17 @@ std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFi
 
     // Add effects to the builder
     auto builder = std::make_unique<SVGFilterBuilder>(SourceGraphic::create(filter), SourceAlpha::create(filter));
-    auto children = childrenOfType<SVGFilterPrimitiveStandardAttributes>(filterElement());
-    for (auto element = children.begin(), end = children.end(); element != end; ++element) {
-        RefPtr<FilterEffect> effect = element->build(builder.get(), filter);
+    for (auto& element : childrenOfType<SVGFilterPrimitiveStandardAttributes>(filterElement())) {
+        RefPtr<FilterEffect> effect = element.build(builder.get(), filter);
         if (!effect) {
             builder->clearEffects();
             return nullptr;
         }
-        builder->appendEffectToEffectReferences(effect, element->renderer());
-        element->setStandardAttributes(effect.get());
-        effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(&*element, filterElement().primitiveUnits(), targetBoundingBox));
-        effect->setOperatingColorSpace(element->renderer()->style().svgStyle().colorInterpolationFilters() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB);
-        builder->add(element->result(), effect.release());
+        builder->appendEffectToEffectReferences(effect, element.renderer());
+        element.setStandardAttributes(effect.get());
+        effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(&element, filterElement().primitiveUnits(), targetBoundingBox));
+        effect->setOperatingColorSpace(element.renderer()->style().svgStyle().colorInterpolationFilters() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB);
+        builder->add(element.result(), effect.release());
     }
     return builder;
 }
index ed93278..0c5a298 100644 (file)
@@ -116,9 +116,7 @@ bool RenderSVGResourceMasker::drawContentIntoMaskImage(MaskerData* maskerData, C
     }
 
     // Draw the content into the ImageBuffer.
-    auto children = childrenOfType<SVGElement>(maskElement());
-    for (auto it = children.begin(), end = children.end(); it != end; ++it) {
-        SVGElement& child = *it;
+    for (auto& child : childrenOfType<SVGElement>(maskElement())) {
         auto renderer = child.renderer();
         if (!renderer)
             continue;
index f018876..3025a75 100644 (file)
@@ -265,9 +265,7 @@ std::unique_ptr<ImageBuffer> RenderSVGResourcePattern::createTileImage(const Pat
         contentTransformation = tileImageTransform;
 
     // Draw the content into the ImageBuffer.
-    auto children = childrenOfType<SVGElement>(*attributes.patternContentElement());
-    for (auto it = children.begin(), end = children.end(); it != end; ++it) {
-        const SVGElement& child = *it;
+    for (auto& child : childrenOfType<SVGElement>(*attributes.patternContentElement())) {
         if (!child.renderer())
             continue;
         if (child.renderer()->needsLayout())
index 34a35ee..2dfd79d 100644 (file)
@@ -292,9 +292,8 @@ void RenderSVGRoot::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paint
 
         if (continueRendering) {
             childPaintInfo.updateSubtreePaintRootForChildren(this);
-            auto children = childrenOfType<RenderElement>(*this);
-            for (auto child = children.begin(), end = children.end(); child != end; ++child)
-                child->paint(childPaintInfo, location());
+            for (auto& child : childrenOfType<RenderElement>(*this))
+                child.paint(childPaintInfo, location());
         }
     }
 
index 8462e71..3779784 100644 (file)
@@ -67,24 +67,23 @@ bool SVGResourcesCycleSolver::resourceContainsCycles(RenderElement& renderer) co
     // Then operate on the child resources of the given renderer.
     // <marker id="a"> <path marker-start="url(#b)"/> ...
     // <marker id="b"> <path marker-start="url(#a)"/> ...
-    auto children = childrenOfType<RenderElement>(renderer);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        SVGResources* childResources = SVGResourcesCache::cachedResourcesForRenderObject(&*child);
+    for (auto& child : childrenOfType<RenderElement>(renderer)) {
+        SVGResources* childResources = SVGResourcesCache::cachedResourcesForRenderObject(&child);
         if (!childResources)
             continue;
         
         // A child of the given 'resource' contains resources. 
-        HashSet<RenderSVGResourceContainer*> childSet;
-        childResources->buildSetOfResources(childSet);
+        HashSet<RenderSVGResourceContainer*> childResourceSet;
+        childResources->buildSetOfResources(childResourceSet);
 
         // Walk all child resources and check wheter they reference any resource contained in the resources set.
-        for (auto it = childSet.begin(), end = childSet.end(); it != end; ++it) {
-            if (m_allResources.contains(*it))
+        for (auto& resource : childResourceSet) {
+            if (m_allResources.contains(resource))
                 return true;
         }
 
         // Walk children recursively, stop immediately if we found a cycle
-        if (resourceContainsCycles(*child))
+        if (resourceContainsCycles(child))
             return true;
     }
 
index 6312cc6..099c40f 100644 (file)
@@ -89,9 +89,7 @@ bool SVGAltGlyphDefElement::hasValidGlyphElements(Vector<String>& glyphNames) co
     bool fountFirstGlyphRef = false;
     bool foundFirstAltGlyphItem = false;
 
-    auto svgChildren = childrenOfType<SVGElement>(*this);
-    for (auto it = svgChildren.begin(), end = svgChildren.end(); it != end; ++it) {
-        const SVGElement& child = *it;
+    for (auto& child : childrenOfType<SVGElement>(*this)) {
         if (!foundFirstAltGlyphItem && isSVGGlyphRefElement(child)) {
             fountFirstGlyphRef = true;
             String referredGlyphName;
index a770d46..42c8ddb 100644 (file)
@@ -50,10 +50,9 @@ bool SVGAltGlyphItemElement::hasValidGlyphElements(Vector<String>& glyphNames) c
     // Here we fill glyphNames and return true only if all referenced glyphs are valid and
     // there is at least one glyph.
 
-    auto glyphChildren = childrenOfType<SVGGlyphRefElement>(*this);
-    for (auto glyphRef = glyphChildren.begin(), end = glyphChildren.end(); glyphRef != end; ++glyphRef) {
+    for (auto& glyphRef : childrenOfType<SVGGlyphRefElement>(*this)) {
         String referredGlyphName;
-        if (glyphRef->hasValidGlyphElement(referredGlyphName))
+        if (glyphRef.hasValidGlyphElement(referredGlyphName))
             glyphNames.append(referredGlyphName);
         else {
             glyphNames.clear();
index 56598a7..474faa9 100644 (file)
@@ -139,9 +139,8 @@ void SVGAnimateMotionElement::updateAnimationPath()
     m_animationPath = Path();
     bool foundMPath = false;
 
-    auto mPathChildren = childrenOfType<SVGMPathElement>(*this);
-    for (auto mPath = mPathChildren.begin(), end = mPathChildren.end(); mPath != end; ++mPath) {
-        SVGPathElement* pathElement = mPath->pathElement();
+    for (auto& mPath : childrenOfType<SVGMPathElement>(*this)) {
+        SVGPathElement* pathElement = mPath.pathElement();
         if (pathElement) {
             updatePathFromGraphicsElement(pathElement, m_animationPath);
             foundMPath = true;
index 242d7cb..8095b1a 100644 (file)
@@ -510,9 +510,8 @@ void SVGElement::animatedPropertyTypeForAttribute(const QualifiedName& attribute
 
 bool SVGElement::haveLoadedRequiredResources()
 {
-    auto svgChildren = childrenOfType<SVGElement>(*this);
-    for (auto child = svgChildren.begin(), end = svgChildren.end(); child != end; ++child) {
-        if (!child->haveLoadedRequiredResources())
+    for (auto& child : childrenOfType<SVGElement>(*this)) {
+        if (!child.haveLoadedRequiredResources())
             return false;
     }
     return true;
index 23cf42c..3e493fe 100644 (file)
@@ -83,24 +83,22 @@ PassRefPtr<FilterEffect> SVGFEComponentTransferElement::build(SVGFilterBuilder*
     FilterEffect* input1 = filterBuilder->getEffectById(in1());
     
     if (!input1)
-        return 0;
+        return nullptr;
 
     ComponentTransferFunction red;
     ComponentTransferFunction green;
     ComponentTransferFunction blue;
     ComponentTransferFunction alpha;
 
-    auto children = childrenOfType<SVGElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        SVGElement* element = &*child;
-        if (isSVGFEFuncRElement(element))
-            red = toSVGFEFuncRElement(element)->transferFunction();
-        else if (isSVGFEFuncGElement(element))
-            green = toSVGFEFuncGElement(element)->transferFunction();
-        else if (isSVGFEFuncBElement(element))
-            blue = toSVGFEFuncBElement(element)->transferFunction();
-        else if (isSVGFEFuncAElement(element))
-            alpha = toSVGFEFuncAElement(element)->transferFunction();
+    for (auto& child : childrenOfType<SVGElement>(*this)) {
+        if (isSVGFEFuncRElement(child))
+            red = toSVGFEFuncRElement(child).transferFunction();
+        else if (isSVGFEFuncGElement(child))
+            green = toSVGFEFuncGElement(child).transferFunction();
+        else if (isSVGFEFuncBElement(child))
+            blue = toSVGFEFuncBElement(child).transferFunction();
+        else if (isSVGFEFuncAElement(child))
+            alpha = toSVGFEFuncAElement(child).transferFunction();
     }
     
     RefPtr<FilterEffect> effect = FEComponentTransfer::create(filter, red, green, blue, alpha);
index 1bd725c..31b2989 100644 (file)
@@ -71,12 +71,11 @@ SVGFELightElement::SVGFELightElement(const QualifiedName& tagName, Document& doc
 
 SVGFELightElement* SVGFELightElement::findLightElement(const SVGElement* svgElement)
 {
-    auto children = childrenOfType<SVGElement>(*svgElement);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        if (isSVGFEDistantLightElement(*child) || isSVGFEPointLightElement(*child) || isSVGFESpotLightElement(*child))
-            return static_cast<SVGFELightElement*>(const_cast<SVGElement*>(&*child));
+    for (auto& child : childrenOfType<SVGElement>(*svgElement)) {
+        if (isSVGFEDistantLightElement(child) || isSVGFEPointLightElement(child) || isSVGFESpotLightElement(child))
+            return static_cast<SVGFELightElement*>(const_cast<SVGElement*>(&child));
     }
-    return 0;
+    return nullptr;
 }
 
 PassRefPtr<LightSource> SVGFELightElement::findLightSource(const SVGElement* svgElement)
index bfebaf6..cdf9c25 100644 (file)
@@ -47,16 +47,15 @@ PassRefPtr<FilterEffect> SVGFEMergeElement::build(SVGFilterBuilder* filterBuilde
     RefPtr<FilterEffect> effect = FEMerge::create(filter);
     FilterEffectVector& mergeInputs = effect->inputEffects();
 
-    auto children = childrenOfType<SVGFEMergeNodeElement>(*this);
-    for (auto mergeNode = children.begin(), end = children.end(); mergeNode != end; ++mergeNode) {
-        FilterEffect* mergeEffect = filterBuilder->getEffectById(mergeNode->in1());
+    for (auto& mergeNode : childrenOfType<SVGFEMergeNodeElement>(*this)) {
+        FilterEffect* mergeEffect = filterBuilder->getEffectById(mergeNode.in1());
         if (!mergeEffect)
-            return 0;
+            return nullptr;
         mergeInputs.append(mergeEffect);
     }
 
     if (mergeInputs.isEmpty())
-        return 0;
+        return nullptr;
 
     return effect.release();
 }
index c03698d..8b96e49 100644 (file)
@@ -118,29 +118,27 @@ void SVGFontElement::ensureGlyphCache()
 
     const SVGMissingGlyphElement* firstMissingGlyphElement = nullptr;
     Vector<String> ligatures;
-    auto children = childrenOfType<SVGElement>(*this);
-    for (auto child = children.begin(), end = children.end(); child != end; ++child) {
-        SVGElement* element = &*child;
-        if (isSVGGlyphElement(element)) {
-            SVGGlyphElement* glyph = toSVGGlyphElement(element);
-            AtomicString unicode = glyph->fastGetAttribute(SVGNames::unicodeAttr);
-            AtomicString glyphId = glyph->getIdAttribute();
+    for (auto& child : childrenOfType<SVGElement>(*this)) {
+        if (isSVGGlyphElement(child)) {
+            SVGGlyphElement& glyph = toSVGGlyphElement(child);
+            AtomicString unicode = glyph.fastGetAttribute(SVGNames::unicodeAttr);
+            AtomicString glyphId = glyph.getIdAttribute();
             if (glyphId.isEmpty() && unicode.isEmpty())
                 continue;
 
-            m_glyphMap.addGlyph(glyphId, unicode, glyph->buildGlyphIdentifier());
+            m_glyphMap.addGlyph(glyphId, unicode, glyph.buildGlyphIdentifier());
 
             // Register ligatures, if needed, don't mix up with surrogate pairs though!
             if (unicode.length() > 1 && !U16_IS_SURROGATE(unicode[0]))
                 ligatures.append(unicode.string());
-        } else if (isSVGHKernElement(element)) {
-            SVGHKernElement* hkern = toSVGHKernElement(element);
-            hkern->buildHorizontalKerningPair(m_horizontalKerningMap);
-        } else if (isSVGVKernElement(element)) {
-            SVGVKernElement* vkern = toSVGVKernElement(element);
-            vkern->buildVerticalKerningPair(m_verticalKerningMap);
-        } else if (isSVGMissingGlyphElement(element) && !firstMissingGlyphElement)
-            firstMissingGlyphElement = toSVGMissingGlyphElement(element);
+        } else if (isSVGHKernElement(child)) {
+            SVGHKernElement& hkern = toSVGHKernElement(child);
+            hkern.buildHorizontalKerningPair(m_horizontalKerningMap);
+        } else if (isSVGVKernElement(child)) {
+            SVGVKernElement& vkern = toSVGVKernElement(child);
+            vkern.buildVerticalKerningPair(m_verticalKerningMap);
+        } else if (isSVGMissingGlyphElement(child) && !firstMissingGlyphElement)
+            firstMissingGlyphElement = &toSVGMissingGlyphElement(child);
     }
 
     // Register each character of each ligature, if needed.
index 9f67107..4848bc2 100644 (file)
@@ -48,13 +48,12 @@ PassRefPtr<SVGFontFaceSrcElement> SVGFontFaceSrcElement::create(const QualifiedN
 PassRefPtr<CSSValueList> SVGFontFaceSrcElement::srcValue() const
 {
     RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
-    auto svgChildren = childrenOfType<SVGElement>(*this);
-    for (auto child = svgChildren.begin(), end = svgChildren.end(); child != end; ++child) {
+    for (auto& child : childrenOfType<SVGElement>(*this)) {
         RefPtr<CSSFontFaceSrcValue> srcValue;
-        if (isSVGFontFaceUriElement(*child))
-            srcValue = toSVGFontFaceUriElement(*child).srcValue();
-        else if (isSVGFontFaceNameElement(*child))
-            srcValue = toSVGFontFaceNameElement(*child).srcValue();
+        if (isSVGFontFaceUriElement(child))
+            srcValue = toSVGFontFaceUriElement(child).srcValue();
+        else if (isSVGFontFaceNameElement(child))
+            srcValue = toSVGFontFaceNameElement(child).srcValue();
         if (srcValue && srcValue->resource().length())
             list->append(srcValue.release());
     }
index c5b014b..d5d71ef 100644 (file)
@@ -140,15 +140,13 @@ void SVGGradientElement::childrenChanged(const ChildChange& change)
 Vector<Gradient::ColorStop> SVGGradientElement::buildStops()
 {
     Vector<Gradient::ColorStop> stops;
-
-    auto stopChildren = childrenOfType<SVGStopElement>(*this);
     float previousOffset = 0.0f;
 
-    for (auto stop = stopChildren.begin(), end = stopChildren.end(); stop != end; ++stop) {
-        Color color = stop->stopColorIncludingOpacity();
+    for (auto& stop : childrenOfType<SVGStopElement>(*this)) {
+        Color color = stop.stopColorIncludingOpacity();
 
         // Figure out right monotonic offset
-        float offset = stop->offset();
+        float offset = stop.offset();
         offset = std::min(std::max(previousOffset, offset), 1.0f);
         previousOffset = offset;
 
index 64810af..b3424d5 100644 (file)
@@ -337,15 +337,13 @@ PassRefPtr<NodeList> SVGSVGElement::collectIntersectionOrEnclosureList(const Flo
 {
     Vector<Ref<Element>> elements;
 
-    auto svgDescendants = descendantsOfType<SVGElement>(*(referenceElement ? referenceElement : this));
-    for (auto it = svgDescendants.begin(), end = svgDescendants.end(); it != end; ++it) {
-        const SVGElement* svgElement = &*it;
+    for (auto& svgElement : descendantsOfType<SVGElement>(*(referenceElement ? referenceElement : this))) {
         if (collect == CollectIntersectionList) {
-            if (RenderSVGModelObject::checkIntersection(svgElement->renderer(), rect))
-                elements.append(*const_cast<SVGElement*>(svgElement));
+            if (RenderSVGModelObject::checkIntersection(svgElement.renderer(), rect))
+                elements.append(const_cast<SVGElement&>(svgElement));
         } else {
-            if (RenderSVGModelObject::checkEnclosure(svgElement->renderer(), rect))
-                elements.append(*const_cast<SVGElement*>(svgElement));
+            if (RenderSVGModelObject::checkEnclosure(svgElement.renderer(), rect))
+                elements.append(const_cast<SVGElement&>(svgElement));
         }
     }
 
@@ -777,10 +775,9 @@ Element* SVGSVGElement::getElementById(const AtomicString& id)
 
     // Fall back to traversing our subtree. Duplicate ids are allowed, the first found will
     // be returned.
-    auto descendants = elementDescendants(*this);
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (element->getIdAttribute() == id)
-            return &*element;
+    for (auto& element : elementDescendants(*this)) {
+        if (element.getIdAttribute() == id)
+            return &element;
     }
     return 0;
 }
index 4f473ab..1127e4c 100644 (file)
@@ -53,11 +53,10 @@ bool SVGSwitchElement::childShouldCreateRenderer(const Node& child) const
 {
     // FIXME: This function does not do what the comment below implies it does.
     // It will create a renderer for any valid SVG element children, not just the first one.
-    auto svgChildren = childrenOfType<SVGElement>(*this);
-    for (auto element = svgChildren.begin(), end = svgChildren.end(); element != end; ++element) {
-        if (!element->isValid())
+    for (auto& element : childrenOfType<SVGElement>(*this)) {
+        if (!element.isValid())
             continue;
-        return &*element == &child; // Only allow this child if it's the first valid child
+        return &element == &child; // Only allow this child if it's the first valid child
     }
 
     return false;
index 1991a04..a823998 100644 (file)
@@ -369,9 +369,8 @@ static bool isDisallowedElement(const Element& element)
 
 static bool subtreeContainsDisallowedElement(SVGElement& start)
 {
-    auto descendants = elementDescendants(start);
-    for (auto element = descendants.begin(), end = descendants.end(); element != end; ++element) {
-        if (isDisallowedElement(*element))
+    for (auto& element : elementDescendants(start)) {
+        if (isDisallowedElement(element))
             return true;
     }
 
@@ -606,19 +605,18 @@ void SVGUseElement::buildInstanceTree(SVGElement* target, SVGElementInstance* ta
     // is the SVGGElement object for the 'g', and then two child SVGElementInstance objects, each of which has
     // its correspondingElement that is an SVGRectElement object.
 
-    auto svgChildren = childrenOfType<SVGElement>(*target);
-    for (auto element = svgChildren.begin(), end = svgChildren.end(); element != end; ++element) {
+    for (auto& element : childrenOfType<SVGElement>(*target)) {
         // Skip any non-svg nodes or any disallowed element.
-        if (isDisallowedElement(*element))
+        if (isDisallowedElement(element))
             continue;
 
         // Create SVGElementInstance object, for both container/non-container nodes.
-        RefPtr<SVGElementInstance> instance = SVGElementInstance::create(this, 0, &*element);
+        RefPtr<SVGElementInstance> instance = SVGElementInstance::create(this, 0, &element);
         SVGElementInstance* instancePtr = instance.get();
         targetInstance->appendChild(instance.release());
 
         // Enter recursion, appending new instance tree nodes to the "instance" object.
-        buildInstanceTree(&*element, instancePtr, foundProblem, foundUse);
+        buildInstanceTree(&element, instancePtr, foundProblem, foundUse);
         if (foundProblem)
             return;
     }
index 9f3995f..25529d6 100644 (file)
@@ -226,9 +226,8 @@ void SMILTimeContainer::updateDocumentOrderIndexes()
 {
     unsigned timingElementCount = 0;
 
-    auto smilDescendants = descendantsOfType<SVGSMILElement>(*m_ownerSVGElement);
-    for (auto smilElement = smilDescendants.begin(), end = smilDescendants.end(); smilElement != end; ++smilElement)
-        smilElement->setDocumentOrderIndex(timingElementCount++);
+    for (auto& smilElement : descendantsOfType<SVGSMILElement>(*m_ownerSVGElement))
+        smilElement.setDocumentOrderIndex(timingElementCount++);
 
     m_documentOrderIndexesDirty = false;
 }