From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Liu Newsgroups: gmane.emacs.bugs Subject: bug#16567: 24.3.50; pcase should signal an error if no case matches Date: Tue, 09 Sep 2014 02:27:08 +0800 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1410200909 574 80.91.229.3 (8 Sep 2014 18:28:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 8 Sep 2014 18:28:29 +0000 (UTC) Cc: 16567@debbugs.gnu.org, Helmut Eller To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Sep 08 20:28:21 2014 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 1XR3fp-0004YP-3E for geb-bug-gnu-emacs@m.gmane.org; Mon, 08 Sep 2014 20:28:21 +0200 Original-Received: from localhost ([::1]:45105 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XR3fo-000764-Kt for geb-bug-gnu-emacs@m.gmane.org; Mon, 08 Sep 2014 14:28:20 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55622) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XR3fe-00074n-Fb for bug-gnu-emacs@gnu.org; Mon, 08 Sep 2014 14:28:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XR3fX-0007Pc-0z for bug-gnu-emacs@gnu.org; Mon, 08 Sep 2014 14:28:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:42507) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XR3fW-0007PX-TE for bug-gnu-emacs@gnu.org; Mon, 08 Sep 2014 14:28:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1XR3fW-0004qc-CQ for bug-gnu-emacs@gnu.org; Mon, 08 Sep 2014 14:28:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Leo Liu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 08 Sep 2014 18:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16567 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 16567-submit@debbugs.gnu.org id=B16567.141020084318588 (code B ref 16567); Mon, 08 Sep 2014 18:28:02 +0000 Original-Received: (at 16567) by debbugs.gnu.org; 8 Sep 2014 18:27:23 +0000 Original-Received: from localhost ([127.0.0.1]:34071 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XR3es-0004pj-Sm for submit@debbugs.gnu.org; Mon, 08 Sep 2014 14:27:23 -0400 Original-Received: from mail-pa0-f54.google.com ([209.85.220.54]:65033) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XR3eq-0004pR-92 for 16567@debbugs.gnu.org; Mon, 08 Sep 2014 14:27:21 -0400 Original-Received: by mail-pa0-f54.google.com with SMTP id lj1so4396017pab.41 for <16567@debbugs.gnu.org>; Mon, 08 Sep 2014 11:27:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:face:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=1wm8LV36o0i2gOhv6NNCwHKkOE248rxdENo3DnfinCc=; b=xJ5PgJyA1Kuw9hEjARnqQSQLisE985NGL4YocKygYQGwxROUmC1xS0ageBobpslE5T C51wf0xKth2uL4jO7y7sRTYGrGxIyH+dGUPgpzm2hQtLdG+cniNvH+J3vePvUNDOy3VA N08h4D9XIWtxrNxbXnqDKsmhM2tk4q0NbouWSioN4vlA08Hw7bfOdEyU+GdBsKzs26Gh uwa3p7TU4ctMQsogpwpfQdEPfsuaoHmMbvvdGNvpWDr/HFHMID0ql3fpomEniffBgE/G FWizHm+r8X1l9zSK+5HspRJdSCvdIiPkMdCacLPUb2fZUgxxSfbvXDlCVbCeCLK8/MvK P7LQ== X-Received: by 10.68.95.129 with SMTP id dk1mr5728973pbb.25.1410200834340; Mon, 08 Sep 2014 11:27:14 -0700 (PDT) Original-Received: from fortuna ([221.222.152.125]) by mx.google.com with ESMTPSA id gf5sm9466151pbc.89.2014.09.08.11.27.11 for (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 08 Sep 2014 11:27:13 -0700 (PDT) Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUzRVhbQj4eZqO6SjnT eWpxnMetm5b6/PmidmqrAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1F B9cBBwMLBfKABCMAAAFoSURBVCjPtZI9a8MwEIaFoc7aYDdelQMna0Em3tsSr0XUeE2Q6a22a+v+ fk8fSSBkbDUI6dHpfe9OEvRgiD+ApqKPJgJeB6iUUXWESjUe/ig38AJrhqqvaU2nTIXbNvOQ40fe qdry4kyGoVWsfCQalXpHnJGM01wjWdYbMlXNFdsZDO69m9aqNqxEJqTEgbM5OF7wlEfIoll1Ked4 LbM5X2EdILLokEdmI8z7g5cKED0cuTC930TYhy7ZDekkXVGw/L60TguJePPxcJF48lpsSUWEA/Ju jGFNgJOXc4Hz7TmAdBeu5Ve4AEjOi2/2jfd3cAJZ+IbNrvdjgBZY01b+HTuG3cLws6BJZqVOj/pp T0OqVwx3rFq+QmJwx3loK5JSLEhDIt62+mtC2C+SrAUxEbV6C6v2BRbd6pILBKFpepKZJHgGgrKF sptSUUoczpwg2pQ7ZH1tgs0ou/917mzz6Cs2//C978cv5l07L02orIEAAAAASUVORK5CYII= In-Reply-To: (Helmut Eller's message of "Mon, 27 Jan 2014 10:22:06 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (CentOS 6.5) 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:93162 Archived-At: On 2014-01-27 10:22 +0100, Helmut Eller wrote: > pcase returns nil for this example: > > (pcase 3 > (1 1) > (2 2)) > > it would be more useful if it would signal an error instead. Manually > adding a "catch-all case" and inventing some error message is tedious > and it's also easy to forget. Hi Stefan, I also find myself wanting something as Helmut suggested more and more. Any comments in the following patch? Thanks. Leo === 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-08 18:15:37 +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,14 @@ ;; (puthash (car cases) `(,exp ,cases ,@expansion) pcase--memoize-2) expansion)))) +;;;###autoload +(defmacro xcase (exp &rest cases) + (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 +290,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))))