diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-10-04 14:42:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-10-04 14:42:01 +0900 |
| commit | 08eafe21d305e17c41b0221cae22dc1e90bee9cf (patch) | |
| tree | 1fdad300a627afa3641b65b8e25bf34521b3e5f9 | |
| parent | 264239f78fb9ec8047cf04b82f547fc41d65ab28 (diff) | |
| download | mruby-08eafe21d305e17c41b0221cae22dc1e90bee9cf.tar.gz mruby-08eafe21d305e17c41b0221cae22dc1e90bee9cf.zip | |
Implement Ruby2.7's frozen strings from `Symbol#to_s`.
| -rw-r--r-- | mrbgems/mruby-symbol-ext/mrblib/symbol.rb | 8 | ||||
| -rw-r--r-- | src/class.c | 1 | ||||
| -rw-r--r-- | src/symbol.c | 10 |
3 files changed, 12 insertions, 7 deletions
diff --git a/mrbgems/mruby-symbol-ext/mrblib/symbol.rb b/mrbgems/mruby-symbol-ext/mrblib/symbol.rb index 99fa275d5..4b4cf83fe 100644 --- a/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +++ b/mrbgems/mruby-symbol-ext/mrblib/symbol.rb @@ -10,7 +10,7 @@ class Symbol # Same as <code>sym.to_s.capitalize.intern</code>. def capitalize - (self.to_s.capitalize! || self).to_sym + self.to_s.capitalize.to_sym end ## @@ -20,7 +20,7 @@ class Symbol # Same as <code>sym.to_s.downcase.intern</code>. def downcase - (self.to_s.downcase! || self).to_sym + self.to_s.downcase.to_sym end ## @@ -30,7 +30,7 @@ class Symbol # Same as <code>sym.to_s.upcase.intern</code>. def upcase - (self.to_s.upcase! || self).to_sym + self.to_s.upcase.to_sym end ## @@ -41,7 +41,7 @@ class Symbol def casecmp(other) return nil unless other.kind_of?(Symbol) - lhs = self.to_s; lhs.upcase! + lhs = self.to_s.upcase rhs = other.to_s.upcase lhs <=> rhs end diff --git a/src/class.c b/src/class.c index 745e0a72c..9803e7662 100644 --- a/src/class.c +++ b/src/class.c @@ -72,6 +72,7 @@ mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb } return; } + name = mrb_str_dup(mrb, name); mrb_str_cat_cstr(mrb, name, "::"); mrb_str_cat_cstr(mrb, name, mrb_sym_name(mrb, id)); } 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* |
