Skip to content

Commit

Permalink
Let frozen strings be shareable immediately
Browse files Browse the repository at this point in the history
  • Loading branch information
rm155 committed Sep 26, 2022
1 parent 3b59134 commit 5afdf20
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion string.c
Expand Up @@ -492,10 +492,14 @@ rb_fstring(VALUE str)
if (!bare) {
if (STR_EMBED_P(str)) {
OBJ_FREEZE_RAW(str);
FL_SET_RAW(str, RUBY_FL_SHAREABLE);
rb_add_to_shareable_tbl(str);
return str;
}
if (FL_TEST_RAW(str, STR_NOEMBED|STR_SHARED_ROOT|STR_SHARED) == (STR_NOEMBED|STR_SHARED_ROOT)) {
assert(OBJ_FROZEN(str));
FL_SET_RAW(str, RUBY_FL_SHAREABLE);
rb_add_to_shareable_tbl(str);
return str;
}
}
Expand All @@ -504,10 +508,14 @@ rb_fstring(VALUE str)
rb_str_resize(str, RSTRING_LEN(str));

fstr = register_fstring(str, FALSE);
FL_SET_RAW(fstr, RUBY_FL_SHAREABLE);
rb_add_to_shareable_tbl(fstr);

if (!bare) {
str_replace_shared_without_enc(str, fstr);
OBJ_FREEZE_RAW(str);
FL_SET_RAW(str, RUBY_FL_SHAREABLE);
rb_add_to_shareable_tbl(str);
return str;
}
return fstr;
Expand Down Expand Up @@ -574,7 +582,10 @@ MJIT_FUNC_EXPORTED VALUE
rb_fstring_new(const char *ptr, long len)
{
struct RString fake_str;
return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), FALSE);
VALUE str = register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), FALSE);
FL_SET_RAW(str, RUBY_FL_SHAREABLE);
rb_add_to_shareable_tbl(str);
return str;
}

VALUE
Expand Down

0 comments on commit 5afdf20

Please sign in to comment.