(debug--early): Avoid re-entering the debugger for the same error

Fixes bug#76787.

* lisp/emacs-lisp/debug.el (debugger--last-error): Move ...
* lisp/emacs-lisp/debug-early.el (debugger--last-error): ... here.
(debug--early): Use it.
This commit is contained in:
Stefan Monnier 2025-03-06 15:23:03 -05:00
parent 4719df9f42
commit fb33e3b4c7
2 changed files with 13 additions and 8 deletions

View file

@ -36,6 +36,8 @@
;; For bootstrap reasons, we cannot use any macros here since they're
;; not defined yet.
(defvar debugger--last-error nil)
(defalias 'debug-early-backtrace
#'(lambda (&optional base)
"Print a trace of Lisp function calls currently active.
@ -76,15 +78,20 @@ of the build process."
(setq args (cdr args)))
(princ " ")))
(princ ")\n"))))
base))))
base))
(message "debug-early-backtrace...done")))
(defalias 'debug--early
#'(lambda (error base)
(princ "\nError: ")
(prin1 (car error)) ; The error symbol.
(princ " ")
(prin1 (cdr error)) ; The error data.
(debug-early-backtrace base)))
(if (eq error debugger--last-error) nil
(setq debugger--last-error nil)
(princ "\nError: ")
(prin1 (car error)) ; The error symbol.
(princ " ")
(prin1 (cdr error)) ; The error data.
(prog1 ;; Purposefully not `unwind-protect'!
(debug-early-backtrace base)
(setq debugger--last-error error)))))
(defalias 'debug-early ;Called from C.
#'(lambda (&rest args)

View file

@ -153,8 +153,6 @@ where CAUSE can be:
(insert (debugger--buffer-state-content state)))
(goto-char (debugger--buffer-state-pos state)))
(defvar debugger--last-error nil)
(defun debugger--duplicate-p (args)
(pcase args
(`(error ,err . ,_) (and (consp err) (eq err debugger--last-error)))))