Commit c2cda3ff authored by Mattias Engdegård's avatar Mattias Engdegård

Revert "Allow zero-argument rx `or' and `seq' forms"

This reverts commit b552fc05.
It caused a bootstrapping failure which I have yet to resolve - sorry.
parent d3a0dded
Pipeline #1759 failed with stage
in 52 minutes and 9 seconds
......@@ -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
......@@ -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)
((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
......@@ -107,13 +107,7 @@
(should (equal (and (string-match (rx (or "a" "ab" "abc")) s)
(match-string 0 s))
;; Test zero-argument `or'.
(should (equal (rx (or)) regexp-unmatchable)))
(ert-deftest rx-seq ()
;; Test zero-argument `seq'.
(should (equal (rx (seq)) "")))
(provide 'rx-tests)
;; rx-tests.el ends here.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment