Chromium Code Reviews| 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; |
| } |