summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-07-09 18:59:00 +0900
committerKOBAYASHI Shuji <[email protected]>2019-07-09 18:59:00 +0900
commit23fc3339eedf685e358c9389b4f6b8bd068bcad2 (patch)
tree44890b838f734e896f2f50469942942ff9fd70c4 /src
parent9add4a66c0cccf0f9ce738ea5dda4d8e960fff7b (diff)
downloadmruby-23fc3339eedf685e358c9389b4f6b8bd068bcad2.tar.gz
mruby-23fc3339eedf685e358c9389b4f6b8bd068bcad2.zip
Set `MRB_STR_ASCII` flag when an inline symbol is stringized
Diffstat (limited to 'src')
-rw-r--r--src/symbol.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/symbol.c b/src/symbol.c
index 38843c71f..53f4f6e1d 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -494,7 +494,7 @@ sym_inspect(mrb_state *mrb, mrb_value sym)
name = mrb_sym2name_len(mrb, id, &len);
str = mrb_str_new(mrb, 0, len+1);
sp = RSTRING_PTR(str);
- RSTRING_PTR(str)[0] = ':';
+ sp[0] = ':';
memcpy(sp+1, name, len);
mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
if (!symname_p(name) || strlen(name) != (size_t)len) {
@@ -503,6 +503,9 @@ sym_inspect(mrb_state *mrb, mrb_value sym)
sp[0] = ':';
sp[1] = '"';
}
+#ifdef MRB_UTF8_STRING
+ if (SYMBOL_INLINE_P(id)) RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
+#endif
return str;
}
@@ -513,7 +516,11 @@ mrb_sym2str(mrb_state *mrb, mrb_sym sym)
const char *name = mrb_sym2name_len(mrb, sym, &len);
if (!name) return mrb_undef_value(); /* can't happen */
- if (SYMBOL_INLINE_P(sym)) return mrb_str_new(mrb, name, len);
+ if (SYMBOL_INLINE_P(sym)) {
+ mrb_value 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);
}