From aeb25f9d3d12a18ef3881e23b32a34615355d4d0 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Thu, 3 Mar 2022 19:56:09 +0100 Subject: Teach Edebug about the special '&whole' syntax for compiler macros. * lisp/emacs-lisp/cl-macs.el (cl-define-compiler-macro-list): New Edebug element specification. (cl-define-compiler-macro): Use it. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-define-compiler-macro/edebug): New unit test. --- lisp/emacs-lisp/cl-macs.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lisp/emacs-lisp') diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 50852172505..accd70dc4ef 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3489,6 +3489,10 @@ omitted, a default message listing FORM itself is used." ;;; Compiler macros. +(def-edebug-elem-spec 'cl-define-compiler-macro-list + `(([&optional "&whole" arg] + ,@(car (get 'cl-macro-list 'edebug-elem-spec))))) + ;;;###autoload (defmacro cl-define-compiler-macro (func args &rest body) "Define a compiler-only macro. @@ -3501,7 +3505,10 @@ compiler macros are expanded repeatedly until no further expansions are possible. Unlike regular macros, BODY can decide to \"punt\" and leave the original function call alone by declaring an initial `&whole foo' parameter and then returning foo." - (declare (debug cl-defmacro) (indent 2)) + ;; Like `cl-defmacro', but with the `&whole' special case. + (declare (debug (&define name cl-define-compiler-macro-list + cl-declarations-or-string def-body)) + (indent 2)) (let ((p args) (res nil)) (while (consp p) (push (pop p) res)) (setq args (nconc (nreverse res) (and p (list '&rest p))))) -- cgit v1.2.3