From eb364fddec1431f459166cebb36f09f6b371dd71 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Mon, 7 Nov 2016 20:03:48 -0500 Subject: [PATCH] Do call debugger on failed cl-assert "Don't call debug on failed cl-assert..." removed the call to `debug' in cl--assertion-failed because `debug' calls `kill-emacs' in batch mode, thus messing up ert test runs. However, calling the debugger is useful because it allows catching failed assertions even inside `condition-case' calls. The problem with ert can be avoided by calling `debugger' instead of `debug' directly, since ert installs its own debugger while running tests. * lisp/emacs-lisp/cl-preloaded.el (cl--assertion-failed): Call `debugger' if `debug-on-error' is non-nil. --- lisp/emacs-lisp/cl-preloaded.el | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index 639ffa64b8c..2b022c49053 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -44,9 +44,11 @@ (define-error 'cl-assertion-failed (purecopy "Assertion failed")) (defun cl--assertion-failed (form &optional string sargs args) - (if string - (apply #'error string (append sargs args)) - (signal 'cl-assertion-failed `(,form ,@sargs)))) + (if debug-on-error + (funcall debugger `(cl-assertion-failed ,form ,string ,@sargs)) + (if string + (apply #'error string (append sargs args)) + (signal 'cl-assertion-failed `(,form ,@sargs))))) ;; When we load this (compiled) file during pre-loading, the cl--struct-class ;; code below will need to access the `cl-struct' info, since it's considered -- 2.39.5