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

Unified Diff: third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp

Issue 2346193002: Split CSSPrimitiveValue into CSSPrimitiveValue and CSSIdentifierValue (Closed)
Patch Set: Rebase please work Created 4 years, 3 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: third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
index ce08752b343afb1db20b13f87687c154164cbc08..c502ac825e6893fc0b94b68f4e148a178c70d871 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -297,14 +297,14 @@ CSSPrimitiveValue* consumeTime(CSSParserTokenRange& range, ValueRange valueRange
return nullptr;
}
-CSSPrimitiveValue* consumeIdent(CSSParserTokenRange& range)
+CSSIdentifierValue* consumeIdent(CSSParserTokenRange& range)
{
if (range.peek().type() != IdentToken)
return nullptr;
- return CSSPrimitiveValue::createIdentifier(range.consumeIncludingWhitespace().id());
+ return CSSIdentifierValue::create(range.consumeIncludingWhitespace().id());
}
-CSSPrimitiveValue* consumeIdentRange(CSSParserTokenRange& range, CSSValueID lower, CSSValueID upper)
+CSSIdentifierValue* consumeIdentRange(CSSParserTokenRange& range, CSSValueID lower, CSSValueID upper)
{
if (range.peek().id() < lower || range.peek().id() > upper)
return nullptr;
@@ -490,7 +490,7 @@ CSSValue* consumeColor(CSSParserTokenRange& range, CSSParserMode cssParserMode,
return CSSColorValue::create(color);
}
-static CSSPrimitiveValue* consumePositionComponent(CSSParserTokenRange& range, CSSParserMode cssParserMode, UnitlessQuirk unitless, bool& horizontalEdge, bool& verticalEdge)
+static CSSValue* consumePositionComponent(CSSParserTokenRange& range, CSSParserMode cssParserMode, UnitlessQuirk unitless, bool& horizontalEdge, bool& verticalEdge)
{
if (range.peek().type() != IdentToken)
return consumeLengthOrPercent(range, cssParserMode, ValueRangeAll, unitless);
@@ -510,30 +510,36 @@ static CSSPrimitiveValue* consumePositionComponent(CSSParserTokenRange& range, C
return consumeIdent(range);
}
-static bool isHorizontalPositionKeywordOnly(const CSSPrimitiveValue& value)
+static bool isHorizontalPositionKeywordOnly(const CSSValue& value)
{
- return value.isValueID() && (value.getValueID() == CSSValueLeft || value.getValueID() == CSSValueRight);
+ if (!value.isIdentifierValue())
+ return false;
+ CSSValueID valueID = toCSSIdentifierValue(value).getValueID();
+ return valueID == CSSValueLeft || valueID == CSSValueRight;
}
-static bool isVerticalPositionKeywordOnly(const CSSPrimitiveValue& value)
+static bool isVerticalPositionKeywordOnly(const CSSValue& value)
{
- return value.isValueID() && (value.getValueID() == CSSValueTop || value.getValueID() == CSSValueBottom);
+ if (!value.isIdentifierValue())
+ return false;
+ CSSValueID valueID = toCSSIdentifierValue(value).getValueID();
+ return valueID == CSSValueTop || valueID == CSSValueBottom;
}
-static void positionFromOneValue(CSSPrimitiveValue* value, CSSValue*& resultX, CSSValue*& resultY)
+static void positionFromOneValue(CSSValue* value, CSSValue*& resultX, CSSValue*& resultY)
{
bool valueAppliesToYAxisOnly = isVerticalPositionKeywordOnly(*value);
resultX = value;
- resultY = CSSPrimitiveValue::createIdentifier(CSSValueCenter);
+ resultY = CSSIdentifierValue::create(CSSValueCenter);
if (valueAppliesToYAxisOnly)
std::swap(resultX, resultY);
}
-static void positionFromTwoValues(CSSPrimitiveValue* value1, CSSPrimitiveValue* value2,
+static void positionFromTwoValues(CSSValue* value1, CSSValue* value2,
CSSValue*& resultX, CSSValue*& resultY)
{
bool mustOrderAsXY = isHorizontalPositionKeywordOnly(*value1) || isVerticalPositionKeywordOnly(*value2)
- || !value1->isValueID() || !value2->isValueID();
+ || !value1->isIdentifierValue() || !value2->isIdentifierValue();
bool mustOrderAsYX = isVerticalPositionKeywordOnly(*value1) || isHorizontalPositionKeywordOnly(*value2);
DCHECK(!mustOrderAsXY || !mustOrderAsYX);
resultX = value1;
@@ -542,12 +548,11 @@ static void positionFromTwoValues(CSSPrimitiveValue* value1, CSSPrimitiveValue*
std::swap(resultX, resultY);
}
-static void positionFromThreeOrFourValues(CSSPrimitiveValue** values, CSSValue*& resultX, CSSValue*& resultY)
+static void positionFromThreeOrFourValues(CSSValue** values, CSSValue*& resultX, CSSValue*& resultY)
{
- CSSPrimitiveValue* center = nullptr;
+ CSSIdentifierValue* center = nullptr;
for (int i = 0; values[i]; i++) {
- CSSPrimitiveValue* currentValue = values[i];
- DCHECK(currentValue->isValueID());
+ CSSIdentifierValue* currentValue = toCSSIdentifierValue(values[i]);
CSSValueID id = currentValue->getValueID();
if (id == CSSValueCenter) {
@@ -557,7 +562,7 @@ static void positionFromThreeOrFourValues(CSSPrimitiveValue** values, CSSValue*&
}
CSSValue* result = nullptr;
- if (values[i + 1] && !values[i + 1]->isValueID()) {
+ if (values[i + 1] && !values[i + 1]->isIdentifierValue()) {
result = CSSValuePair::create(currentValue, values[++i], CSSValuePair::KeepIdenticalValues);
} else {
result = currentValue;
@@ -588,26 +593,26 @@ bool consumePosition(CSSParserTokenRange& range, CSSParserMode cssParserMode, Un
{
bool horizontalEdge = false;
bool verticalEdge = false;
- CSSPrimitiveValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
+ CSSValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
if (!value1)
return false;
- if (!value1->isValueID())
+ if (!value1->isIdentifierValue())
horizontalEdge = true;
CSSParserTokenRange rangeAfterFirstConsume = range;
- CSSPrimitiveValue* value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
+ CSSValue* value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
if (!value2) {
positionFromOneValue(value1, resultX, resultY);
return true;
}
- CSSPrimitiveValue* value3 = nullptr;
- if (value1->isValueID()
- && value2->isValueID() != (range.peek().type() == IdentToken)
- && (value2->isValueID() ? value2->getValueID() : value1->getValueID()) != CSSValueCenter)
+ CSSValue* value3 = nullptr;
+ if (value1->isIdentifierValue()
+ && value2->isIdentifierValue() != (range.peek().type() == IdentToken)
+ && (value2->isIdentifierValue() ? toCSSIdentifierValue(value2)->getValueID() : toCSSIdentifierValue(value1)->getValueID()) != CSSValueCenter)
value3 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
if (!value3) {
- if (verticalEdge && !value2->isValueID()) {
+ if (verticalEdge && !value2->isIdentifierValue()) {
range = rangeAfterFirstConsume;
positionFromOneValue(value1, resultX, resultY);
return true;
@@ -616,10 +621,10 @@ bool consumePosition(CSSParserTokenRange& range, CSSParserMode cssParserMode, Un
return true;
}
- CSSPrimitiveValue* value4 = nullptr;
- if (value3->isValueID() && value3->getValueID() != CSSValueCenter && range.peek().type() != IdentToken)
+ CSSValue* value4 = nullptr;
+ if (value3->isIdentifierValue() && toCSSIdentifierValue(value3)->getValueID() != CSSValueCenter && range.peek().type() != IdentToken)
value4 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
- CSSPrimitiveValue* values[5];
+ CSSValue* values[5];
values[0] = value1;
values[1] = value2;
values[2] = value3;
@@ -642,13 +647,13 @@ bool consumeOneOrTwoValuedPosition(CSSParserTokenRange& range, CSSParserMode css
{
bool horizontalEdge = false;
bool verticalEdge = false;
- CSSPrimitiveValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
+ CSSValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
if (!value1)
return false;
- if (!value1->isValueID())
+ if (!value1->isIdentifierValue())
horizontalEdge = true;
- CSSPrimitiveValue* value2 = nullptr;
+ CSSValue* value2 = nullptr;
if (!verticalEdge || range.peek().type() == IdentToken)
value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge);
if (!value2) {
@@ -811,13 +816,13 @@ static CSSValue* consumeDeprecatedRadialGradient(CSSParserTokenRange& args, CSSP
if ((centerX || centerY) && !consumeCommaIncludingWhitespace(args))
return nullptr;
- result->setFirstX(toCSSPrimitiveValue(centerX));
- result->setSecondX(toCSSPrimitiveValue(centerX));
- result->setFirstY(toCSSPrimitiveValue(centerY));
- result->setSecondY(toCSSPrimitiveValue(centerY));
+ result->setFirstX(centerX);
+ result->setSecondX(centerX);
+ result->setFirstY(centerY);
+ result->setSecondY(centerY);
- CSSPrimitiveValue* shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args);
- CSSPrimitiveValue* sizeKeyword = consumeIdent<CSSValueClosestSide, CSSValueClosestCorner, CSSValueFarthestSide, CSSValueFarthestCorner, CSSValueContain, CSSValueCover>(args);
+ CSSIdentifierValue* shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args);
+ CSSIdentifierValue* sizeKeyword = consumeIdent<CSSValueClosestSide, CSSValueClosestCorner, CSSValueFarthestSide, CSSValueFarthestCorner, CSSValueContain, CSSValueCover>(args);
if (!shape)
shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args);
result->setShape(shape);
@@ -848,8 +853,8 @@ static CSSValue* consumeRadialGradient(CSSParserTokenRange& args, CSSParserMode
{
CSSRadialGradientValue* result = CSSRadialGradientValue::create(repeating, CSSRadialGradient);
- CSSPrimitiveValue* shape = nullptr;
- CSSPrimitiveValue* sizeKeyword = nullptr;
+ CSSIdentifierValue* shape = nullptr;
+ CSSIdentifierValue* sizeKeyword = nullptr;
CSSPrimitiveValue* horizontalSize = nullptr;
CSSPrimitiveValue* verticalSize = nullptr;
@@ -937,12 +942,12 @@ static CSSValue* consumeLinearGradient(CSSParserTokenRange& args, CSSParserMode
if (angle) {
result->setAngle(angle);
} else if (gradientType == CSSPrefixedLinearGradient || consumeIdent<CSSValueTo>(args)) {
- CSSPrimitiveValue* endX = consumeIdent<CSSValueLeft, CSSValueRight>(args);
- CSSPrimitiveValue* endY = consumeIdent<CSSValueBottom, CSSValueTop>(args);
+ CSSIdentifierValue* endX = consumeIdent<CSSValueLeft, CSSValueRight>(args);
+ CSSIdentifierValue* endY = consumeIdent<CSSValueBottom, CSSValueTop>(args);
if (!endX && !endY) {
if (gradientType == CSSLinearGradient)
return nullptr;
- endY = CSSPrimitiveValue::createIdentifier(CSSValueTop);
+ endY = CSSIdentifierValue::create(CSSValueTop);
expectComma = false;
} else if (!endX) {
endX = consumeIdent<CSSValueLeft, CSSValueRight>(args);

Powered by Google App Engine
This is Rietveld 408576698