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.
This commit is contained in:
Noam Postavsky 2016-11-07 20:03:48 -05:00
parent 3ef4ee84fa
commit eb364fddec

View file

@ -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