8000 Optimise Inline::evaluateScalar() for parsing strings. · symfony/symfony@d5aca81 · GitHub
[go: up one dir, main page]

Skip to content < 8000 div data-target="react-partial.reactRoot">

Commit d5aca81

Browse files
alexpottfabpot
authored andcommitted
Optimise Inline::evaluateScalar() for parsing strings.
1 parent 7ee758c commit d5aca81

File tree

1 file changed

+43
-39
lines changed

1 file changed

+43
-39
lines changed

src/Symfony/Component/Yaml/Inline.php

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -386,51 +386,55 @@ private static function parseMapping($mapping, &$i = 0)
386386
private static function evaluateScalar($scalar)
387387
{
388388
$scalar = trim($scalar);
389-
389+
$scalarLower = strtolower($scalar);
390390
switch (true) {
391-
case 'null' == strtolower($scalar):
391+
case 'null' == $scalarLower:
392392
case '' == $scalar:
393393
case '~' == $scalar:
394394
return null;
395-
case 0 === strpos($scalar, '!str'):
396-
return (string) substr($scalar, 5);
397-
case 0 === strpos($scalar, '! '):
398-
return intval(self::parseScalar(substr($scalar, 2)));
399-
case 0 === strpos($scalar, '!!php/object:'):
400-
if (self::$objectSupport) {
401-
return unserialize(substr($scalar, 13));
402-
}
403-
404-
if (self::$exceptionOnInvalidType) {
405-
throw new ParseException('Object support when parsing a YAML file has been disabled.');
406-
}
407-
408-
return null;
409-
case ctype_digit($scalar):
410-
$raw = $scalar;
411-
$cast = intval($scalar);
412-
413-
return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
414-
case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)):
415-
$raw = $scalar;
416-
$cast = intval($scalar);
417-
418-
return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
419-
case 'true' === strtolower($scalar):
395+
case 'true' === $scalarLower:
420396
return true;
421-
case 'false' === strtolower($scalar):
397+
case 'false' === $scalarLower:
422398
return false;
423-
case is_numeric($scalar):
424-
return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
425-
case 0 == strcasecmp($scalar, '.inf'):
426-
case 0 == strcasecmp($scalar, '.NaN'):
427-
return -log(0);
428-
case 0 == strcasecmp($scalar, '-.inf'):
429-
return log(0);
430-
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
431-
return floatval(str_replace(',', '', $scalar));
432-
case preg_match(self::getTimestampRegex(), $scalar):
433-
return strtotime($scalar);
399+
// Optimise for returning strings.
400+
case $scalar[0] === '+' || $scalar[0] === '-' || $scalar[0] === '.' || $scalar[0] === '!' || is_numeric($scalar[0]):
401+
switch (true) {
402+
case 0 === strpos($scalar, '!str'):
403+
return (string) substr($scalar, 5);
404+
case 0 === strpos($scalar, '! '):
405+
return intval(self::parseScalar(substr($scalar, 2)));
406+
case 0 === strpos($scalar, '!!php/object:'):
407+
if (self::$objectSupport) {
408+
return unserialize(substr($scalar, 13));
409+
}
410+
411+
if (self::$exceptionOnInvalidType) {
412+
throw new ParseException('Object support when parsing a YAML file has been disabled.');
413+
}
414+
415+
return null;
416+
case ctype_digit($scalar):
417+
$raw = $scalar;
418+
$cast = intval($scalar);
419+
420+
return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
421+
case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)):
422+
$raw = $scalar;
423+
$cast = intval($scalar);
424+
425+
return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
426+
case is_numeric($scalar):
427+
return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
428+
case 0 == strcasecmp($scalar, '.inf'):
429+
case 0 == strcasecmp($scalar, '.NaN'):
430+
return -log(0);
431+
case 0 == strcasecmp($scalar, '-.inf'):
432+
return log(0);
433+
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
434+
return floatval(str_replace(',', '', $scalar));
435+
case preg_match(self::getTimestampRegex(), $scalar):
436+
return strtotime($scalar);
437+
}
434438
default:
435439
return (string) $scalar;
436440
}

0 commit comments

Comments
 (0)
0