From unknown Tue Jun 24 13:57:54 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19814: 24.4; pcase-lambda Resent-From: Leo Liu Original-Sender: "Debbugs-submit" Resent-CC: monnier@iro.umontreal.ca, bug-gnu-emacs@gnu.org Resent-Date: Sun, 08 Feb 2015 09:02:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 19814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 19814@debbugs.gnu.org Cc: Stefan Monnier X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: Stefan Monnier Received: via spool by submit@debbugs.gnu.org id=B.142338609326203 (code B ref -1); Sun, 08 Feb 2015 09:02:01 +0000 Received: (at submit) by debbugs.gnu.org; 8 Feb 2015 09:01:33 +0000 Received: from localhost ([127.0.0.1]:37156 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKNkC-0006oY-Ef for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:32 -0500 Received: from eggs.gnu.org ([208.118.235.92]:42404) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKNk9-0006oG-Nd for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKNjz-0002PK-Mi for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:24 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_40,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:55567) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNjz-0002PG-Kl for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:19 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNju-0001dj-SI for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKNjq-0002Ms-7H for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:14 -0500 Received: from mail-pd0-f178.google.com ([209.85.192.178]:36673) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNjq-0002Mc-2X for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:10 -0500 Received: by pdjp10 with SMTP id p10so14327913pdj.3 for ; Sun, 08 Feb 2015 01:01:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version:content-type; bh=p4S6arXmQseHQen67cTZ/qghYIqW/r9c5i1LFCsC4SM=; b=C5L4gAWlvGpa5LMiy+RSBEysC7R89R06mewfWApFFrdnbZOXNe8aMQb29JwrXvoj3R u0J7BzuSkTpOaKumdAgkhtuGZtMtuGGkSFIS6LuBa9xHaaaEkrdmizi99h10F3oMNA4X sr82XGB/EN3mmo9j05QlsGiDYgfiXPTzy3SivM/4rbEznM/134woGEm5jMoo/nFaFVeN Lh0hg5lfYCCV9ecyWUm2GlqSabn1a3IOmLrg6z5EOUAW6jU/cSIH1joeDlBbFwNpG2uq SLfTvwxE+gyzN7YupWAzJSPhLWm1ZXoDtW8Z9UPDGAMdeMh/DDxNF1kLAfQbWp6YRVQ2 Cp+w== X-Received: by 10.70.88.9 with SMTP id bc9mr19240196pdb.145.1423386069141; Sun, 08 Feb 2015 01:01:09 -0800 (PST) Received: from Shidais-iMac.local ([128.199.230.246]) by mx.google.com with ESMTPSA id uq7sm12919582pbc.48.2015.02.08.01.01.05 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 01:01:08 -0800 (PST) From: Leo Liu Date: Sun, 08 Feb 2015 17:01:00 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) --=-=-= Content-Type: text/plain The attached patch intends to implement pcase-lambda with lambda-list being a list of positional UPatterns. &rest is supported. Comments? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=pcase-lambda.diff Content-Description: pcase-lambda.diff diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 868a9578..5d912097 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -204,7 +204,7 @@ (pcase-let "defface")) (el-tdefs '("defgroup" "deftheme")) (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive" - "pcase-let" "pcase-let*" "save-restriction" + "pcase-lambda" "pcase-let" "pcase-let*" "save-restriction" "save-excursion" "save-selected-window" ;; "eval-after-load" "eval-next-after-load" "save-window-excursion" "save-current-buffer" diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el index 797de9ab..8fe156c4 100644 --- a/lisp/emacs-lisp/macroexp.el +++ b/lisp/emacs-lisp/macroexp.el @@ -297,6 +297,16 @@ (defun macroexpand-all (form &optional environment) ;;; Handy functions to use in macros. +(defun macroexp-parse-body (exps) + "Parse EXPS into (DOC DECLARE-FORM INTERACTIVE-FORM . BODY)." + `(,(and (stringp (car exps)) + (pop exps)) + ,(and (eq (car-safe (car exps)) 'declare) + (pop exps)) + ,(and (eq (car-safe (car exps)) 'interactive) + (pop exps)) + ,@exps)) + (defun macroexp-progn (exps) "Return an expression equivalent to `(progn ,@EXPS)." (if (cdr exps) `(progn ,@exps) (car exps))) diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index b495793b..0c71451b 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -164,6 +164,23 @@ (defmacro pcase-exhaustive (exp &rest cases) ;; FIXME: Could we add the FILE:LINE data in the error message? exp (append cases `((,x (error "No clause matching `%S'" ,x))))))) +;;;###autoload +(defmacro pcase-lambda (lambda-list &rest body) + (declare (doc-string 2) (indent defun)) + (let ((args (make-symbol "args")) + (pats (mapcar (lambda (u) + (unless (eq u '&rest) + (if (eq (car-safe u) '\`) (cadr u) (list '\, u)))) + lambda-list)) + (body (macroexp-parse-body body))) + ;; Handle &rest + (when (eq nil (car (last pats 2))) + (setq pats (append (butlast pats 2) (car (last pats))))) + `(lambda (&rest ,args) + ,@(remq nil (list (nth 0 body) (nth 1 body) (nth 2 body))) + (pcase ,args + (,(list '\` pats) . ,(nthcdr 3 body)))))) + (defun pcase--let* (bindings body) (cond ((null bindings) (macroexp-progn body)) --=-=-=-- From unknown Tue Jun 24 13:57:54 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19814: 24.4; pcase-lambda Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 08 Feb 2015 19:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Leo Liu Cc: 19814@debbugs.gnu.org Received: via spool by 19814-submit@debbugs.gnu.org id=B19814.142342308829912 (code B ref 19814); Sun, 08 Feb 2015 19:19:02 +0000 Received: (at 19814) by debbugs.gnu.org; 8 Feb 2015 19:18:08 +0000 Received: from localhost ([127.0.0.1]:37580 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKXMu-0007mO-2j for submit@debbugs.gnu.org; Sun, 08 Feb 2015 14:18:08 -0500 Received: from ironport2-out.teksavvy.com ([206.248.154.181]:57429) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKXMs-0007lt-0f for 19814@debbugs.gnu.org; Sun, 08 Feb 2015 14:18:06 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroTAPOG1lRFxIRB/2dsb2JhbABbgwaDX4VTwGUEAgKBDUQBAQEBAQF8hA0BBVYjEAsOJhIUGA0kiEDOIwEBAQEGAQEBAR6PeAeEKgWKJ59LgUUihAwggnMBAQE X-IPAS-Result: AroTAPOG1lRFxIRB/2dsb2JhbABbgwaDX4VTwGUEAgKBDUQBAQEBAQF8hA0BBVYjEAsOJhIUGA0kiEDOIwEBAQEGAQEBAR6PeAeEKgWKJ59LgUUihAwggnMBAQE X-IronPort-AV: E=Sophos;i="5.09,536,1418101200"; d="scan'208";a="109976193" Received: from 69-196-132-65.dsl.teksavvy.com (HELO pastel.home) ([69.196.132.65]) by ironport2-out.teksavvy.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 08 Feb 2015 14:18:00 -0500 Received: by pastel.home (Postfix, from userid 20848) id 25784D67; Sun, 8 Feb 2015 14:18:00 -0500 (EST) From: Stefan Monnier Message-ID: References: Date: Sun, 08 Feb 2015 14:18:00 -0500 In-Reply-To: (Leo Liu's message of "Sun, 08 Feb 2015 17:01:00 +0800") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) > +(defun macroexp-parse-body (exps) > + "Parse EXPS into (DOC DECLARE-FORM INTERACTIVE-FORM . BODY)." > + `(,(and (stringp (car exps)) > + (pop exps)) > + ,(and (eq (car-safe (car exps)) 'declare) > + (pop exps)) > + ,(and (eq (car-safe (car exps)) 'interactive) > + (pop exps)) > + ,@exps)) Maybe it'd be better to just splitting the body into 2 parts: - "declarations", which would include docstrings, `declare's, and interactive - code. Stefan From unknown Tue Jun 24 13:57:54 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19814: 24.4; pcase-lambda Resent-From: Leo Liu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Feb 2015 01:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 19814@debbugs.gnu.org Received: via spool by 19814-submit@debbugs.gnu.org id=B19814.142344448430741 (code B ref 19814); Mon, 09 Feb 2015 01:15:02 +0000 Received: (at 19814) by debbugs.gnu.org; 9 Feb 2015 01:14:44 +0000 Received: from localhost ([127.0.0.1]:37671 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKcw0-0007zl-Fi for submit@debbugs.gnu.org; Sun, 08 Feb 2015 20:14:44 -0500 Received: from mail-pd0-f182.google.com ([209.85.192.182]:35337) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKcvy-0007zV-4F for 19814@debbugs.gnu.org; Sun, 08 Feb 2015 20:14:42 -0500 Received: by pdbfl12 with SMTP id fl12so2668359pdb.2 for <19814@debbugs.gnu.org>; Sun, 08 Feb 2015 17:14:36 -0800 (PST) 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=wrBodpGGqFRg0g6S+AO/MDfNm9bo3Dj2l1EDrOTLO7Y=; b=C2SR9wJmDxTeAN5OzhemrizLiCpR7yYn5nhM7uquXxugFQmLdKGXCjjtP6g6EA6ezp fGNAaTLQ9FK92cDXXkpVdEbTVcYY0UWJ9IkznA/cXsWmJFeR+xT9ycPq7QDV5V8t4MTp yXxbkDJgUIlfBFzQOVCDYHbUWkH1K2r5e/r13R87W+hbnLAqnL2hoLc+zgUBUNmdsdoC bfi0ordA61r+368hpBy6qqJkHVHxeUVyVf1ukorYwHCDrPBRgk/w97XSD7+Kpj8BOQlc JDFMguKqErFE7mfBV1HGjF8QyopBHi1hvRXJx0ozD+9hv9EysmzHX2CvFJuLRZ0PPfyG PnfA== X-Received: by 10.70.22.169 with SMTP id e9mr24573791pdf.162.1423444476258; Sun, 08 Feb 2015 17:14:36 -0800 (PST) Received: from Shidais-iMac.local ([128.199.230.246]) by mx.google.com with ESMTPSA id fl2sm14609857pab.2.2015.02.08.17.14.33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 17:14:35 -0800 (PST) From: Leo Liu References: Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUKDAg1NjRWV1V9fnyg op/DxcLk5uP8/voi63ReAAAACXBIWXMAAAWJAAAFiQFtaJ36AAAAB3RJTUUH1goZAgAz00bgXgAA AeVJREFUKM9lk0Fz2jAQhQXJD3CCO70CmcC1YMtcWyTZ14Bl69xats4N9r6/3zWQBlodNKNPu/s0 b1cCQFuZGpfVVh3vAvBJolIXRkapSuoRUtIdFyo1Y5xSdlAj7OtvD1XnXxmWRi+eWgcxyCed1lVV B1CrKyujMoi+eLA5kU1SsjoHlW+nQjTtFxk4MXgrOxvIqzoTZR8XgPaLl419zgsMaSGFPiUOZCIh thsx5Xy9NsK8Kwf/JoQgMxcVJ301HKkcSWaT0O7FY056J4U9xcYfnmVXG4801lW6lqwu2nKFZoHC HuzvaTVndZ+LaRQgZdthXw1cpynEkLEwyFHXk/aIxNQ6QeooJuzPMB+wn+D7JJNsiCcVA13/A3h/ xE9J+WidpAwoYNmRFwyvSRhNVtsdaAewzZZP5uw82QL9+tyNfocyP0McAzICUr5Mk9RdIjWasUNx aIIt6NK4ZtXIMdfMQt3nuMAyWbLI4DqZ4xPq/ag8jPond4XU/cLuOgw6XCFX/YCUfcDAMMH58fD4 G9kDchwfqVefkBwup2uZM+Q4WhJt5jN3AxXCsaS2yXEDuWgS8VOzW0gFjhEPmLyFMKBFaLb1HRwc DiaKwx0EeTMRYnYPQRW3PP4HApvlMv0PttX5v/D6Aws3IOSEwzmLAAAAAElFTkSuQmCC Date: Mon, 09 Feb 2015 09:14:30 +0800 In-Reply-To: (Stefan Monnier's message of "Sun, 08 Feb 2015 14:18:00 -0500") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (OS X 10.10.2) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) On 2015-02-09 03:18 +0800, Stefan Monnier wrote: > Maybe it'd be better to just splitting the body into 2 parts: > - "declarations", which would include docstrings, `declare's, and interactive > - code. Coincidentally I have done just that locally :) (defun macroexp-parse-body (exps) "Parse EXPS into ((DOC DECLARE-FORM INTERACTIVE-FORM) . BODY)." `((,(and (stringp (car exps)) (pop exps)) ,(and (eq (car-safe (car exps)) 'declare) (pop exps)) ,(and (eq (car-safe (car exps)) 'interactive) (pop exps))) ,@exps)) Leo From unknown Tue Jun 24 13:57:54 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Leo Liu Subject: bug#19814: closed (Re: bug#19814: 24.4; pcase-lambda) Message-ID: References: X-Gnu-PR-Message: they-closed 19814 X-Gnu-PR-Package: emacs Reply-To: 19814@debbugs.gnu.org Date: Mon, 09 Feb 2015 02:18:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1423448282-3842-1" This is a multi-part message in MIME format... ------------=_1423448282-3842-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #19814: 24.4; pcase-lambda which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 19814@debbugs.gnu.org. --=20 19814: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D19814 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1423448282-3842-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 19814-done) by debbugs.gnu.org; 9 Feb 2015 02:17:54 +0000 Received: from localhost ([127.0.0.1]:37677 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKdv8-0000zd-Dw for submit@debbugs.gnu.org; Sun, 08 Feb 2015 21:17:54 -0500 Received: from mail-pa0-f42.google.com ([209.85.220.42]:47685) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKdv5-0000zO-M0 for 19814-done@debbugs.gnu.org; Sun, 08 Feb 2015 21:17:52 -0500 Received: by mail-pa0-f42.google.com with SMTP id bj1so30493527pad.1 for <19814-done@debbugs.gnu.org>; Sun, 08 Feb 2015 18:17:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:in-reply-to:references:user-agent:face:date :message-id:mime-version:content-type; bh=QfWmHF5VCFZOnuIgvSVMqYAzt5T0ipnMws+ZcYQGl8Y=; b=nuij30iJNdhLddMn+bZKfhcIcJfzinyChDa7P8ooJVPvB0Sp5QfctSUful0fHV4ro5 YM7eipwLGP8oIeHKKKy5eYI0uwmlFN2Fho1q/474KEOoiZYUaPL9O+AdpIXsArcSQPsN j4EG1zxORCcrJwyOCHI92GprxP3wm3oUSiR9TGdvbNye3ANsEG6rFu03r8xUcP3e1Aec 9YiewEngcAO+CJjrR4hxbQunAfkCB0EJaeQQlLqfsP1UaVBnLva9/Go1HFgeAU5KwYZZ HDwRVWE8VmR2GzAiMyerfZ8HJCP3o/wnnzQb7kz1Pc7XLViRTUN5ysmcYIAiw4gQKW4Y Xs1g== X-Received: by 10.68.111.65 with SMTP id ig1mr24844357pbb.38.1423448265556; Sun, 08 Feb 2015 18:17:45 -0800 (PST) Received: from Shidais-iMac.local ([128.199.230.246]) by mx.google.com with ESMTPSA id ex3sm10865953pdb.23.2015.02.08.18.17.43 for <19814-done@debbugs.gnu.org> (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 18:17:44 -0800 (PST) From: Leo Liu To: 19814-done@debbugs.gnu.org Subject: Re: bug#19814: 24.4; pcase-lambda In-Reply-To: (Leo Liu's message of "Sun, 08 Feb 2015 17:01:00 +0800") References: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (OS X 10.10.2) Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUKDAg1NjRWV1V9fnyg op/DxcLk5uP8/voi63ReAAAACXBIWXMAAAWJAAAFiQFtaJ36AAAAB3RJTUUH1goZAgAz00bgXgAA AeVJREFUKM9lk0Fz2jAQhQXJD3CCO70CmcC1YMtcWyTZ14Bl69xats4N9r6/3zWQBlodNKNPu/s0 b1cCQFuZGpfVVh3vAvBJolIXRkapSuoRUtIdFyo1Y5xSdlAj7OtvD1XnXxmWRi+eWgcxyCed1lVV B1CrKyujMoi+eLA5kU1SsjoHlW+nQjTtFxk4MXgrOxvIqzoTZR8XgPaLl419zgsMaSGFPiUOZCIh thsx5Xy9NsK8Kwf/JoQgMxcVJ301HKkcSWaT0O7FY056J4U9xcYfnmVXG4801lW6lqwu2nKFZoHC HuzvaTVndZ+LaRQgZdthXw1cpynEkLEwyFHXk/aIxNQ6QeooJuzPMB+wn+D7JJNsiCcVA13/A3h/ xE9J+WidpAwoYNmRFwyvSRhNVtsdaAewzZZP5uw82QL9+tyNfocyP0McAzICUr5Mk9RdIjWasUNx aIIt6NK4ZtXIMdfMQt3nuMAyWbLI4DqZ4xPq/ag8jPond4XU/cLuOgw6XCFX/YCUfcDAMMH58fD4 G9kDchwfqVefkBwup2uZM+Q4WhJt5jN3AxXCsaS2yXEDuWgS8VOzW0gFjhEPmLyFMKBFaLb1HRwc DiaKwx0EeTMRYnYPQRW3PP4HApvlMv0PttX5v/D6Aws3IOSEwzmLAAAAAElFTkSuQmCC Date: Mon, 09 Feb 2015 10:17:40 +0800 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 19814-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Version: 25.1 ------------=_1423448282-3842-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 8 Feb 2015 09:01:33 +0000 Received: from localhost ([127.0.0.1]:37156 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKNkC-0006oY-Ef for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:32 -0500 Received: from eggs.gnu.org ([208.118.235.92]:42404) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKNk9-0006oG-Nd for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKNjz-0002PK-Mi for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:24 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_40,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:55567) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNjz-0002PG-Kl for submit@debbugs.gnu.org; Sun, 08 Feb 2015 04:01:19 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNju-0001dj-SI for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKNjq-0002Ms-7H for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:14 -0500 Received: from mail-pd0-f178.google.com ([209.85.192.178]:36673) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKNjq-0002Mc-2X for bug-gnu-emacs@gnu.org; Sun, 08 Feb 2015 04:01:10 -0500 Received: by pdjp10 with SMTP id p10so14327913pdj.3 for ; Sun, 08 Feb 2015 01:01:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version:content-type; bh=p4S6arXmQseHQen67cTZ/qghYIqW/r9c5i1LFCsC4SM=; b=C5L4gAWlvGpa5LMiy+RSBEysC7R89R06mewfWApFFrdnbZOXNe8aMQb29JwrXvoj3R u0J7BzuSkTpOaKumdAgkhtuGZtMtuGGkSFIS6LuBa9xHaaaEkrdmizi99h10F3oMNA4X sr82XGB/EN3mmo9j05QlsGiDYgfiXPTzy3SivM/4rbEznM/134woGEm5jMoo/nFaFVeN Lh0hg5lfYCCV9ecyWUm2GlqSabn1a3IOmLrg6z5EOUAW6jU/cSIH1joeDlBbFwNpG2uq SLfTvwxE+gyzN7YupWAzJSPhLWm1ZXoDtW8Z9UPDGAMdeMh/DDxNF1kLAfQbWp6YRVQ2 Cp+w== X-Received: by 10.70.88.9 with SMTP id bc9mr19240196pdb.145.1423386069141; Sun, 08 Feb 2015 01:01:09 -0800 (PST) Received: from Shidais-iMac.local ([128.199.230.246]) by mx.google.com with ESMTPSA id uq7sm12919582pbc.48.2015.02.08.01.01.05 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 01:01:08 -0800 (PST) From: Leo Liu To: bug-gnu-emacs@gnu.org Subject: 24.4; pcase-lambda X-Debbugs-CC: Stefan Monnier Date: Sun, 08 Feb 2015 17:01:00 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) --=-=-= Content-Type: text/plain The attached patch intends to implement pcase-lambda with lambda-list being a list of positional UPatterns. &rest is supported. Comments? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=pcase-lambda.diff Content-Description: pcase-lambda.diff diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 868a9578..5d912097 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -204,7 +204,7 @@ (pcase-let "defface")) (el-tdefs '("defgroup" "deftheme")) (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive" - "pcase-let" "pcase-let*" "save-restriction" + "pcase-lambda" "pcase-let" "pcase-let*" "save-restriction" "save-excursion" "save-selected-window" ;; "eval-after-load" "eval-next-after-load" "save-window-excursion" "save-current-buffer" diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el index 797de9ab..8fe156c4 100644 --- a/lisp/emacs-lisp/macroexp.el +++ b/lisp/emacs-lisp/macroexp.el @@ -297,6 +297,16 @@ (defun macroexpand-all (form &optional environment) ;;; Handy functions to use in macros. +(defun macroexp-parse-body (exps) + "Parse EXPS into (DOC DECLARE-FORM INTERACTIVE-FORM . BODY)." + `(,(and (stringp (car exps)) + (pop exps)) + ,(and (eq (car-safe (car exps)) 'declare) + (pop exps)) + ,(and (eq (car-safe (car exps)) 'interactive) + (pop exps)) + ,@exps)) + (defun macroexp-progn (exps) "Return an expression equivalent to `(progn ,@EXPS)." (if (cdr exps) `(progn ,@exps) (car exps))) diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index b495793b..0c71451b 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -164,6 +164,23 @@ (defmacro pcase-exhaustive (exp &rest cases) ;; FIXME: Could we add the FILE:LINE data in the error message? exp (append cases `((,x (error "No clause matching `%S'" ,x))))))) +;;;###autoload +(defmacro pcase-lambda (lambda-list &rest body) + (declare (doc-string 2) (indent defun)) + (let ((args (make-symbol "args")) + (pats (mapcar (lambda (u) + (unless (eq u '&rest) + (if (eq (car-safe u) '\`) (cadr u) (list '\, u)))) + lambda-list)) + (body (macroexp-parse-body body))) + ;; Handle &rest + (when (eq nil (car (last pats 2))) + (setq pats (append (butlast pats 2) (car (last pats))))) + `(lambda (&rest ,args) + ,@(remq nil (list (nth 0 body) (nth 1 body) (nth 2 body))) + (pcase ,args + (,(list '\` pats) . ,(nthcdr 3 body)))))) + (defun pcase--let* (bindings body) (cond ((null bindings) (macroexp-progn body)) --=-=-=-- ------------=_1423448282-3842-1-- From unknown Tue Jun 24 13:57:54 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19814: 24.4; pcase-lambda Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Feb 2015 04:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Leo Liu Cc: 19814@debbugs.gnu.org Received: via spool by 19814-submit@debbugs.gnu.org id=B19814.142345608031743 (code B ref 19814); Mon, 09 Feb 2015 04:28:02 +0000 Received: (at 19814) by debbugs.gnu.org; 9 Feb 2015 04:28:00 +0000 Received: from localhost ([127.0.0.1]:37718 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKfx1-0008Ft-Gx for submit@debbugs.gnu.org; Sun, 08 Feb 2015 23:27:59 -0500 Received: from ironport2-out.teksavvy.com ([206.248.154.181]:61128) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKfwy-0008Eu-GK for 19814@debbugs.gnu.org; Sun, 08 Feb 2015 23:27:57 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArsTAPOG1lTAqyxp/2dsb2JhbABbgwaDX4VTwGUEAgKBDUQBAQEBAQF8hA0BBAFWIxALDiYSFBgNJIg4CM4jAQEBAQYBAQEBHo94B4QqBYonoRAihAwggnMBAQE X-IPAS-Result: ArsTAPOG1lTAqyxp/2dsb2JhbABbgwaDX4VTwGUEAgKBDUQBAQEBAQF8hA0BBAFWIxALDiYSFBgNJIg4CM4jAQEBAQYBAQEBHo94B4QqBYonoRAihAwggnMBAQE X-IronPort-AV: E=Sophos;i="5.09,536,1418101200"; d="scan'208";a="109993637" Received: from 192-171-44-105.cpe.pppoe.ca (HELO pastel.home) ([192.171.44.105]) by ironport2-out.teksavvy.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 08 Feb 2015 23:27:50 -0500 Received: by pastel.home (Postfix, from userid 20848) id 0172B1F77; Sun, 8 Feb 2015 23:27:49 -0500 (EST) From: Stefan Monnier Message-ID: References: Date: Sun, 08 Feb 2015 23:27:49 -0500 In-Reply-To: (Leo Liu's message of "Mon, 09 Feb 2015 09:14:30 +0800") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) >> Maybe it'd be better to just splitting the body into 2 parts: >> - "declarations", which would include docstrings, `declare's, and interactive >> - code. > Coincidentally I have done just that locally :) > (defun macroexp-parse-body (exps) > "Parse EXPS into ((DOC DECLARE-FORM INTERACTIVE-FORM) . BODY)." > `((,(and (stringp (car exps)) > (pop exps)) > ,(and (eq (car-safe (car exps)) 'declare) > (pop exps)) > ,(and (eq (car-safe (car exps)) 'interactive) > (pop exps))) > ,@exps)) No, I meant (DECLS . BODY) such that (let ((x (macroexp-parse-body body))) (append (car x) (cdr x))) return something `equal' to `body'. Stefan From unknown Tue Jun 24 13:57:54 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19814: 24.4; pcase-lambda Resent-From: Leo Liu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 09 Feb 2015 05:32:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19814 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 19814@debbugs.gnu.org Received: via spool by 19814-submit@debbugs.gnu.org id=B19814.14234598749781 (code B ref 19814); Mon, 09 Feb 2015 05:32:02 +0000 Received: (at 19814) by debbugs.gnu.org; 9 Feb 2015 05:31:14 +0000 Received: from localhost ([127.0.0.1]:37723 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKgwD-0002Xh-Fo for submit@debbugs.gnu.org; Mon, 09 Feb 2015 00:31:13 -0500 Received: from mail-pd0-f170.google.com ([209.85.192.170]:39629) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YKgwB-0002XU-4l for 19814@debbugs.gnu.org; Mon, 09 Feb 2015 00:31:11 -0500 Received: by pdjy10 with SMTP id y10so6083704pdj.6 for <19814@debbugs.gnu.org>; Sun, 08 Feb 2015 21:31:05 -0800 (PST) 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=ideccKrWAYo00+vrpMoc/WNDu0MFffCrFf5JMnCzxFo=; b=wxFgsODpvQgueWE4k74cJjfMcAHdq3AWMoRHKJNWMgZ8evR8u3L1SEDocfDzTibTOn zmWux9yja5mcEspQO8348BQ6yLh2C6yhWfKDRmxApWx6E4D7Wa8RgGaqUlm7EOb9FP5+ UquLt86qpGRvQlaHbjZNzohWTHUdQtMN3jzqX/zFC3U0t02G+babwwXB0V+WKilBw09o RA08GqMcPLVhZ/Vml+06U+YM20AfG1KHFhF16tX6t+f4/aUZYWwolnjPJ4D0nIxVKWi3 pUItlpH59XdZO1QzgPslg+zcizp2lUkY8tpIt8pb0JI8W9u84LKF+a58jrB5uFDCXITQ uCvA== X-Received: by 10.68.136.137 with SMTP id qa9mr25579923pbb.127.1423459865379; Sun, 08 Feb 2015 21:31:05 -0800 (PST) Received: from Shidais-iMac.local ([128.199.230.246]) by mx.google.com with ESMTPSA id r6sm14974702pdm.72.2015.02.08.21.31.03 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 21:31:04 -0800 (PST) From: Leo Liu References: Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAG1BMVEUAAAA9Cgm3Hx1WWFWA gn+WmJWsrqv4+vcCAwCRl2MkAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAYoA AAGKATOXMFgAAAAHdElNRQfXAQwDNR+ZJmElAAABIklEQVQoz22SPW+DQAyGWUq65qasd9PNUSX4 AZHK2C1rJy5jpDS4IwRVup9dn7GNafpKIPPgzztXFSujqq1eM2n8h22oMkvxI/i9C97kRfMRUN55 dS3BrsAwBXUtMLAO4lryh8kTjOxKpQNniNxAgZOEe4bZwsDTFhKdqZRLNII4OQNHhEuq/RMkm6Cj TnnEA/fk0BorcYn5qA3oaeAxbaBOLrX+9G48NZ2Fzc2tzDM8Q+tMypEOqYHh8mAWaaK3U/cDMOT5 aMZMABgPXc7zPMs1A8DXO756GFJ/4fMEq47hTsAdn5avoxZ4ywl0c2w4Flu2Ybeyb3S+EqxX2DYA H8veJGEDTnHnrXvRaPyt+2kSfK6rfBZ2tUtfP/mR+pR6sX8BUZ/cDV7tvkoAAAAASUVORK5CYII= Date: Mon, 09 Feb 2015 13:30:58 +0800 In-Reply-To: (Stefan Monnier's message of "Sun, 08 Feb 2015 23:27:49 -0500") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (OS X 10.10.2) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) On 2015-02-09 12:27 +0800, Stefan Monnier wrote: > No, I meant (DECLS . BODY) such that > > (let ((x (macroexp-parse-body body))) > (append (car x) (cdr x))) > > return something `equal' to `body'. Ahh, I see. We can certainly do that. But isn't the version committed to master slightly more flexible i.e. one can easily access the individual DOC, DECLARE or INTERACTIVE form? And if one wants to use the prelude (without the `nil') as a whole it is just (remq nil (car PARSED-BODY)) away? What do you think? Leo