summaryrefslogtreecommitdiff
path: root/Zend/zend_execute_API.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2008-08-08 17:47:31 +0000
committerMarcus Boerger <helly@php.net>2008-08-08 17:47:31 +0000
commit3f7a4b7e90eee47e7b6873f800e93854b0338dd4 (patch)
treea36ccc107e52711aa644eb9197fc3c7beb346deb /Zend/zend_execute_API.c
parent6fb114f1d5a6013ef7cde20e296a228ead10aabd (diff)
downloadphp-git-3f7a4b7e90eee47e7b6873f800e93854b0338dd4.tar.gz
- MFH error handling, now with save, replace, restore
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r--Zend/zend_execute_API.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 343c0f18c2..00da9eac55 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -890,16 +890,14 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
EG(opline_ptr) = original_opline_ptr;
} else if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
int call_via_handler = (EX(function_state).function->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
- zend_error_handling_t error_handling = EG(error_handling);
- zend_class_entry *exception_class = EG(exception_class);
-
+ zend_error_handling error_handling;
+ zend_save_error_handling(&error_handling TSRMLS_CC);
ALLOC_INIT_ZVAL(*fci->retval_ptr_ptr);
if (EX(function_state).function->common.scope) {
EG(scope) = EX(function_state).function->common.scope;
}
((zend_internal_function *) EX(function_state).function)->handler(fci->param_count, *fci->retval_ptr_ptr, fci->retval_ptr_ptr, (fci->object_pp?*fci->object_pp:NULL), 1 TSRMLS_CC);
- EG(error_handling) = error_handling;
- EG(exception_class) = exception_class;
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
/* We shouldn't fix bad extensions here,
because it can break proper ones (Bug #34045)
if (!EX(function_state).function->common.return_reference)
@@ -920,11 +918,10 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
/* Not sure what should be done here if it's a static method */
if (fci->object_pp) {
- zend_error_handling_t error_handling = EG(error_handling);
- zend_class_entry *exception_class = EG(exception_class);
+ zend_error_handling error_handling;
+ zend_save_error_handling(&error_handling TSRMLS_CC);
Z_OBJ_HT_PP(fci->object_pp)->call_method(EX(function_state).function->common.function_name, fci->param_count, *fci->retval_ptr_ptr, fci->retval_ptr_ptr, *fci->object_pp, 1 TSRMLS_CC);
- EG(error_handling) = error_handling;
- EG(exception_class) = exception_class;
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
} else {
zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object");
}