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/CSSPropertyParser.cpp

Issue 1430603003: Add a consumeIdent<CSSValueID...> helper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@anim5
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index e3a842481667c8b4c121d1a588343e702dc30320..46f1c002f9027bd86875e48f07e0a376f992506c 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -89,6 +89,19 @@ static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeIdent(CSSParserTokenRang
return cssValuePool().createIdentifierValue(range.consumeIncludingWhitespace().id());
}
+template<typename... emptyBaseCase> inline bool identMatches(CSSValueID id) { return false; }
+template<CSSValueID head, CSSValueID... tail> inline bool identMatches(CSSValueID id)
+{
+ return id == head || identMatches<tail...>(id);
+}
+
+template<CSSValueID... names> PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeIdent(CSSParserTokenRange& range)
+{
+ if (range.peek().type() != IdentToken || !identMatches<names...>(range.peek().id()))
+ return nullptr;
+ return cssValuePool().createIdentifierValue(range.consumeIncludingWhitespace().id());
+}
+
static PassRefPtrWillBeRawPtr<CSSCustomIdentValue> consumeCustomIdent(CSSParserTokenRange& range)
{
if (range.peek().type() != IdentToken)
@@ -664,9 +677,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeFontVariantLigatures(CSSParserTok
static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeFontVariant(CSSParserTokenRange& range)
{
- if (range.peek().id() == CSSValueNormal || range.peek().id() == CSSValueSmallCaps)
- return consumeIdent(range);
- return nullptr;
+ return consumeIdent<CSSValueNormal, CSSValueSmallCaps>(range);
}
static PassRefPtrWillBeRawPtr<CSSValue> consumeFontVariantList(CSSParserTokenRange& range)
@@ -738,9 +749,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeFamilyName(CSSParserTokenRange& r
static PassRefPtrWillBeRawPtr<CSSValue> consumeGenericFamily(CSSParserTokenRange& range)
{
- if (range.peek().id() >= CSSValueSerif && range.peek().id() <= CSSValueWebkitBody)
- return consumeIdent(range);
- return nullptr;
+ return consumeIdent<CSSValueSerif, CSSValueSansSerif, CSSValueCursive, CSSValueFantasy, CSSValueMonospace, CSSValueWebkitBody>(range);
}
static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFamily(CSSParserTokenRange& range)
@@ -839,19 +848,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeCounter(CSSParserTokenRange& rang
static PassRefPtrWillBeRawPtr<CSSValue> consumePageSize(CSSParserTokenRange& range)
{
- switch (range.peek().id()) {
- case CSSValueA3:
- case CSSValueA4:
- case CSSValueA5:
- case CSSValueB4:
- case CSSValueB5:
- case CSSValueLedger:
- case CSSValueLegal:
- case CSSValueLetter:
- return consumeIdent(range);
- default:
- return nullptr;
- }
+ return consumeIdent<CSSValueA3, CSSValueA4, CSSValueA5, CSSValueB4, CSSValueB5, CSSValueLedger, CSSValueLegal, CSSValueLetter>(range);
}
static PassRefPtrWillBeRawPtr<CSSValueList> consumeSize(CSSParserTokenRange& range, CSSParserMode cssParserMode)
@@ -872,9 +869,7 @@ static PassRefPtrWillBeRawPtr<CSSValueList> consumeSize(CSSParserTokenRange& ran
}
RefPtrWillBeRawPtr<CSSValue> pageSize = consumePageSize(range);
- RefPtrWillBeRawPtr<CSSValue> orientation = nullptr;
- if (range.peek().id() == CSSValuePortrait || range.peek().id() == CSSValueLandscape)
- orientation = consumeIdent(range);
+ RefPtrWillBeRawPtr<CSSValue> orientation = consumeIdent<CSSValuePortrait, CSSValueLandscape>(range);
if (!pageSize)
pageSize = consumePageSize(range);
@@ -1104,39 +1099,22 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeColumnSpan(CSSParserTokenRange& r
static PassRefPtrWillBeRawPtr<CSSValue> consumeZoom(CSSParserTokenRange& range, const CSSParserContext& context)
{
const CSSParserToken& token = range.peek();
- CSSValueID id = token.id();
RefPtrWillBeRawPtr<CSSPrimitiveValue> zoom;
- if (id == CSSValueNormal || id == CSSValueReset || id == CSSValueDocument) {
- zoom = consumeIdent(range);
+ if (token.type() == IdentToken) {
+ zoom = consumeIdent<CSSValueNormal, CSSValueReset, CSSValueDocument>(range);
} else {
zoom = consumePercent(range, ValueRangeNonNegative);
if (!zoom)
zoom = consumeNumber(range, ValueRangeNonNegative);
}
if (zoom && context.useCounter()
- && !(id == CSSValueNormal
+ && !(token.id() == CSSValueNormal
|| (token.type() == NumberToken && zoom->getDoubleValue() == 1)
|| (token.type() == PercentageToken && zoom->getDoubleValue() == 100)))
context.useCounter()->count(UseCounter::CSSZoomNotEqualToOne);
return zoom.release();
}
-static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationDirection(CSSParserTokenRange& range)
-{
- CSSValueID id = range.peek().id();
- if (id == CSSValueNormal || id == CSSValueAlternate || id == CSSValueReverse || id == CSSValueAlternateReverse)
- return consumeIdent(range);
- return nullptr;
-}
-
-static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationFillMode(CSSParserTokenRange& range)
-{
- CSSValueID id = range.peek().id();
- if (id == CSSValueNone || id == CSSValueForwards || id == CSSValueBackwards || id == CSSValueBoth)
- return consumeIdent(range);
- return nullptr;
-}
-
static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationIterationCount(CSSParserTokenRange& range)
{
if (range.peek().id() == CSSValueInfinite)
@@ -1144,14 +1122,6 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationIterationCount(CSSParser
return consumeNumber(range, ValueRangeNonNegative);
}
-static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationPlayState(CSSParserTokenRange& range)
-{
- CSSValueID id = range.peek().id();
- if (id == CSSValueRunning || id == CSSValuePaused)
- return consumeIdent(range);
- return nullptr;
-}
-
static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationName(CSSParserTokenRange& range, const CSSParserContext& context, bool allowQuotedName)
{
if (range.peek().id() == CSSValueNone)
@@ -1274,18 +1244,18 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeAnimationValue(CSSPropertyID prop
case CSSPropertyTransitionDelay:
return consumeTime(range, ValueRangeAll);
case CSSPropertyAnimationDirection:
- return consumeAnimationDirection(range);
+ return consumeIdent<CSSValueNormal, CSSValueAlternate, CSSValueReverse, CSSValueAlternateReverse>(range);
case CSSPropertyAnimationDuration:
case CSSPropertyTransitionDuration:
return consumeTime(range, ValueRangeNonNegative);
case CSSPropertyAnimationFillMode:
- return consumeAnimationFillMode(range);
+ return consumeIdent<CSSValueNone, CSSValueForwards, CSSValueBackwards, CSSValueBoth>(range);
case CSSPropertyAnimationIterationCount:
return consumeAnimationIterationCount(range);
case CSSPropertyAnimationName:
return consumeAnimationName(range, context, useLegacyParsing);
case CSSPropertyAnimationPlayState:
- return consumeAnimationPlayState(range);
+ return consumeIdent<CSSValueRunning, CSSValuePaused>(range);
case CSSPropertyTransitionProperty:
return consumeTransitionProperty(range);
case CSSPropertyAnimationTimingFunction:
@@ -1746,18 +1716,15 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeSingleViewportDescriptor(CSSParse
return consumePercent(range, ValueRangeNonNegative);
}
case CSSPropertyUserZoom:
- if (id == CSSValueZoom || id == CSSValueFixed)
- return consumeIdent(range);
- break;
+ return consumeIdent<CSSValueZoom, CSSValueFixed>(range);
case CSSPropertyOrientation:
- if (id == CSSValueAuto || id == CSSValuePortrait || id == CSSValueLandscape)
- return consumeIdent(range);
- break;
+ return consumeIdent<CSSValueAuto, CSSValuePortrait, CSSValueLandscape>(range);
default:
ASSERT_NOT_REACHED();
rwlbuis 2015/10/29 20:23:37 You could even remove this since we do this a bit
Timothy Loh 2015/10/30 00:00:36 I think the compiler complains without a default c
break;
}
+ ASSERT_NOT_REACHED();
return nullptr;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698