Subject: Re: bug#65536: 30.0.50; replace-regexp-in-string documentation does not mention it saves match data

From: Jens Schmidt <[email-masked]>
Date: Fri, 25 Aug 2023 17:26:03 +0200

On 2023-08-25  16:18, Eli Zaretskii wrote:
>> Date: Fri, 25 Aug 2023 15:16:29 +0200
>> From:  Jens Schmidt via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <[email-masked]>

>> Maybe this should be explicitly documented in its doc string and/or
>> the Emacs Lisp manual ((elisp) Search and Replace) so that users of
>> the function can rely on that fact?
> 
> Is it important to promise never to clobber match-data in this
> function?

Not sure whether the following is convincing enough ...

- I came across this question in the following scenario:

  (match-fat-regexp with a lot of subres, one of which matches quoted
   chars: "\\(?5:\\(?:[[:alnum:]_]+\\|\\\\.\\)+\\)")
  (let ((a (match-string 1 input))
        ;; unquote quoted chars
        (b (replace-regexp-in-string
            "\\\\\\(.\\)" "\\1"
            (match-string 5 input)
            t nil))
        (c (match-string 7 input)))
    ...)

  So for that and similar scenarios it would be helpful.

- And since `replace-regexp-in-string' contains that `save-match-data'
  for a long time already (at least since Emacs 23) I guess that a lot
  of authors have been relying on that fact, either consciously, after
  having peeked into the function, or unconsciously.

- If it helps, I could provide a patch ...