Use PassRef for constructing StyleRules.
<https://webkit.org/b/123072>
Let functions that return newly-constructed StyleRuleFoo objects
vend PassRef<StyleRuleFoo> instead of PassRefPtr.
Since StyleRuleBase::copy() has to return something, we can't rely
on ASSERT_NOT_REACHED() + return nullptr anymore, so I've replaced
those with CRASH(). No call sites actually handled null anyway.
Reviewed by Sam Weinig.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157698 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/css/StyleRule.cpp b/Source/WebCore/css/StyleRule.cpp
index d4a934b..0a31ec8 100644
--- a/Source/WebCore/css/StyleRule.cpp
+++ b/Source/WebCore/css/StyleRule.cpp
@@ -115,7 +115,7 @@
ASSERT_NOT_REACHED();
}
-PassRefPtr<StyleRuleBase> StyleRuleBase::copy() const
+PassRef<StyleRuleBase> StyleRuleBase::copy() const
{
switch (type()) {
case Style:
@@ -134,10 +134,6 @@
case Region:
return static_cast<const StyleRuleRegion*>(this)->copy();
#endif
- case Import:
- // FIXME: Copy import rules.
- ASSERT_NOT_REACHED();
- return 0;
case Keyframes:
return static_cast<const StyleRuleKeyframes*>(this)->copy();
#if ENABLE(SHADOW_DOM)
@@ -152,17 +148,20 @@
case Filter:
return static_cast<const StyleRuleFilter*>(this)->copy();
#endif
+ case Import:
+ // FIXME: Copy import rules.
+ break;
case Unknown:
case Charset:
case Keyframe:
#if !ENABLE(CSS_REGIONS)
case Region:
#endif
- ASSERT_NOT_REACHED();
- return 0;
+ break;
}
- ASSERT_NOT_REACHED();
- return 0;
+ CRASH();
+ // HACK: EFL won't build without this (old GCC with crappy -Werror=return-type)
+ return PassRef<StyleRuleBase>(*static_cast<StyleRuleBase*>(nullptr));
}
PassRefPtr<CSSRule> StyleRuleBase::createCSSOMWrapper(CSSStyleSheet* parentSheet, CSSRule* parentRule) const
@@ -256,15 +255,15 @@
return static_cast<MutableStylePropertySet&>(m_properties.get());
}
-PassRefPtr<StyleRule> StyleRule::create(int sourceLine, const Vector<const CSSSelector*>& selectors, PassRef<StylePropertySet> properties)
+PassRef<StyleRule> StyleRule::create(int sourceLine, const Vector<const CSSSelector*>& selectors, PassRef<StylePropertySet> properties)
{
CSSSelector* selectorListArray = reinterpret_cast<CSSSelector*>(fastMalloc(sizeof(CSSSelector) * selectors.size()));
for (unsigned i = 0; i < selectors.size(); ++i)
new (NotNull, &selectorListArray[i]) CSSSelector(*selectors.at(i));
selectorListArray[selectors.size() - 1].setLastInSelectorList();
- RefPtr<StyleRule> rule = StyleRule::create(sourceLine, std::move(properties));
- rule->parserAdoptSelectorArray(selectorListArray);
- return rule.release();
+ auto rule = StyleRule::create(sourceLine, std::move(properties));
+ rule.get().parserAdoptSelectorArray(selectorListArray);
+ return rule;
}
Vector<RefPtr<StyleRule>> StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount(unsigned maxCount) const
@@ -348,15 +347,15 @@
StyleRuleGroup::StyleRuleGroup(const StyleRuleGroup& o)
: StyleRuleBase(o)
- , m_childRules(o.m_childRules.size())
{
- for (unsigned i = 0; i < m_childRules.size(); ++i)
- m_childRules[i] = o.m_childRules[i]->copy();
+ m_childRules.reserveInitialCapacity(o.m_childRules.size());
+ for (unsigned i = 0, size = o.m_childRules.size(); i < size; ++i)
+ m_childRules.uncheckedAppend(o.m_childRules[i]->copy());
}
-void StyleRuleGroup::wrapperInsertRule(unsigned index, PassRefPtr<StyleRuleBase> rule)
+void StyleRuleGroup::wrapperInsertRule(unsigned index, PassRef<StyleRuleBase> rule)
{
- m_childRules.insert(index, rule);
+ m_childRules.insert(index, std::move(rule));
}
void StyleRuleGroup::wrapperRemoveRule(unsigned index)