Chromium Code Reviews| 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); |
| } |
| } |