@@ -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