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)