Commit ce5ce46d authored by Lute Kamstra's avatar Lute Kamstra

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

(debug-on-entry): Use it.  New interactive declaration that uses
parent 1d1c7e75
......@@ -653,6 +653,12 @@ functions to break on entry."
(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)))
(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))
(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: ")
#'(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)))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment