]> granicus.if.org Git - php/commitdiff
- Hopefully fix problems with debug_backtrace()
authorAndi Gutmans <andi@php.net>
Wed, 8 May 2002 18:43:19 +0000 (18:43 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 8 May 2002 18:43:19 +0000 (18:43 +0000)
Zend/zend_builtin_functions.c
Zend/zend_execute.c

index 23fce3ce43d9527b2801ef90279a434c751f93d5..15cfee45c8690787462455b301b78414cc753cab 100644 (file)
@@ -1203,9 +1203,12 @@ ZEND_FUNCTION(debug_backtrace)
                if (ptr->object) {
                        printf("%s::", Z_OBJCE(*ptr->object)->name);
                }
+               if (ptr->function_state.function->common.scope) {
+                       printf("%s::", ptr->function_state.function->common.scope->name);
+               }
                function_name = ptr->function_state.function->common.function_name;
                if (!function_name) {
-                       function_name = "main";
+                       function_name = "_main_";
                }
 
                ptr = ptr->prev_execute_data;
index 27a818f8a78f6c82ab2650993b2596fcd7343743..4fa0d3b302ed07ac2508ae5054c05519597079f8 100644 (file)
@@ -2748,12 +2748,25 @@ send_by_ref:
                                        FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
                                        EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
                                        if (new_op_array) {
+                                               zval *saved_object;
+                                               zend_function *saved_function;
+
+
                                                EG(return_value_ptr_ptr) = EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr;
                                                EG(active_op_array) = new_op_array;
                                                EX(Ts)[EX(opline)->result.u.var].var.ptr = NULL;
 
+                                               saved_object = EX(object);
+                                               saved_function = EX(function_state).function;
+
+                                               EX(function_state).function = (zend_function *) new_op_array;
+                                               EX(object) = NULL;
+                                               
                                                zend_execute(new_op_array TSRMLS_CC);
                                                
+                                               EX(function_state).function = saved_function;
+                                               EX(object) = saved_object;
+                                               
                                                if (!return_value_used) {
                                                        if (EX(Ts)[EX(opline)->result.u.var].var.ptr) {
                                                                zval_ptr_dtor(&EX(Ts)[EX(opline)->result.u.var].var.ptr);