]> git.eshelyaron.com Git - emacs.git/commitdiff
Move 'backtrace' from subr.el to backtrace.el
authorGemini Lasswell <gazally@runbox.com>
Wed, 18 Jul 2018 15:30:45 +0000 (08:30 -0700)
committerGemini Lasswell <gazally@runbox.com>
Fri, 3 Aug 2018 15:54:08 +0000 (08:54 -0700)
* 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.

doc/lispref/debugging.texi
lisp/emacs-lisp/backtrace.el
lisp/subr.el

index 87429a67ba9e016eb191ed7167ca8a1b1a158b68..841b16eaf95172b59d553681e4f36ecc74dfec12 100644 (file)
@@ -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))))
index 5169c305035a015ecb71319e058d6877a2038eb6..d162983c017a05488cec8016b4d434e0efcfd388 100644 (file)
@@ -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)
index f8c19efc37900325cc3832a8c906f16eb54b6617..fbb3e49a35c06e08632dfffc8dd6a8da363526d2 100644 (file)
@@ -4687,25 +4687,6 @@ The properties used on SYMBOL are `composefunc', `sendfunc',
   (put symbol 'hookvar (or hookvar 'mail-send-hook)))
 
 \f
-(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