summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2021-11-26 10:33:31 -0500
committerPeter Zhu <peter@peterzhu.ca>2021-11-26 13:27:32 -0500
commit7cfacbcad2d6bd510cf69a7b31b7ede4e293fef2 (patch)
treed8f1fa9fbcad2ed90d936095dd11476277730796 /string.c
parentdff8d12226088f07435d81b570cc9731b10c0da9 (diff)
Improve performance of embedded string allocation
Non-VWA embedded string allocation had a performance regression. This commit improves performance of non-VWA embedded string allocation.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/5183
Diffstat (limited to 'string.c')
-rw-r--r--string.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/string.c b/string.c
index 8201124409..303cd9b98b 100644
--- a/string.c
+++ b/string.c
@@ -1739,7 +1739,6 @@ str_duplicate_setup(VALUE klass, VALUE str, VALUE dup)
assert(str_embed_capa(dup) >= len + 1);
STR_SET_EMBED_LEN(dup, len);
MEMCPY(RSTRING(dup)->as.embed.ary, RSTRING(str)->as.embed.ary, char, len + 1);
- flags &= ~RSTRING_NOEMBED;
}
else {
VALUE root = str;
@@ -1781,7 +1780,7 @@ static inline VALUE
ec_str_duplicate(struct rb_execution_context_struct *ec, VALUE klass, VALUE str)
{
VALUE dup;
- if (FL_TEST(str, STR_NOEMBED)) {
+ if (!USE_RVARGC || FL_TEST(str, STR_NOEMBED)) {
dup = ec_str_alloc_heap(ec, klass);
}
else {
@@ -1795,7 +1794,7 @@ static inline VALUE
str_duplicate(VALUE klass, VALUE str)
{
VALUE dup;
- if (FL_TEST(str, STR_NOEMBED)) {
+ if (!USE_RVARGC || FL_TEST(str, STR_NOEMBED)) {
dup = str_alloc_heap(klass);
}
else {