GNU bug report logs -
#16567
24.3.50; pcase should signal an error if no case matches
Previous Next
Reported by: Helmut Eller <eller.helmut <at> gmail.com>
Date: Mon, 27 Jan 2014 09:24:01 UTC
Severity: wishlist
Found in version 24.3.50
Fixed in version 25.1
Done: Leo Liu <sdl.web <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #65 received at 16567 <at> debbugs.gnu.org (full text, mbox):
Stefan,
Which name would you prefer, `epcase' or 'pcasex'? Do you see any
problems with the following patch (assume `pcasex' for now)?
Thanks, Leo
=== modified file 'lisp/emacs-lisp/lisp-mode.el'
--- lisp/emacs-lisp/lisp-mode.el 2014-06-19 14:03:45 +0000
+++ lisp/emacs-lisp/lisp-mode.el 2014-09-12 02:28:44 +0000
@@ -197,7 +197,7 @@
(el-vdefs '("defconst" "defcustom" "defvaralias" "defvar-local"
"defface"))
(el-tdefs '("defgroup" "deftheme"))
- (el-kw '("while-no-input" "letrec" "pcase" "pcase-let"
+ (el-kw '("while-no-input" "letrec" "pcase" "pcasex" "pcase-let"
"pcase-let*" "save-restriction" "save-excursion"
"save-selected-window"
;; "eval-after-load" "eval-next-after-load"
=== modified file 'lisp/emacs-lisp/pcase.el'
--- lisp/emacs-lisp/pcase.el 2014-09-06 00:59:00 +0000
+++ lisp/emacs-lisp/pcase.el 2014-09-10 10:44:59 +0000
@@ -68,6 +68,8 @@
(defconst pcase--dontcare-upats '(t _ pcase--dontcare))
+(defvar pcase--dontwarn-upats '(pcase--dontcare))
+
(def-edebug-spec
pcase-UPAT
(&or symbolp
@@ -148,6 +150,15 @@
;; (puthash (car cases) `(,exp ,cases ,@expansion) pcase--memoize-2)
expansion))))
+;;;###autoload
+(defmacro pcasex (exp &rest cases)
+ "The exhausitive version of `pcase' (which see)."
+ (declare (indent 1) (debug pcase))
+ (let* ((x (make-symbol "x"))
+ (pcase--dontwarn-upats (cons x pcase--dontwarn-upats)))
+ (pcase--expand
+ exp (append cases `((,x (error "No clause matching `%S'" ,x)))))))
+
(defun pcase--let* (bindings body)
(cond
((null bindings) (macroexp-progn body))
@@ -280,7 +291,8 @@
vars))))
cases))))
(dolist (case cases)
- (unless (or (memq case used-cases) (eq (car case) 'pcase--dontcare))
+ (unless (or (memq case used-cases)
+ (memq (car case) pcase--dontwarn-upats))
(message "Redundant pcase pattern: %S" (car case))))
(macroexp-let* defs main))))
This bug report was last modified 10 years and 290 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.