| 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:
|
|
|