mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
rb_str_resize: Only clear coderange on truncation
If we are expanding the string or only stripping extra capacity then coderange won't change, so clearing it is wasteful.
This commit is contained in:
parent
fe61cad749
commit
b0b9f7201a
Notes:
git
2022-08-18 17:09:28 +09:00
4 changed files with 23 additions and 8 deletions
|
@ -937,6 +937,8 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
if (RTEST(ruby_verbose)) rb_warn("%s", mesg);
|
||||
}
|
||||
rb_str_resize(result, blen);
|
||||
// rb_str_format mutates the string without updating coderange
|
||||
ENC_CODERANGE_CLEAR(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -1163,6 +1165,8 @@ ruby_vsprintf0(VALUE result, char *p, const char *fmt, va_list ap)
|
|||
buffer.value = 0;
|
||||
BSD_vfprintf(&f, fmt, ap);
|
||||
RBASIC_SET_CLASS_RAW(result, klass);
|
||||
// vfprintf mutates the string without updating coderange
|
||||
ENC_CODERANGE_CLEAR(result);
|
||||
rb_str_resize(result, (char *)f._p - RSTRING_PTR(result));
|
||||
#undef f
|
||||
}
|
||||
|
@ -1183,7 +1187,6 @@ rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap)
|
|||
rb_enc_associate(result, enc);
|
||||
}
|
||||
ruby_vsprintf0(result, RSTRING_PTR(result), fmt, ap);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue