Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Unified Diff: Source/core/css/CSSValue.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: (Hopefully) Builds with oilpan now Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/css/CSSValue.cpp
diff --git a/Source/core/css/CSSValue.cpp b/Source/core/css/CSSValue.cpp
index d8a94be96cb0712b2e146f95e0c2bab34ab8f683..6ce86b728a6bfe676eb88500c00d023fe43c0755 100644
--- a/Source/core/css/CSSValue.cpp
+++ b/Source/core/css/CSSValue.cpp
@@ -27,472 +27,18 @@
#include "config.h"
#include "core/css/CSSValue.h"
-#include "core/css/CSSBorderImageSliceValue.h"
-#include "core/css/CSSCalculationValue.h"
-#include "core/css/CSSCanvasValue.h"
-#include "core/css/CSSContentDistributionValue.h"
-#include "core/css/CSSCrossfadeValue.h"
-#include "core/css/CSSCursorImageValue.h"
-#include "core/css/CSSFontFaceSrcValue.h"
-#include "core/css/CSSFontFeatureValue.h"
-#include "core/css/CSSFunctionValue.h"
-#include "core/css/CSSGradientValue.h"
-#include "core/css/CSSGridLineNamesValue.h"
-#include "core/css/CSSGridTemplateAreasValue.h"
-#include "core/css/CSSImageSetValue.h"
-#include "core/css/CSSImageValue.h"
-#include "core/css/CSSInheritedValue.h"
-#include "core/css/CSSInitialValue.h"
-#include "core/css/CSSLineBoxContainValue.h"
-#include "core/css/CSSPathValue.h"
-#include "core/css/CSSPrimitiveValue.h"
-#include "core/css/CSSReflectValue.h"
-#include "core/css/CSSSVGDocumentValue.h"
-#include "core/css/CSSShadowValue.h"
-#include "core/css/CSSTimingFunctionValue.h"
-#include "core/css/CSSUnicodeRangeValue.h"
-#include "core/css/CSSUnsetValue.h"
-#include "core/css/CSSValueList.h"
-
namespace blink {
-struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<SameSizeAsCSSValue>
-{
- uint32_t bitfields;
-};
-
-static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should stay small");
-
-bool CSSValue::isImplicitInitialValue() const
-{
- return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit();
-}
-
-bool CSSValue::hasFailedOrCanceledSubresources() const
-{
- if (isValueList())
- return toCSSValueList(this)->hasFailedOrCanceledSubresources();
- if (classType() == FontFaceSrcClass)
- return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources();
- if (classType() == ImageClass)
- return toCSSImageValue(this)->hasFailedOrCanceledSubresources();
- if (classType() == CrossfadeClass)
- return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources();
- if (classType() == ImageSetClass)
- return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources();
-
- return false;
-}
-
-template<class ChildClassType>
-inline static bool compareCSSValues(const CSSValue& first, const CSSValue& second)
-{
- return static_cast<const ChildClassType&>(first).equals(static_cast<const ChildClassType&>(second));
-}
-
-bool CSSValue::equals(const CSSValue& other) const
-{
- if (m_classType == other.m_classType) {
- switch (m_classType) {
- case BorderImageSliceClass:
- return compareCSSValues<CSSBorderImageSliceValue>(*this, other);
- case CanvasClass:
- return compareCSSValues<CSSCanvasValue>(*this, other);
- case CursorImageClass:
- return compareCSSValues<CSSCursorImageValue>(*this, other);
- case FontFaceSrcClass:
- return compareCSSValues<CSSFontFaceSrcValue>(*this, other);
- case FontFeatureClass:
- return compareCSSValues<CSSFontFeatureValue>(*this, other);
- case FunctionClass:
- return compareCSSValues<CSSFunctionValue>(*this, other);
- case LinearGradientClass:
- return compareCSSValues<CSSLinearGradientValue>(*this, other);
- case RadialGradientClass:
- return compareCSSValues<CSSRadialGradientValue>(*this, other);
- case CrossfadeClass:
- return compareCSSValues<CSSCrossfadeValue>(*this, other);
- case ImageClass:
- return compareCSSValues<CSSImageValue>(*this, other);
- case InheritedClass:
- return compareCSSValues<CSSInheritedValue>(*this, other);
- case InitialClass:
- return compareCSSValues<CSSInitialValue>(*this, other);
- case UnsetClass:
- return compareCSSValues<CSSUnsetValue>(*this, other);
- case GridLineNamesClass:
- return compareCSSValues<CSSGridLineNamesValue>(*this, other);
- case GridTemplateAreasClass:
- return compareCSSValues<CSSGridTemplateAreasValue>(*this, other);
- case PathClass:
- return compareCSSValues<CSSPathValue>(*this, other);
- case PrimitiveClass:
- return compareCSSValues<CSSPrimitiveValue>(*this, other);
- case ReflectClass:
- return compareCSSValues<CSSReflectValue>(*this, other);
- case ShadowClass:
- return compareCSSValues<CSSShadowValue>(*this, other);
- case CubicBezierTimingFunctionClass:
- return compareCSSValues<CSSCubicBezierTimingFunctionValue>(*this, other);
- case StepsTimingFunctionClass:
- return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other);
- case UnicodeRangeClass:
- return compareCSSValues<CSSUnicodeRangeValue>(*this, other);
- case ValueListClass:
- return compareCSSValues<CSSValueList>(*this, other);
- case LineBoxContainClass:
- return compareCSSValues<CSSLineBoxContainValue>(*this, other);
- case CalculationClass:
- return compareCSSValues<CSSCalcValue>(*this, other);
- case ImageSetClass:
- return compareCSSValues<CSSImageSetValue>(*this, other);
- case CSSSVGDocumentClass:
- return compareCSSValues<CSSSVGDocumentValue>(*this, other);
- case CSSContentDistributionClass:
- return compareCSSValues<CSSContentDistributionValue>(*this, other);
- default:
- ASSERT_NOT_REACHED();
- return false;
- }
- }
- return false;
-}
-
-String CSSValue::cssText() const
-{
- switch (classType()) {
- case BorderImageSliceClass:
- return toCSSBorderImageSliceValue(this)->customCSSText();
- case CanvasClass:
- return toCSSCanvasValue(this)->customCSSText();
- case CursorImageClass:
- return toCSSCursorImageValue(this)->customCSSText();
- case FontFaceSrcClass:
- return toCSSFontFaceSrcValue(this)->customCSSText();
- case FontFeatureClass:
- return toCSSFontFeatureValue(this)->customCSSText();
- case FunctionClass:
- return toCSSFunctionValue(this)->customCSSText();
- case LinearGradientClass:
- return toCSSLinearGradientValue(this)->customCSSText();
- case RadialGradientClass:
- return toCSSRadialGradientValue(this)->customCSSText();
- case CrossfadeClass:
- return toCSSCrossfadeValue(this)->customCSSText();
- case ImageClass:
- return toCSSImageValue(this)->customCSSText();
- case InheritedClass:
- return toCSSInheritedValue(this)->customCSSText();
- case UnsetClass:
- return toCSSUnsetValue(this)->customCSSText();
- case InitialClass:
- return toCSSInitialValue(this)->customCSSText();
- case GridLineNamesClass:
- return toCSSGridLineNamesValue(this)->customCSSText();
- case GridTemplateAreasClass:
- return toCSSGridTemplateAreasValue(this)->customCSSText();
- case PathClass:
- return toCSSPathValue(this)->customCSSText();
- case PrimitiveClass:
- return toCSSPrimitiveValue(this)->customCSSText();
- case ReflectClass:
- return toCSSReflectValue(this)->customCSSText();
- case ShadowClass:
- return toCSSShadowValue(this)->customCSSText();
- case CubicBezierTimingFunctionClass:
- return toCSSCubicBezierTimingFunctionValue(this)->customCSSText();
- case StepsTimingFunctionClass:
- return toCSSStepsTimingFunctionValue(this)->customCSSText();
- case UnicodeRangeClass:
- return toCSSUnicodeRangeValue(this)->customCSSText();
- case ValueListClass:
- return toCSSValueList(this)->customCSSText();
- case LineBoxContainClass:
- return toCSSLineBoxContainValue(this)->customCSSText();
- case CalculationClass:
- return toCSSCalcValue(this)->customCSSText();
- case ImageSetClass:
- return toCSSImageSetValue(this)->customCSSText();
- case CSSSVGDocumentClass:
- return toCSSSVGDocumentValue(this)->customCSSText();
- case CSSContentDistributionClass:
- return toCSSContentDistributionValue(this)->customCSSText();
- }
- ASSERT_NOT_REACHED();
- return String();
-}
-
-void CSSValue::destroy()
-{
- switch (classType()) {
- case BorderImageSliceClass:
- delete toCSSBorderImageSliceValue(this);
- return;
- case CanvasClass:
- delete toCSSCanvasValue(this);
- return;
- case CursorImageClass:
- delete toCSSCursorImageValue(this);
- return;
- case FontFaceSrcClass:
- delete toCSSFontFaceSrcValue(this);
- return;
- case FontFeatureClass:
- delete toCSSFontFeatureValue(this);
- return;
- case FunctionClass:
- delete toCSSFunctionValue(this);
- return;
- case LinearGradientClass:
- delete toCSSLinearGradientValue(this);
- return;
- case RadialGradientClass:
- delete toCSSRadialGradientValue(this);
- return;
- case CrossfadeClass:
- delete toCSSCrossfadeValue(this);
- return;
- case ImageClass:
- delete toCSSImageValue(this);
- return;
- case InheritedClass:
- delete toCSSInheritedValue(this);
- return;
- case InitialClass:
- delete toCSSInitialValue(this);
- return;
- case UnsetClass:
- delete toCSSUnsetValue(this);
- return;
- case GridLineNamesClass:
- delete toCSSGridLineNamesValue(this);
- return;
- case GridTemplateAreasClass:
- delete toCSSGridTemplateAreasValue(this);
- return;
- case PathClass:
- delete toCSSPathValue(this);
- return;
- case PrimitiveClass:
- delete toCSSPrimitiveValue(this);
- return;
- case ReflectClass:
- delete toCSSReflectValue(this);
- return;
- case ShadowClass:
- delete toCSSShadowValue(this);
- return;
- case CubicBezierTimingFunctionClass:
- delete toCSSCubicBezierTimingFunctionValue(this);
- return;
- case StepsTimingFunctionClass:
- delete toCSSStepsTimingFunctionValue(this);
- return;
- case UnicodeRangeClass:
- delete toCSSUnicodeRangeValue(this);
- return;
- case ValueListClass:
- delete toCSSValueList(this);
- return;
- case LineBoxContainClass:
- delete toCSSLineBoxContainValue(this);
- return;
- case CalculationClass:
- delete toCSSCalcValue(this);
- return;
- case ImageSetClass:
- delete toCSSImageSetValue(this);
- return;
- case CSSSVGDocumentClass:
- delete toCSSSVGDocumentValue(this);
- return;
- case CSSContentDistributionClass:
- delete toCSSContentDistributionValue(this);
- return;
- }
- ASSERT_NOT_REACHED();
-}
-
-void CSSValue::finalizeGarbageCollectedObject()
+DEFINE_TRACE(CSSValue)
haraken 2015/06/11 02:48:53 You can inline this by using DEFINE_INLINE_TRACE.
sashab 2015/06/11 23:05:34 Great! Done.
{
- switch (classType()) {
- case BorderImageSliceClass:
- toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
- return;
- case CanvasClass:
- toCSSCanvasValue(this)->~CSSCanvasValue();
- return;
- case CursorImageClass:
- toCSSCursorImageValue(this)->~CSSCursorImageValue();
- return;
- case FontFaceSrcClass:
- toCSSFontFaceSrcValue(this)->~CSSFontFaceSrcValue();
- return;
- case FontFeatureClass:
- toCSSFontFeatureValue(this)->~CSSFontFeatureValue();
- return;
- case FunctionClass:
- toCSSFunctionValue(this)->~CSSFunctionValue();
- return;
- case LinearGradientClass:
- toCSSLinearGradientValue(this)->~CSSLinearGradientValue();
- return;
- case RadialGradientClass:
- toCSSRadialGradientValue(this)->~CSSRadialGradientValue();
- return;
- case CrossfadeClass:
- toCSSCrossfadeValue(this)->~CSSCrossfadeValue();
- return;
- case ImageClass:
- toCSSImageValue(this)->~CSSImageValue();
- return;
- case InheritedClass:
- toCSSInheritedValue(this)->~CSSInheritedValue();
- return;
- case InitialClass:
- toCSSInitialValue(this)->~CSSInitialValue();
- return;
- case UnsetClass:
- toCSSUnsetValue(this)->~CSSUnsetValue();
- return;
- case GridLineNamesClass:
- toCSSGridLineNamesValue(this)->~CSSGridLineNamesValue();
- return;
- case GridTemplateAreasClass:
- toCSSGridTemplateAreasValue(this)->~CSSGridTemplateAreasValue();
- return;
- case PathClass:
- toCSSPathValue(this)->~CSSPathValue();
- return;
- case PrimitiveClass:
- toCSSPrimitiveValue(this)->~CSSPrimitiveValue();
- return;
- case ReflectClass:
- toCSSReflectValue(this)->~CSSReflectValue();
- return;
- case ShadowClass:
- toCSSShadowValue(this)->~CSSShadowValue();
- return;
- case CubicBezierTimingFunctionClass:
- toCSSCubicBezierTimingFunctionValue(this)->~CSSCubicBezierTimingFunctionValue();
- return;
- case StepsTimingFunctionClass:
- toCSSStepsTimingFunctionValue(this)->~CSSStepsTimingFunctionValue();
- return;
- case UnicodeRangeClass:
- toCSSUnicodeRangeValue(this)->~CSSUnicodeRangeValue();
- return;
- case ValueListClass:
- toCSSValueList(this)->~CSSValueList();
- return;
- case LineBoxContainClass:
- toCSSLineBoxContainValue(this)->~CSSLineBoxContainValue();
- return;
- case CalculationClass:
- toCSSCalcValue(this)->~CSSCalcValue();
- return;
- case ImageSetClass:
- toCSSImageSetValue(this)->~CSSImageSetValue();
- return;
- case CSSSVGDocumentClass:
- toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue();
- return;
- case CSSContentDistributionClass:
- toCSSContentDistributionValue(this)->~CSSContentDistributionValue();
- return;
- }
- ASSERT_NOT_REACHED();
+ ASSERT(m_data);
+ visitor->trace(*m_data);
haraken 2015/06/11 02:48:53 Nit: Just visitor->trace(m_data) will work.
sashab 2015/06/11 23:05:34 Done.
}
-DEFINE_TRACE(CSSValue)
+DEFINE_TRACE(NullableCSSValue)
{
- switch (classType()) {
- case BorderImageSliceClass:
- toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor);
- return;
- case CanvasClass:
- toCSSCanvasValue(this)->traceAfterDispatch(visitor);
- return;
- case CursorImageClass:
- toCSSCursorImageValue(this)->traceAfterDispatch(visitor);
- return;
- case FontFaceSrcClass:
- toCSSFontFaceSrcValue(this)->traceAfterDispatch(visitor);
- return;
- case FontFeatureClass:
- toCSSFontFeatureValue(this)->traceAfterDispatch(visitor);
- return;
- case FunctionClass:
- toCSSFunctionValue(this)->traceAfterDispatch(visitor);
- return;
- case LinearGradientClass:
- toCSSLinearGradientValue(this)->traceAfterDispatch(visitor);
- return;
- case RadialGradientClass:
- toCSSRadialGradientValue(this)->traceAfterDispatch(visitor);
- return;
- case CrossfadeClass:
- toCSSCrossfadeValue(this)->traceAfterDispatch(visitor);
- return;
- case ImageClass:
- toCSSImageValue(this)->traceAfterDispatch(visitor);
- return;
- case InheritedClass:
- toCSSInheritedValue(this)->traceAfterDispatch(visitor);
- return;
- case InitialClass:
- toCSSInitialValue(this)->traceAfterDispatch(visitor);
- return;
- case UnsetClass:
- toCSSUnsetValue(this)->traceAfterDispatch(visitor);
- return;
- case GridLineNamesClass:
- toCSSGridLineNamesValue(this)->traceAfterDispatch(visitor);
- return;
- case GridTemplateAreasClass:
- toCSSGridTemplateAreasValue(this)->traceAfterDispatch(visitor);
- return;
- case PathClass:
- toCSSPathValue(this)->traceAfterDispatch(visitor);
- return;
- case PrimitiveClass:
- toCSSPrimitiveValue(this)->traceAfterDispatch(visitor);
- return;
- case ReflectClass:
- toCSSReflectValue(this)->traceAfterDispatch(visitor);
- return;
- case ShadowClass:
- toCSSShadowValue(this)->traceAfterDispatch(visitor);
- return;
- case CubicBezierTimingFunctionClass:
- toCSSCubicBezierTimingFunctionValue(this)->traceAfterDispatch(visitor);
- return;
- case StepsTimingFunctionClass:
- toCSSStepsTimingFunctionValue(this)->traceAfterDispatch(visitor);
- return;
- case UnicodeRangeClass:
- toCSSUnicodeRangeValue(this)->traceAfterDispatch(visitor);
- return;
- case ValueListClass:
- toCSSValueList(this)->traceAfterDispatch(visitor);
- return;
- case LineBoxContainClass:
- toCSSLineBoxContainValue(this)->traceAfterDispatch(visitor);
- return;
- case CalculationClass:
- toCSSCalcValue(this)->traceAfterDispatch(visitor);
- return;
- case ImageSetClass:
- toCSSImageSetValue(this)->traceAfterDispatch(visitor);
- return;
- case CSSSVGDocumentClass:
- toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor);
- return;
- case CSSContentDistributionClass:
- toCSSContentDistributionValue(this)->traceAfterDispatch(visitor);
- return;
- }
- ASSERT_NOT_REACHED();
+ if (m_data)
haraken 2015/06/11 02:48:53 Nit: This check won't be needed.
sashab 2015/06/11 23:05:35 Done; traced m_data instead of *m_data.
+ visitor->trace(*m_data);
}
}

Powered by Google App Engine
This is Rietveld 408576698