diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-07-09 21:22:15 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-07-09 21:22:15 +0900 |
| commit | bc7c5d376a1f4bf65e585841682a8d474a52abed (patch) | |
| tree | e8df7bbfa78a6b40e5cf6439560078504f1cac21 /src | |
| parent | 59a76d48f878c74be2d45a2024ba287cf3c5c003 (diff) | |
| parent | 23fc3339eedf685e358c9389b4f6b8bd068bcad2 (diff) | |
| download | mruby-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.c | 11 |
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); } |
