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:
parent
1d1c7e755a
commit
ce5ce46def
@ -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)))
|
||||
|
Loading…
Reference in New Issue
Block a user