Index: Source/core/dom/SelectorQuery.cpp |
diff --git a/Source/core/dom/SelectorQuery.cpp b/Source/core/dom/SelectorQuery.cpp |
index e8d6bd9d915ff8cef1817039787be35a6cf32032..b11faebe862f46386a97da698aabbfddc162b0a9 100644 |
--- a/Source/core/dom/SelectorQuery.cpp |
+++ b/Source/core/dom/SelectorQuery.cpp |
@@ -63,10 +63,11 @@ enum ClassElementListBehavior { AllElements, OnlyRoots }; |
template <ClassElementListBehavior onlyRoots> |
class ClassElementList { |
+ STACK_ALLOCATED(); |
public: |
ClassElementList(ContainerNode& rootNode, const AtomicString& className) |
: m_className(className) |
- , m_rootNode(rootNode) |
+ , m_rootNode(&rootNode) |
, m_currentElement(nextInternal(ElementTraversal::firstWithin(rootNode))) { } |
bool isEmpty() const { return !m_currentElement; } |
@@ -76,16 +77,16 @@ public: |
Element* current = m_currentElement; |
ASSERT(current); |
if (onlyRoots) |
- m_currentElement = nextInternal(ElementTraversal::nextSkippingChildren(*m_currentElement, &m_rootNode)); |
+ m_currentElement = nextInternal(ElementTraversal::nextSkippingChildren(*m_currentElement, m_rootNode)); |
else |
- m_currentElement = nextInternal(ElementTraversal::next(*m_currentElement, &m_rootNode)); |
+ m_currentElement = nextInternal(ElementTraversal::next(*m_currentElement, m_rootNode)); |
return current; |
} |
private: |
Element* nextInternal(Element* element) |
{ |
- for (; element; element = ElementTraversal::next(*element, &m_rootNode)) { |
+ for (; element; element = ElementTraversal::next(*element, m_rootNode)) { |
if (element->hasClass() && element->classNames().contains(m_className)) |
return element; |
} |
@@ -93,8 +94,8 @@ private: |
} |
const AtomicString& m_className; |
- ContainerNode& m_rootNode; |
- Element* m_currentElement; |
+ RawPtrWillBeMember<ContainerNode> m_rootNode; |
+ RawPtrWillBeMember<Element> m_currentElement; |
}; |
void SelectorDataList::initialize(const CSSSelectorList& selectorList) |