@@ -658,36 +658,44 @@ ZEND_API zend_opt_long ZEND_FASTCALL zend_flf_parse_arg_long_slow(const zval *ar
658658
659659ZEND_API zend_opt_double ZEND_FASTCALL zend_parse_arg_double_weak (const zval * arg , uint32_t arg_num ) /* {{{ */
660660{
661- zend_opt_double result ;
662- result .has_value = false;
663661 if (EXPECTED (Z_TYPE_P (arg ) == IS_LONG )) {
664- result . value = ( double )Z_LVAL_P (arg );
662+ return ( zend_opt_double ){( double )Z_LVAL_P (arg ), true} ;
665663 } else if (EXPECTED (Z_TYPE_P (arg ) == IS_STRING )) {
666664 zend_long l ;
667665 uint8_t type ;
666+ double d ;
668667
669- if (UNEXPECTED ((type = is_numeric_str_function (Z_STR_P (arg ), & l , & result .value )) != IS_DOUBLE )) {
668+ if (UNEXPECTED ((type = is_numeric_str_function (Z_STR_P (arg ), & l , & d )) != IS_DOUBLE )) {
669+ zend_opt_double result ;
670670 if (EXPECTED (type != 0 )) {
671671 result .value = (double )(l );
672672 result .has_value = true;
673+ } else {
674+ result .has_value = false;
673675 }
674676 return result ;
677+ } else {
678+ return (zend_opt_double ){d , true};
675679 }
676680 if (UNEXPECTED (EG (exception ))) {
681+ zend_opt_double result ;
682+ result .has_value = false;
677683 return result ;
678684 }
679685 } else if (EXPECTED (Z_TYPE_P (arg ) < IS_TRUE )) {
680686 if (UNEXPECTED (Z_TYPE_P (arg ) == IS_NULL ) && !zend_null_arg_deprecated ("float" , arg_num )) {
687+ zend_opt_double result ;
688+ result .has_value = false;
681689 return result ;
682690 }
683- result . value = 0.0 ;
691+ return ( zend_opt_double ){ 0.0 , true} ;
684692 } else if (EXPECTED (Z_TYPE_P (arg ) == IS_TRUE )) {
685- result . value = 1.0 ;
693+ return ( zend_opt_double ){ 1.0 , true} ;
686694 } else {
695+ zend_opt_double result ;
696+ result .has_value = false;
687697 return result ;
688698 }
689- result .has_value = true;
690- return result ;
691699}
692700/* }}} */
693701
0 commit comments