Title: [99592] trunk/Source/WebCore
Revision
99592
Author
andreas.kl...@nokia.com
Date
2011-11-08 10:27:07 -0800 (Tue, 08 Nov 2011)

Log Message

Devirtualize CSSValue.
<http://webkit.org/b/71666>

Reviewed by Antti Koivisto.

Make the CSSValue destructor non-virtual (along with all the subclasses.)
This removes the vtables, and the pointers thereto in each value instance,
shrinking each object by one CPU word (4 or 8 bytes.)

We use the same trick as CSSRule to implement destruction; providing our
own deref() instead of RefCounted's, and performing a statically typed
delete in a destroy() method called when the ref count reaches 0.

Also made all the empty subclass destructors inline.

* css/CSSAspectRatioValue.cpp:
* css/CSSAspectRatioValue.h:
(WebCore::CSSAspectRatioValue::~CSSAspectRatioValue):
* css/CSSBorderImageSliceValue.cpp:
* css/CSSBorderImageSliceValue.h:
(WebCore::CSSBorderImageSliceValue::~CSSBorderImageSliceValue):
* css/CSSBorderImageValue.cpp:
* css/CSSBorderImageValue.h:
(WebCore::CSSBorderImageValue::~CSSBorderImageValue):
* css/CSSCanvasValue.h:
* css/CSSCrossfadeValue.cpp:
* css/CSSCrossfadeValue.h:
(WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
* css/CSSCursorImageValue.h:
* css/CSSFlexValue.cpp:
* css/CSSFlexValue.h:
(WebCore::CSSFlexValue::~CSSFlexValue):
* css/CSSFontFaceSrcValue.cpp:
* css/CSSFontFaceSrcValue.h:
(WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
* css/CSSFunctionValue.cpp:
* css/CSSFunctionValue.h:
(WebCore::CSSFunctionValue::~CSSFunctionValue):
* css/CSSImageGeneratorValue.h:
* css/CSSImageValue.h:
* css/CSSMutableValue.h:
(WebCore::CSSMutableValue::~CSSMutableValue):
* css/CSSParserValues.h:
* css/CSSPrimitiveValue.h:
* css/CSSUnicodeRangeValue.cpp:
* css/CSSUnicodeRangeValue.h:
(WebCore::CSSUnicodeRangeValue::~CSSUnicodeRangeValue):
* css/CSSValue.cpp:
(WebCore::CSSValue::destroy):
* css/CSSValue.h:
(WebCore::CSSValue::deref):
(WebCore::CSSValue::~CSSValue):
* css/CSSValueList.cpp:
* css/CSSValueList.h:
(WebCore::CSSValueList::~CSSValueList):
* css/WebKitCSSFilterValue.cpp:
* css/WebKitCSSFilterValue.h:
(WebCore::WebKitCSSFilterValue::~WebKitCSSFilterValue):
* css/WebKitCSSTransformValue.cpp:
* css/WebKitCSSTransformValue.h:
(WebCore::WebKitCSSTransformValue::~WebKitCSSTransformValue):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (99591 => 99592)


--- trunk/Source/WebCore/ChangeLog	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/ChangeLog	2011-11-08 18:27:07 UTC (rev 99592)
@@ -1,3 +1,67 @@
+2011-11-08  Andreas Kling  <kl...@webkit.org>
+
+        Devirtualize CSSValue.
+        <http://webkit.org/b/71666>
+
+        Reviewed by Antti Koivisto.
+
+        Make the CSSValue destructor non-virtual (along with all the subclasses.)
+        This removes the vtables, and the pointers thereto in each value instance,
+        shrinking each object by one CPU word (4 or 8 bytes.)
+
+        We use the same trick as CSSRule to implement destruction; providing our
+        own deref() instead of RefCounted's, and performing a statically typed
+        delete in a destroy() method called when the ref count reaches 0.
+
+        Also made all the empty subclass destructors inline.
+
+        * css/CSSAspectRatioValue.cpp:
+        * css/CSSAspectRatioValue.h:
+        (WebCore::CSSAspectRatioValue::~CSSAspectRatioValue):
+        * css/CSSBorderImageSliceValue.cpp:
+        * css/CSSBorderImageSliceValue.h:
+        (WebCore::CSSBorderImageSliceValue::~CSSBorderImageSliceValue):
+        * css/CSSBorderImageValue.cpp:
+        * css/CSSBorderImageValue.h:
+        (WebCore::CSSBorderImageValue::~CSSBorderImageValue):
+        * css/CSSCanvasValue.h:
+        * css/CSSCrossfadeValue.cpp:
+        * css/CSSCrossfadeValue.h:
+        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
+        * css/CSSCursorImageValue.h:
+        * css/CSSFlexValue.cpp:
+        * css/CSSFlexValue.h:
+        (WebCore::CSSFlexValue::~CSSFlexValue):
+        * css/CSSFontFaceSrcValue.cpp:
+        * css/CSSFontFaceSrcValue.h:
+        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
+        * css/CSSFunctionValue.cpp:
+        * css/CSSFunctionValue.h:
+        (WebCore::CSSFunctionValue::~CSSFunctionValue):
+        * css/CSSImageGeneratorValue.h:
+        * css/CSSImageValue.h:
+        * css/CSSMutableValue.h:
+        (WebCore::CSSMutableValue::~CSSMutableValue):
+        * css/CSSParserValues.h:
+        * css/CSSPrimitiveValue.h:
+        * css/CSSUnicodeRangeValue.cpp:
+        * css/CSSUnicodeRangeValue.h:
+        (WebCore::CSSUnicodeRangeValue::~CSSUnicodeRangeValue):
+        * css/CSSValue.cpp:
+        (WebCore::CSSValue::destroy):
+        * css/CSSValue.h:
+        (WebCore::CSSValue::deref):
+        (WebCore::CSSValue::~CSSValue):
+        * css/CSSValueList.cpp:
+        * css/CSSValueList.h:
+        (WebCore::CSSValueList::~CSSValueList):
+        * css/WebKitCSSFilterValue.cpp:
+        * css/WebKitCSSFilterValue.h:
+        (WebCore::WebKitCSSFilterValue::~WebKitCSSFilterValue):
+        * css/WebKitCSSTransformValue.cpp:
+        * css/WebKitCSSTransformValue.h:
+        (WebCore::WebKitCSSTransformValue::~WebKitCSSTransformValue):
+
 2011-11-08  Darin Adler  <da...@apple.com>
 
         Speculative fix for crashes seen in DocumentWriter::deprecatedFrameEncoding

Modified: trunk/Source/WebCore/css/CSSAspectRatioValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSAspectRatioValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSAspectRatioValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -33,10 +33,6 @@
 
 namespace WebCore {
 
-CSSAspectRatioValue::~CSSAspectRatioValue()
-{
-}
-
 String CSSAspectRatioValue::customCssText() const
 {
     StringBuilder result;

Modified: trunk/Source/WebCore/css/CSSAspectRatioValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSAspectRatioValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSAspectRatioValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -41,7 +41,7 @@
         return adoptRef(new CSSAspectRatioValue(numeratorValue, denominatorValue));
     }
 
-    virtual ~CSSAspectRatioValue();
+    ~CSSAspectRatioValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSBorderImageSliceValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSBorderImageSliceValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSBorderImageSliceValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -38,10 +38,6 @@
 {
 }
 
-CSSBorderImageSliceValue::~CSSBorderImageSliceValue()
-{
-}
-
 String CSSBorderImageSliceValue::customCssText() const
 {
     // Dump the slices first.

Modified: trunk/Source/WebCore/css/CSSBorderImageSliceValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSBorderImageSliceValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSBorderImageSliceValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -40,7 +40,7 @@
     {
         return adoptRef(new CSSBorderImageSliceValue(slices, fill));
     }
-    virtual ~CSSBorderImageSliceValue();
+    ~CSSBorderImageSliceValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSBorderImageValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSBorderImageValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSBorderImageValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -37,10 +37,6 @@
 {
 }
 
-CSSBorderImageValue::~CSSBorderImageValue()
-{
-}
-
 String CSSBorderImageValue::customCssText() const
 {
     // Image first.

Modified: trunk/Source/WebCore/css/CSSBorderImageValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSBorderImageValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSBorderImageValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -36,7 +36,7 @@
     {
         return adoptRef(new CSSBorderImageValue(image, imageSlice, borderSlice, outset, repeat));
     }
-    virtual ~CSSBorderImageValue();
+    ~CSSBorderImageValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSCanvasValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSCanvasValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSCanvasValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -36,7 +36,7 @@
 class CSSCanvasValue : public CSSImageGeneratorValue {
 public:
     static PassRefPtr<CSSCanvasValue> create() { return adoptRef(new CSSCanvasValue); }
-    virtual ~CSSCanvasValue();
+    ~CSSCanvasValue();
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSCrossfadeValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -28,11 +28,6 @@
 
 namespace WebCore {
 
-CSSCrossfadeValue::~CSSCrossfadeValue()
-{
-
-}
-
 String CSSCrossfadeValue::customCssText() const
 {
     String result = "-webkit-cross-fade(";

Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSCrossfadeValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -38,7 +38,7 @@
 class CSSCrossfadeValue : public CSSImageGeneratorValue {
 public:
     static PassRefPtr<CSSCrossfadeValue> create(PassRefPtr<CSSImageValue> fromImage, PassRefPtr<CSSImageValue> toImage) { return adoptRef(new CSSCrossfadeValue(fromImage, toImage)); }
-    virtual ~CSSCrossfadeValue();
+    ~CSSCrossfadeValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSCursorImageValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSCursorImageValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSCursorImageValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -37,7 +37,7 @@
         return adoptRef(new CSSCursorImageValue(url, hotSpot));
     }
 
-    virtual ~CSSCursorImageValue();
+    ~CSSCursorImageValue();
 
     IntPoint hotSpot() const { return m_hotSpot; }
 

Modified: trunk/Source/WebCore/css/CSSFlexValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFlexValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFlexValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -35,10 +35,6 @@
 
 namespace WebCore {
 
-CSSFlexValue::~CSSFlexValue()
-{
-}
-
 String CSSFlexValue::customCssText() const
 {
     StringBuilder result;

Modified: trunk/Source/WebCore/css/CSSFlexValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFlexValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFlexValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -43,7 +43,7 @@
         return adoptRef(new CSSFlexValue(positiveFlex, negativeFlex, preferredSize));
     }
 
-    virtual ~CSSFlexValue();
+    ~CSSFlexValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSFontFaceSrcValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFontFaceSrcValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFontFaceSrcValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -31,10 +31,6 @@
 
 namespace WebCore {
 
-CSSFontFaceSrcValue::~CSSFontFaceSrcValue()
-{
-}
-
 #if ENABLE(SVG_FONTS)
 bool CSSFontFaceSrcValue::isSVGFontFaceSrc() const
 {

Modified: trunk/Source/WebCore/css/CSSFontFaceSrcValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFontFaceSrcValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFontFaceSrcValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -45,7 +45,7 @@
         return adoptRef(new CSSFontFaceSrcValue(resource, true));
     }
 
-    virtual ~CSSFontFaceSrcValue();
+    ~CSSFontFaceSrcValue() { }
 
     const String& resource() const { return m_resource; }
     const String& format() const { return m_format; }

Modified: trunk/Source/WebCore/css/CSSFunctionValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFunctionValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFunctionValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -40,10 +40,6 @@
         m_args = CSSValueList::createFromParserValueList(function->args.get());
 }
 
-CSSFunctionValue::~CSSFunctionValue()
-{
-}
-
 String CSSFunctionValue::customCssText() const
 {
     String result = m_name; // Includes the '('

Modified: trunk/Source/WebCore/css/CSSFunctionValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSFunctionValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSFunctionValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -40,7 +40,7 @@
         return adoptRef(new CSSFunctionValue(function));
     }
 
-    virtual ~CSSFunctionValue();
+    ~CSSFunctionValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/CSSImageGeneratorValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSImageGeneratorValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSImageGeneratorValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -52,7 +52,7 @@
 
 class CSSImageGeneratorValue : public CSSValue {
 public:
-    virtual ~CSSImageGeneratorValue();
+    ~CSSImageGeneratorValue();
 
     void addClient(RenderObject*, const IntSize&);
     void removeClient(RenderObject*);

Modified: trunk/Source/WebCore/css/CSSImageValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSImageValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSImageValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -35,7 +35,7 @@
 public:
     static PassRefPtr<CSSImageValue> create() { return adoptRef(new CSSImageValue); }
     static PassRefPtr<CSSImageValue> create(const String& url) { return adoptRef(new CSSImageValue(url)); }
-    virtual ~CSSImageValue();
+    ~CSSImageValue();
 
     StyleCachedImage* cachedImage(CachedResourceLoader*);
     // Returns a StyleCachedImage if the image is cached already, otherwise a StylePendingImage.

Modified: trunk/Source/WebCore/css/CSSMutableValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSMutableValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSMutableValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -27,7 +27,7 @@
 
 class CSSMutableValue : public CSSValue {
 public:
-    virtual ~CSSMutableValue() { }
+    ~CSSMutableValue() { }
 
     Node* node() const { return m_node; }
     void setNode(Node* node) { m_node = node; }

Modified: trunk/Source/WebCore/css/CSSParserValues.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSParserValues.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSParserValues.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -22,6 +22,7 @@
 #define CSSParserValues_h
 
 #include "CSSSelector.h"
+#include "CSSValueList.h"
 #include <wtf/text/AtomicString.h>
 
 namespace WebCore {

Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSPrimitiveValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -143,7 +143,7 @@
         return adoptRef(quirkValue);
     }
 
-    virtual ~CSSPrimitiveValue();
+    ~CSSPrimitiveValue();
 
     void cleanup();
 

Modified: trunk/Source/WebCore/css/CSSUnicodeRangeValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSUnicodeRangeValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSUnicodeRangeValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -30,10 +30,6 @@
 
 namespace WebCore {
 
-CSSUnicodeRangeValue::~CSSUnicodeRangeValue()
-{
-}
-
 String CSSUnicodeRangeValue::customCssText() const
 {
     String result;

Modified: trunk/Source/WebCore/css/CSSUnicodeRangeValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSUnicodeRangeValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSUnicodeRangeValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -39,7 +39,7 @@
         return adoptRef(new CSSUnicodeRangeValue(from, to));
     }
 
-    virtual ~CSSUnicodeRangeValue();
+    ~CSSUnicodeRangeValue() { }
 
     UChar32 from() const { return m_from; }
     UChar32 to() const { return m_to; }

Modified: trunk/Source/WebCore/css/CSSValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -160,4 +160,108 @@
     return String();
 }
 
+void CSSValue::destroy()
+{
+    switch (classType()) {
+    case AspectRatioClass:
+        delete static_cast<CSSAspectRatioValue*>(this);
+        return;
+    case BorderImageClass:
+        delete static_cast<CSSBorderImageValue*>(this);
+        return;
+    case BorderImageSliceClass:
+        delete static_cast<CSSBorderImageSliceValue*>(this);
+        return;
+    case CanvasClass:
+        delete static_cast<CSSCanvasValue*>(this);
+        return;
+    case CursorImageClass:
+        delete static_cast<CSSCursorImageValue*>(this);
+        return;
+    case FontClass:
+        delete static_cast<FontValue*>(this);
+        return;
+    case FontFaceSrcClass:
+        delete static_cast<CSSFontFaceSrcValue*>(this);
+        return;
+    case FontFamilyClass:
+        delete static_cast<FontFamilyValue*>(this);
+        return;
+    case FontFeatureClass:
+        delete static_cast<FontFeatureValue*>(this);
+        return;
+    case FunctionClass:
+        delete static_cast<CSSFunctionValue*>(this);
+        return;
+    case LinearGradientClass:
+        delete static_cast<CSSLinearGradientValue*>(this);
+        return;
+    case RadialGradientClass:
+        delete static_cast<CSSRadialGradientValue*>(this);
+        return;
+    case CrossfadeClass:
+        delete static_cast<CSSCrossfadeValue*>(this);
+        return;
+    case ImageClass:
+        delete static_cast<CSSImageValue*>(this);
+        return;
+    case InheritedClass:
+        delete static_cast<CSSInheritedValue*>(this);
+        return;
+    case InitialClass:
+    case ImplicitInitialClass:
+        delete static_cast<CSSInitialValue*>(this);
+        return;
+    case PrimitiveClass:
+        delete static_cast<CSSPrimitiveValue*>(this);
+        return;
+    case ReflectClass:
+        delete static_cast<CSSReflectValue*>(this);
+        return;
+    case ShadowClass:
+        delete static_cast<ShadowValue*>(this);
+        return;
+    case LinearTimingFunctionClass:
+        delete static_cast<CSSLinearTimingFunctionValue*>(this);
+        return;
+    case CubicBezierTimingFunctionClass:
+        delete static_cast<CSSCubicBezierTimingFunctionValue*>(this);
+        return;
+    case StepsTimingFunctionClass:
+        delete static_cast<CSSStepsTimingFunctionValue*>(this);
+        return;
+    case UnicodeRangeClass:
+        delete static_cast<CSSUnicodeRangeValue*>(this);
+        return;
+    case ValueListClass:
+        delete static_cast<CSSValueList*>(this);
+        return;
+    case WebKitCSSTransformClass:
+        delete static_cast<WebKitCSSTransformValue*>(this);
+        return;
+    case LineBoxContainClass:
+        delete static_cast<CSSLineBoxContainValue*>(this);
+        return;
+#if ENABLE(CSS3_FLEXBOX)
+    case FlexClass:
+        delete static_cast<CSSFlexValue*>(this);
+        return;
+#endif
+#if ENABLE(CSS_FILTERS)
+    case WebKitCSSFilterClass:
+        delete static_cast<WebKitCSSFilterValue*>(this);
+        return;
+#endif
+#if ENABLE(SVG)
+    case SVGColorClass:
+        delete static_cast<SVGColor*>(this);
+        return;
+    case SVGPaintClass:
+        delete static_cast<SVGPaint*>(this);
+        return;
+#endif
+    }
+    ASSERT_NOT_REACHED();
 }
+
+}

Modified: trunk/Source/WebCore/css/CSSValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -40,9 +40,16 @@
         CSS_VALUE_LIST = 2,
         CSS_CUSTOM = 3,
         CSS_INITIAL = 4
+
     };
 
-    virtual ~CSSValue() { }
+    // Override RefCounted's deref() to ensure operator delete is called on
+    // the appropriate subclass type.
+    void deref()
+    {
+        if (derefBase())
+            destroy();
+    }
 
     Type cssValueType() const;
 
@@ -136,6 +143,11 @@
     {
     }
 
+    // NOTE: This class is non-virtual for memory and performance reasons.
+    // Don't go making it virtual again unless you know exactly what you're doing!
+
+    ~CSSValue() { }
+
 private:
     static bool isPrimitiveType(ClassType type)
     {
@@ -175,6 +187,8 @@
         return type == InitialClass || type == ImplicitInitialClass;
     }
 
+    void destroy();
+
     // FIXME: This class is currently a little bloated, but that will change.
     //        See <http://webkit.org/b/71666> for more information.
     unsigned m_classType : 5; // ClassType

Modified: trunk/Source/WebCore/css/CSSValueList.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/CSSValueList.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSValueList.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -50,10 +50,6 @@
     }
 }
 
-CSSValueList::~CSSValueList()
-{
-}
-
 void CSSValueList::append(PassRefPtr<CSSValue> val)
 {
     m_values.append(val);

Modified: trunk/Source/WebCore/css/CSSValueList.h (99591 => 99592)


--- trunk/Source/WebCore/css/CSSValueList.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/CSSValueList.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -44,7 +44,7 @@
         return adoptRef(new CSSValueList(list));
     }
 
-    virtual ~CSSValueList();
+    ~CSSValueList() { }
 
     size_t length() const { return m_values.size(); }
     CSSValue* item(size_t index) { return index < m_values.size() ? m_values[index].get() : 0; }

Modified: trunk/Source/WebCore/css/WebKitCSSFilterValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/WebKitCSSFilterValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/WebKitCSSFilterValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -40,10 +40,6 @@
 {
 }
 
-WebKitCSSFilterValue::~WebKitCSSFilterValue()
-{
-}
-
 String WebKitCSSFilterValue::customCssText() const
 {
     String result;

Modified: trunk/Source/WebCore/css/WebKitCSSFilterValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/WebKitCSSFilterValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/WebKitCSSFilterValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -57,7 +57,7 @@
         return adoptRef(new WebKitCSSFilterValue(type));
     }
 
-    virtual ~WebKitCSSFilterValue();
+    ~WebKitCSSFilterValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/css/WebKitCSSTransformValue.cpp (99591 => 99592)


--- trunk/Source/WebCore/css/WebKitCSSTransformValue.cpp	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/WebKitCSSTransformValue.cpp	2011-11-08 18:27:07 UTC (rev 99592)
@@ -38,10 +38,6 @@
 {
 }
 
-WebKitCSSTransformValue::~WebKitCSSTransformValue()
-{
-}
-
 String WebKitCSSTransformValue::customCssText() const
 {
     String result;

Modified: trunk/Source/WebCore/css/WebKitCSSTransformValue.h (99591 => 99592)


--- trunk/Source/WebCore/css/WebKitCSSTransformValue.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/css/WebKitCSSTransformValue.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -65,7 +65,7 @@
         return adoptRef(new WebKitCSSTransformValue(type));
     }
 
-    virtual ~WebKitCSSTransformValue();
+    ~WebKitCSSTransformValue() { }
 
     String customCssText() const;
 

Modified: trunk/Source/WebCore/svg/SVGColor.h (99591 => 99592)


--- trunk/Source/WebCore/svg/SVGColor.h	2011-11-08 18:25:31 UTC (rev 99591)
+++ trunk/Source/WebCore/svg/SVGColor.h	2011-11-08 18:27:07 UTC (rev 99592)
@@ -71,11 +71,12 @@
 
     String customCssText() const;
 
+    ~SVGColor() { }
+
 protected:
     friend class CSSComputedStyleDeclaration;
 
     SVGColor(ClassType, const SVGColorType&);
-    virtual ~SVGColor() { }
 
     void setColor(const Color& color) { m_color = color; }
     void setColorType(const SVGColorType& type) { m_colorType = type; }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to