From: Nikita Popov Date: Wed, 4 Sep 2019 13:33:16 +0000 (+0200) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=395e87d4977d1154e45f9552a318e60666c01550;p=php Merge branch 'PHP-7.4' --- 395e87d4977d1154e45f9552a318e60666c01550 diff --cc Zend/zend_vm_def.h index b58130c6d5,428e2a12b4..102a81cb92 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@@ -4186,10 -4178,7 +4196,8 @@@ ZEND_VM_C_LABEL(fcall_except) ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } - } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { + } else { - zval retval; - + ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); call->prev_execute_data = execute_data; EG(current_execute_data) = call; @@@ -4228,9 -4213,21 +4237,8 @@@ ZEND_VM_C_LABEL(fcall_end) if (!RETURN_VALUE_USED(opline)) { i_zval_ptr_dtor(ret); } - } else { /* ZEND_OVERLOADED_FUNCTION */ - ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; - - call->prev_execute_data = execute_data; - - if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } - - if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(ret); - } } - ZEND_VM_C_LABEL(fcall_end): if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { OBJ_RELEASE(Z_OBJ(call->This)); } @@@ -8293,8 -8297,8 +8301,7 @@@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLI EG(current_execute_data) = call->prev_execute_data; -ZEND_VM_C_LABEL(call_trampoline_end): zend_vm_stack_free_args(call); - if (ret == &retval) { zval_ptr_dtor(ret); } diff --cc Zend/zend_vm_execute.h index 2585277ab2,47f7d1e15e..75db1ba931 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@@ -1598,10 -1600,7 +1614,8 @@@ fcall_except ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } - } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { + } else { - zval retval; - + ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); call->prev_execute_data = execute_data; EG(current_execute_data) = call; @@@ -1640,9 -1635,21 +1655,8 @@@ fcall_end if (!0) { i_zval_ptr_dtor(ret); } - } else { /* ZEND_OVERLOADED_FUNCTION */ - ret = 0 ? EX_VAR(opline->result.var) : &retval; - - call->prev_execute_data = execute_data; - - if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } - - if (!0) { - zval_ptr_dtor(ret); - } } - fcall_end: if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { OBJ_RELEASE(Z_OBJ(call->This)); } @@@ -1701,10 -1712,7 +1719,8 @@@ fcall_except ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } - } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { + } else { - zval retval; - + ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); call->prev_execute_data = execute_data; EG(current_execute_data) = call; @@@ -1743,9 -1747,21 +1760,8 @@@ fcall_end if (!1) { i_zval_ptr_dtor(ret); } - } else { /* ZEND_OVERLOADED_FUNCTION */ - ret = 1 ? EX_VAR(opline->result.var) : &retval; - - call->prev_execute_data = execute_data; - - if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { - UNDEF_RESULT(); - HANDLE_EXCEPTION(); - } - - if (!1) { - zval_ptr_dtor(ret); - } } - fcall_end: if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { OBJ_RELEASE(Z_OBJ(call->This)); } @@@ -2805,8 -2822,8 +2821,7 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS EG(current_execute_data) = call->prev_execute_data; -call_trampoline_end: zend_vm_stack_free_args(call); - if (ret == &retval) { zval_ptr_dtor(ret); }