summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2022-09-08 22:12:02 +0900
committerKazuki Yamaguchi <k@rhe.jp>2022-09-09 16:03:20 +0900
commitaff6534e32b5e46036808ed0579d31a8dbad8190 (patch)
tree5be487de6d4369ca940afc840f0d4754b4d00151
parent9faa9ced9640d23fc5dc1efd635f6b8ebc1a3ceb (diff)
Avoid unnecessary copying when removing the leading part of a string
Remove the superfluous str_modify_keep_cr() call from rb_str_update(). It ends up calling either rb_str_drop_bytes() or rb_str_splice_0(), which already does checks if necessary. The extra call makes the string "independent". This is not always wanted, in other words, it can keep the same shared root when merely removing the leading part of a shared string.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6336
-rw-r--r--string.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/string.c b/string.c
index 963652cdb9..c9ec827708 100644
--- a/string.c
+++ b/string.c
@@ -5359,7 +5359,6 @@ rb_str_update(VALUE str, long beg, long len, VALUE val)
if (len > slen - beg) {
len = slen - beg;
}
- str_modify_keep_cr(str);
p = str_nth(RSTRING_PTR(str), RSTRING_END(str), beg, enc, singlebyte);
if (!p) p = RSTRING_END(str);
e = str_nth(p, RSTRING_END(str), len, enc, singlebyte);