Skip to content

Commit c6e911e

Browse files
committed
Merge branch 'PHP-5.5' of git.php.net:php-src into PHP-5.5
2 parents 0171bcb + 65afa3c commit c6e911e

File tree

3 files changed

+35
-31
lines changed

3 files changed

+35
-31
lines changed

Zend/zend_vm_def.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1967,13 +1967,6 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
19671967
LOAD_OPLINE();
19681968

19691969
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
1970-
temp_variable *ret = &EX_T(opline->result.var);
1971-
1972-
MAKE_STD_ZVAL(ret->var.ptr);
1973-
ZVAL_NULL(ret->var.ptr);
1974-
ret->var.ptr_ptr = &ret->var.ptr;
1975-
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
1976-
19771970
if (fbc->common.arg_info) {
19781971
zend_uint i=0;
19791972
zval **p = (zval**)EX(function_state).arguments;
@@ -1985,15 +1978,24 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
19851978
}
19861979
}
19871980

1988-
if (!zend_execute_internal) {
1989-
/* saves one function call if zend_execute_internal is not used */
1990-
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);
1991-
} else {
1992-
zend_execute_internal(execute_data, NULL, RETURN_VALUE_USED(opline) TSRMLS_CC);
1993-
}
1981+
if (EXPECTED(EG(exception) == NULL)) {
1982+
temp_variable *ret = &EX_T(opline->result.var);
19941983

1995-
if (!RETURN_VALUE_USED(opline)) {
1996-
zval_ptr_dtor(&ret->var.ptr);
1984+
MAKE_STD_ZVAL(ret->var.ptr);
1985+
ZVAL_NULL(ret->var.ptr);
1986+
ret->var.ptr_ptr = &ret->var.ptr;
1987+
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
1988+
1989+
if (!zend_execute_internal) {
1990+
/* saves one function call if zend_execute_internal is not used */
1991+
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);
1992+
} else {
1993+
zend_execute_internal(execute_data, NULL, RETURN_VALUE_USED(opline) TSRMLS_CC);
1994+
}
1995+
1996+
if (!RETURN_VALUE_USED(opline)) {
1997+
zval_ptr_dtor(&ret->var.ptr);
1998+
}
19971999
}
19982000
} else if (fbc->type == ZEND_USER_FUNCTION) {
19992001
EX(original_return_value) = EG(return_value_ptr_ptr);

Zend/zend_vm_execute.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -519,13 +519,6 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
519519
LOAD_OPLINE();
520520

521521
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
522-
temp_variable *ret = &EX_T(opline->result.var);
523-
524-
MAKE_STD_ZVAL(ret->var.ptr);
525-
ZVAL_NULL(ret->var.ptr);
526-
ret->var.ptr_ptr = &ret->var.ptr;
527-
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
528-
529522
if (fbc->common.arg_info) {
530523
zend_uint i=0;
531524
zval **p = (zval**)EX(function_state).arguments;
@@ -537,15 +530,24 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
537530
}
538531
}
539532

540-
if (!zend_execute_internal) {
541-
/* saves one function call if zend_execute_internal is not used */
542-
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);
543-
} else {
544-
zend_execute_internal(execute_data, NULL, RETURN_VALUE_USED(opline) TSRMLS_CC);
545-
}
533+
if (EXPECTED(EG(exception) == NULL)) {
534+
temp_variable *ret = &EX_T(opline->result.var);
546535

547-
if (!RETURN_VALUE_USED(opline)) {
548-
zval_ptr_dtor(&ret->var.ptr);
536+
MAKE_STD_ZVAL(ret->var.ptr);
537+
ZVAL_NULL(ret->var.ptr);
538+
ret->var.ptr_ptr = &ret->var.ptr;
539+
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
540+
541+
if (!zend_execute_internal) {
542+
/* saves one function call if zend_execute_internal is not used */
543+
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);
544+
} else {
545+
zend_execute_internal(execute_data, NULL, RETURN_VALUE_USED(opline) TSRMLS_CC);
546+
}
547+
548+
if (!RETURN_VALUE_USED(opline)) {
549+
zval_ptr_dtor(&ret->var.ptr);
550+
}
549551
}
550552
} else if (fbc->type == ZEND_USER_FUNCTION) {
551553
EX(original_return_value) = EG(return_value_ptr_ptr);

ext/opcache/ZendAccelerator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
#endif
2828

2929
#define ACCELERATOR_PRODUCT_NAME "Zend OPcache"
30-
#define ACCELERATOR_VERSION "7.0.1"
30+
#define ACCELERATOR_VERSION "7.0.2-dev"
3131
/* 2 - added Profiler support, on 20010712 */
3232
/* 3 - added support for Optimizer's encoded-only-files mode */
3333
/* 4 - works with the new Optimizer, that supports the file format with licenses */

0 commit comments

Comments
 (0)