WebKit Bugzilla
Attachment 358174 Details for
Bug 193067
: Don't spin up a CalcParser if the current token is not a function token
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193067-20190101115728.patch (text/plain), 8.77 KB, created by
Simon Fraser (smfr)
on 2019-01-01 11:57:29 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2019-01-01 11:57:29 PST
Size:
8.77 KB
patch
obsolete
>Subversion Revision: 239533 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 24291ccefc4f8271e4ba829b7e3040b12bccf0ba..a13c74405a68eda0047394e3945a03cda8a5c327 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,27 @@ >+2019-01-01 Simon Fraser <simon.fraser@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 NOBODY (OOPS!). >+ >+ 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): >+ > 2018-12-21 Youenn Fablet <youenn@apple.com> > > RTCRtpSender.setParameters() does set active parameter >diff --git a/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp b/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp >index 03b11ae33ac5512efa12ecf6a31efec49f7cb3d0..8eff45b36f5d4470e4fd7730ec81ce916bc0b0cd 100644 >--- a/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp >+++ b/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp >@@ -139,6 +139,10 @@ RefPtr<CSSPrimitiveValue> consumeInteger(CSSParserTokenRange& range, double mini > 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()) >@@ -148,6 +152,7 @@ RefPtr<CSSPrimitiveValue> consumeInteger(CSSParserTokenRange& range, double mini > return nullptr; > return calcParser.consumeNumber(); > } >+ > return nullptr; > } > >@@ -165,16 +170,25 @@ bool consumePositiveIntegerRaw(CSSParserTokenRange& range, int& result) > result = range.consumeIncludingWhitespace().numericValue(); > return true; > } >+ >+ if (token.type() != FunctionToken) >+ return false; >+ > CalcParser calcParser(range, CalculationCategory::Number); > return calcParser.consumePositiveIntegerRaw(result); > } > > 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); > } >@@ -188,6 +202,10 @@ RefPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRange& range, ValueRange v > 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. >@@ -196,6 +214,7 @@ RefPtr<CSSPrimitiveValue> consumeNumber(CSSParserTokenRange& range, ValueRange v > return nullptr; > return calcParser.consumeNumber(); > } >+ > return nullptr; > } > >@@ -217,6 +236,9 @@ RefPtr<CSSPrimitiveValue> consumeFontWeightNumber(CSSParserTokenRange& range) > ) > 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; >@@ -280,9 +302,14 @@ RefPtr<CSSPrimitiveValue> consumeLength(CSSParserTokenRange& range, CSSParserMod > 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; > } > >@@ -294,6 +321,10 @@ RefPtr<CSSPrimitiveValue> consumePercent(CSSParserTokenRange& range, ValueRange > 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) >@@ -323,6 +354,10 @@ RefPtr<CSSPrimitiveValue> consumeLengthOrPercent(CSSParserTokenRange& range, CSS > 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)) >@@ -345,9 +380,12 @@ RefPtr<CSSPrimitiveValue> consumeAngle(CSSParserTokenRange& range, CSSParserMode > 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()) { >@@ -371,11 +409,16 @@ static RefPtr<CSSPrimitiveValue> consumeAngleOrPercent(CSSParserTokenRange& rang > return nullptr; > } > } >+ > 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 calcParser(range, CalculationCategory::Angle, valueRange); > if (const CSSCalcValue* calculation = calcParser.value()) { > if (calculation->category() == CalculationCategory::Angle) >@@ -384,7 +427,6 @@ static RefPtr<CSSPrimitiveValue> consumeAngleOrPercent(CSSParserTokenRange& rang > return nullptr; > } > >- > RefPtr<CSSPrimitiveValue> consumeTime(CSSParserTokenRange& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk unitless) > { > const CSSParserToken& token = range.peek(); >@@ -399,6 +441,10 @@ RefPtr<CSSPrimitiveValue> consumeTime(CSSParserTokenRange& range, CSSParserMode > 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)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
zalan
:
review+
commit-queue
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193067
:
358173
| 358174