Commit 83af893f authored by Gemini Lasswell's avatar Gemini Lasswell

Move 'backtrace' from subr.el to backtrace.el

* lisp/subr.el (backtrace, backtrace--print-frame): Remove functions.
* lisp/emacs-lisp/backtrace.el (backtrace-backtrace): Remove function.
(backtrace): New function.
(backtrace-to-string): Make argument optional.
* doc/lispref/debugging.texi (Internals of Debugger): Update
description of 'backtrace' function.
parent ca983772
......@@ -678,20 +678,19 @@ of @code{debug} (@pxref{Invoking the Debugger}).
@cindex run time stack
@cindex call stack
This function prints a trace of Lisp function calls currently active.
This is the function used by @code{debug} to fill up the
@file{*Backtrace*} buffer. It is written in C, since it must have access
to the stack to determine which function calls are active. The return
value is always @code{nil}.
The trace is identical to the one that @code{debug} would show in the
@file{*Backtrace*} buffer. The return value is always nil.
In the following example, a Lisp expression calls @code{backtrace}
explicitly. This prints the backtrace to the stream
@code{standard-output}, which, in this case, is the buffer
@samp{backtrace-output}.
Each line of the backtrace represents one function call. The line shows
the values of the function's arguments if they are all known; if they
are still being computed, the line says so. The arguments of special
forms are elided.
Each line of the backtrace represents one function call. The line
shows the function followed by a list of the values of the function's
arguments if they are all known; if they are still being computed, the
line consists of a list containing the function and its unevaluated
arguments. Long lists or deeply nested structures may be elided.
@smallexample
@group
......@@ -708,7 +707,7 @@ forms are elided.
@group
----------- Buffer: backtrace-output ------------
backtrace()
(list ...computing arguments...)
(list 'testing (backtrace))
@end group
(progn ...)
eval((progn (1+ var) (list 'testing (backtrace))))
......@@ -739,7 +738,7 @@ example would look as follows:
@group
----------- Buffer: backtrace-output ------------
(backtrace)
(list ...computing arguments...)
(list 'testing (backtrace))
@end group
(progn ...)
(eval (progn (1+ var) (list 'testing (backtrace))))
......
......@@ -891,14 +891,18 @@ followed by `backtrace-print-frame', once for each stack frame."
;;; Backtrace printing
(defun backtrace-backtrace ()
;;;###autoload
(defun backtrace ()
"Print a trace of Lisp function calls currently active.
Output stream used is value of `standard-output'."
(princ (backtrace-to-string (backtrace-get-frames 'backtrace-backtrace))))
(princ (backtrace-to-string (backtrace-get-frames 'backtrace)))
nil)
(defun backtrace-to-string(frames)
(defun backtrace-to-string(&optional frames)
"Format FRAMES, a list of `backtrace-frame' objects, for output.
Return the result as a string."
Return the result as a string. If FRAMES is nil, use all
function calls currently active."
(unless frames (setq frames (backtrace-get-frames 'backtrace-to-string)))
(let ((backtrace-fontify nil))
(with-temp-buffer
(backtrace-mode)
......
......@@ -4687,25 +4687,6 @@ The properties used on SYMBOL are `composefunc', `sendfunc',
(put symbol 'hookvar (or hookvar 'mail-send-hook)))
(defun backtrace--print-frame (evald func args flags)
"Print a trace of a single stack frame to `standard-output'.
EVALD, FUNC, ARGS, FLAGS are as in `mapbacktrace'."
(princ (if (plist-get flags :debug-on-exit) "* " " "))
(cond
((and evald (not debugger-stack-frame-as-list))
(cl-prin1 func)
(if args (cl-prin1 args) (princ "()")))
(t
(cl-prin1 (cons func args))))
(princ "\n"))
(defun backtrace ()
"Print a trace of Lisp function calls currently active.
Output stream used is value of `standard-output'."
(let ((print-level (or print-level 8))
(print-escape-control-characters t))
(mapbacktrace #'backtrace--print-frame 'backtrace)))
(defun backtrace-frames (&optional base)
"Collect all frames of current backtrace into a list.
If non-nil, BASE should be a function, and frames before its
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment