summaryrefslogtreecommitdiffhomepage
path: root/src/symbol.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-10-04 14:42:01 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-10-04 14:42:01 +0900
commit08eafe21d305e17c41b0221cae22dc1e90bee9cf (patch)
tree1fdad300a627afa3641b65b8e25bf34521b3e5f9 /src/symbol.c
parent264239f78fb9ec8047cf04b82f547fc41d65ab28 (diff)
downloadmruby-08eafe21d305e17c41b0221cae22dc1e90bee9cf.tar.gz
mruby-08eafe21d305e17c41b0221cae22dc1e90bee9cf.zip
Implement Ruby2.7's frozen strings from `Symbol#to_s`.
Diffstat (limited to 'src/symbol.c')
-rw-r--r--src/symbol.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/symbol.c b/src/symbol.c
index a4c453d32..2696b5210 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -517,14 +517,18 @@ mrb_sym_str(mrb_state *mrb, mrb_sym sym)
{
mrb_int len;
const char *name = mrb_sym_name_len(mrb, sym, &len);
+ mrb_value str;
if (!name) return mrb_undef_value(); /* can't happen */
if (SYMBOL_INLINE_P(sym)) {
- mrb_value str = mrb_str_new(mrb, name, len);
+ str = mrb_str_new(mrb, name, len);
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
- return str;
}
- return mrb_str_new_static(mrb, name, len);
+ else {
+ str = mrb_str_new_static(mrb, name, len);
+ }
+ MRB_SET_FROZEN_FLAG(mrb_str_ptr(str));
+ return str;
}
static const char*