emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 575b068: Fix pcase rx form snag with '?' and '??' (bug#44532)


From: Mattias Engdegård
Subject: master 575b068: Fix pcase rx form snag with '?' and '??' (bug#44532)
Date: Mon, 9 Nov 2020 11:28:47 -0500 (EST)

branch: master
commit 575b0681d926463960fc00d1e33decaa71d5c956
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    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.
---
 lisp/emacs-lisp/rx.el            | 2 +-
 test/lisp/emacs-lisp/rx-tests.el | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 8d8d071..76c3ac3 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 59d8c60..91b0884 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 "<blue>"
                      ((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."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]