1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Signal an error if a fallback cl-case is misplaced

* lisp/emacs-lisp/cl-macs.el (cl-case): Warn if the user passes a nil
key list (which would never match).  Warn about quoted symbols that
should probably be unquoted.

* test/lisp/emacs-lisp/cl-macs-tests.el (cl-case-warning): New unit
test (bug#51368).
This commit is contained in:
Philipp Stephani 2022-09-13 17:11:53 +02:00 committed by Lars Ingebrigtsen
parent 07ee1be052
commit 6d8f5161ea
2 changed files with 18 additions and 2 deletions

View file

@ -775,11 +775,16 @@ compared by `eql'.
\(fn EXPR (KEYLIST BODY...)...)"
(declare (indent 1) (debug (form &rest (sexp body))))
(macroexp-let2 macroexp-copyable-p temp expr
(let* ((head-list nil))
(let* ((head-list nil)
(has-otherwise nil))
`(cond
,@(mapcar
(lambda (c)
(cons (cond ((memq (car c) '(t otherwise)) t)
(cons (cond (has-otherwise
(error "Misplaced t or `otherwise' clause"))
((memq (car c) '(t otherwise))
(setq has-otherwise t)
t)
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-ecase failed: %s, %s"
,temp ',(reverse head-list)))