summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2019-09-23 18:56:30 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2019-09-25 18:09:42 +0200
commita773a6474897356cd78aeea092d2c1a51ede23f9 (patch)
tree9935673b464dc14a03a70a36c6ce7756404f0337
parent84567150e757ee3991a4b4f96a27080f92cb6d48 (diff)
downloademacs-a773a6474897356cd78aeea092d2c1a51ede23f9.tar.gz
Allow regexp-quote to return its argument
* src/search.c (Fregexp_quote): Only allocate a new string if needed. * doc/lispref/searching.texi (Regexp Functions): * etc/NEWS (Incompatible Lisp Changes): Document.
-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;
}