Title: [272094] trunk/Source/WebCore
Revision
272094
Author
wei...@apple.com
Date
2021-01-29 18:13:44 -0800 (Fri, 29 Jan 2021)

Log Message

Update consumeNumberRaw() to return an Optional<double> rather than using a bool/out parameter pattern
https://bugs.webkit.org/show_bug.cgi?id=221164

Reviewed by Darin Adler.

Match modern convention and the other raw consumers by returning a Optional<double>
rather than using the older bool / out parameter pattern.

* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeFontVariationTag):
(WebCore::consumeCubicBezier):
(WebCore::consumeSpringFunction):
(WebCore::consumePerspective):
(WebCore::consumeCursor):
(WebCore::CSSPropertyParser::consumeFlex):
* css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumberRaw):
(WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
(WebCore::CSSPropertyParserHelpers::consumeNumber):
(WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberRaw):
(WebCore::CSSPropertyParserHelpers::parseRGBParameters):
(WebCore::CSSPropertyParserHelpers::parseHSLParameters):
(WebCore::CSSPropertyParserHelpers::parseOptionalAlpha):
(WebCore::CSSPropertyParserHelpers::parseLabParameters):
(WebCore::CSSPropertyParserHelpers::parseLCHParameters):
(WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
(WebCore::CSSPropertyParserHelpers::parseColorFunctionForLabParameters):
(WebCore::CSSPropertyParserHelpers::parseColorFunction):
(WebCore::CSSPropertyParserHelpers::consumeColorWorkerSafe):
(WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
(WebCore::CSSPropertyParserHelpers::consumeLineHeightRaw):
* css/parser/CSSPropertyParserHelpers.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (272093 => 272094)


--- trunk/Source/WebCore/ChangeLog	2021-01-30 01:52:34 UTC (rev 272093)
+++ trunk/Source/WebCore/ChangeLog	2021-01-30 02:13:44 UTC (rev 272094)
@@ -1,3 +1,38 @@
+2021-01-29  Sam Weinig  <wei...@apple.com>
+
+        Update consumeNumberRaw() to return an Optional<double> rather than using a bool/out parameter pattern
+        https://bugs.webkit.org/show_bug.cgi?id=221164
+
+        Reviewed by Darin Adler.
+
+        Match modern convention and the other raw consumers by returning a Optional<double>
+        rather than using the older bool / out parameter pattern. 
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeFontVariationTag):
+        (WebCore::consumeCubicBezier):
+        (WebCore::consumeSpringFunction):
+        (WebCore::consumePerspective):
+        (WebCore::consumeCursor):
+        (WebCore::CSSPropertyParser::consumeFlex):
+        * css/parser/CSSPropertyParserHelpers.cpp:
+        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumberRaw):
+        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
+        (WebCore::CSSPropertyParserHelpers::consumeNumber):
+        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumberRaw):
+        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
+        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
+        (WebCore::CSSPropertyParserHelpers::parseOptionalAlpha):
+        (WebCore::CSSPropertyParserHelpers::parseLabParameters):
+        (WebCore::CSSPropertyParserHelpers::parseLCHParameters):
+        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForRGBTypes):
+        (WebCore::CSSPropertyParserHelpers::parseColorFunctionForLabParameters):
+        (WebCore::CSSPropertyParserHelpers::parseColorFunction):
+        (WebCore::CSSPropertyParserHelpers::consumeColorWorkerSafe):
+        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
+        (WebCore::CSSPropertyParserHelpers::consumeLineHeightRaw):
+        * css/parser/CSSPropertyParserHelpers.h:
+
 2021-01-29  Fujii Hironori  <hironori.fu...@sony.com>
 
         Remove unused GraphicsContextGL::Destination enum class

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (272093 => 272094)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2021-01-30 01:52:34 UTC (rev 272093)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2021-01-30 02:13:44 UTC (rev 272094)
@@ -520,12 +520,11 @@
     if (range.atEnd())
         return nullptr;
 
-    double tagValue = 0;
-    auto success = consumeNumberRaw(range, tagValue);
-    if (!success)
+    auto tagValue = consumeNumberRaw(range);
+    if (!tagValue)
         return nullptr;
     
-    return CSSFontVariationValue::create(tag, tagValue);
+    return CSSFontVariationValue::create(tag, *tagValue);
 }
     
 static RefPtr<CSSValue> consumeFontVariationSettings(CSSParserTokenRange& range)
@@ -1508,22 +1507,36 @@
     CSSParserTokenRange rangeCopy = range;
     CSSParserTokenRange args = consumeFunction(rangeCopy);
 
-    double x1, y1, x2, y2;
-    if (consumeNumberRaw(args, x1)
-        && x1 >= 0 && x1 <= 1
-        && consumeCommaIncludingWhitespace(args)
-        && consumeNumberRaw(args, y1)
-        && consumeCommaIncludingWhitespace(args)
-        && consumeNumberRaw(args, x2)
-        && x2 >= 0 && x2 <= 1
-        && consumeCommaIncludingWhitespace(args)
-        && consumeNumberRaw(args, y2)
-        && args.atEnd()) {
-        range = rangeCopy;
-        return CSSCubicBezierTimingFunctionValue::create(x1, y1, x2, y2);
-    }
+    auto x1 = consumeNumberRaw(args);
+    if (!x1 || *x1 < 0 || *x1 > 1)
+        return nullptr;
+    
+    if (!consumeCommaIncludingWhitespace(args))
+        return nullptr;
 
-    return nullptr;
+    auto y1 = consumeNumberRaw(args);
+    if (!y1)
+        return nullptr;
+
+    if (!consumeCommaIncludingWhitespace(args))
+        return nullptr;
+
+    auto x2 = consumeNumberRaw(args);
+    if (!x2 || *x2 < 0 || *x2 > 1)
+        return nullptr;
+
+    if (!consumeCommaIncludingWhitespace(args))
+        return nullptr;
+
+    auto y2 = consumeNumberRaw(args);
+    if (!y2)
+        return nullptr;
+
+    if (!args.atEnd())
+        return nullptr;
+
+    range = rangeCopy;
+    return CSSCubicBezierTimingFunctionValue::create(*x1, *y1, *x2, *y2);
 }
 
 static RefPtr<CSSValue> consumeSpringFunction(CSSParserTokenRange& range)
@@ -1533,23 +1546,23 @@
     CSSParserTokenRange args = consumeFunction(rangeCopy);
 
     // Mass must be greater than 0.
-    double mass;
-    if (!consumeNumberRaw(args, mass) || mass <= 0)
+    auto mass = consumeNumberRaw(args);
+    if (!mass || *mass <= 0)
         return nullptr;
     
     // Stiffness must be greater than 0.
-    double stiffness;
-    if (!consumeNumberRaw(args, stiffness) || stiffness <= 0)
+    auto stiffness = consumeNumberRaw(args);
+    if (!stiffness || *stiffness <= 0)
         return nullptr;
     
     // Damping coefficient must be greater than or equal to 0.
-    double damping;
-    if (!consumeNumberRaw(args, damping) || damping < 0)
+    auto damping = consumeNumberRaw(args);
+    if (!damping || *damping < 0)
         return nullptr;
     
     // Initial velocity may have any value.
-    double initialVelocity;
-    if (!consumeNumberRaw(args, initialVelocity))
+    auto initialVelocity = consumeNumberRaw(args);
+    if (!initialVelocity)
         return nullptr;
 
     if (!args.atEnd())
@@ -1557,7 +1570,7 @@
 
     range = rangeCopy;
 
-    return CSSSpringTimingFunctionValue::create(mass, stiffness, damping, initialVelocity);
+    return CSSSpringTimingFunctionValue::create(*mass, *stiffness, *damping, *initialVelocity);
 }
 
 static RefPtr<CSSValue> consumeAnimationTimingFunction(CSSParserTokenRange& range, const CSSParserContext& context)
@@ -1878,16 +1891,15 @@
 
 static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue)
 {
-    RefPtr<CSSPrimitiveValue> parsedValue = consumeLength(args, cssParserMode, ValueRangeNonNegative);
-    if (!parsedValue) {
-        double perspective;
-        if (!consumeNumberRaw(args, perspective) || perspective < 0)
-            return false;
-        parsedValue = CSSPrimitiveValue::create(perspective, CSSUnitType::CSS_PX);
+    if (auto parsedValue = consumeLength(args, cssParserMode, ValueRangeNonNegative)) {
+        transformValue->append(parsedValue.releaseNonNull());
+        return true;
     }
-    if (!parsedValue)
+
+    auto perspective = consumeNumberRaw(args);
+    if (!perspective || *perspective < 0)
         return false;
-    transformValue->append(parsedValue.releaseNonNull());
+    transformValue->append(CSSPrimitiveValue::create(*perspective, CSSUnitType::CSS_PX));
     return true;
 }
 
@@ -2363,14 +2375,14 @@
 {
     RefPtr<CSSValueList> list;
     while (RefPtr<CSSValue> image = consumeImage(range, context, { AllowedImageType::URLFunction, AllowedImageType::ImageSet })) {
-        double num;
         IntPoint hotSpot(-1, -1);
         bool hotSpotSpecified = false;
-        if (consumeNumberRaw(range, num)) {
-            hotSpot.setX(int(num));
-            if (!consumeNumberRaw(range, num))
+        if (auto x = consumeNumberRaw(range)) {
+            hotSpot.setX(static_cast<int>(*x));
+            auto y = consumeNumberRaw(range);
+            if (!y)
                 return nullptr;
-            hotSpot.setY(int(num));
+            hotSpot.setY(static_cast<int>(*y));
             hotSpotSpecified = true;
         }
 
@@ -2484,22 +2496,18 @@
 {
     if (range.peek().id() == CSSValueNone)
         return consumeIdent(range);
-    RefPtr<CSSPrimitiveValue> parsedValue = consumeLength(range, cssParserMode, ValueRangeAll);
-    if (!parsedValue) {
-        // FIXME: Make this quirk only apply to the webkit prefixed version of the property.
-        double perspective;
-        if (!consumeNumberRaw(range, perspective))
-            return nullptr;
-        parsedValue = CSSPrimitiveValue::create(perspective, CSSUnitType::CSS_PX);
+
+    if (auto parsedValue = consumeLength(range, cssParserMode, ValueRangeAll)) {
+        if (parsedValue->isPositive().valueOr(true))
+            return parsedValue;
+        return nullptr;
     }
 
-    if (!parsedValue)
+    // FIXME: Make this quirk only apply to the webkit prefixed version of the property.
+    auto perspective = consumeNumberRaw(range);
+    if (!perspective || *perspective < 0)
         return nullptr;
-
-    if (parsedValue->isPositive().valueOr(true))
-        return parsedValue;
-
-    return nullptr;
+    return CSSPrimitiveValue::create(*perspective, CSSUnitType::CSS_PX);
 }
 
 #if ENABLE(CSS_SCROLL_SNAP)
@@ -5027,15 +5035,14 @@
     } else {
         unsigned index = 0;
         while (!m_range.atEnd() && index++ < 3) {
-            double num;
-            if (consumeNumberRaw(m_range, num)) {
-                if (num < 0)
+            if (auto num = consumeNumberRaw(m_range)) {
+                if (*num < 0)
                     return false;
                 if (flexGrow == unsetValue)
-                    flexGrow = num;
+                    flexGrow = *num;
                 else if (flexShrink == unsetValue)
-                    flexShrink = num;
-                else if (!num) // flex only allows a basis of 0 (sans units) if flex-grow and flex-shrink values have already been set.
+                    flexShrink = *num;
+                else if (!*num) // flex only allows a basis of 0 (sans units) if flex-grow and flex-shrink values have already been set.
                     flexBasis = CSSPrimitiveValue::create(0, CSSUnitType::CSS_PX);
                 else
                     return false;

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (272093 => 272094)


--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp	2021-01-30 01:52:34 UTC (rev 272093)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp	2021-01-30 02:13:44 UTC (rev 272094)
@@ -1,5 +1,5 @@
 // Copyright 2016 The Chromium Authors. All rights reserved.
-// Copyright (C) 2016 Apple Inc. All rights reserved.
+// Copyright (C) 2016-2021 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
@@ -124,13 +124,12 @@
         return CSSValuePool::singleton().createValue(m_calcValue->doubleValue(), CSSUnitType::CSS_NUMBER);
     }
 
-    bool consumeNumberRaw(double& result)
+    Optional<double> consumeNumberRaw()
     {
         if (!m_calcValue || m_calcValue->category() != CalculationCategory::Number)
-            return false;
+            return WTF::nullopt;
         m_sourceRange = m_range;
-        result = m_calcValue->doubleValue();
-        return true;
+        return m_calcValue->doubleValue();
     }
 
     Optional<double> consumePercentRaw()
@@ -212,21 +211,20 @@
     return consumeInteger(range, 1);
 }
 
-bool consumeNumberRaw(CSSParserTokenRange& range, double& result, ValueRange valueRange)
+Optional<double> consumeNumberRaw(CSSParserTokenRange& range, ValueRange valueRange)
 {
     const CSSParserToken& token = range.peek();
     if (token.type() == NumberToken) {
         if (valueRange == ValueRangeNonNegative && token.numericValue() < 0)
-            return false;
-        result = range.consumeIncludingWhitespace().numericValue();
-        return true;
+            return WTF::nullopt;
+        return range.consumeIncludingWhitespace().numericValue();
     }
 
     if (token.type() != FunctionToken)
-        return false;
+        return WTF::nullopt;
 
     CalcParser calcParser(range, CalculationCategory::Number, valueRange);
-    return calcParser.consumeNumberRaw(result);
+    return calcParser.consumeNumberRaw();
 }
 
 // FIXME: Work out if this can just call consumeNumberRaw
@@ -242,9 +240,8 @@
         return nullptr;
     }
 
-    double number;
-    if (consumeNumberRaw(range, number, valueRange))
-        return CSSValuePool::singleton().createValue(number, token.unitType());
+    if (auto number = consumeNumberRaw(range, valueRange))
+        return CSSValuePool::singleton().createValue(*number, token.unitType());
 
     return nullptr;
 }
@@ -264,12 +261,8 @@
 #if !ENABLE(VARIATION_FONTS)
         && token.numericValueType() == IntegerValueType && divisibleBy100(token.numericValue())
 #endif
-    ) {
-        double result;
-        if (consumeNumberRaw(range, result))
-            return result;
-        return WTF::nullopt;
-    }
+    )
+        return consumeNumberRaw(range);
 
     if (token.type() != FunctionToken)
         return WTF::nullopt;
@@ -276,15 +269,12 @@
 
     // "[For calc()], the used value resulting from an _expression_ must be clamped to the range allowed in the target context."
     CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
-    double result;
-    if (calcParser.consumeNumberRaw(result)
+    if (auto result = calcParser.consumeNumberRaw(); result
 #if !ENABLE(VARIATION_FONTS)
-        && result > 0 && result < 1000 && divisibleBy100(result)
+        && *result > 0 && *result < 1000 && divisibleBy100(*result)
 #endif
-    ) {
-        result = std::min(std::max(result, std::nextafter(0., 1.)), std::nextafter(1000., 0.));
-        return result;
-    }
+    )
+        return std::min(std::max(*result, std::nextafter(0., 1.)), std::nextafter(1000., 0.));
 
     return WTF::nullopt;
 }
@@ -681,13 +671,13 @@
 
     bool isPercentage = false;
     double colorParameter;
-    if (!consumeNumberRaw(args, colorParameter)) {
-        if (auto percent = consumePercentRaw(args)) {
-            colorParameter = *percent;
-            isPercentage = true;
-        } else
-            return Color();
-    }
+    if (auto number = consumeNumberRaw(args))
+        colorParameter = *number;
+    else if (auto percent = consumePercentRaw(args)) {
+        colorParameter = *percent;
+        isPercentage = true;
+    } else
+        return { };
 
     enum class ColorSyntax {
         Commas,
@@ -708,18 +698,19 @@
         if (i == 1)
             syntax = consumeCommaIncludingWhitespace(args) ? ColorSyntax::Commas : ColorSyntax::WhitespaceSlash;
         else if (!consumeSeparator())
-            return Color();
+            return { };
 
         if (isPercentage) {
-            if (auto percent = consumePercentRaw(args))
-                colorParameter = *percent;
-            else
-                return Color();
+            auto percent = consumePercentRaw(args);
+            if (!percent)
+                return { };
+            colorArray[i] = clampRGBComponent(*percent, true);
         } else {
-            if (!consumeNumberRaw(args, colorParameter))
-                return Color();
+            auto number = consumeNumberRaw(args);
+            if (!number)
+                return { };
+            colorArray[i] = clampRGBComponent(*number, false);
         }
-        colorArray[i] = clampRGBComponent(colorParameter, isPercentage);
     }
 
     // Historically, alpha was only parsed for rgba(), but css-color-4 specifies that rgba() is a simple alias for rgb().
@@ -732,18 +723,16 @@
 
     uint8_t alphaComponent = 255;
     if (consumeAlphaSeparator()) {
-        double alpha;
-        if (!consumeNumberRaw(args, alpha)) {
-            if (auto percent = consumePercentRaw(args))
-                alpha = *percent / 100.0;
-            else
-                return Color();
-        }
-        alphaComponent = convertFloatAlphaTo<uint8_t>(alpha);
+        if (auto number = consumeNumberRaw(args))
+            alphaComponent = convertFloatAlphaTo<uint8_t>(*number);
+        else if (auto percent = consumePercentRaw(args))
+            alphaComponent = convertFloatAlphaTo<uint8_t>(*percent / 100.0);
+        else
+            return { };
     };
 
     if (!args.atEnd())
-        return Color();
+        return { };
 
     return SRGBA<uint8_t> { colorArray[0], colorArray[1], colorArray[2], alphaComponent };
 }
@@ -752,47 +741,49 @@
 {
     ASSERT(range.peek().functionId() == CSSValueHsl || range.peek().functionId() == CSSValueHsla);
     CSSParserTokenRange args = consumeFunction(range);
-    double angleInDegrees;
+
+    double hueAngleInDegrees;
     if (auto angle = consumeAngleRaw(args, cssParserMode, UnitlessQuirk::Forbid, UnitlessZeroQuirk::Forbid))
-        angleInDegrees = CSSPrimitiveValue::computeDegrees(angle->type, angle->value);
-    else {
-        if (!consumeNumberRaw(args, angleInDegrees))
-            return Color();
-    }
+        hueAngleInDegrees = CSSPrimitiveValue::computeDegrees(angle->type, angle->value);
+    else if (auto number = consumeNumberRaw(args))
+        hueAngleInDegrees = *number;
+    else
+        return { };
 
     double colorArray[3];
-    colorArray[0] = fmod(fmod(angleInDegrees, 360.0) + 360.0, 360.0) / 360.0;
+    colorArray[0] = fmod(fmod(hueAngleInDegrees, 360.0) + 360.0, 360.0) / 360.0;
+
     bool requiresCommas = false;
     for (int i = 1; i < 3; i++) {
         if (consumeCommaIncludingWhitespace(args)) {
             if (i != 1 && !requiresCommas)
-                return Color();
+                return { };
             requiresCommas = true;
         } else if (requiresCommas || args.atEnd() || (&args.peek() - 1)->type() != WhitespaceToken)
-            return Color();
+            return { };
         auto percent = consumePercentRaw(args);
         if (!percent)
-            return Color();
+            return { };
         colorArray[i] = clampTo<double>(*percent, 0.0, 100.0) / 100.0; // Needs to be value between 0 and 1.0.
     }
 
-    double alpha = 1.0;
     bool commaConsumed = consumeCommaIncludingWhitespace(args);
     bool slashConsumed = consumeSlashIncludingWhitespace(args);
     if ((commaConsumed && !requiresCommas) || (slashConsumed && requiresCommas))
-        return Color();
+        return { };
+
+    double alpha = 1.0;
     if (commaConsumed || slashConsumed) {
-        if (!consumeNumberRaw(args, alpha)) {
-            if (auto percent = consumePercentRaw(args))
-                alpha = *percent / 100.0f;
-            else
-                return Color();
-        }
-        alpha = clampTo<double>(alpha, 0.0, 1.0);
+        if (auto number = consumeNumberRaw(args))
+            alpha = clampTo<double>(*number, 0.0, 1.0);
+        else if (auto percent = consumePercentRaw(args))
+            alpha = clampTo<double>(*percent / 100.0f, 0.0, 1.0);
+        else
+            return { };
     }
 
     if (!args.atEnd())
-        return Color();
+        return { };
 
     return convertTo<SRGBA<uint8_t>>(toSRGBA(HSLA<float> { static_cast<float>(colorArray[0]), static_cast<float>(colorArray[1]), static_cast<float>(colorArray[2]), static_cast<float>(alpha) }));
 }
@@ -805,11 +796,10 @@
     if (auto alphaParameter = consumePercentRaw(range, ValueRangeAll))
         return clampTo<float>(*alphaParameter / 100.0, 0.0, 1.0);
 
-    double alphaParameter;
-    if (!consumeNumberRaw(range, alphaParameter, ValueRangeAll))
-        return WTF::nullopt;
+    if (auto alphaParameter = consumeNumberRaw(range, ValueRangeAll))
+        return clampTo<float>(*alphaParameter, 0.0, 1.0);
 
-    return clampTo<float>(alphaParameter, 0.0, 1.0);
+    return WTF::nullopt;
 }
 
 static Color parseLabParameters(CSSParserTokenRange& range)
@@ -821,12 +811,12 @@
     if (!lightness)
         return { };
 
-    double aValue;
-    if (!consumeNumberRaw(args, aValue, ValueRangeAll))
+    auto aValue = consumeNumberRaw(args, ValueRangeAll);
+    if (!aValue)
         return { };
 
-    double bValue;
-    if (!consumeNumberRaw(args, bValue, ValueRangeAll))
+    auto bValue = consumeNumberRaw(args, ValueRangeAll);
+    if (!bValue)
         return { };
 
     auto alpha = parseOptionalAlpha(args);
@@ -836,7 +826,7 @@
     if (!args.atEnd())
         return { };
 
-    return Lab<float> { static_cast<float>(*lightness), static_cast<float>(aValue), static_cast<float>(bValue), *alpha };
+    return Lab<float> { static_cast<float>(*lightness), static_cast<float>(*aValue), static_cast<float>(*bValue), *alpha };
 }
 
 static Color parseLCHParameters(CSSParserTokenRange& range, CSSParserMode cssParserMode)
@@ -846,23 +836,23 @@
 
     auto lightness = consumePercentRaw(args, ValueRangeAll);
     if (!lightness)
-        return Color();
+        return { };
 
-    double chromaValue;
-    if (!consumeNumberRaw(args, chromaValue, ValueRangeAll))
+    auto chromaValue = consumeNumberRaw(args, ValueRangeAll);
+    if (!chromaValue)
         return { };
 
-    double angleInDegrees;
-    if (auto hueValue = consumeAngleRaw(args, cssParserMode, UnitlessQuirk::Forbid, UnitlessZeroQuirk::Forbid))
-        angleInDegrees = CSSPrimitiveValue::computeDegrees(hueValue->type, hueValue->value);
-    else {
-        if (!consumeNumberRaw(args, angleInDegrees, ValueRangeAll))
-            return { };
-    }
+    double hueAngleInDegrees;
+    if (auto angle = consumeAngleRaw(args, cssParserMode, UnitlessQuirk::Forbid, UnitlessZeroQuirk::Forbid))
+        hueAngleInDegrees = CSSPrimitiveValue::computeDegrees(angle->type, angle->value);
+    else if (auto number = consumeNumberRaw(args, ValueRangeAll))
+        hueAngleInDegrees = *number;
+    else
+        return { };
 
-    angleInDegrees = fmod(angleInDegrees, 360.0);
-    if (angleInDegrees < 0.0)
-        angleInDegrees += 360.0;
+    hueAngleInDegrees = fmod(hueAngleInDegrees, 360.0);
+    if (hueAngleInDegrees < 0.0)
+        hueAngleInDegrees += 360.0;
 
     auto alpha = parseOptionalAlpha(args);
     if (!alpha)
@@ -871,7 +861,7 @@
     if (!args.atEnd())
         return { };
 
-    return toLab(LCHA<float> { static_cast<float>(*lightness), static_cast<float>(chromaValue), static_cast<float>(angleInDegrees), *alpha });
+    return toLab(LCHA<float> { static_cast<float>(*lightness), static_cast<float>(*chromaValue), static_cast<float>(hueAngleInDegrees), *alpha });
 }
 
 template<typename ColorType>
@@ -882,9 +872,8 @@
 
     double channels[3] = { 0, 0, 0 };
     for (int i = 0; i < 3; ++i) {
-        double value;
-        if (consumeNumberRaw(args, value))
-            channels[i] = value;
+        if (auto number = consumeNumberRaw(args))
+            channels[i] = *number;
         else if (auto percent = consumePercentRaw(args))
             channels[i] = *percent / 100.0;
         else
@@ -910,15 +899,15 @@
             return;
         channels[0] = *lightness;
 
-        double aValue;
-        if (!consumeNumberRaw(args, aValue, ValueRangeAll))
+        auto aValue = consumeNumberRaw(args, ValueRangeAll);
+        if (!aValue)
             return;
-        channels[1] = aValue;
+        channels[1] = *aValue;
 
-        double bValue;
-        if (!consumeNumberRaw(args, bValue, ValueRangeAll))
+        auto bValue = consumeNumberRaw(args, ValueRangeAll);
+        if (!bValue)
             return;
-        channels[2] = bValue;
+        channels[2] = *bValue;
     }();
 
     auto alpha = parseOptionalAlpha(args);
@@ -1023,7 +1012,7 @@
         color = parseColorFunctionParameters(colorRange);
         break;
     default:
-        return Color();
+        return { };
     }
     if (color.isValid())
         range = colorRange;
@@ -1038,9 +1027,9 @@
         // FIXME: Need a worker-safe way to compute the system colors.
         //        For now, we detect the system color, but then intentionally fail parsing.
         if (StyleColor::isSystemColor(keyword))
-            return Color();
+            return { };
         if (!isValueAllowedInMode(keyword, cssParserMode))
-            return Color();
+            return { };
         result = StyleColor::colorFromKeyword(keyword, { });
         range.consumeIncludingWhitespace();
     }
@@ -1051,7 +1040,7 @@
         result = parseColorFunction(range, cssParserMode);
 
     if (!range.atEnd())
-        return Color();
+        return { };
 
     return result;
 }
@@ -1321,9 +1310,11 @@
         position = (id == CSSValueFrom) ? 0 : 1;
     } else {
         ASSERT(id == CSSValueColorStop);
-        if (auto percentValue = consumePercent(args, ValueRangeAll))
-            position = percentValue->doubleValue() / 100.0;
-        else if (!consumeNumberRaw(args, position))
+        if (auto percent = consumePercentRaw(args, ValueRangeAll))
+            position = *percent / 100.0;
+        else if (auto number = consumeNumberRaw(args))
+            position = *number;
+        else
             return false;
 
         if (!consumeCommaIncludingWhitespace(args))
@@ -2171,9 +2162,8 @@
         return WTF::nullopt;
     }
 
-    double number;
-    if (consumeNumberRaw(range, number, ValueRangeNonNegative))
-        return { number };
+    if (auto number = consumeNumberRaw(range, ValueRangeNonNegative))
+        return { *number };
 
     if (auto lengthOrPercent = consumeLengthOrPercentRaw(range, cssParserMode, ValueRangeNonNegative))
         return { *lengthOrPercent };

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.h (272093 => 272094)


--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.h	2021-01-30 01:52:34 UTC (rev 272093)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.h	2021-01-30 02:13:44 UTC (rev 272094)
@@ -72,7 +72,7 @@
 
 RefPtr<CSSPrimitiveValue> consumeInteger(CSSParserTokenRange&, double minimumValue = -std::numeric_limits<double>::max());
 RefPtr<CSSPrimitiveValue> consumePositiveInteger(CSSParserTokenRange&);
-bool consumeNumberRaw(CSSParserTokenRange&, double& result, ValueRange = ValueRangeAll);
+Optional<double> consumeNumberRaw(CSSParserTokenRange&, ValueRange = ValueRangeAll);
 RefPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRange&, ValueRange);
 Optional<double> consumeFontWeightNumberRaw(CSSParserTokenRange&);
 RefPtr<CSSPrimitiveValue> consumeFontWeightNumber(CSSParserTokenRange&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to