]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix rx error with ? and ??
authorMattias Engdegård <mattiase@acm.org>
Thu, 5 Mar 2020 11:49:26 +0000 (12:49 +0100)
committerMattias Engdegård <mattiase@acm.org>
Thu, 5 Mar 2020 11:55:54 +0000 (12:55 +0100)
The ? and ?? rx operators are special in that they can be written as
characters (space and '?' respectively).  This confused the definition
look-up mechanism in rare cases.

* lisp/emacs-lisp/rx.el (rx--expand-def): Don't look up non-symbols.
* test/lisp/emacs-lisp/rx-tests.el (rx-charset-or): Test.

lisp/emacs-lisp/rx.el
test/lisp/emacs-lisp/rx-tests.el

index d4a9171027353ebe1c396376746a24a90cd20856..aa4b2addd4797f4f99ee0041ee0fc8c021844aff 100644 (file)
@@ -134,7 +134,7 @@ Each entry is:
                 (if (cdr def)
                     (error "Not an `rx' symbol definition: %s" form)
                   (car def)))))
-        ((consp form)
+        ((and (consp form) (symbolp (car form)))
          (let* ((op (car form))
                 (def (rx--lookup-def op)))
            (and def
index 4888e1d9d1e8fa30c20e7e9a576c7ab0058a5bc7..0fece4004bd98c137b1186a2eebf1323ab9cc80b 100644 (file)
   (should (equal (rx (not (or (in "abc") (char "bcd"))))
                  "[^a-d]"))
   (should (equal (rx (or (not (in "abc")) (not (char "bcd"))))
-                 "[^bc]")))
+                 "[^bc]"))
+  (should (equal (rx (or "x" (? "yz")))
+                 "x\\|\\(?:yz\\)?")))
 
 (ert-deftest rx-def-in-charset-or ()
   (rx-let ((a (any "badc"))