diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2021-02-26 09:52:16 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2021-02-26 10:09:42 +0100 |
commit | 70f2d658e42120c289c4a3c043b5d5b1331bc183 (patch) | |
tree | 72fccc67118546e6d38b5969a32764dcb3060348 /test/lisp/emacs-lisp | |
parent | 6bf56a3614ccd23a31e34ae997b2a6bb0d158489 (diff) | |
download | emacs-70f2d658e42120c289c4a3c043b5d5b1331bc183.tar.gz emacs-70f2d658e42120c289c4a3c043b5d5b1331bc183.tar.bz2 emacs-70f2d658e42120c289c4a3c043b5d5b1331bc183.zip |
Fix pcase rx pattern bugs
Two unrelated bugs: A missing type check caused an error in rx
patterns for non-string match targets, and rx patterns did not work at
all in pcase-let or pcase-let*.
Second bug reported by Basil Contovounesios and Ag Ibragimov; fixes
proposed by Stefan Monnier. Discussion and explanation in thread at
https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg01924.html
* lisp/emacs-lisp/rx.el (rx): Add (pred stringp) to avoid type errors,
and replace the `pred` clause for the actual match with something that
works with pcase-let(*) without being optimised away.
* test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test cases.
Diffstat (limited to 'test/lisp/emacs-lisp')
-rw-r--r-- | test/lisp/emacs-lisp/rx-tests.el | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index 12bf4f7978e..fecdcf55aff 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -171,7 +171,17 @@ (should (equal (pcase "abc" ((rx (? (let x alpha)) (?? (let y alnum)) ?c) (list x y))) - '("a" "b")))) + '("a" "b"))) + (should (equal (pcase 'not-a-string + ((rx nonl) 'wrong) + (_ 'correct)) + 'correct)) + (should (equal (pcase-let (((rx ?B (let z nonl)) "ABC")) + (list 'ok z)) + '(ok "C"))) + (should (equal (pcase-let* (((rx ?E (let z nonl)) "DEF")) + (list 'ok z)) + '(ok "F")))) (ert-deftest rx-kleene () "Test greedy and non-greedy repetition operators." |