Revert "Avoid resizing mutation in subst-char-in-string"
This reverts commit 184d6e8c02
.
It wasn't quite correct: the path through `string-replace` would not
preserve text properties in the input string, which broke Gnus.
This commit is contained in:
parent
9365feadcc
commit
9d7b22fcb4
1 changed files with 7 additions and 13 deletions
20
lisp/subr.el
20
lisp/subr.el
|
@ -5690,19 +5690,13 @@ The SEPARATOR regexp defaults to \"\\s-+\"."
|
|||
(defun subst-char-in-string (fromchar tochar string &optional inplace)
|
||||
"Replace FROMCHAR with TOCHAR in STRING each time it occurs.
|
||||
Unless optional argument INPLACE is non-nil, return a new string."
|
||||
(if (and (not inplace)
|
||||
(if (multibyte-string-p string)
|
||||
(> (max fromchar tochar) 127)
|
||||
(> tochar 255)))
|
||||
;; Avoid quadratic behaviour from resizing replacement.
|
||||
(string-replace (string fromchar) (string tochar) string)
|
||||
(let ((i (length string))
|
||||
(newstr (if inplace string (copy-sequence string))))
|
||||
(while (> i 0)
|
||||
(setq i (1- i))
|
||||
(if (eq (aref newstr i) fromchar)
|
||||
(aset newstr i tochar)))
|
||||
newstr)))
|
||||
(let ((i (length string))
|
||||
(newstr (if inplace string (copy-sequence string))))
|
||||
(while (> i 0)
|
||||
(setq i (1- i))
|
||||
(if (eq (aref newstr i) fromchar)
|
||||
(aset newstr i tochar)))
|
||||
newstr))
|
||||
|
||||
(defun string-replace (from-string to-string in-string)
|
||||
"Replace FROM-STRING with TO-STRING in IN-STRING each time it occurs."
|
||||
|
|
Loading…
Add table
Reference in a new issue