@ -1201,10 +1201,11 @@ ZEND_FUNCTION(debug_backtrace)
char * class_name ;
zend_uint class_name_length ;
zval * stack_frame ;
zend_bool first_time = 1 ;
ptr = EG ( current_execute_data ) ;
lineno = ptr - > opline - > lineno ;
/* Skip debug_backtrace() itself */
ptr = ptr - > prev_execute_data ;
array_init ( return_value ) ;
@ -1222,35 +1223,22 @@ ZEND_FUNCTION(debug_backtrace)
class_name = ptr - > function_state . function - > common . scope - > name ;
}
function_name = ptr - > function_state . function - > common . function_name ;
if ( ! function_name ) {
function_name = " _main_ " ;
}
ptr = ptr - > prev_execute_data ;
if ( ! ptr ) {
zval_ptr_dtor ( & stack_frame ) ;
break ;
}
filename = ptr - > function_state . function - > op_array . filename ;
filename = ptr - > op_array - > filename ;
lineno = ptr - > opline - > lineno ;
if ( ! first_ti me) { /* Skip the first context which is debug_backtrace() itself */
if ( function_name ) {
add_assoc_string_ex ( stack_frame , " function " , sizeof ( " function " ) , function_name , 1 ) ;
if ( class_name ) {
add_assoc_string_ex ( stack_frame , " class " , sizeof ( " class " ) , class_name , 1 ) ;
}
add_assoc_string_ex ( stack_frame , " file " , sizeof ( " file " ) , filename , 1 ) ;
add_assoc_long_ex ( stack_frame , " line " , sizeof ( " line " ) , lineno ) ;
/* add_assoc_stringl_ex(stack_frame, "class", sizeof("class")-1, class_name, class_name_length, 1); */
add_next_index_zval ( return_value , stack_frame ) ;
} else {
first_time = 0 ;
}
if ( ptr - > opline ) {
lineno = ptr - > opline - > lineno ;
if ( class_name ) {
add_assoc_string_ex ( stack_frame , " class " , sizeof ( " class " ) , class_name , 1 ) ;
}
add_assoc_string_ex ( stack_frame , " file " , sizeof ( " file " ) , filename , 1 ) ;
add_assoc_long_ex ( stack_frame , " line " , sizeof ( " line " ) , lineno ) ;
/* add_assoc_stringl_ex(stack_frame, "class", sizeof("class")-1, class_name, class_name_length, 1); */
add_next_index_zval ( return_value , stack_frame ) ;
ptr = ptr - > prev_execute_data ;
}
}
/* }}} */