\(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)]
\(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)
(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)