emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master c2cda3f: Revert "Allow zero-argument rx `or' and `s


From: Mattias Engdegård
Subject: [Emacs-diffs] master c2cda3f: Revert "Allow zero-argument rx `or' and `seq' forms"
Date: Mon, 20 May 2019 11:39:58 -0400 (EDT)

branch: master
commit c2cda3ff4025e8c27bdfc2a5279f3b635c8df260
Author: Mattias Engdegård <address@hidden>
Commit: Mattias Engdegård <address@hidden>

    Revert "Allow zero-argument rx `or' and `seq' forms"
    
    This reverts commit b552fc05c231ca6800330a318d3a74ddd0f5a13c.
    It caused a bootstrapping failure which I have yet to resolve - sorry.
---
 etc/NEWS                         |  6 ------
 lisp/emacs-lisp/rx.el            | 13 +++++--------
 test/lisp/emacs-lisp/rx-tests.el |  8 +-------
 3 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 72702a9..9ca98c3 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1321,12 +1321,6 @@ when given in a string.  Previously, '(any "\x80-\xff")' 
would match
 characters U+0080...U+00FF.  Now the expression matches raw bytes in
 the 128...255 range, as expected.
 
-*** The rx 'or' and 'seq' forms no longer require any arguments.
-(or) produces a regexp that never matches anything, while (seq)
-matches the empty string, each being an identity for the operation.
-This also works for their aliases: '|' for 'or'; ':', 'and' and
-'sequence' for 'seq'.
-
 ** Frames
 
 +++
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 9478bd3..9d9028d 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -110,11 +110,11 @@
 ;; FIXME: support macros.
 
 (defvar rx-constituents              ;Not `const' because some modes extend it.
-  '((and               . (rx-and 0 nil))
+  '((and               . (rx-and 1 nil))
     (seq               . and)          ; SRE
     (:                 . and)          ; SRE
     (sequence          . and)          ; sregex
-    (or                        . (rx-or 0 nil))
+    (or                        . (rx-or 1 nil))
     (|                 . or)           ; SRE
     (not-newline       . ".")
     (nonl              . not-newline)  ; SRE
@@ -390,11 +390,9 @@ FORM is of the form `(and FORM1 ...)'."
   "Parse and produce code from FORM, which is `(or FORM1 ...)'."
   (rx-check form)
   (rx-group-if
-   (cond
-    ((null (cdr form)) regexp-unmatchable)
-    ((cl-every #'stringp (cdr form))
+   (if (memq nil (mapcar 'stringp (cdr form)))
+       (mapconcat (lambda (x) (rx-form x '|)) (cdr form) "\\|")
      (regexp-opt (cdr form) nil t))
-    (t (mapconcat (lambda (x) (rx-form x '|)) (cdr form) "\\|")))
    (and (memq rx-parent '(: * t)) rx-parent)))
 
 
@@ -1123,7 +1121,6 @@ CHAR
 `(seq SEXP1 SEXP2 ...)'
 `(sequence SEXP1 SEXP2 ...)'
      matches what SEXP1 matches, followed by what SEXP2 matches, etc.
-     Without arguments, matches the empty string.
 
 `(submatch SEXP1 SEXP2 ...)'
 `(group SEXP1 SEXP2 ...)'
@@ -1139,7 +1136,7 @@ CHAR
 `(| SEXP1 SEXP2 ...)'
      matches anything that matches SEXP1 or SEXP2, etc.  If all
      args are strings, use `regexp-opt' to optimize the resulting
-     regular expression.  Without arguments, never matches anything.
+     regular expression.
 
 `(minimal-match SEXP)'
      produce a non-greedy regexp for SEXP.  Normally, regexps matching
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 6f392d6..4a5919e 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -107,13 +107,7 @@
                    "ab"))
     (should (equal (and (string-match (rx (or "a" "ab" "abc")) s)
                         (match-string 0 s))
-                   "a")))
-  ;; Test zero-argument `or'.
-  (should (equal (rx (or)) regexp-unmatchable)))
-
-(ert-deftest rx-seq ()
-  ;; Test zero-argument `seq'.
-  (should (equal (rx (seq)) "")))
+                   "a"))))
 
 (provide 'rx-tests)
 ;; rx-tests.el ends here.



reply via email to

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