void SelectorDataList::initialize(const CSSSelectorList& selectorList) { ASSERT(m_selectors.isEmpty()); for (CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(selector)) m_selectors.append(SelectorData(selector, SelectorChecker::isFastCheckableSelector(selector))); }
void SelectorDataList::initialize(const CSSSelectorList& selectorList) { ASSERT(m_selectors.isEmpty()); unsigned selectorCount = 0; 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))); }
SelectorDataList::SelectorDataList(const CSSSelectorList& selectorList) { unsigned selectorCount = 0; 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))); if (selectorCount == 1) { const CSSSelector& selector = *m_selectors.first().selector; if (selector.isLastInTagHistory()) { switch (selector.m_match) { case CSSSelector::Tag: m_matchType = TagNameMatch; break; case CSSSelector::Class: m_matchType = ClassNameMatch; break; case CSSSelector::Id: m_matchType = RightMostWithIdMatch; break; default: m_matchType = CompilableSingle; break; } } else { switch (findIdMatchingType(selector)) { case IdMatchingType::None: m_matchType = CompilableSingle; break; case IdMatchingType::Rightmost: m_matchType = RightMostWithIdMatch; break; case IdMatchingType::Filter: m_matchType = CompilableSingleWithRootFilter; break; } } } else m_matchType = MultipleSelectorMatch; }