cvs: ZendEngine2 / zend.h zend_API.c zend_execute_API.c zend_vm_def.h zend_vm_execute.h php-src/main main.c php.h
"Marcus Boerger" <[email protected]>
| Newsgroups | gmane.comp.php.cvs.zend |
|---|---|
| Message-ID | <cvshelly1218215449@cvsserver> |
helly Fri Aug 8 17:10:49 2008 UTC
Modified files:
/php-src/main main.c php.h
/ZendEngine2 zend.h zend_API.c zend_execute_API.c zend_vm_def.h
zend_vm_execute.h
Log:
- Turns out the easy solution for correct error_handling doesn't work. So
we need to provide save/replace/restore functions right away. It also
to save/restore in the vm.
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
helly-20080808171049.txt
(text/plain, 12 KB)
http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.775&r2=1.776&diff_format=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.775 php-src/main/main.c:1.776
--- php-src/main/main.c:1.775 Fri Jul 25 13:39:39 2008
+++ php-src/main/main.c Fri Aug 8 17:10:49 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: main.c,v 1.775 2008/07/25 13:39:39 felipe Exp $ */
+/* $Id: main.c,v 1.776 2008/08/08 17:10:49 helly Exp $ */
/* {{{ includes
*/
@@ -877,21 +877,6 @@
}
/* }}} */
-/* {{{ php_suppress_errors */
-PHPAPI void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class TSRMLS_DC)
-{
- EG(error_handling) = error_handling;
- EG(exception_class) = exception_class;
-
- if (error_handling == EH_NORMAL) {
- EG(user_error_handler) = EG(user_error_handler_old);
- } else {
- EG(user_error_handler_old) = EG(user_error_handler);
- EG(user_error_handler) = NULL;
- }
-}
-/* }}} */
-
/* {{{ php_error_cb
extended error handling function */
static void php_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args)
http://cvs.php.net/viewvc.cgi/php-src/main/php.h?r1=1.246&r2=1.247&diff_format=u
Index: php-src/main/php.h
diff -u php-src/main/php.h:1.246 php-src/main/php.h:1.247
--- php-src/main/php.h:1.246 Fri Aug 8 14:14:52 2008
+++ php-src/main/php.h Fri Aug 8 17:10:49 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php.h,v 1.246 2008/08/08 14:14:52 helly Exp $ */
+/* $Id: php.h,v 1.247 2008/08/08 17:10:49 helly Exp $ */
#ifndef PHP_H
#define PHP_H
@@ -286,7 +286,10 @@
#define error_handling_t zend_error_handling_t
BEGIN_EXTERN_C()
-PHPAPI void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class TSRMLS_DC);
+static inline ZEND_ATTRIBUTE_DEPRECATED void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class TSRMLS_DC)
+{
+ zend_replace_error_handling(error_handling, exception_class, NULL TSRMLS_CC);
+}
static inline ZEND_ATTRIBUTE_DEPRECATED void php_std_error_handling() {}
PHPAPI void php_verror(const char *docref, const char *params, int type, const char *format, va_list args TSRMLS_DC);
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.356&r2=1.357&diff_format=u
Index: ZendEngine2/zend.h
diff -u ZendEngine2/zend.h:1.356 ZendEngine2/zend.h:1.357
--- ZendEngine2/zend.h:1.356 Tue Jul 8 07:05:03 2008
+++ ZendEngine2/zend.h Fri Aug 8 17:10:49 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend.h,v 1.356 2008/07/08 07:05:03 dmitry Exp $ */
+/* $Id: zend.h,v 1.357 2008/08/08 17:10:49 helly Exp $ */
#ifndef ZEND_H
#define ZEND_H
@@ -802,6 +802,15 @@
EH_THROW
} zend_error_handling_t;
+typedef struct {
+ zend_error_handling_t handling;
+ zend_class_entry *exception;
+} zend_error_handling;
+
+ZEND_API void zend_save_error_handling(zend_error_handling *current TSRMLS_DC);
+ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current TSRMLS_DC);
+ZEND_API void zend_restore_error_handling(const zend_error_handling *saved TSRMLS_DC);
+
#define ZEND_U_EQUAL(type, ustr, ulen, str, slen) \
((type == IS_STRING)? \
(!memcmp((ustr).s,(str),(slen))): \
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.483&r2=1.484&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.483 ZendEngine2/zend_API.c:1.484
--- ZendEngine2/zend_API.c:1.483 Thu Aug 7 12:03:51 2008
+++ ZendEngine2/zend_API.c Fri Aug 8 17:10:49 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.c,v 1.483 2008/08/07 12:03:51 dmitry Exp $ */
+/* $Id: zend_API.c,v 1.484 2008/08/08 17:10:49 helly Exp $ */
#include "zend.h"
#include "zend_execute.h"
@@ -4285,6 +4285,37 @@
}
/* }}} */
+ZEND_API void zend_save_error_handling(zend_error_handling *current TSRMLS_DC) /* {{{ */
+{
+ current->handling = EG(error_handling);
+ current->exception = EG(exception_class);
+}
+/* }}} */
+
+ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current TSRMLS_DC) /* {{{ */
+{
+ if (current) {
+ zend_save_error_handling(current TSRMLS_CC);
+ }
+ EG(error_handling) = error_handling;
+ EG(exception_class) = error_handling == EH_THROW ? exception_class : NULL;
+
+ if (error_handling == EH_NORMAL) {
+ EG(user_error_handler) = EG(user_error_handler_old);
+ } else {
+ EG(user_error_handler_old) = EG(user_error_handler);
+ EG(user_error_handler) = NULL;
+ }
+}
+/* }}} */
+
+ZEND_API void zend_restore_error_handling(const zend_error_handling *saved TSRMLS_DC) /* {{{ */
+{
+ EG(error_handling) = saved->handling;
+ EG(exception_class) = saved->handling == EH_THROW ? saved->exception : NULL;
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.457&r2=1.458&diff_format=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.457 ZendEngine2/zend_execute_API.c:1.458
--- ZendEngine2/zend_execute_API.c:1.457 Fri Aug 8 13:18:30 2008
+++ ZendEngine2/zend_execute_API.c Fri Aug 8 17:10:49 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute_API.c,v 1.457 2008/08/08 13:18:30 helly Exp $ */
+/* $Id: zend_execute_API.c,v 1.458 2008/08/08 17:10:49 helly Exp $ */
#include <stdio.h>
#include <signal.h>
@@ -947,16 +947,14 @@
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)
@@ -975,13 +973,12 @@
} else { /* ZEND_OVERLOADED_FUNCTION */
ALLOC_INIT_ZVAL(*fci->retval_ptr_ptr);
- /* Not sure what should be done here if it's a static method */
+ /* 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");
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.239&r2=1.240&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.239 ZendEngine2/zend_vm_def.h:1.240
--- ZendEngine2/zend_vm_def.h:1.239 Sat Jul 26 15:31:38 2008
+++ ZendEngine2/zend_vm_def.h Fri Aug 8 17:10:49 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_vm_def.h,v 1.239 2008/07/26 15:31:38 dmitry Exp $ */
+/* $Id: zend_vm_def.h,v 1.240 2008/08/08 17:10:49 helly Exp $ */
/* If you change this file, please regenerate the zend_vm_execute.h and
* zend_vm_opcodes.h files by running:
@@ -2337,6 +2337,7 @@
EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
+ zend_error_handling error_handling;
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;
@@ -2351,12 +2352,14 @@
arg_count--;
}
}
+ zend_save_error_handling(&error_handling TSRMLS_CC);
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_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
} else {
zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC);
}
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
if (!RETURN_VALUE_USED(opline)) {
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
@@ -2404,7 +2407,10 @@
/* Not sure what should be done here if it's a static method */
if (EX(object)) {
+ zend_error_handling error_handling;
+ zend_save_error_handling(&error_handling TSRMLS_CC);
Z_OBJ_HT_P(EX(object))->call_method(EX(function_state).function->common.function_name, opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
} else {
zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object");
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.243&r2=1.244&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.243 ZendEngine2/zend_vm_execute.h:1.244
--- ZendEngine2/zend_vm_execute.h:1.243 Sat Jul 26 15:31:38 2008
+++ ZendEngine2/zend_vm_execute.h Fri Aug 8 17:10:49 2008
@@ -302,6 +302,7 @@
EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
+ zend_error_handling error_handling;
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;
@@ -316,12 +317,14 @@
arg_count--;
}
}
+ zend_save_error_handling(&error_handling TSRMLS_CC);
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_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
} else {
zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC);
}
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
if (!RETURN_VALUE_USED(opline)) {
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
@@ -369,7 +372,10 @@
/* Not sure what should be done here if it's a static method */
if (EX(object)) {
+ zend_error_handling error_handling;
+ zend_save_error_handling(&error_handling TSRMLS_CC);
Z_OBJ_HT_P(EX(object))->call_method(EX(function_state).function->common.function_name, opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
} else {
zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object");
}