From 9233865b7005831e63755eb84ae7da060f878a55 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Wed, 26 Jun 2019 08:47:56 -0400 Subject: [PATCH] Fix (rx-to-string (and (literal STR) (regexp STR)) regression * lisp/emacs-lisp/rx.el (rx-regexp, rx-literal): Check the cadr of the form for stringness, not the form itself. * test/lisp/emacs-lisp/rx-tests.el (rx-to-string-lisp-forms): New test. --- lisp/emacs-lisp/rx.el | 4 ++-- test/lisp/emacs-lisp/rx-tests.el | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 1b5afe73b45..24dd6cbf1d6 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -874,7 +874,7 @@ If FORM is `(minimal-match FORM1)', non-greedy versions of `*', (defun rx-regexp (form) "Parse and produce code from FORM, which is `(regexp STRING)'." - (cond ((stringp form) + (cond ((stringp (cadr form)) (rx-group-if (cadr form) rx-parent)) (rx--compile-to-lisp ;; Always group non-string forms, since we can't be sure they @@ -884,7 +884,7 @@ If FORM is `(minimal-match FORM1)', non-greedy versions of `*', (defun rx-literal (form) "Parse and produce code from FORM, which is `(literal STRING-EXP)'." - (cond ((stringp form) + (cond ((stringp (cadr form)) ;; This is allowed, but makes little sense, you could just ;; use STRING directly. (rx-group-if (regexp-quote (cadr form)) rx-parent)) diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index bab71b522bb..8845ebf46d1 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -156,5 +156,9 @@ (rx-tests--match (rx "c" (minimal-match (0+ (regexp ad))) "a") "cdaaada" "cda") (rx-tests--match (rx "c" (maximal-match (0+ (regexp ad))) "a") "cdaaada" "cdaaada"))) +(ert-deftest rx-to-string-lisp-forms () + (rx-tests--match (rx-to-string '(seq "a" (literal "b") "c")) "abc") + (rx-tests--match (rx-to-string '(seq "a" (regexp "b") "c")) "abc")) + (provide 'rx-tests) ;; rx-tests.el ends here. -- 2.39.5