# And i wondered why the trace wasn't rally accurate.
/* }}} */
-ZEND_API void zend_fetch_debug_backtrace(zval *return_value TSRMLS_DC)
+ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last TSRMLS_DC)
{
zend_execute_data *ptr;
int lineno;
ptr = EG(current_execute_data);
- /* skip debug_backtrace() */
- ptr = ptr->prev_execute_data;
- cur_arg_pos -= 2;
- frames_on_stack--;
+ /* skip debug_backtrace() */
+ ptr = ptr->prev_execute_data;
+ if (skip_last) {
+ cur_arg_pos -= 2;
+ frames_on_stack--;
+ }
array_init(return_value);
ZEND_WRONG_PARAM_COUNT();
}
- zend_fetch_debug_backtrace(return_value TSRMLS_CC);
+ zend_fetch_debug_backtrace(return_value, 1 TSRMLS_CC);
}
/* }}} */
#define ZEND_BUILTIN_FUNCTIONS_H
int zend_startup_builtin_functions(TSRMLS_D);
-ZEND_API void zend_fetch_debug_backtrace(zval *return_value TSRMLS_DC);
+ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last TSRMLS_DC);
#endif /* ZEND_BUILTIN_FUNCTIONS_H */
ALLOC_ZVAL(trace);
trace->is_ref = 0;
trace->refcount = 0;
- zend_fetch_debug_backtrace(trace TSRMLS_CC);
+ zend_fetch_debug_backtrace(trace, 0 TSRMLS_CC);
zend_update_property_string(class_type, &obj, "file", sizeof("file")-1, zend_get_executed_filename(TSRMLS_C) TSRMLS_CC);
zend_update_property_long(class_type, &obj, "line", sizeof("line")-1, zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);
ALLOC_ZVAL(trace);
trace->is_ref = 0;
trace->refcount = 0;
- zend_fetch_debug_backtrace(trace TSRMLS_CC);
+ zend_fetch_debug_backtrace(trace, 0 TSRMLS_CC);
zend_update_property_string(class_type, &obj, "file", sizeof("file")-1, zend_get_executed_filename(TSRMLS_C) TSRMLS_CC);
zend_update_property_long(class_type, &obj, "line", sizeof("line")-1, zend_get_executed_lineno(TSRMLS_C) TSRMLS_CC);