more efficient, but is almost never worth the effort.}.
@c E.g., see https://debbugs.gnu.org/2816
+If @var{strings} is the empty list, the return value is a regexp that
+never matches anything.
+
The optional argument @var{paren} can be any of the following:
@table @asis
guaranteed to be performed in the order given, as if the strings were
made into a regexp by joining them with '\|'.
++++
+** The function 'regexp-opt', when given an empty list of strings, now
+returns a regexp that never matches anything, which is an identity for
+this operation. Previously, the empty string was returned in this
+case.
+
\f
* Changes in Emacs 27.1 on Non-Free Operating Systems
any regexps, quoted or not. Optional PAREN specifies how the
returned regexp is surrounded by grouping constructs.
+If STRINGS is the empty list, the return value is a regexp that
+never matches anything.
+
The optional argument PAREN can be any of the following:
a string
(sorted-strings (delete-dups
(sort (copy-sequence strings) 'string-lessp)))
(re
- ;; If NOREORDER is non-nil and the list contains a prefix
- ;; of another string, we give up all attempts at optimisation.
- ;; There is plenty of room for improvement (Bug#34641).
- (if (and noreorder (regexp-opt--contains-prefix sorted-strings))
- (concat (or open "\\(?:")
- (mapconcat #'regexp-quote strings "\\|")
- "\\)")
- (regexp-opt-group sorted-strings (or open t) (not open)))))
+ (cond
+ ;; No strings: return a\` which cannot match anything.
+ ((null strings)
+ (concat (or open "\\(?:") "a\\`\\)"))
+ ;; If we cannot reorder, give up all attempts at
+ ;; optimisation. There is room for improvement (Bug#34641).
+ ((and noreorder (regexp-opt--contains-prefix sorted-strings))
+ (concat (or open "\\(?:")
+ (mapconcat #'regexp-quote strings "\\|")
+ "\\)"))
+ (t
+ (regexp-opt-group sorted-strings (or open t) (not open))))))
(cond ((eq paren 'words)
(concat "\\<" re "\\>"))
((eq paren 'symbols)