Commit 75949836 authored by KOBAYASHI Shuji's avatar KOBAYASHI Shuji

SHARED string is not required when sharing POOL string

The heap string buffer of POOL string always exists, does not need to be
released, and read only, so it can be shared as NOFREE string.
parent c310c8dc
...@@ -526,7 +526,7 @@ str_make_shared(mrb_state *mrb, struct RString *orig, struct RString *s) ...@@ -526,7 +526,7 @@ str_make_shared(mrb_state *mrb, struct RString *orig, struct RString *s)
size_t len = (size_t)orig->as.heap.len; size_t len = (size_t)orig->as.heap.len;
mrb_assert(!RSTR_EMBED_P(orig)); mrb_assert(!RSTR_EMBED_P(orig));
if (RSTR_NOFREE_P(orig)) { if (RSTR_NOFREE_P(orig) || RSTR_POOL_P(orig)) {
str_init_nofree(s, orig->as.heap.ptr, len); str_init_nofree(s, orig->as.heap.ptr, len);
} }
else if (RSTR_SHARED_P(orig)) { else if (RSTR_SHARED_P(orig)) {
...@@ -535,7 +535,7 @@ str_make_shared(mrb_state *mrb, struct RString *orig, struct RString *s) ...@@ -535,7 +535,7 @@ str_make_shared(mrb_state *mrb, struct RString *orig, struct RString *s)
else if (RSTR_FSHARED_P(orig)) { else if (RSTR_FSHARED_P(orig)) {
str_init_fshared(orig, s, orig->as.heap.aux.fshared); str_init_fshared(orig, s, orig->as.heap.aux.fshared);
} }
else if (mrb_frozen_p(orig) && !RSTR_POOL_P(orig)) { else if (mrb_frozen_p(orig)) {
str_init_fshared(orig, s, orig); str_init_fshared(orig, s, orig);
} }
else { else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment