Changeset 239575 in webkit
- Timestamp:
- Jan 2, 2019, 1:09:13 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
css/parser/CSSPropertyParserHelpers.cpp (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r239574 r239575 1 2019-01-02 Simon Fraser <simon.fraser@apple.com> 2 3 Don't spin up a CalcParser if the current token is not a function token 4 https://bugs.webkit.org/show_bug.cgi?id=193067 5 6 Reviewed by Zalan Bujtas. 7 8 Various functions in CSSPropertyParserHelpers fall back to trying to parse 9 a calc expression if the normal parsing fails. Don't do this unless the 10 current token is a function token, which should be slightly more efficient. 11 12 * css/parser/CSSPropertyParserHelpers.cpp: 13 (WebCore::CSSPropertyParserHelpers::consumeInteger): 14 (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw): 15 (WebCore::CSSPropertyParserHelpers::consumeNumberRaw): 16 (WebCore::CSSPropertyParserHelpers::consumeNumber): 17 (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber): 18 (WebCore::CSSPropertyParserHelpers::consumeLength): 19 (WebCore::CSSPropertyParserHelpers::consumePercent): 20 (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent): 21 (WebCore::CSSPropertyParserHelpers::consumeAngle): 22 (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent): 23 (WebCore::CSSPropertyParserHelpers::consumeTime): 24 1 25 2019-01-02 Simon Fraser <simon.fraser@apple.com> 2 26 -
trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp
r239574 r239575 139 139 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_NUMBER); 140 140 } 141 142 if (token.type() != FunctionToken) 143 return nullptr; 144 141 145 CalcParser calcParser(range, CalculationCategory::Number); 142 146 if (const CSSCalcValue* calculation = calcParser.value()) { … … 148 152 return calcParser.consumeNumber(); 149 153 } 154 150 155 return nullptr; 151 156 } … … 165 170 return true; 166 171 } 172 173 if (token.type() != FunctionToken) 174 return false; 175 167 176 CalcParser calcParser(range, CalculationCategory::Number); 168 177 return calcParser.consumePositiveIntegerRaw(result); … … 171 180 bool consumeNumberRaw(CSSParserTokenRange& range, double& result) 172 181 { 173 if (range.peek().type() == NumberToken) { 182 const CSSParserToken& token = range.peek(); 183 if (token.type() == NumberToken) { 174 184 result = range.consumeIncludingWhitespace().numericValue(); 175 185 return true; 176 186 } 187 188 if (token.type() != FunctionToken) 189 return false; 190 177 191 CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll); 178 192 return calcParser.consumeNumberRaw(result); … … 188 202 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), token.unitType()); 189 203 } 204 205 if (token.type() != FunctionToken) 206 return nullptr; 207 190 208 CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll); 191 209 if (const CSSCalcValue* calculation = calcParser.value()) { … … 196 214 return calcParser.consumeNumber(); 197 215 } 216 198 217 return nullptr; 199 218 } … … 216 235 ) 217 236 return consumeNumber(range, ValueRangeAll); 237 238 if (token.type() != FunctionToken) 239 return nullptr; 218 240 219 241 // "[For calc()], the used value resulting from an expression must be clamped to the range allowed in the target context." … … 280 302 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), unitType); 281 303 } 304 305 if (token.type() != FunctionToken) 306 return nullptr; 307 282 308 CalcParser calcParser(range, CalculationCategory::Length, valueRange); 283 309 if (calcParser.value() && calcParser.value()->category() == CalculationCategory::Length) 284 310 return calcParser.consumeValue(); 311 285 312 return nullptr; 286 313 } … … 294 321 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_PERCENTAGE); 295 322 } 323 324 if (token.type() != FunctionToken) 325 return nullptr; 326 296 327 CalcParser calcParser(range, CalculationCategory::Percent, valueRange); 297 328 if (const CSSCalcValue* calculation = calcParser.value()) { … … 323 354 if (token.type() == PercentageToken) 324 355 return consumePercent(range, valueRange); 356 357 if (token.type() != FunctionToken) 358 return nullptr; 359 325 360 CalcParser calcParser(range, CalculationCategory::Length, valueRange); 326 361 if (const CSSCalcValue* calculation = calcParser.value()) { … … 345 380 } 346 381 } 347 if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless)) { 382 383 if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless)) 348 384 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG); 349 } 385 386 if (token.type() != FunctionToken) 387 return nullptr; 350 388 351 389 CalcParser calcParser(range, CalculationCategory::Angle, ValueRangeAll); … … 373 411 if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless)) 374 412 return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG); 413 375 414 if (token.type() == PercentageToken) 376 415 return consumePercent(range, valueRange); 416 417 if (token.type() != FunctionToken) 418 return nullptr; 377 419 378 420 CalcParser angleCalcParser(range, CalculationCategory::Angle, valueRange); … … 389 431 return nullptr; 390 432 } 391 392 433 393 434 RefPtr<CSSPrimitiveValue> consumeTime(CSSParserTokenRange& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk unitless) … … 405 446 return nullptr; 406 447 } 448 449 if (token.type() != FunctionToken) 450 return nullptr; 451 407 452 CalcParser calcParser(range, CalculationCategory::Time, valueRange); 408 453 if (const CSSCalcValue* calculation = calcParser.value()) {
Note:
See TracChangeset
for help on using the changeset viewer.