Title: [239575] trunk/Source/WebCore
Revision
239575
Author
simon.fra...@apple.com
Date
2019-01-02 13:09:13 -0800 (Wed, 02 Jan 2019)

Log Message

Don't spin up a CalcParser if the current token is not a function token
https://bugs.webkit.org/show_bug.cgi?id=193067

Reviewed by Zalan Bujtas.

Various functions in CSSPropertyParserHelpers fall back to trying to parse
a calc _expression_ if the normal parsing fails. Don't do this unless the
current token is a function token, which should be slightly more efficient.

* css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::consumeInteger):
(WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
(WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
(WebCore::CSSPropertyParserHelpers::consumeNumber):
(WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
(WebCore::CSSPropertyParserHelpers::consumeLength):
(WebCore::CSSPropertyParserHelpers::consumePercent):
(WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
(WebCore::CSSPropertyParserHelpers::consumeAngle):
(WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
(WebCore::CSSPropertyParserHelpers::consumeTime):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (239574 => 239575)


--- trunk/Source/WebCore/ChangeLog	2019-01-02 20:53:37 UTC (rev 239574)
+++ trunk/Source/WebCore/ChangeLog	2019-01-02 21:09:13 UTC (rev 239575)
@@ -1,5 +1,29 @@
 2019-01-02  Simon Fraser  <simon.fra...@apple.com>
 
+        Don't spin up a CalcParser if the current token is not a function token
+        https://bugs.webkit.org/show_bug.cgi?id=193067
+
+        Reviewed by Zalan Bujtas.
+
+        Various functions in CSSPropertyParserHelpers fall back to trying to parse
+        a calc _expression_ if the normal parsing fails. Don't do this unless the
+        current token is a function token, which should be slightly more efficient.
+
+        * css/parser/CSSPropertyParserHelpers.cpp:
+        (WebCore::CSSPropertyParserHelpers::consumeInteger):
+        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
+        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
+        (WebCore::CSSPropertyParserHelpers::consumeNumber):
+        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
+        (WebCore::CSSPropertyParserHelpers::consumeLength):
+        (WebCore::CSSPropertyParserHelpers::consumePercent):
+        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
+        (WebCore::CSSPropertyParserHelpers::consumeAngle):
+        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
+        (WebCore::CSSPropertyParserHelpers::consumeTime):
+
+2019-01-02  Simon Fraser  <simon.fra...@apple.com>
+
         Support css-color-4 rgb functions
         https://bugs.webkit.org/show_bug.cgi?id=192321
 

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (239574 => 239575)


--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp	2019-01-02 20:53:37 UTC (rev 239574)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp	2019-01-02 21:09:13 UTC (rev 239575)
@@ -138,6 +138,10 @@
             return nullptr;
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_NUMBER);
     }
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Number);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         if (calculation->category() != CalculationCategory::Number || !calculation->isInt())
@@ -147,6 +151,7 @@
             return nullptr;
         return calcParser.consumeNumber();
     }
+
     return nullptr;
 }
 
@@ -164,6 +169,10 @@
         result = range.consumeIncludingWhitespace().numericValue();
         return true;
     }
+
+    if (token.type() != FunctionToken)
+        return false;
+
     CalcParser calcParser(range, CalculationCategory::Number);
     return calcParser.consumePositiveIntegerRaw(result);
 }
@@ -170,10 +179,15 @@
     
 bool consumeNumberRaw(CSSParserTokenRange& range, double& result)
 {
-    if (range.peek().type() == NumberToken) {
+    const CSSParserToken& token = range.peek();
+    if (token.type() == NumberToken) {
         result = range.consumeIncludingWhitespace().numericValue();
         return true;
     }
+
+    if (token.type() != FunctionToken)
+        return false;
+
     CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
     return calcParser.consumeNumberRaw(result);
 }
@@ -187,6 +201,10 @@
             return nullptr;
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), token.unitType());
     }
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         // FIXME: Calcs should not be subject to parse time range checks.
@@ -195,6 +213,7 @@
             return nullptr;
         return calcParser.consumeNumber();
     }
+
     return nullptr;
 }
 
@@ -216,6 +235,9 @@
     )
         return consumeNumber(range, ValueRangeAll);
 
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     // "[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;
@@ -279,9 +301,14 @@
         CSSPrimitiveValue::UnitType unitType = CSSPrimitiveValue::UnitType::CSS_PX;
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), unitType);
     }
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Length, valueRange);
     if (calcParser.value() && calcParser.value()->category() == CalculationCategory::Length)
         return calcParser.consumeValue();
+
     return nullptr;
 }
 
@@ -293,6 +320,10 @@
             return nullptr;
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_PERCENTAGE);
     }
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Percent, valueRange);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         if (calculation->category() == CalculationCategory::Percent)
@@ -322,6 +353,10 @@
         return consumeLength(range, cssParserMode, valueRange, unitless);
     if (token.type() == PercentageToken)
         return consumePercent(range, valueRange);
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Length, valueRange);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         if (canConsumeCalcValue(calculation->category(), cssParserMode))
@@ -344,10 +379,13 @@
             return nullptr;
         }
     }
-    if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless)) {
+
+    if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless))
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG);
-    }
 
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Angle, ValueRangeAll);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         if (calculation->category() == CalculationCategory::Angle)
@@ -372,9 +410,13 @@
     }
     if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless))
         return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG);
+
     if (token.type() == PercentageToken)
         return consumePercent(range, valueRange);
 
+     if (token.type() != FunctionToken)
+         return nullptr;
+
     CalcParser angleCalcParser(range, CalculationCategory::Angle, valueRange);
     if (const CSSCalcValue* calculation = angleCalcParser.value()) {
         if (calculation->category() == CalculationCategory::Angle)
@@ -389,7 +431,6 @@
     return nullptr;
 }
 
-
 RefPtr<CSSPrimitiveValue> consumeTime(CSSParserTokenRange& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk unitless)
 {
     const CSSParserToken& token = range.peek();
@@ -404,6 +445,10 @@
             return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), unit);
         return nullptr;
     }
+
+    if (token.type() != FunctionToken)
+        return nullptr;
+
     CalcParser calcParser(range, CalculationCategory::Time, valueRange);
     if (const CSSCalcValue* calculation = calcParser.value()) {
         if (calculation->category() == CalculationCategory::Time)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to