Title: [128475] trunk/Source/WebCore
Revision
128475
Author
[email protected]
Date
2012-09-13 09:33:04 -0700 (Thu, 13 Sep 2012)

Log Message

Stop shuttling PseudoId from StyleResolver to SelectorChecker.
https://bugs.webkit.org/show_bug.cgi?id=96431

Reviewed by Eric Seidel.

SelectorChecker retained extra state to store the PseudoId value of the element. It was sad, because we needed to explicitly maintain its integrity. Instead, we now just make it part of StyleResolver and feed to SelectorChecker as part of SelectorCheckingContext.

No new tests, refactoring only. Covered by existing tests.

* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::SelectorChecker): Removed state initializer.
(WebCore::SelectorChecker::checkSelector): Changed to look into context, rather than own member.
* css/SelectorChecker.h:
(WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext): Added pseudoStyle as parameter.
(SelectorCheckingContext): Added pseudoStyle as member.
* css/StyleResolver.cpp:
(WebCore::StyleResolver::collectMatchingRulesForList): Changed to look at own member, rather than m_checker.
* css/StyleResolver.h:
(StyleResolver): Added new member.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (128474 => 128475)


--- trunk/Source/WebCore/ChangeLog	2012-09-13 16:24:37 UTC (rev 128474)
+++ trunk/Source/WebCore/ChangeLog	2012-09-13 16:33:04 UTC (rev 128475)
@@ -1,3 +1,25 @@
+2012-09-13  Dimitri Glazkov  <[email protected]>
+
+        Stop shuttling PseudoId from StyleResolver to SelectorChecker.
+        https://bugs.webkit.org/show_bug.cgi?id=96431
+
+        Reviewed by Eric Seidel.
+
+        SelectorChecker retained extra state to store the PseudoId value of the element. It was sad, because we needed to explicitly maintain its integrity. Instead, we now just make it part of StyleResolver and feed to SelectorChecker as part of SelectorCheckingContext.
+
+        No new tests, refactoring only. Covered by existing tests.
+
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::SelectorChecker): Removed state initializer.
+        (WebCore::SelectorChecker::checkSelector): Changed to look into context, rather than own member.
+        * css/SelectorChecker.h:
+        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext): Added pseudoStyle as parameter.
+        (SelectorCheckingContext): Added pseudoStyle as member.
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::collectMatchingRulesForList): Changed to look at own member, rather than m_checker.
+        * css/StyleResolver.h:
+        (StyleResolver): Added new member.
+
 2012-09-13  Simon Hausmann  <[email protected]>
 
         Unreviewed prospective Qt/MSVC build fix.

Modified: trunk/Source/WebCore/css/SelectorChecker.cpp (128474 => 128475)


--- trunk/Source/WebCore/css/SelectorChecker.cpp	2012-09-13 16:24:37 UTC (rev 128474)
+++ trunk/Source/WebCore/css/SelectorChecker.cpp	2012-09-13 16:33:04 UTC (rev 128475)
@@ -70,7 +70,6 @@
     , m_strictParsing(strictParsing)
     , m_documentIsHTML(document->isHTMLDocument())
     , m_mode(ResolvingStyle)
-    , m_pseudoStyle(NOPSEUDO)
 {
 }
 
@@ -462,7 +461,7 @@
             return SelectorFailsCompletely;
 
         // Bail-out if this selector is irrelevant for the pseudoStyle
-        if (m_pseudoStyle != NOPSEUDO && m_pseudoStyle != dynamicPseudo)
+        if (context.pseudoStyle != NOPSEUDO && context.pseudoStyle != dynamicPseudo)
             return SelectorFailsCompletely;
 
         // Disable :visited matching when we see the first link or try to match anything else than an ancestors.

Modified: trunk/Source/WebCore/css/SelectorChecker.h (128474 => 128475)


--- trunk/Source/WebCore/css/SelectorChecker.h	2012-09-13 16:24:37 UTC (rev 128474)
+++ trunk/Source/WebCore/css/SelectorChecker.h	2012-09-13 16:33:04 UTC (rev 128475)
@@ -64,6 +64,7 @@
             , elementStyle(0)
             , elementParentStyle(0)
             , isSubSelector(false)
+            , pseudoStyle(NOPSEUDO)
         { }
 
         CSSSelector* selector;
@@ -73,6 +74,7 @@
         RenderStyle* elementStyle;
         RenderStyle* elementParentStyle;
         bool isSubSelector;
+        PseudoId pseudoStyle;
     };
 
     bool checkSelector(CSSSelector*, Element*, bool isFastCheckableSelector = false) const;
@@ -100,9 +102,6 @@
     Mode mode() const { return m_mode; }
     void setMode(Mode mode) { m_mode = mode; }
 
-    PseudoId pseudoStyle() const { return m_pseudoStyle; }
-    void setPseudoStyle(PseudoId pseudoId) { m_pseudoStyle = pseudoId; }
-
     static bool tagMatches(const Element*, const CSSSelector*);
     static bool attributeNameMatches(const Attribute*, const QualifiedName&);
     static bool isCommonPseudoClassSelector(const CSSSelector*);
@@ -134,7 +133,6 @@
     bool m_strictParsing;
     bool m_documentIsHTML;
     Mode m_mode;
-    PseudoId m_pseudoStyle;
     mutable HashSet<LinkHash, LinkHashHash> m_linksCheckedForVisitedState;
 
     struct ParentStackFrame {

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (128474 => 128475)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2012-09-13 16:24:37 UTC (rev 128474)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2012-09-13 16:33:04 UTC (rev 128475)
@@ -1121,7 +1121,7 @@
             }
             // If we're matching normal rules, set a pseudo bit if
             // we really just matched a pseudo-element.
-            if (m_dynamicPseudo != NOPSEUDO && m_checker.pseudoStyle() == NOPSEUDO) {
+            if (m_dynamicPseudo != NOPSEUDO && m_pseudoStyle == NOPSEUDO) {
                 if (m_checker.mode() == SelectorChecker::CollectingRules) {
                     InspectorInstrumentation::didMatchRule(cookie, false);
                     continue;
@@ -1218,7 +1218,7 @@
 
 inline void StyleResolver::initForStyleResolve(Element* e, RenderStyle* parentStyle, PseudoId pseudoID)
 {
-    m_checker.setPseudoStyle(pseudoID);
+    m_pseudoStyle = pseudoID;
 
     if (e) {
         NodeRenderingContext context(e);
@@ -2405,7 +2405,7 @@
 
     if (ruleData.hasFastCheckableSelector()) {
         // We know this selector does not include any pseudo elements.
-        if (m_checker.pseudoStyle() != NOPSEUDO)
+        if (m_pseudoStyle != NOPSEUDO)
             return false;
         // We know a sufficiently simple single part selector matches simply because we found it from the rule hash.
         // This is limited to HTML only so we don't need to check the namespace.
@@ -2424,10 +2424,11 @@
     context.elementStyle = style();
     context.elementParentStyle = m_parentNode ? m_parentNode->renderStyle() : 0;
     context.scope = scope;
+    context.pseudoStyle = m_pseudoStyle;
     SelectorChecker::SelectorMatch match = m_checker.checkSelector(context, m_dynamicPseudo, m_hasUnknownPseudoElements);
     if (match != SelectorChecker::SelectorMatches)
         return false;
-    if (m_checker.pseudoStyle() != NOPSEUDO && m_checker.pseudoStyle() != m_dynamicPseudo)
+    if (m_pseudoStyle != NOPSEUDO && m_pseudoStyle != m_dynamicPseudo)
         return false;
     return true;
 }
@@ -2438,7 +2439,7 @@
         return false;
 
     m_hasUnknownPseudoElements = false;
-    m_checker.setPseudoStyle(NOPSEUDO);
+    m_pseudoStyle = NOPSEUDO;
 
     for (CSSSelector* s = regionSelector; s; s = CSSSelectorList::next(s))
         if (m_checker.checkSelector(s, regionElement))

Modified: trunk/Source/WebCore/css/StyleResolver.h (128474 => 128475)


--- trunk/Source/WebCore/css/StyleResolver.h	2012-09-13 16:24:37 UTC (rev 128474)
+++ trunk/Source/WebCore/css/StyleResolver.h	2012-09-13 16:33:04 UTC (rev 128475)
@@ -480,6 +480,7 @@
     RefPtr<RenderStyle> m_rootDefaultStyle;
 
     PseudoId m_dynamicPseudo;
+    PseudoId m_pseudoStyle;
 
     SelectorChecker m_checker;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to