Index: Source/core/css/CSSValueObject.cpp |
diff --git a/Source/core/css/CSSValueObject.cpp b/Source/core/css/CSSValueObject.cpp |
index 0248bd8d865c83ddf3f6a989a8e6715bae771ec8..20ebdc8f1e1599a71be38a4efd506e4da20f3b55 100644 |
--- a/Source/core/css/CSSValueObject.cpp |
+++ b/Source/core/css/CSSValueObject.cpp |
@@ -62,6 +62,18 @@ struct SameSizeAsCSSValueObject : public RefCountedWillBeGarbageCollectedFinaliz |
static_assert(sizeof(CSSValueObject) <= sizeof(SameSizeAsCSSValueObject), "CSSValueObject should stay small"); |
+// Only for use by CSSValueObject. |
+inline CSSPrimitiveValue::CSSLargePrimitiveValue* toCSSLargePrimitiveValue(CSSValueObject* value) |
+{ |
+ ASSERT_WITH_SECURITY_IMPLICATION(!value || value->isPrimitiveValue()); |
+ return static_cast<CSSPrimitiveValue::CSSLargePrimitiveValue*>(value); |
+} |
+inline CSSPrimitiveValue toCSSPrimitiveValue(const CSSValueObject* value) |
+{ |
+ ASSERT_WITH_SECURITY_IMPLICATION(!value || value->isPrimitiveValue()); |
+ return CSSPrimitiveValue(static_cast<const CSSPrimitiveValue::CSSLargePrimitiveValue*>(value)); |
+} |
+ |
bool CSSValueObject::isImplicitInitialValue() const |
{ |
return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); |
@@ -126,7 +138,7 @@ bool CSSValueObject::equals(const CSSValueObject& other) const |
case PathClass: |
return compareCSSValues<CSSPathValue>(*this, other); |
case PrimitiveClass: |
- return compareCSSValues<CSSPrimitiveValue>(*this, other); |
+ return toCSSPrimitiveValue(this).equals(toCSSPrimitiveValue(&other)); |
case ReflectClass: |
return compareCSSValues<CSSReflectValue>(*this, other); |
case ShadowClass: |
@@ -193,7 +205,7 @@ String CSSValueObject::cssText() const |
case PathClass: |
return toCSSPathValue(this)->customCSSText(); |
case PrimitiveClass: |
- return toCSSPrimitiveValue(this)->customCSSText(); |
+ return toCSSPrimitiveValue(this).customCSSText(); |
case ReflectClass: |
return toCSSReflectValue(this)->customCSSText(); |
case ShadowClass: |
@@ -273,7 +285,7 @@ void CSSValueObject::destroy() |
delete toCSSPathValue(this); |
return; |
case PrimitiveClass: |
- delete toCSSPrimitiveValue(this); |
+ delete toCSSLargePrimitiveValue(this); |
return; |
case ReflectClass: |
delete toCSSReflectValue(this); |
@@ -364,7 +376,7 @@ void CSSValueObject::finalizeGarbageCollectedObject() |
toCSSPathValue(this)->~CSSPathValue(); |
return; |
case PrimitiveClass: |
- toCSSPrimitiveValue(this)->~CSSPrimitiveValue(); |
+ toCSSLargePrimitiveValue(this)->~CSSLargePrimitiveValue(); |
return; |
case ReflectClass: |
toCSSReflectValue(this)->~CSSReflectValue(); |
@@ -455,7 +467,7 @@ DEFINE_TRACE(CSSValueObject) |
toCSSPathValue(this)->traceAfterDispatch(visitor); |
return; |
case PrimitiveClass: |
- toCSSPrimitiveValue(this)->traceAfterDispatch(visitor); |
+ toCSSLargePrimitiveValue(this)->traceAfterDispatch(visitor); |
return; |
case ReflectClass: |
toCSSReflectValue(this)->traceAfterDispatch(visitor); |