From: Mattias EngdegÄrd Date: Mon, 9 Nov 2020 16:11:05 +0000 (+0100) Subject: Fix pcase rx form snag with '?' and '??' (bug#44532) X-Git-Tag: emacs-27.1.90~67 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=78e1646bf7;p=emacs.git Fix pcase rx form snag with '?' and '??' (bug#44532) This is a regression from Emacs 26. Reported by Phillip Stephani. * lisp/emacs-lisp/rx.el (rx--pcase-transform): Process ? and ?? correctly. * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test case. (cherry picked from commit 575b0681d926463960fc00d1e33decaa71d5c956) --- diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 6564563e7ec..88c843f3ce6 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -1413,7 +1413,7 @@ into a plain rx-expression, collecting names into `rx--pcase-vars'." (mapconcat #'symbol-name rx--pcase-vars " "))) `(backref ,index))) ((and `(,head . ,rest) - (guard (and (symbolp head) + (guard (and (or (symbolp head) (memq head '(?\s ??))) (not (memq head '(literal regexp regex eval)))))) (cons head (mapcar #'rx--pcase-transform rest))) (_ rx))) diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index 0fece4004bd..05779b4e0a6 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -158,7 +158,11 @@ (let ((k "blue")) (should (equal (pcase "" ((rx "<" (literal k) ">") 'ok)) - 'ok)))) + 'ok))) + (should (equal (pcase "abc" + ((rx (? (let x alpha)) (?? (let y alnum)) ?c) + (list x y))) + '("a" "b")))) (ert-deftest rx-kleene () "Test greedy and non-greedy repetition operators."