From 18c85306ac211402e4772bdb94b63d300a2ac119 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gerd=20M=C3=B6llmann?= Date: Mon, 21 Aug 2023 09:16:17 +0200 Subject: [PATCH] Fix debug spec of cl-flet (bug#65344) * lisp/emacs-lisp/cl-macs.el (cl-flet): Fix debug spec. (cl-defun): Allow only symbols as function names in debug spec. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-flet/edebug): New test case. --- lisp/emacs-lisp/cl-macs.el | 10 ++++++---- test/lisp/emacs-lisp/cl-macs-tests.el | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index a2e36fa3582..4cc43995c12 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -389,7 +389,7 @@ more details. \(fn NAME ARGLIST [DOCSTRING] BODY...)" (declare (debug ;; Same as defun but use cl-lambda-list. - (&define [&name sexp] ;Allow (setf ...) additionally to symbols. + (&define [&name symbolp] cl-lambda-list cl-declarations-or-string [&optional ("interactive" interactive)] @@ -2075,13 +2075,15 @@ info node `(cl) Function Bindings' for details. \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" (declare (indent 1) - (debug ((&rest [&or (symbolp form) - (&define [&name symbolp "@cl-flet@"] + (debug ((&rest [&or (&define [&name symbolp "@cl-flet@"] [&name [] gensym] ;Make it unique! cl-lambda-list cl-declarations-or-string [&optional ("interactive" interactive)] - def-body)]) + def-body) + (&define [&name symbolp "@cl-flet@"] + [&name [] gensym] ;Make it unique! + def-form)]) cl-declarations body))) (let ((binds ()) (newenv macroexpand-all-environment)) (dolist (binding bindings) diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el b/test/lisp/emacs-lisp/cl-macs-tests.el index 983cbfc8bc7..56a49fd865a 100644 --- a/test/lisp/emacs-lisp/cl-macs-tests.el +++ b/test/lisp/emacs-lisp/cl-macs-tests.el @@ -708,6 +708,23 @@ collection clause." (f lex-var))))) (should (equal (f nil) 'a))))) +(ert-deftest cl-flet/edebug () + "Check that we can instrument `cl-flet' forms (bug#65344)." + (with-temp-buffer + (print '(cl-flet (;; "Obscure" form of binding supported by cl-flet + (x (progn (list 1 2) (lambda ()))) + ;; Destructuring lambda-list + (y ((min max)) (list min max)) + ;; Regular binding plus shadowing. + (z (a) a) + (z (a) a)) + (y '(1 2))) + (current-buffer)) + (let ((edebug-all-forms t) + (edebug-initial-mode 'Go-nonstop)) + ;; Just make sure the forms can be instrumented. + (eval-buffer)))) + (ert-deftest cl-macs--progv () (defvar cl-macs--test) (defvar cl-macs--test1) -- 2.39.5