diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-07-09 18:59:00 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-07-09 18:59:00 +0900 |
| commit | 23fc3339eedf685e358c9389b4f6b8bd068bcad2 (patch) | |
| tree | 44890b838f734e896f2f50469942942ff9fd70c4 /src | |
| parent | 9add4a66c0cccf0f9ce738ea5dda4d8e960fff7b (diff) | |
| download | mruby-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.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); } |
