⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 197072 in webkit


Ignore:
Timestamp:
Feb 25, 2016, 1:43:54 AM (11 years ago)
Author:
Carlos Garcia Campos
Message:

Merge r196851 - Use more concrete types for parsing positions
​https://bugs.webkit.org/show_bug.cgi?id=154481

Reviewed by Dean Jackson.

Use CSSPrimitiveValues for position-parsing functions where possible, to avoid
the need to downcast<> the values returned by the parsing functions.

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseValue):
(WebCore::CSSParser::parsePositionX):
(WebCore::CSSParser::parsePositionY):
(WebCore::CSSParser::parse4ValuesFillPosition):
(WebCore::CSSParser::parse3ValuesFillPosition):
(WebCore::CSSParser::parseFillPosition):
(WebCore::CSSParser::parse2ValuesFillPosition):
(WebCore::CSSParser::parseFillProperty):
(WebCore::CSSParser::parseTransformOriginShorthand):
(WebCore::CSSParser::parseBasicShapeCircle):
(WebCore::CSSParser::parseBasicShapeEllipse):
(WebCore::CSSParser::parseDeprecatedRadialGradient):
(WebCore::CSSParser::parseRadialGradient):
(WebCore::CSSParser::parseTransformOrigin):
(WebCore::CSSParser::parsePerspectiveOrigin):

  • css/CSSParser.h:
Location:
releases/WebKitGTK/webkit-2.12/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog

    r197071 r197072  
     12016-02-19  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Use more concrete types for parsing positions
     4        https://bugs.webkit.org/show_bug.cgi?id=154481
     5
     6        Reviewed by Dean Jackson.
     7
     8        Use CSSPrimitiveValues for position-parsing functions where possible, to avoid
     9        the need to downcast<> the values returned by the parsing functions.
     10
     11        * css/CSSParser.cpp:
     12        (WebCore::CSSParser::parseValue):
     13        (WebCore::CSSParser::parsePositionX):
     14        (WebCore::CSSParser::parsePositionY):
     15        (WebCore::CSSParser::parse4ValuesFillPosition):
     16        (WebCore::CSSParser::parse3ValuesFillPosition):
     17        (WebCore::CSSParser::parseFillPosition):
     18        (WebCore::CSSParser::parse2ValuesFillPosition):
     19        (WebCore::CSSParser::parseFillProperty):
     20        (WebCore::CSSParser::parseTransformOriginShorthand):
     21        (WebCore::CSSParser::parseBasicShapeCircle):
     22        (WebCore::CSSParser::parseBasicShapeEllipse):
     23        (WebCore::CSSParser::parseDeprecatedRadialGradient):
     24        (WebCore::CSSParser::parseRadialGradient):
     25        (WebCore::CSSParser::parseTransformOrigin):
     26        (WebCore::CSSParser::parsePerspectiveOrigin):
     27        * css/CSSParser.h:
     28
    1292016-02-18  Gavin Barraclough  <barraclough@apple.com>
    230
  • releases/WebKitGTK/webkit-2.12/Source/WebCore/css/CSSParser.cpp

    r196691 r197072  
    26982698    case CSSPropertyTransformOriginY:
    26992699    case CSSPropertyTransformOriginZ: {
    2700         RefPtr<CSSValue> val1;
    2701         RefPtr<CSSValue> val2;
     2700        RefPtr<CSSPrimitiveValue> val1;
     2701        RefPtr<CSSPrimitiveValue> val2;
    27022702        RefPtr<CSSValue> val3;
    27032703        CSSPropertyID propId1, propId2, propId3;
    … …  
    27302730    case CSSPropertyPerspectiveOriginX:
    27312731    case CSSPropertyPerspectiveOriginY: {
    2732         RefPtr<CSSValue> val1;
    2733         RefPtr<CSSValue> val2;
     2732        RefPtr<CSSPrimitiveValue> val1;
     2733        RefPtr<CSSPrimitiveValue> val2;
    27342734        CSSPropertyID propId1, propId2;
    27352735        if (parsePerspectiveOrigin(propId, propId1, propId2, val1, val2)) {
    … …  
    43854385}
    43864386
    4387 RefPtr<CSSValue> CSSParser::parsePositionX(CSSParserValueList& valueList)
     4387RefPtr<CSSPrimitiveValue> CSSParser::parsePositionX(CSSParserValueList& valueList)
    43884388{
    43894389    int id = valueList.current()->id;
    … …  
    44024402}
    44034403
    4404 RefPtr<CSSValue> CSSParser::parsePositionY(CSSParserValueList& valueList)
     4404RefPtr<CSSPrimitiveValue> CSSParser::parsePositionY(CSSParserValueList& valueList)
    44054405{
    44064406    int id = valueList.current()->id;
    … …  
    44824482}
    44834483
    4484 void CSSParser::parse4ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSValue>& value1, RefPtr<CSSValue>& value2, RefPtr<CSSPrimitiveValue>&& parsedValue1, RefPtr<CSSPrimitiveValue>&& parsedValue2)
     4484void CSSParser::parse4ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2, RefPtr<CSSPrimitiveValue>&& parsedValue1, RefPtr<CSSPrimitiveValue>&& parsedValue2)
    44854485{
    44864486    // [ left | right ] [ <percentage] | <length> ] && [ top | bottom ] [ <percentage> | <length> ]
    … …  
    45304530    valueList.next();
    45314531}
    4532 void CSSParser::parse3ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSValue>& value1, RefPtr<CSSValue>& value2, RefPtr<CSSPrimitiveValue>&& parsedValue1, RefPtr<CSSPrimitiveValue>&& parsedValue2)
     4532void CSSParser::parse3ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2, RefPtr<CSSPrimitiveValue>&& parsedValue1, RefPtr<CSSPrimitiveValue>&& parsedValue2)
    45334533{
    45344534    unsigned cumulativeFlags = 0;
    … …  
    46134613
    46144614#ifndef NDEBUG
    4615     CSSPrimitiveValue& first = downcast<CSSPrimitiveValue>(*value1);
    4616     CSSPrimitiveValue& second = downcast<CSSPrimitiveValue>(*value2);
     4615    CSSPrimitiveValue& first = *value1;
     4616    CSSPrimitiveValue& second = *value2;
    46174617    ident1 = first.getPairValue()->first()->getValueID();
    46184618    ident2 = second.getPairValue()->first()->getValueID();
    … …  
    46304630}
    46314631
    4632 void CSSParser::parseFillPosition(CSSParserValueList& valueList, RefPtr<CSSValue>& value1, RefPtr<CSSValue>& value2)
     4632void CSSParser::parseFillPosition(CSSParserValueList& valueList, RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2)
    46334633{
    46344634    unsigned numberOfValues = 0;
    … …  
    46774677    }
    46784678
    4679     RefPtr<CSSPrimitiveValue> parsedValue1 = downcast<CSSPrimitiveValue>(value1.get());
    4680     RefPtr<CSSPrimitiveValue> parsedValue2 = downcast<CSSPrimitiveValue>(value2.get());
     4679    RefPtr<CSSPrimitiveValue> parsedValue1 = value1;
     4680    RefPtr<CSSPrimitiveValue> parsedValue2 = value2;
    46814681
    46824682    value1 = nullptr;
    … …  
    46934693}
    46944694
    4695 void CSSParser::parse2ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSValue>& value1, RefPtr<CSSValue>& value2)
     4695void CSSParser::parse2ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2)
    46964696{
    46974697    CSSParserValue* value = valueList.current();
    … …  
    49044904                    break;
    49054905                case CSSPropertyBackgroundPosition:
    4906                 case CSSPropertyWebkitMaskPosition:
    4907                     parseFillPosition(*m_valueList, currValue, currValue2);
     4906                case CSSPropertyWebkitMaskPosition: {
     4907                    RefPtr<CSSPrimitiveValue> value1;
     4908                    RefPtr<CSSPrimitiveValue> value2;
     4909                    parseFillPosition(*m_valueList, value1, value2);
     4910                    currValue = value1;
     4911                    currValue2 = value2;
    49084912                    // parseFillPosition advances the m_valueList pointer.
    49094913                    break;
     4914                }
    49104915                case CSSPropertyBackgroundPositionX:
    49114916                case CSSPropertyWebkitMaskPositionX: {
    … …  
    51665171}
    51675172
    5168 bool CSSParser::parseTransformOriginShorthand(RefPtr<CSSValue>& value1, RefPtr<CSSValue>& value2, RefPtr<CSSValue>& value3)
     5173bool CSSParser::parseTransformOriginShorthand(RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2, RefPtr<CSSValue>& value3)
    51695174{
    51705175    parse2ValuesFillPosition(*m_valueList, value1, value2);
    … …  
    65316536
    65326537        if (argument->id == CSSValueAt && args.next()) {
    6533             RefPtr<CSSValue> centerX;
    6534             RefPtr<CSSValue> centerY;
     6538            RefPtr<CSSPrimitiveValue> centerX;
     6539            RefPtr<CSSPrimitiveValue> centerY;
    65356540            parseFillPosition(args, centerX, centerY);
    65366541            if (centerX && centerY && !args.current()) {
    6537                 shape->setCenterX(downcast<CSSPrimitiveValue>(centerX.get()));
    6538                 shape->setCenterY(downcast<CSSPrimitiveValue>(centerY.get()));
     6542                shape->setCenterX(centerX);
     6543                shape->setCenterY(centerY);
    65396544            } else
    65406545                return nullptr;
    … …  
    65786583            return nullptr;
    65796584
    6580         RefPtr<CSSValue> centerX;
    6581         RefPtr<CSSValue> centerY;
     6585        RefPtr<CSSPrimitiveValue> centerX;
     6586        RefPtr<CSSPrimitiveValue> centerY;
    65826587        parseFillPosition(args, centerX, centerY);
    65836588        if (!centerX || !centerY || args.current())
    65846589            return nullptr;
    65856590
    6586         shape->setCenterX(downcast<CSSPrimitiveValue>(centerX.get()));
    6587         shape->setCenterY(downcast<CSSPrimitiveValue>(centerY.get()));
     6591        shape->setCenterX(centerX);
     6592        shape->setCenterY(centerY);
    65886593    }
    65896594
    … …  
    89668971
    89678972    // Optional background-position
    8968     RefPtr<CSSValue> centerX;
    8969     RefPtr<CSSValue> centerY;
     8973    RefPtr<CSSPrimitiveValue> centerX;
     8974    RefPtr<CSSPrimitiveValue> centerY;
    89708975    // parse2ValuesFillPosition advances the args next pointer.
    89718976    parse2ValuesFillPosition(*args, centerX, centerY);
    … …  
    89848989    }
    89858990
    8986     result->setFirstX(downcast<CSSPrimitiveValue>(centerX.get()));
    8987     result->setSecondX(downcast<CSSPrimitiveValue>(centerX.get()));
     8991    result->setFirstX(centerX);
     8992    result->setSecondX(centerX);
    89888993    // CSS3 radial gradients always share the same start and end point.
    8989     result->setFirstY(downcast<CSSPrimitiveValue>(centerY.get()));
    8990     result->setSecondY(downcast<CSSPrimitiveValue>(centerY.get()));
     8994    result->setFirstY(centerY);
     8995    result->setSecondY(centerY);
    89918996
    89928997    RefPtr<CSSPrimitiveValue> shapeValue;
    … …  
    92379242    // Second part of grammar, the center-position clause:
    92389243    // at <position>
    9239     RefPtr<CSSValue> centerX;
    9240     RefPtr<CSSValue> centerY;
     9244    RefPtr<CSSPrimitiveValue> centerX;
     9245    RefPtr<CSSPrimitiveValue> centerY;
    92419246    if (argument->unit == CSSPrimitiveValue::CSS_IDENT && equalLettersIgnoringASCIICase(*argument, "at")) {
    92429247        argument = args->next();
    … …  
    92529257            return false;
    92539258
    9254         result->setFirstX(downcast<CSSPrimitiveValue>(centerX.get()));
    9255         result->setFirstY(downcast<CSSPrimitiveValue>(centerY.get()));
     9259        result->setFirstX(centerX);
     9260        result->setFirstY(centerY);
    92569261        // Right now, CSS radial gradients have the same start and end centers.
    9257         result->setSecondX(downcast<CSSPrimitiveValue>(centerX.get()));
    9258         result->setSecondY(downcast<CSSPrimitiveValue>(centerY.get()));
     9262        result->setSecondX(centerX);
     9263        result->setSecondY(centerY);
    92599264    }
    92609265
    … …  
    1020010205#endif
    1020110206
    10202 bool CSSParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSValue>& value, RefPtr<CSSValue>& value2, RefPtr<CSSValue>& value3)
     10207bool CSSParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSPrimitiveValue>& value, RefPtr<CSSPrimitiveValue>& value2, RefPtr<CSSValue>& value3)
    1020310208{
    1020410209    propId1 = propId;
    … …  
    1024510250}
    1024610251
    10247 bool CSSParser::parsePerspectiveOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, RefPtr<CSSValue>& value, RefPtr<CSSValue>& value2)
     10252bool CSSParser::parsePerspectiveOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, RefPtr<CSSPrimitiveValue>& value, RefPtr<CSSPrimitiveValue>& value2)
    1024810253{
    1024910254    propId1 = propId;
  • releases/WebKitGTK/webkit-2.12/Source/WebCore/css/CSSParser.h

    r196075 r197072  
    167167    enum FillPositionParsingMode { ResolveValuesAsPercent = 0, ResolveValuesAsKeyword = 1 };
    168168    RefPtr<CSSPrimitiveValue> parseFillPositionComponent(CSSParserValueList&, unsigned& cumulativeFlags, FillPositionFlag& individualFlag, FillPositionParsingMode = ResolveValuesAsPercent);
    169     RefPtr<CSSValue> parsePositionX(CSSParserValueList&);
    170     RefPtr<CSSValue> parsePositionY(CSSParserValueList&);
    171     void parse2ValuesFillPosition(CSSParserValueList&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
     169    RefPtr<CSSPrimitiveValue> parsePositionX(CSSParserValueList&);
     170    RefPtr<CSSPrimitiveValue> parsePositionY(CSSParserValueList&);
     171    void parse2ValuesFillPosition(CSSParserValueList&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&);
    172172    bool isPotentialPositionValue(CSSParserValue&);
    173     void parseFillPosition(CSSParserValueList&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
    174     void parse3ValuesFillPosition(CSSParserValueList&, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSPrimitiveValue>&&, RefPtr<CSSPrimitiveValue>&&);
    175     void parse4ValuesFillPosition(CSSParserValueList&, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSPrimitiveValue>&&, RefPtr<CSSPrimitiveValue>&&);
     173    void parseFillPosition(CSSParserValueList&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&);
     174    void parse3ValuesFillPosition(CSSParserValueList&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&&, RefPtr<CSSPrimitiveValue>&&);
     175    void parse4ValuesFillPosition(CSSParserValueList&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&&, RefPtr<CSSPrimitiveValue>&&);
    176176
    177177    void parseFillRepeat(RefPtr<CSSValue>&, RefPtr<CSSValue>&);
    … …  
    198198    static Vector<double> parseKeyframeSelector(const String&);
    199199
    200     bool parseTransformOriginShorthand(RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
     200    bool parseTransformOriginShorthand(RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSValue>&);
    201201    bool parseCubicBezierTimingFunctionValue(CSSParserValueList& args, double& result);
    202202    bool parseAnimationProperty(CSSPropertyID, RefPtr<CSSValue>&, AnimationParseContext&);
    … …  
    325325    RefPtr<CSSValueList> parseTransform();
    326326    RefPtr<CSSValue> parseTransformValue(CSSParserValue&);
    327     bool parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
    328     bool parsePerspectiveOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2,  RefPtr<CSSValue>&, RefPtr<CSSValue>&);
     327    bool parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&, RefPtr<CSSValue>&);
     328    bool parsePerspectiveOrigin(CSSPropertyID propId, CSSPropertyID& propId1, CSSPropertyID& propId2,  RefPtr<CSSPrimitiveValue>&, RefPtr<CSSPrimitiveValue>&);
    329329
    330330    bool parseTextEmphasisStyle(bool important);
Note: See TracChangeset for help on using the changeset viewer.