]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix links in backtraces to work on advised built-ins (Bug#25393)
authorGemini Lasswell <gazally@runbox.com>
Wed, 8 Aug 2018 02:39:06 +0000 (19:39 -0700)
committerGemini Lasswell <gazally@runbox.com>
Mon, 27 Aug 2018 17:43:57 +0000 (10:43 -0700)
* lisp/emacs-lisp/backtrace.el (backtrace--print-func-and-args): Make
links to the original definition of advised functions.  Handle the
case when the function slot of the backtrace frame contains the
definition of a built-in function.

lisp/emacs-lisp/backtrace.el

index f13b43b465c9785d9c98d4c6d779431f0b98f8c7..e82d4f5a5a273ec35e1660a91bcb55db411baf07 100644 (file)
@@ -34,6 +34,7 @@
 (eval-when-compile (require 'cl-lib))
 (eval-when-compile (require 'pcase))
 (eval-when-compile (require 'subr-x))        ; if-let
+(require 'find-func)
 (require 'help-mode)     ; Define `help-function-def' button type.
 (require 'lisp-mode)
 
@@ -735,11 +736,11 @@ Format it according to VIEW."
          (evald (backtrace-frame-evald frame))
          (fun   (backtrace-frame-fun frame))
          (args  (backtrace-frame-args frame))
-         (def   (and (symbolp fun) (fboundp fun) (symbol-function fun)))
+         (def   (find-function-advised-original fun))
          (fun-file (or (symbol-file fun 'defun)
-                            (and (subrp def)
-                                 (not (eq 'unevalled (cdr (subr-arity def))))
-                                 (find-lisp-object-file-name fun def))))
+                       (and (subrp def)
+                            (not (eq 'unevalled (cdr (subr-arity def))))
+                            (find-lisp-object-file-name fun def))))
          (fun-pt (point)))
     (cond
      ((and evald (not debugger-stack-frame-as-list))
@@ -762,7 +763,8 @@ Format it according to VIEW."
         (insert (backtrace--print-to-string fun-and-args)))
       (cl-incf fun-pt)))
     (when fun-file
-      (make-text-button fun-pt (+ fun-pt (length (symbol-name fun)))
+      (make-text-button fun-pt (+ fun-pt
+                                  (length (backtrace--print-to-string fun)))
                         :type 'help-function-def
                         'help-args (list fun fun-file)))
     ;; After any frame that uses eval-buffer, insert a comment that