Diff
Modified: trunk/Source/WebCore/ChangeLog (98858 => 98859)
--- trunk/Source/WebCore/ChangeLog 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/ChangeLog 2011-10-31 15:53:14 UTC (rev 98859)
@@ -1,3 +1,64 @@
+2011-10-31 Andreas Kling <[email protected]>
+
+ CSSRule: Devirtualize type() and isFooRule()
+ https://bugs.webkit.org/show_bug.cgi?id=71221
+
+ Reviewed by Antti Koivisto.
+
+ Store the rule type in a CSSRule member (packed with the parent-is-rule flag)
+ and let the isFooRule() functions return type() == FOO_TYPE.
+
+ CSSPageRule will no longer return true for isStyleRule(), tweaked call sites
+ accordingly.
+
+ * css/CSSCharsetRule.cpp:
+ (WebCore::CSSCharsetRule::CSSCharsetRule):
+ * css/CSSCharsetRule.h:
+ * css/CSSFontFaceRule.cpp:
+ (WebCore::CSSFontFaceRule::CSSFontFaceRule):
+ * css/CSSFontFaceRule.h:
+ * css/CSSImportRule.cpp:
+ (WebCore::CSSImportRule::CSSImportRule):
+ * css/CSSImportRule.h:
+ * css/CSSMediaRule.cpp:
+ (WebCore::CSSMediaRule::CSSMediaRule):
+ * css/CSSMediaRule.h:
+ * css/CSSPageRule.cpp:
+ (WebCore::CSSPageRule::CSSPageRule):
+ * css/CSSPageRule.h:
+ * css/CSSRegionStyleRule.cpp:
+ (WebCore::CSSRegionStyleRule::CSSRegionStyleRule):
+ * css/CSSRegionStyleRule.h:
+ * css/CSSRule.h:
+ (WebCore::CSSRule::type):
+ (WebCore::CSSRule::isCharsetRule):
+ (WebCore::CSSRule::isFontFaceRule):
+ (WebCore::CSSRule::isKeyframeRule):
+ (WebCore::CSSRule::isKeyframesRule):
+ (WebCore::CSSRule::isMediaRule):
+ (WebCore::CSSRule::isPageRule):
+ (WebCore::CSSRule::isStyleRule):
+ (WebCore::CSSRule::isRegionStyleRule):
+ (WebCore::CSSRule::isImportRule):
+ (WebCore::CSSRule::CSSRule):
+ * css/CSSStyleRule.cpp:
+ (WebCore::CSSStyleRule::CSSStyleRule):
+ * css/CSSStyleRule.h:
+ * css/CSSStyleSelector.cpp:
+ (WebCore::RuleSet::addPageRule):
+ (WebCore::RuleSet::addRulesFromSheet):
+ (WebCore::RuleSet::addStyleRule):
+ * css/CSSUnknownRule.h:
+ (WebCore::CSSUnknownRule::CSSUnknownRule):
+ * css/WebKitCSSKeyframeRule.cpp:
+ (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
+ * css/WebKitCSSKeyframeRule.h:
+ * css/WebKitCSSKeyframesRule.cpp:
+ (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
+ * css/WebKitCSSKeyframesRule.h:
+ * inspector/InspectorCSSAgent.cpp:
+ (WebCore::InspectorCSSAgent::asCSSStyleRule):
+
2011-10-31 Pavel Feldman <[email protected]>
Not reviewed: reorder inspector js files to fix remote mode.
Modified: trunk/Source/WebCore/css/CSSCharsetRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSCharsetRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSCharsetRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -24,7 +24,7 @@
namespace WebCore {
CSSCharsetRule::CSSCharsetRule(CSSStyleSheet* parent, const String& encoding)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::CHARSET_RULE)
, m_encoding(encoding)
{
}
Modified: trunk/Source/WebCore/css/CSSCharsetRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSCharsetRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSCharsetRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -44,10 +44,6 @@
private:
CSSCharsetRule(CSSStyleSheet* parent, const String& encoding);
- virtual bool isCharsetRule() const { return true; }
- // from CSSRule
- virtual CSSRuleType type() const { return CHARSET_RULE; }
-
String m_encoding;
};
Modified: trunk/Source/WebCore/css/CSSFontFaceRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSFontFaceRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSFontFaceRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -27,7 +27,7 @@
namespace WebCore {
CSSFontFaceRule::CSSFontFaceRule(CSSStyleSheet* parent)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::FONT_FACE_RULE)
{
}
Modified: trunk/Source/WebCore/css/CSSFontFaceRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSFontFaceRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSFontFaceRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -54,10 +54,6 @@
private:
CSSFontFaceRule(CSSStyleSheet* parent);
- virtual bool isFontFaceRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return FONT_FACE_RULE; }
-
RefPtr<CSSMutableStyleDeclaration> m_style;
};
Modified: trunk/Source/WebCore/css/CSSImportRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSImportRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSImportRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -32,7 +32,7 @@
namespace WebCore {
CSSImportRule::CSSImportRule(CSSStyleSheet* parent, const String& href, PassRefPtr<MediaList> media)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::IMPORT_RULE)
, m_strHref(href)
, m_lstMedia(media)
, m_cachedSheet(0)
Modified: trunk/Source/WebCore/css/CSSImportRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSImportRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSImportRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -57,10 +57,6 @@
private:
CSSImportRule(CSSStyleSheet* parent, const String& href, PassRefPtr<MediaList>);
- virtual bool isImportRule() const { return true; }
- // from CSSRule
- virtual CSSRuleType type() const { return IMPORT_RULE; }
-
virtual void insertedIntoParent();
// from CachedResourceClient
Modified: trunk/Source/WebCore/css/CSSMediaRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSMediaRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSMediaRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -29,7 +29,7 @@
namespace WebCore {
CSSMediaRule::CSSMediaRule(CSSStyleSheet* parent, PassRefPtr<MediaList> media, PassRefPtr<CSSRuleList> rules)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::MEDIA_RULE)
, m_lstMedia(media)
, m_lstCSSRules(rules)
{
Modified: trunk/Source/WebCore/css/CSSMediaRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSMediaRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSMediaRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -54,10 +54,6 @@
private:
CSSMediaRule(CSSStyleSheet* parent, PassRefPtr<MediaList>, PassRefPtr<CSSRuleList>);
- virtual bool isMediaRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return MEDIA_RULE; }
-
RefPtr<MediaList> m_lstMedia;
RefPtr<CSSRuleList> m_lstCSSRules;
};
Modified: trunk/Source/WebCore/css/CSSPageRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSPageRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSPageRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -28,7 +28,7 @@
namespace WebCore {
CSSPageRule::CSSPageRule(CSSStyleSheet* parent, int sourceLine)
- : CSSStyleRule(parent, sourceLine)
+ : CSSStyleRule(parent, sourceLine, CSSRule::PAGE_RULE)
{
}
Modified: trunk/Source/WebCore/css/CSSPageRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSPageRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSPageRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -45,10 +45,6 @@
private:
CSSPageRule(CSSStyleSheet* parent, int sourceLine);
-
- virtual bool isPageRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return PAGE_RULE; }
};
} // namespace WebCore
Modified: trunk/Source/WebCore/css/CSSRegionStyleRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSRegionStyleRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSRegionStyleRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -36,7 +36,7 @@
namespace WebCore {
CSSRegionStyleRule::CSSRegionStyleRule(CSSStyleSheet* parent, Vector<OwnPtr<CSSParserSelector> >* selectors, PassRefPtr<CSSRuleList> rules)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::WEBKIT_REGION_STYLE_RULE)
, m_ruleList(rules)
{
for (unsigned index = 0; index < m_ruleList->length(); ++index)
Modified: trunk/Source/WebCore/css/CSSRegionStyleRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSRegionStyleRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSRegionStyleRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -58,10 +58,6 @@
private:
CSSRegionStyleRule(CSSStyleSheet* parent, Vector<OwnPtr<CSSParserSelector> >* selectors, PassRefPtr<CSSRuleList> rules);
- virtual bool isRegionStyleRule() const { return true; }
-
- virtual CSSRuleType type() const { return WEBKIT_REGION_STYLE_RULE; }
-
CSSSelectorList m_selectorList;
RefPtr<CSSRuleList> m_ruleList;
};
Modified: trunk/Source/WebCore/css/CSSRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -35,8 +35,7 @@
public:
virtual ~CSSRule() { }
- // FIXME: Change name to Type.
- enum CSSRuleType {
+ enum Type {
UNKNOWN_RULE,
STYLE_RULE,
CHARSET_RULE,
@@ -50,17 +49,17 @@
WEBKIT_REGION_STYLE_RULE
};
- virtual CSSRuleType type() const = 0;
+ Type type() const { return static_cast<Type>(m_type); }
- virtual bool isCharsetRule() const { return false; }
- virtual bool isFontFaceRule() const { return false; }
- virtual bool isKeyframeRule() const { return false; }
- virtual bool isKeyframesRule() const { return false; }
- virtual bool isMediaRule() const { return false; }
- virtual bool isPageRule() const { return false; }
- virtual bool isStyleRule() const { return false; }
- virtual bool isRegionStyleRule() const { return false; }
- virtual bool isImportRule() const { return false; }
+ bool isCharsetRule() const { return type() == CHARSET_RULE; }
+ bool isFontFaceRule() const { return type() == FONT_FACE_RULE; }
+ bool isKeyframeRule() const { return type() == WEBKIT_KEYFRAME_RULE; }
+ bool isKeyframesRule() const { return type() == WEBKIT_KEYFRAMES_RULE; }
+ bool isMediaRule() const { return type() == MEDIA_RULE; }
+ bool isPageRule() const { return type() == PAGE_RULE; }
+ bool isStyleRule() const { return type() == STYLE_RULE; }
+ bool isRegionStyleRule() const { return type() == WEBKIT_REGION_STYLE_RULE; }
+ bool isImportRule() const { return type() == IMPORT_RULE; }
bool useStrictParsing() const
{
@@ -107,14 +106,16 @@
}
protected:
- CSSRule(CSSStyleSheet* parent)
+ CSSRule(CSSStyleSheet* parent, Type type)
: m_parentIsRule(false)
+ , m_type(type)
, m_parentStyleSheet(parent)
{
}
private:
- bool m_parentIsRule;
+ bool m_parentIsRule : 1;
+ unsigned m_type : 31; // Plenty of space for additional flags here.
union {
CSSRule* m_parentRule;
CSSStyleSheet* m_parentStyleSheet;
Modified: trunk/Source/WebCore/css/CSSStyleRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSStyleRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSStyleRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -31,8 +31,8 @@
namespace WebCore {
-CSSStyleRule::CSSStyleRule(CSSStyleSheet* parent, int sourceLine)
- : CSSRule(parent)
+CSSStyleRule::CSSStyleRule(CSSStyleSheet* parent, int sourceLine, CSSRule::Type type)
+ : CSSRule(parent, type)
, m_sourceLine(sourceLine)
{
}
Modified: trunk/Source/WebCore/css/CSSStyleRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSStyleRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSStyleRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -61,13 +61,9 @@
int sourceLine() { return m_sourceLine; }
protected:
- CSSStyleRule(CSSStyleSheet* parent, int sourceLine);
+ CSSStyleRule(CSSStyleSheet* parent, int sourceLine, CSSRule::Type = CSSRule::STYLE_RULE);
private:
- virtual bool isStyleRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return STYLE_RULE; }
-
RefPtr<CSSMutableStyleDeclaration> m_style;
CSSSelectorList m_selectorList;
int m_sourceLine;
Modified: trunk/Source/WebCore/css/CSSStyleSelector.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -230,7 +230,7 @@
void addStyleRule(CSSStyleRule* item);
void addRule(CSSStyleRule* rule, CSSSelector* sel);
- void addPageRule(CSSStyleRule* rule, CSSSelector* sel);
+ void addPageRule(CSSPageRule*);
void addToRuleSet(AtomicStringImpl* key, AtomRuleMap& map,
CSSStyleRule* rule, CSSSelector* sel);
void shrinkToFit();
@@ -1899,9 +1899,9 @@
m_universalRules.append(RuleData(rule, sel, m_ruleCount++));
}
-void RuleSet::addPageRule(CSSStyleRule* rule, CSSSelector* sel)
+void RuleSet::addPageRule(CSSPageRule* rule)
{
- m_pageRules.append(RuleData(rule, sel, m_pageRules.size()));
+ m_pageRules.append(RuleData(rule, rule->selectorList().first(), m_pageRules.size()));
}
void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator& medium, CSSStyleSelector* styleSelector)
@@ -1920,6 +1920,8 @@
CSSRule* rule = sheet->item(i);
if (rule->isStyleRule())
addStyleRule(static_cast<CSSStyleRule*>(rule));
+ else if (rule->isPageRule())
+ addPageRule(static_cast<CSSPageRule*>(rule));
else if (rule->isImportRule()) {
CSSImportRule* import = static_cast<CSSImportRule*>(rule);
if (!import->media() || medium.eval(import->media(), styleSelector))
@@ -1933,10 +1935,11 @@
// Traverse child elements of the @media rule.
for (unsigned j = 0; j < rules->length(); j++) {
CSSRule *childItem = rules->item(j);
- if (childItem->isStyleRule()) {
- // It is a StyleRule, so append it to our list
+ if (childItem->isStyleRule())
addStyleRule(static_cast<CSSStyleRule*>(childItem));
- } else if (childItem->isFontFaceRule() && styleSelector) {
+ else if (childItem->isPageRule())
+ addPageRule(static_cast<CSSPageRule*>(childItem));
+ else if (childItem->isFontFaceRule() && styleSelector) {
// Add this font face to our set.
const CSSFontFaceRule* fontFaceRule = static_cast<CSSFontFaceRule*>(childItem);
styleSelector->fontSelector()->addFontFaceRule(fontFaceRule);
@@ -1961,13 +1964,8 @@
void RuleSet::addStyleRule(CSSStyleRule* rule)
{
- if (rule->isPageRule()) {
- CSSPageRule* pageRule = static_cast<CSSPageRule*>(rule);
- addPageRule(pageRule, pageRule->selectorList().first());
- } else {
- for (CSSSelector* s = rule->selectorList().first(); s; s = CSSSelectorList::next(s))
- addRule(rule, s);
- }
+ for (CSSSelector* s = rule->selectorList().first(); s; s = CSSSelectorList::next(s))
+ addRule(rule, s);
}
static inline void collectFeaturesFromSelector(CSSStyleSelector::Features& features, const CSSSelector* selector)
Modified: trunk/Source/WebCore/css/CSSUnknownRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/CSSUnknownRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/CSSUnknownRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -27,8 +27,8 @@
namespace WebCore {
class CSSUnknownRule : public CSSRule {
-private:
- virtual CSSRuleType type() const { return UNKNOWN_RULE; }
+public:
+ CSSUnknownRule() : CSSRule(0, CSSRule::UNKNOWN_RULE) { }
};
} // namespace WebCore
Modified: trunk/Source/WebCore/css/WebKitCSSKeyframeRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/WebKitCSSKeyframeRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/WebKitCSSKeyframeRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -31,7 +31,7 @@
namespace WebCore {
WebKitCSSKeyframeRule::WebKitCSSKeyframeRule(CSSStyleSheet* parent)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::WEBKIT_KEYFRAME_RULE)
{
}
Modified: trunk/Source/WebCore/css/WebKitCSSKeyframeRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/WebKitCSSKeyframeRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/WebKitCSSKeyframeRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -67,10 +67,6 @@
const CSSMutableStyleDeclaration* declaration() const { return m_style.get(); }
private:
- virtual bool isKeyframeRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return WEBKIT_KEYFRAME_RULE; }
-
static void parseKeyString(const String& s, Vector<float>& keys);
WebKitCSSKeyframeRule(CSSStyleSheet* parent);
Modified: trunk/Source/WebCore/css/WebKitCSSKeyframesRule.cpp (98858 => 98859)
--- trunk/Source/WebCore/css/WebKitCSSKeyframesRule.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/WebKitCSSKeyframesRule.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -35,7 +35,7 @@
namespace WebCore {
WebKitCSSKeyframesRule::WebKitCSSKeyframesRule(CSSStyleSheet* parent)
- : CSSRule(parent)
+ : CSSRule(parent, CSSRule::WEBKIT_KEYFRAMES_RULE)
, m_lstCSSRules(CSSRuleList::create())
{
}
Modified: trunk/Source/WebCore/css/WebKitCSSKeyframesRule.h (98858 => 98859)
--- trunk/Source/WebCore/css/WebKitCSSKeyframesRule.h 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/css/WebKitCSSKeyframesRule.h 2011-10-31 15:53:14 UTC (rev 98859)
@@ -79,10 +79,6 @@
private:
WebKitCSSKeyframesRule(CSSStyleSheet* parent);
- virtual bool isKeyframesRule() const { return true; }
- // Inherited from CSSRule
- virtual CSSRuleType type() const { return WEBKIT_KEYFRAMES_RULE; }
-
int findRuleIndex(const String& key) const;
RefPtr<CSSRuleList> m_lstCSSRules;
Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp (98858 => 98859)
--- trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp 2011-10-31 15:49:04 UTC (rev 98858)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp 2011-10-31 15:53:14 UTC (rev 98859)
@@ -179,8 +179,7 @@
// static
CSSStyleRule* InspectorCSSAgent::asCSSStyleRule(CSSRule* rule)
{
- // NOTE: CSSPageRule inherits from CSSStyleRule, so isStyleRule() is not enough.
- if (rule->type() != CSSRule::STYLE_RULE)
+ if (!rule->isStyleRule())
return 0;
return static_cast<CSSStyleRule*>(rule);
}