| Index: Source/core/dom/SelectorQuery.cpp
|
| diff --git a/Source/core/dom/SelectorQuery.cpp b/Source/core/dom/SelectorQuery.cpp
|
| index 69d7dfa6de44c6ed1d45912b72a344d2b7ee634a..460efd20200721da4d96a0dbe947fd5fcc7dabfd 100644
|
| --- a/Source/core/dom/SelectorQuery.cpp
|
| +++ b/Source/core/dom/SelectorQuery.cpp
|
| @@ -101,12 +101,12 @@ void SelectorDataList::initialize(const CSSSelectorList& selectorList)
|
| ASSERT(m_selectors.isEmpty());
|
|
|
| unsigned selectorCount = 0;
|
| - for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(selector))
|
| + for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(*selector))
|
| selectorCount++;
|
|
|
| m_selectors.reserveInitialCapacity(selectorCount);
|
| - for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(selector))
|
| - m_selectors.uncheckedAppend(SelectorData(selector, SelectorCheckerFastPath::canUse(selector)));
|
| + for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(*selector))
|
| + m_selectors.uncheckedAppend(SelectorData(*selector, SelectorCheckerFastPath::canUse(*selector)));
|
| }
|
|
|
| inline bool SelectorDataList::selectorMatches(const SelectorData& selectorData, Element& element, const ContainerNode& rootNode) const
|
| @@ -205,12 +205,11 @@ void SelectorDataList::findTraverseRootsAndExecute(ContainerNode& rootNode, type
|
| // We need to return the matches in document order. To use id lookup while there is possiblity of multiple matches
|
| // we would need to sort the results. For now, just traverse the document in that case.
|
| ASSERT(m_selectors.size() == 1);
|
| - ASSERT(m_selectors[0].selector);
|
|
|
| bool isRightmostSelector = true;
|
| bool startFromParent = false;
|
|
|
| - for (const CSSSelector* selector = m_selectors[0].selector; selector; selector = selector->tagHistory()) {
|
| + for (const CSSSelector* selector = &m_selectors[0].selector; selector; selector = selector->tagHistory()) {
|
| if (selector->m_match == CSSSelector::Id && !rootNode.document().containsMultipleElementsWithId(selector->value())) {
|
| Element* element = rootNode.treeScope().getElementById(selector->value());
|
| ContainerNode* adjustedNode = &rootNode;
|
| @@ -329,9 +328,9 @@ void SelectorDataList::executeSlow(ContainerNode& rootNode, typename SelectorQue
|
| }
|
| }
|
|
|
| -const CSSSelector* SelectorDataList::selectorForIdLookup(const CSSSelector* firstSelector) const
|
| +const CSSSelector* SelectorDataList::selectorForIdLookup(const CSSSelector& firstSelector) const
|
| {
|
| - for (const CSSSelector* selector = firstSelector; selector; selector = selector->tagHistory()) {
|
| + for (const CSSSelector* selector = &firstSelector; selector; selector = selector->tagHistory()) {
|
| if (selector->m_match == CSSSelector::Id)
|
| return selector;
|
| if (selector->relation() != CSSSelector::SubSelector)
|
| @@ -349,10 +348,9 @@ void SelectorDataList::execute(ContainerNode& rootNode, typename SelectorQueryTr
|
| }
|
|
|
| ASSERT(m_selectors.size() == 1);
|
| - ASSERT(m_selectors[0].selector);
|
|
|
| const SelectorData& selector = m_selectors[0];
|
| - const CSSSelector* firstSelector = selector.selector;
|
| + const CSSSelector& firstSelector = selector.selector;
|
|
|
| // Fast path for querySelector*('#id'), querySelector*('tag#id').
|
| if (const CSSSelector* idSelector = selectorForIdLookup(firstSelector)) {
|
| @@ -380,14 +378,14 @@ void SelectorDataList::execute(ContainerNode& rootNode, typename SelectorQueryTr
|
| return;
|
| }
|
|
|
| - if (!firstSelector->tagHistory()) {
|
| + if (!firstSelector.tagHistory()) {
|
| // Fast path for querySelector*('.foo'), and querySelector*('div').
|
| - switch (firstSelector->m_match) {
|
| + switch (firstSelector.m_match) {
|
| case CSSSelector::Class:
|
| - collectElementsByClassName<SelectorQueryTrait>(rootNode, firstSelector->value(), output);
|
| + collectElementsByClassName<SelectorQueryTrait>(rootNode, firstSelector.value(), output);
|
| return;
|
| case CSSSelector::Tag:
|
| - collectElementsByTagName<SelectorQueryTrait>(rootNode, firstSelector->tagQName(), output);
|
| + collectElementsByTagName<SelectorQueryTrait>(rootNode, firstSelector.tagQName(), output);
|
| return;
|
| default:
|
| break; // If we need another fast path, add here.
|
|
|