char *error_filename;
uint error_lineno;
zval *orig_user_error_handler;
- zval *orig_garbage[2];
- int orig_garbage_ptr;
TSRMLS_FETCH();
/* Obtain relevant filename and lineno */
orig_user_error_handler = EG(user_error_handler);
EG(user_error_handler) = NULL;
- orig_garbage_ptr = EG(garbage_ptr);
- EG(garbage_ptr) = 0;
- if (orig_garbage_ptr > 0) {
- memcpy(&orig_garbage, &EG(garbage), sizeof(zval*)*orig_garbage_ptr);
- }
-
if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) {
if (retval) {
if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) {
zend_error_cb(type, error_filename, error_lineno, format, args);
}
- if (orig_garbage_ptr > 0) {
- while (EG(garbage_ptr)) {
- zval_ptr_dtor(&EG(garbage)[--EG(garbage_ptr)]);
- }
- EG(garbage_ptr) = orig_garbage_ptr;
- memcpy(&EG(garbage), &orig_garbage, sizeof(zval*)*orig_garbage_ptr);
- }
-
EG(user_error_handler) = orig_user_error_handler;
efree(params);
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator TSRMLS_CC);
EG(opline_ptr) = NULL;
- EG(garbage_ptr) = 0;
zend_hash_init(&EG(included_files), 5, NULL, NULL, 0);
zend_hash_apply(EG(function_table), (apply_func_t) zend_cleanup_function_data TSRMLS_CC);
zend_hash_apply(EG(class_table), (apply_func_t) zend_cleanup_class_data TSRMLS_CC);
- while (EG(garbage_ptr)) {
- if (EG(garbage)[--EG(garbage_ptr)]->refcount==1) {
- zval_ptr_dtor(&EG(garbage)[EG(garbage_ptr)]);
- }
- }
-
zend_ptr_stack_destroy(&EG(argument_stack));
/* Destroy all op arrays */
zend_function_state *original_function_state_ptr;
zend_op_array *original_op_array;
zend_op **original_opline_ptr;
- zval *orig_free_op1, *orig_free_op2;
- int (*orig_unary_op)(zval *result, zval *op1);
- int (*orig_binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
zend_class_entry *current_scope;
zend_class_entry *calling_scope = NULL;
zval *current_this;
EG(return_value_ptr_ptr) = fci->retval_ptr_ptr;
EG(active_op_array) = (zend_op_array *) EX(function_state).function;
original_opline_ptr = EG(opline_ptr);
- orig_free_op1 = EG(free_op1);
- orig_free_op2 = EG(free_op2);
- orig_unary_op = EG(unary_op);
- orig_binary_op = EG(binary_op);
zend_execute(EG(active_op_array) TSRMLS_CC);
if (!fci->symbol_table) {
zend_hash_destroy(EG(active_symbol_table));
EG(active_op_array) = original_op_array;
EG(return_value_ptr_ptr)=original_return_value;
EG(opline_ptr) = original_opline_ptr;
- EG(free_op1) = orig_free_op1;
- EG(free_op2) = orig_free_op2;
- EG(unary_op) = orig_unary_op;
- EG(binary_op) = orig_binary_op;
} else {
ALLOC_INIT_ZVAL(*fci->retval_ptr_ptr);
if (EX(function_state).function->common.scope) {
HashTable persistent_list;
zend_ptr_stack argument_stack;
- zval *free_op1, *free_op2;
- int (*unary_op)(zval *result, zval *op1);
- int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-
- zval *garbage[2];
- int garbage_ptr;
int user_error_handler_error_reporting;
zval *user_error_handler;