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-28.0.90~5206 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=575b0681d926463960fc00d1e33decaa71d5c956;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. --- diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 8d8d071031c..76c3ac31b85 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 59d8c600a20..91b0884d4a9 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -167,7 +167,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."