From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#20784: 25.0.50; pcase documentation on t and nil Date: Thu, 11 Jun 2015 12:34:10 -0400 Message-ID: References: <87r3pitmcb.fsf@web.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1434040532 31789 80.91.229.3 (11 Jun 2015 16:35:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 11 Jun 2015 16:35:32 +0000 (UTC) Cc: Artur Malabarba , 20784@debbugs.gnu.org To: Michael Heerdegen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jun 11 18:35:20 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Z35Rm-0004Xf-F6 for geb-bug-gnu-emacs@m.gmane.org; Thu, 11 Jun 2015 18:35:18 +0200 Original-Received: from localhost ([::1]:47705 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z35Rl-0000eA-TP for geb-bug-gnu-emacs@m.gmane.org; Thu, 11 Jun 2015 12:35:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40589) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z35Rc-0000cX-Py for bug-gnu-emacs@gnu.org; Thu, 11 Jun 2015 12:35:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z35RW-00048c-SF for bug-gnu-emacs@gnu.org; Thu, 11 Jun 2015 12:35:08 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:36504) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z35RW-00048V-PZ for bug-gnu-emacs@gnu.org; Thu, 11 Jun 2015 12:35:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Z35RW-0008Kr-Ei for bug-gnu-emacs@gnu.org; Thu, 11 Jun 2015 12:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 11 Jun 2015 16:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20784 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 20784-submit@debbugs.gnu.org id=B20784.143404047932009 (code B ref 20784); Thu, 11 Jun 2015 16:35:02 +0000 Original-Received: (at 20784) by debbugs.gnu.org; 11 Jun 2015 16:34:39 +0000 Original-Received: from localhost ([127.0.0.1]:50964 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Z35R7-0008K8-66 for submit@debbugs.gnu.org; Thu, 11 Jun 2015 12:34:38 -0400 Original-Received: from mercure.iro.umontreal.ca ([132.204.24.67]:54983) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Z35R5-0008Jz-24 for 20784@debbugs.gnu.org; Thu, 11 Jun 2015 12:34:35 -0400 Original-Received: from hidalgo.iro.umontreal.ca (hidalgo.iro.umontreal.ca [132.204.27.50]) by mercure.iro.umontreal.ca (Postfix) with ESMTP id AA3C085FA5; Thu, 11 Jun 2015 12:34:34 -0400 (EDT) Original-Received: from lechon.iro.umontreal.ca (lechon.iro.umontreal.ca [132.204.27.242]) by hidalgo.iro.umontreal.ca (Postfix) with ESMTP id AD7C11E5B94; Thu, 11 Jun 2015 12:34:10 -0400 (EDT) Original-Received: by lechon.iro.umontreal.ca (Postfix, from userid 20848) id 7F581B416C; Thu, 11 Jun 2015 12:34:10 -0400 (EDT) In-Reply-To: <87r3pitmcb.fsf@web.de> (Michael Heerdegen's message of "Thu, 11 Jun 2015 15:18:28 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) X-DIRO-MailScanner-Information: Please contact the ISP for more information X-DIRO-MailScanner: Found to be clean X-DIRO-MailScanner-SpamCheck: n'est pas un polluriel, SpamAssassin (score=-2.82, requis 5, autolearn=not spam, ALL_TRUSTED -2.82, MC_TSTLAST 0.00) X-DIRO-MailScanner-From: monnier@iro.umontreal.ca X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:103831 Archived-At: How 'bout the following patch? Stefan * lisp/emacs-lisp/pcase.el (pcase): Reword the SELFQUOTING case. (pcase--split-pred, pcase--self-quoting-p): Restrict selfquoting numbers to integers. (pcase--u1): Deprecate t patterns. Reject nil as an invalid pattern. diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index ab82b7e..a6994a6 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -112,11 +112,12 @@ CASES is a list of elements of the form (PATTERN CODE...). Patterns can take the following forms: _ matches anything. - SELFQUOTING matches itself. This includes keywords, numbers, and strings. SYMBOL matches anything and binds it to SYMBOL. (or PAT...) matches if any of the patterns matches. (and PAT...) matches if all the patterns match. 'VAL matches if the object is `equal' to VAL + SELFQUOTING is a shorthand for 'SELFQUOTING. + SELFQUOTING can be a keyword, an integer, or a string. (pred FUN) matches if FUN applied to the object returns non-nil. (guard BOOLEXP) matches if BOOLEXP evaluates to non-nil. (let PAT EXP) matches if EXP matches PAT. @@ -620,7 +621,7 @@ MATCH is the pattern that needs to be matched, of the form: ((and (eq 'pred (car upat)) (eq 'quote (car-safe pat)) (symbolp (cadr upat)) - (or (symbolp (cadr pat)) (stringp (cadr pat)) (numberp (cadr pat))) + (or (symbolp (cadr pat)) (stringp (cadr pat)) (integerp (cadr pat))) (get (cadr upat) 'side-effect-free) (ignore-errors (setq test (list (funcall (cadr upat) (cadr pat)))))) @@ -638,7 +639,7 @@ MATCH is the pattern that needs to be matched, of the form: res)) (defun pcase--self-quoting-p (upat) - (or (keywordp upat) (numberp upat) (stringp upat))) + (or (keywordp upat) (integerp upat) (stringp upat))) (defun pcase--app-subst-match (match sym fun nsym) (cond @@ -770,7 +771,12 @@ Otherwise, it defers to REST which is a list of branches of the form (sym (car cdrpopmatches)) (upat (cdr cdrpopmatches))) (cond - ((memq upat '(t _)) (pcase--u1 matches code vars rest)) + ((memq upat '(t _)) + (let ((code (pcase--u1 matches code vars rest))) + (if (eq upat '_) code + (macroexp--warn-and-return + "Pattern t is deprecated. Use `_' instead" + code)))) ((eq upat 'pcase--dontcare) :pcase--dontcare) ((memq (car-safe upat) '(guard pred)) (if (eq (car upat) 'pred) (pcase--mark-used sym)) @@ -784,7 +790,7 @@ Otherwise, it defers to REST which is a list of branches of the form (pcase--eval (cadr upat) vars)) (pcase--u1 matches code vars then-rest) (pcase--u else-rest)))) - ((symbolp upat) + ((and (symbolp upat) upat) (pcase--mark-used sym) (if (not (assq upat vars)) (pcase--u1 matches code (cons (cons upat sym) vars) rest) @@ -854,7 +860,7 @@ Otherwise, it defers to REST which is a list of branches of the form (pcase--u rest)) vars (list `((and . ,matches) ,code . ,vars)))) - (t (error "Unknown internal pattern `%S'" upat))))) + (t (error "Unknown pattern `%S'" upat))))) (t (error "Incorrect MATCH %S" (car matches))))) (def-edebug-spec