summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lispref/searching.texi3
-rw-r--r--etc/NEWS4
-rw-r--r--src/search.c10
3 files changed, 13 insertions, 4 deletions
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 1286b63446a..65f56b490fd 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -1562,6 +1562,9 @@ whitespace:
(concat "\\s-" (regexp-quote string) "\\s-"))
@end group
@end example
+
+The returned string may be @var{string} itself if it does not contain
+any special characters.
@end defun
@cindex optimize regexp
diff --git a/etc/NEWS b/etc/NEWS
index 3072d4081b8..96b2cb129bd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2157,6 +2157,10 @@ valid event type.
be specified in image specs representing the entire bitmap as a single
bool vector.
++++
+** 'regexp-quote' may return its argument string.
+If the argument needs no quoting, it can be returned instead of a copy.
+
* Lisp Changes in Emacs 27.1
diff --git a/src/search.c b/src/search.c
index 1e57d2ecbe5..9d95dcbca58 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3138,10 +3138,12 @@ DEFUN ("regexp-quote", Fregexp_quote, Sregexp_quote, 1, 1, 0,
}
Lisp_Object result
- = make_specified_string (temp,
- SCHARS (string) + backslashes_added,
- out - temp,
- STRING_MULTIBYTE (string));
+ = (backslashes_added > 0
+ ? make_specified_string (temp,
+ SCHARS (string) + backslashes_added,
+ out - temp,
+ STRING_MULTIBYTE (string))
+ : string);
SAFE_FREE ();
return result;
}