Index: Source/core/css/CSSPrimitiveValue.cpp |
diff --git a/Source/core/css/CSSPrimitiveValue.cpp b/Source/core/css/CSSPrimitiveValue.cpp |
index 13db75eba85c249d59a5a4e575c96cc1484b51b4..ddcf81afac82148472227faa66ed9b702cd1e016 100644 |
--- a/Source/core/css/CSSPrimitiveValue.cpp |
+++ b/Source/core/css/CSSPrimitiveValue.cpp |
@@ -93,6 +93,8 @@ static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit |
case CSSPrimitiveValue::CSS_COUNTER: |
case CSSPrimitiveValue::CSS_COUNTER_NAME: |
case CSSPrimitiveValue::CSS_IDENT: |
+ case CSSPrimitiveValue::CSS_PROPERTY_ID: |
+ case CSSPrimitiveValue::CSS_VALUE_ID: |
case CSSPrimitiveValue::CSS_PAIR: |
case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: |
case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER: |
@@ -164,6 +166,9 @@ static CSSTextCache& cssTextCache() |
unsigned short CSSPrimitiveValue::primitiveType() const |
{ |
+ if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VALUE_ID) |
+ return CSS_IDENT; |
+ |
if (m_primitiveUnitType != CSSPrimitiveValue::CSS_CALC) |
return m_primitiveUnitType; |
@@ -186,30 +191,51 @@ unsigned short CSSPrimitiveValue::primitiveType() const |
return CSSPrimitiveValue::CSS_UNKNOWN; |
} |
-static const AtomicString& valueOrPropertyName(int valueOrPropertyID) |
+static const AtomicString& propertyName(CSSPropertyID propertyID) |
{ |
- ASSERT_ARG(valueOrPropertyID, valueOrPropertyID >= 0); |
- ASSERT_ARG(valueOrPropertyID, valueOrPropertyID < numCSSValueKeywords || (valueOrPropertyID >= firstCSSProperty && valueOrPropertyID < firstCSSProperty + numCSSProperties)); |
+ ASSERT_ARG(propertyID, propertyID >= 0); |
+ ASSERT_ARG(propertyID, (propertyID >= firstCSSProperty && propertyID < firstCSSProperty + numCSSProperties)); |
- if (valueOrPropertyID < 0) |
+ if (propertyID < 0) |
return nullAtom; |
- if (valueOrPropertyID < numCSSValueKeywords) { |
- static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally. |
- AtomicString& keywordString = keywordStrings[valueOrPropertyID]; |
- if (keywordString.isNull()) |
- keywordString = getValueName(valueOrPropertyID); |
- return keywordString; |
- } |
+ return getPropertyNameAtomicString(propertyID); |
+} |
+ |
+static const AtomicString& valueName(CSSValueID valueID) |
+{ |
+ ASSERT_ARG(valueID, valueID >= 0); |
+ ASSERT_ARG(valueID, valueID < numCSSValueKeywords); |
- return getPropertyNameAtomicString(static_cast<CSSPropertyID>(valueOrPropertyID)); |
+ if (valueID < 0) |
+ return nullAtom; |
+ |
+ static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally. |
+ AtomicString& keywordString = keywordStrings[valueID]; |
+ if (keywordString.isNull()) |
+ keywordString = getValueName(valueID); |
+ return keywordString; |
} |
-CSSPrimitiveValue::CSSPrimitiveValue(int ident) |
+CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID) |
: CSSValue(PrimitiveClass) |
{ |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = ident; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = valueID; |
+} |
+ |
+CSSPrimitiveValue::CSSPrimitiveValue(CSSPropertyID propertyID) |
+ : CSSValue(PrimitiveClass) |
+{ |
+ m_primitiveUnitType = CSS_PROPERTY_ID; |
+ m_value.propertyID = propertyID; |
+} |
+ |
+CSSPrimitiveValue::CSSPrimitiveValue(int parserOperator) |
+ : CSSValue(PrimitiveClass) |
+{ |
+ m_primitiveUnitType = CSS_PARSER_OPERATOR; |
+ m_value.parserOperator = parserOperator; |
} |
CSSPrimitiveValue::CSSPrimitiveValue(double num, UnitTypes type) |
@@ -241,36 +267,36 @@ CSSPrimitiveValue::CSSPrimitiveValue(const Length& length) |
{ |
switch (length.type()) { |
case Auto: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueAuto; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueAuto; |
break; |
case WebCore::Fixed: |
m_primitiveUnitType = CSS_PX; |
m_value.num = length.value(); |
break; |
case Intrinsic: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueIntrinsic; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueIntrinsic; |
break; |
case MinIntrinsic: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueMinIntrinsic; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueMinIntrinsic; |
break; |
case MinContent: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueWebkitMinContent; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueWebkitMinContent; |
break; |
case MaxContent: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueWebkitMaxContent; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueWebkitMaxContent; |
break; |
case FillAvailable: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueWebkitFillAvailable; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueWebkitFillAvailable; |
break; |
case FitContent: |
- m_primitiveUnitType = CSS_IDENT; |
- m_value.ident = CSSValueWebkitFitContent; |
+ m_primitiveUnitType = CSS_VALUE_ID; |
+ m_value.valueID = CSSValueWebkitFitContent; |
break; |
case Percent: |
m_primitiveUnitType = CSS_PERCENTAGE; |
@@ -418,6 +444,8 @@ void CSSPrimitiveValue::cleanup() |
case CSS_UNICODE_RANGE: |
case CSS_PARSER_OPERATOR: |
case CSS_PARSER_IDENTIFIER: |
+ case CSS_PROPERTY_ID: |
+ case CSS_VALUE_ID: |
break; |
} |
m_primitiveUnitType = 0; |
@@ -725,8 +753,10 @@ String CSSPrimitiveValue::getStringValue(ExceptionCode& ec) const |
case CSS_URI: |
case CSS_VARIABLE_NAME: |
return m_value.string; |
- case CSS_IDENT: |
- return valueOrPropertyName(m_value.ident); |
+ case CSS_VALUE_ID: |
+ return valueName(m_value.valueID); |
+ case CSS_PROPERTY_ID: |
+ return propertyName(m_value.propertyID); |
default: |
ec = INVALID_ACCESS_ERR; |
break; |
@@ -743,8 +773,10 @@ String CSSPrimitiveValue::getStringValue() const |
case CSS_URI: |
case CSS_VARIABLE_NAME: |
return m_value.string; |
- case CSS_IDENT: |
- return valueOrPropertyName(m_value.ident); |
+ case CSS_VALUE_ID: |
+ return valueName(m_value.valueID); |
+ case CSS_PROPERTY_ID: |
+ return propertyName(m_value.propertyID); |
default: |
break; |
} |
@@ -922,8 +954,11 @@ String CSSPrimitiveValue::customCssText() const |
case CSS_URI: |
text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")"; |
break; |
- case CSS_IDENT: |
- text = valueOrPropertyName(m_value.ident); |
+ case CSS_VALUE_ID: |
+ text = valueName(m_value.valueID); |
+ break; |
+ case CSS_PROPERTY_ID: |
+ text = propertyName(m_value.propertyID); |
break; |
case CSS_ATTR: { |
StringBuilder result; |
@@ -1005,7 +1040,7 @@ String CSSPrimitiveValue::customCssText() const |
text = getPairValue()->cssText(); |
break; |
case CSS_PARSER_OPERATOR: { |
- char c = static_cast<char>(m_value.ident); |
+ char c = static_cast<char>(m_value.parserOperator); |
text = String(&c, 1U); |
break; |
} |
@@ -1164,8 +1199,11 @@ PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::cloneForCSSOM() const |
case CSS_DPCM: |
result = CSSPrimitiveValue::create(m_value.num, static_cast<UnitTypes>(m_primitiveUnitType)); |
break; |
- case CSS_IDENT: |
- result = CSSPrimitiveValue::createIdentifier(m_value.ident); |
+ case CSS_PROPERTY_ID: |
+ result = CSSPrimitiveValue::createIdentifier(m_value.propertyID); |
+ break; |
+ case CSS_VALUE_ID: |
+ result = CSSPrimitiveValue::createIdentifier(m_value.valueID); |
break; |
case CSS_RGBCOLOR: |
result = CSSPrimitiveValue::createColor(m_value.rgbcolor); |
@@ -1221,8 +1259,10 @@ bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const |
case CSS_VMAX: |
case CSS_DIMENSION: |
return m_value.num == other.m_value.num; |
- case CSS_IDENT: |
- return valueOrPropertyName(m_value.ident) == valueOrPropertyName(other.m_value.ident); |
+ case CSS_PROPERTY_ID: |
+ return propertyName(m_value.propertyID) == propertyName(other.m_value.propertyID); |
+ case CSS_VALUE_ID: |
+ return valueName(m_value.valueID) == valueName(other.m_value.valueID); |
case CSS_STRING: |
case CSS_URI: |
case CSS_ATTR: |
@@ -1242,7 +1282,7 @@ bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const |
case CSS_PAIR: |
return m_value.pair && other.m_value.pair && m_value.pair->equals(*other.m_value.pair); |
case CSS_PARSER_OPERATOR: |
- return m_value.ident == other.m_value.ident; |
+ return m_value.valueID == other.m_value.valueID; |
case CSS_CALC: |
return m_value.calc && other.m_value.calc && m_value.calc->equals(*other.m_value.calc); |
case CSS_SHAPE: |