| Index: Source/core/css/RuleFeature.cpp
|
| diff --git a/Source/core/css/RuleFeature.cpp b/Source/core/css/RuleFeature.cpp
|
| index 8dfb8cdac6adf67b7ea6c45c4c51d41b4e9311b2..7f5b00f4ebd27501aa680a6abcc38f5ab3c19bf2 100644
|
| --- a/Source/core/css/RuleFeature.cpp
|
| +++ b/Source/core/css/RuleFeature.cpp
|
| @@ -37,20 +37,20 @@
|
|
|
| namespace WebCore {
|
|
|
| -static bool isSkippableComponentForInvalidation(const CSSSelector* selector)
|
| +static bool isSkippableComponentForInvalidation(const CSSSelector& selector)
|
| {
|
| - if (selector->matchesPseudoElement() || selector->pseudoType() == CSSSelector::PseudoHost)
|
| + if (selector.matchesPseudoElement() || selector.pseudoType() == CSSSelector::PseudoHost)
|
| return false;
|
| return true;
|
| }
|
|
|
| // This method is somewhat conservative in what it acceptss.
|
| -static bool supportsClassDescendantInvalidation(const CSSSelector* selector)
|
| +static bool supportsClassDescendantInvalidation(const CSSSelector& selector)
|
| {
|
| bool foundDescendantRelation = false;
|
| bool foundAncestorIdent = false;
|
| bool foundIdent = false;
|
| - for (const CSSSelector* component = selector; component; component = component->tagHistory()) {
|
| + for (const CSSSelector* component = &selector; component; component = component->tagHistory()) {
|
|
|
| // FIXME: We should allow pseudo elements, but we need to change how they hook
|
| // into recalcStyle by moving them to recalcOwnStyle instead of recalcChildStyle.
|
| @@ -62,7 +62,7 @@ static bool supportsClassDescendantInvalidation(const CSSSelector* selector)
|
| foundIdent = true;
|
| else
|
| foundAncestorIdent = true;
|
| - } else if (!isSkippableComponentForInvalidation(component)) {
|
| + } else if (!isSkippableComponentForInvalidation(*component)) {
|
| return false;
|
| }
|
| // FIXME: We can probably support ChildTree and DescendantTree.
|
| @@ -90,10 +90,8 @@ void extractClassIdOrTag(const CSSSelector& selector, HashSet<AtomicString>& cla
|
| classes.add(selector.value());
|
| }
|
|
|
| -bool RuleFeatureSet::updateClassInvalidationSets(const CSSSelector* selector)
|
| +bool RuleFeatureSet::updateClassInvalidationSets(const CSSSelector& selector)
|
| {
|
| - if (!selector)
|
| - return false;
|
| if (!supportsClassDescendantInvalidation(selector))
|
| return false;
|
|
|
| @@ -101,15 +99,15 @@ bool RuleFeatureSet::updateClassInvalidationSets(const CSSSelector* selector)
|
| AtomicString id;
|
| AtomicString tagName;
|
|
|
| - const CSSSelector* lastSelector = selector;
|
| + const CSSSelector* lastSelector = &selector;
|
| for (; lastSelector->relation() == CSSSelector::SubSelector; lastSelector = lastSelector->tagHistory()) {
|
| - extractClassIdOrTag(*selector, classes, id, tagName);
|
| + extractClassIdOrTag(selector, classes, id, tagName);
|
| }
|
| - extractClassIdOrTag(*selector, classes, id, tagName);
|
| + extractClassIdOrTag(selector, classes, id, tagName);
|
|
|
| - for ( ; selector; selector = selector->tagHistory()) {
|
| - if (selector->m_match == CSSSelector::Class) {
|
| - DescendantInvalidationSet& invalidationSet = ensureClassInvalidationSet(selector->value());
|
| + for (const CSSSelector* current = &selector ; current; current = current->tagHistory()) {
|
| + if (current->m_match == CSSSelector::Class) {
|
| + DescendantInvalidationSet& invalidationSet = ensureClassInvalidationSet(current->value());
|
| if (!id.isEmpty())
|
| invalidationSet.addId(id);
|
| if (!tagName.isEmpty())
|
| @@ -157,29 +155,29 @@ DescendantInvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const Atom
|
| return *addResult.iterator->value;
|
| }
|
|
|
| -void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector)
|
| +void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector)
|
| {
|
| collectFeaturesFromSelector(selector, m_metadata);
|
| }
|
|
|
| -void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector, RuleFeatureSet::FeatureMetadata& metadata)
|
| +void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, RuleFeatureSet::FeatureMetadata& metadata)
|
| {
|
| - for (; selector; selector = selector->tagHistory()) {
|
| - if (selector->m_match == CSSSelector::Id)
|
| - metadata.idsInRules.add(selector->value());
|
| - else if (selector->m_match == CSSSelector::Class)
|
| - metadata.classesInRules.add(selector->value());
|
| - else if (selector->isAttributeSelector())
|
| - metadata.attrsInRules.add(selector->attribute().localName());
|
| -
|
| - if (selector->pseudoType() == CSSSelector::PseudoFirstLine)
|
| + for (const CSSSelector* current = &selector; current; current = current->tagHistory()) {
|
| + if (current->m_match == CSSSelector::Id)
|
| + metadata.idsInRules.add(current->value());
|
| + else if (current->m_match == CSSSelector::Class)
|
| + metadata.classesInRules.add(current->value());
|
| + else if (current->isAttributeSelector())
|
| + metadata.attrsInRules.add(current->attribute().localName());
|
| +
|
| + if (current->pseudoType() == CSSSelector::PseudoFirstLine)
|
| metadata.usesFirstLineRules = true;
|
| - if (selector->isDirectAdjacentSelector())
|
| + if (current->isDirectAdjacentSelector())
|
| metadata.maxDirectAdjacentSelectors++;
|
| - if (selector->isSiblingSelector())
|
| + if (current->isSiblingSelector())
|
| metadata.foundSiblingSelector = true;
|
|
|
| - collectFeaturesFromSelectorList(selector->selectorList(), metadata);
|
| + collectFeaturesFromSelectorList(current->selectorList(), metadata);
|
| }
|
| }
|
|
|
| @@ -188,9 +186,9 @@ void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele
|
| if (!selectorList)
|
| return;
|
|
|
| - for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(selector)) {
|
| + for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) {
|
| for (const CSSSelector* subSelector = selector; subSelector; subSelector = subSelector->tagHistory())
|
| - collectFeaturesFromSelector(subSelector, metadata);
|
| + collectFeaturesFromSelector(*subSelector, metadata);
|
| }
|
| }
|
|
|
|
|