1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-17 10:06:13 +00:00

(debugger-special-form-p): New defun.

(debug-on-entry): Use it.  New interactive declaration that uses
function-called-at-point.
This commit is contained in:
Lute Kamstra 2005-06-23 08:20:33 +00:00
parent 1d1c7e755a
commit ce5ce46def

View File

@ -653,6 +653,12 @@ functions to break on entry."
nil
(funcall debugger 'debug)))
(defun debugger-special-form-p (symbol)
"Return whether SYMBOL is a special form."
(and (fboundp symbol)
(subrp (symbol-function symbol))
(eq (cdr (subr-arity (symbol-function symbol))) 'unevalled)))
;;;###autoload
(defun debug-on-entry (function)
"Request FUNCTION to invoke debugger each time it is called.
@ -668,9 +674,21 @@ primitive functions only works when that function is called from Lisp.
Use \\[cancel-debug-on-entry] to cancel the effect of this command.
Redefining FUNCTION also cancels it."
(interactive "aDebug on entry (to function): ")
(when (and (subrp (symbol-function function))
(eq (cdr (subr-arity (symbol-function function))) 'unevalled))
(interactive
(let ((fn (function-called-at-point)) val)
(when (debugger-special-form-p fn)
(setq fn nil))
(setq val (completing-read
(if fn
(format "Debug on entry to function (default %s): " fn)
"Debug on entry to function: ")
obarray
#'(lambda (symbol)
(and (fboundp symbol)
(not (debugger-special-form-p symbol))))
t nil nil (symbol-name fn)))
(list (if (equal val "") fn (intern val)))))
(when (debugger-special-form-p function)
(error "Function %s is a special form" function))
(if (or (symbolp (symbol-function function))
(subrp (symbol-function function)))