com php-src: Merge branch 'PHP-5.3' into PHP-5.4: NEWS Zend/zend_vm_def.h Zend/zend_vm_execute.h

From: Date: Mon, 25 Mar 2013 11:23:49 +0000
Subject: com php-src: Merge branch 'PHP-5.3' into PHP-5.4: NEWS Zend/zend_vm_def.h Zend/zend_vm_execute.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-71742@lists.php.net to get a copy of this message
Commit: e9f996c00d5cb6448dac1457dd9dae320c16904f Author: Dmitry Stogov <dmitry@zend.com> Mon, 25 Mar 2013 15:23:49 +0400 Parents: 6f560b0487b48d8364a2077b97e661fd5107054e c4686b4de93a89e8265331b0d4a6a7954ccbae95 Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=e9f996c00d5cb6448dac1457dd9dae320c16904f Log: Merge branch 'PHP-5.3' into PHP-5.4 * PHP-5.3: Fixed bug #63914 (zend_do_fcall_common_helper_SPEC does not handle exceptions properly). (Jeff Welch) Conflicts: NEWS Zend/zend_vm_def.h Zend/zend_vm_execute.h Bugs: https://bugs.php.net/63914 Changed paths: MM NEWS MM Zend/zend_vm_def.h MM Zend/zend_vm_execute.h

diff --cc NEWS index bc132d4,9d5fc6d..c14ea1c --- a/NEWS +++ b/NEWS @@@ -1,16 -1,12 +1,18 @@@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? 2013, PHP 5.3.24 - +?? ??? 2013, PHP 5.4.14 - Core + . Fixed bug #64432 (more empty delimiter warning in strX methods). (Laruence) + . Fixed bug #64417 (ArrayAccess::&offsetGet() in a trait causes fatal error). + (Dmitry) . Fixed bug #64370 (microtime(true) less than $_SERVER['REQUEST_TIME_FLOAT']). (Anatol) + . Fixed bug #64239 (Debug backtrace changed behavior since 5.4.10 or 5.4.11). + (Dmitry, Laruence) + . Fixed bug #63976 (Parent class incorrectly using child constant in class + property). (Dmitry) + . Fixed bug #63914 (zend_do_fcall_common_helper_SPEC does not handle + exceptions properly). (Jeff Welch) . Fixed bug #62343 (Show class_alias In get_declared_classes()) (Dmitry) - PCRE: diff --cc Zend/zend_vm_def.h index e5cdd1d,eed9245..ffa94a1 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@@ -2652,17 -2299,9 +2652,12 @@@ ZEND_VM_HELPER(zend_do_fcall_common_hel zend_arg_types_stack_3_pop(&EG(arg_types_stack), &EX(called_scope), &EX(current_object), &EX(fbc)); EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC); + LOAD_OPLINE(); + + if (fbc->type == ZEND_INTERNAL_FUNCTION) { + temp_variable *ret = &EX_T(opline->result.var); - MAKE_STD_ZVAL(ret->var.ptr); - ZVAL_NULL(ret->var.ptr); - ret->var.ptr_ptr = &ret->var.ptr; - ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; - - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - if (EX(function_state).function->common.arg_info) { + if (fbc->common.arg_info) { zend_uint i=0; zval **p = (zval**)EX(function_state).arguments; ulong arg_count = opline->extended_value; @@@ -2673,34 -2312,37 +2668,41 @@@ } } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); - } else { - zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC); - } + if (EXPECTED(EG(exception) == NULL)) { - ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; ++ MAKE_STD_ZVAL(ret->var.ptr); ++ ZVAL_NULL(ret->var.ptr); ++ ret->var.ptr_ptr = &ret->var.ptr; ++ ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; - if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&ret->var.ptr); + if (!zend_execute_internal) { + /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); ++ fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); + } else { + zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC); + } + + if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); ++ zval_ptr_dtor(&ret->var.ptr); + } } - } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { + } else if (fbc->type == ZEND_USER_FUNCTION) { EX(original_return_value) = EG(return_value_ptr_ptr); EG(active_symbol_table) = NULL; - EG(active_op_array) = &EX(function_state).function->op_array; + EG(active_op_array) = &fbc->op_array; EG(return_value_ptr_ptr) = NULL; - if (RETURN_VALUE_USED(opline)) { - EG(return_value_ptr_ptr) = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = NULL; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; + if (RETURN_VALUE_USED(opline)) { + temp_variable *ret = &EX_T(opline->result.var); + + ret->var.ptr = NULL; + EG(return_value_ptr_ptr) = &ret->var.ptr; + ret->var.ptr_ptr = &ret->var.ptr; + ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; } - if (zend_execute == execute && !EG(exception)) { - EX(call_opline) = opline; - ZEND_VM_ENTER(); + if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(EG(exception) == NULL)) { + ZEND_VM_ENTER(); + } } else { zend_execute(EG(active_op_array) TSRMLS_CC); } diff --cc Zend/zend_vm_execute.h index 97e5a8e,6edc91a..1860a0f --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@@ -616,17 -299,9 +616,12 @@@ static int ZEND_FASTCALL zend_do_fcall_ zend_arg_types_stack_3_pop(&EG(arg_types_stack), &EX(called_scope), &EX(current_object), &EX(fbc)); EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC); + LOAD_OPLINE(); + + if (fbc->type == ZEND_INTERNAL_FUNCTION) { + temp_variable *ret = &EX_T(opline->result.var); - MAKE_STD_ZVAL(ret->var.ptr); - ZVAL_NULL(ret->var.ptr); - ret->var.ptr_ptr = &ret->var.ptr; - ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; - - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - if (EX(function_state).function->common.arg_info) { + if (fbc->common.arg_info) { zend_uint i=0; zval **p = (zval**)EX(function_state).arguments; ulong arg_count = opline->extended_value; @@@ -637,34 -312,37 +632,41 @@@ } } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); - } else { - zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC); - } + if (EXPECTED(EG(exception) == NULL)) { - ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; ++ MAKE_STD_ZVAL(ret->var.ptr); ++ ZVAL_NULL(ret->var.ptr); ++ ret->var.ptr_ptr = &ret->var.ptr; ++ ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; + + if (!zend_execute_internal) { + /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); ++ fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); + } else { + zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC); + } - if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&ret->var.ptr); + if (!RETURN_VALUE_USED(opline)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); ++ zval_ptr_dtor(&ret->var.ptr); + } } - } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { + } else if (fbc->type == ZEND_USER_FUNCTION) { EX(original_return_value) = EG(return_value_ptr_ptr); EG(active_symbol_table) = NULL; - EG(active_op_array) = &EX(function_state).function->op_array; + EG(active_op_array) = &fbc->op_array; EG(return_value_ptr_ptr) = NULL; if (RETURN_VALUE_USED(opline)) { - EG(return_value_ptr_ptr) = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = NULL; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference; + temp_variable *ret = &EX_T(opline->result.var); + + ret->var.ptr = NULL; + EG(return_value_ptr_ptr) = &ret->var.ptr; + ret->var.ptr_ptr = &ret->var.ptr; + ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0; } - if (zend_execute == execute && !EG(exception)) { - EX(call_opline) = opline; - ZEND_VM_ENTER(); + if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(EG(exception) == NULL)) { + ZEND_VM_ENTER(); + } } else { zend_execute(EG(active_op_array) TSRMLS_CC); }
« previous php.cvs (#71742) next »