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:
parent
07ee1be052
commit
6d8f5161ea
2 changed files with 18 additions and 2 deletions
|
@ -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)))
|
||||
|
|
|
@ -747,4 +747,15 @@ collection clause."
|
|||
;; Just make sure the forms can be instrumented.
|
||||
(eval-buffer))))
|
||||
|
||||
(ert-deftest cl-case-error ()
|
||||
"Test that `cl-case' and `cl-ecase' signal an error if a t or
|
||||
`otherwise' key is misplaced."
|
||||
(dolist (form '((cl-case val (t 1) (123 2))
|
||||
(cl-ecase val (t 1) (123 2))
|
||||
(cl-ecase val (123 2) (t 1))))
|
||||
(ert-info ((prin1-to-string form) :prefix "Form: ")
|
||||
(let ((error (should-error (macroexpand form))))
|
||||
(should (equal (cdr error)
|
||||
'("Misplaced t or `otherwise' clause")))))))
|
||||
|
||||
;;; cl-macs-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue