summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-07-09 21:22:15 +0900
committerGitHub <[email protected]>2019-07-09 21:22:15 +0900
commitbc7c5d376a1f4bf65e585841682a8d474a52abed (patch)
treee8df7bbfa78a6b40e5cf6439560078504f1cac21 /src
parent59a76d48f878c74be2d45a2024ba287cf3c5c003 (diff)
parent23fc3339eedf685e358c9389b4f6b8bd068bcad2 (diff)
downloadmruby-bc7c5d376a1f4bf65e585841682a8d474a52abed.tar.gz
mruby-bc7c5d376a1f4bf65e585841682a8d474a52abed.zip
Merge pull request #4562 from shuujii/set-MRB_STR_ASCII-flag-when-an-inline-symbol-is-stringized
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);
}