@@ -5714,22 +5714,26 @@ static zend_bool zend_is_valid_default_value(zend_type type, zval *value)
57145714 return 0 ;
57155715}
57165716
5717- void zend_compile_params (zend_ast * ast , zend_ast * return_type_ast ) /* {{{ */
5717+ void zend_compile_params (zend_ast * ast , zend_ast * return_type_ast , uint32_t fallback_return_type ) /* {{{ */
57185718{
57195719 zend_ast_list * list = zend_ast_get_list (ast );
57205720 uint32_t i ;
57215721 zend_op_array * op_array = CG (active_op_array );
57225722 zend_arg_info * arg_infos ;
57235723 zend_string * optional_param = NULL ;
57245724
5725- if (return_type_ast ) {
5725+ if (return_type_ast || fallback_return_type ) {
57265726 /* Use op_array->arg_info[-1] for return type */
57275727 arg_infos = safe_emalloc (sizeof (zend_arg_info ), list -> children + 1 , 0 );
57285728 arg_infos -> name = NULL ;
5729- arg_infos -> type = zend_compile_typename (
5730- return_type_ast , /* force_allow_null */ 0 , /* use_arena */ 0 );
5731- ZEND_TYPE_FULL_MASK (arg_infos -> type ) |= _ZEND_ARG_INFO_FLAGS (
5732- (op_array -> fn_flags & ZEND_ACC_RETURN_REFERENCE ) != 0 , /* is_variadic */ 0 );
5729+ if (return_type_ast ) {
5730+ arg_infos -> type = zend_compile_typename (
5731+ return_type_ast , /* force_allow_null */ 0 , /* use_arena */ 0 );
5732+ ZEND_TYPE_FULL_MASK (arg_infos -> type ) |= _ZEND_ARG_INFO_FLAGS (
5733+ (op_array -> fn_flags & ZEND_ACC_RETURN_REFERENCE ) != 0 , /* is_variadic */ 0 );
5734+ } else {
5735+ arg_infos -> type = (zend_type ) ZEND_TYPE_INIT_CODE (fallback_return_type , 0 , 0 );
5736+ }
57335737 arg_infos ++ ;
57345738 op_array -> fn_flags |= ZEND_ACC_HAS_RETURN_TYPE ;
57355739 } else {
@@ -6294,7 +6298,8 @@ void zend_compile_func_decl(znode *result, zend_ast *ast, zend_bool toplevel) /*
62946298 zend_stack_push (& CG (loop_var_stack ), (void * ) & dummy_var );
62956299 }
62966300
6297- zend_compile_params (params_ast , return_type_ast );
6301+ zend_compile_params (params_ast , return_type_ast ,
6302+ is_method && zend_string_equals_literal_ci (decl -> name , "__toString" ) ? IS_STRING : 0 );
62986303 if (CG (active_op_array )-> fn_flags & ZEND_ACC_GENERATOR ) {
62996304 zend_mark_function_as_generator ();
63006305 zend_emit_op (NULL , ZEND_GENERATOR_CREATE , NULL , NULL );
0 commit comments