diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-10-04 16:02:50 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-10-04 16:02:50 +0900 |
| commit | 1f5a7f2f4970144164232a2bc45f561de5d65c33 (patch) | |
| tree | 4741dd494776ba84926d982d16a4322684fa0368 /src | |
| parent | 08eafe21d305e17c41b0221cae22dc1e90bee9cf (diff) | |
| download | mruby-1f5a7f2f4970144164232a2bc45f561de5d65c33.tar.gz mruby-1f5a7f2f4970144164232a2bc45f561de5d65c33.zip | |
Freeze strings from `nil.to_s`, `true.to_s`, `false.to_s`.
This is an experimental changes in Ruby 2.7.
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel.c | 2 | ||||
| -rw-r--r-- | src/object.c | 8 | ||||
| -rw-r--r-- | src/string.c | 7 |
3 files changed, 12 insertions, 5 deletions
diff --git a/src/kernel.c b/src/kernel.c index 4287b6cf2..c88a457f0 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -431,7 +431,7 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self) return mrb_obj_extend(mrb, argc, argv, self); } -static mrb_value +MRB_API mrb_value mrb_obj_freeze(mrb_state *mrb, mrb_value self) { if (!mrb_immediate_p(self)) { diff --git a/src/object.c b/src/object.c index 0b83c97a3..4e2ba7154 100644 --- a/src/object.c +++ b/src/object.c @@ -83,13 +83,13 @@ mrb_true(mrb_state *mrb, mrb_value obj) static mrb_value nil_to_s(mrb_state *mrb, mrb_value obj) { - return mrb_str_new(mrb, 0, 0); + return mrb_str_new_frozen(mrb, 0, 0); } static mrb_value nil_inspect(mrb_state *mrb, mrb_value obj) { - return mrb_str_new_lit(mrb, "nil"); + return mrb_str_new_lit_frozen(mrb, "nil"); } /*********************************************************************** @@ -150,7 +150,7 @@ true_xor(mrb_state *mrb, mrb_value obj) static mrb_value true_to_s(mrb_state *mrb, mrb_value obj) { - return mrb_str_new_lit(mrb, "true"); + return mrb_str_new_lit_frozen(mrb, "true"); } /* 15.2.5.3.4 */ @@ -257,7 +257,7 @@ false_or(mrb_state *mrb, mrb_value obj) static mrb_value false_to_s(mrb_state *mrb, mrb_value obj) { - return mrb_str_new_lit(mrb, "false"); + return mrb_str_new_lit_frozen(mrb, "false"); } void diff --git a/src/string.c b/src/string.c index 1428ea780..328366e10 100644 --- a/src/string.c +++ b/src/string.c @@ -235,6 +235,13 @@ mrb_str_new_static(mrb_state *mrb, const char *p, size_t len) return mrb_obj_value(s); } +MRB_API mrb_value +mrb_str_freeze(mrb_state *mrb, const char *p, size_t len) +{ + struct RString *s = str_new_static(mrb, p, len); + return mrb_obj_value(s); +} + static void str_decref(mrb_state *mrb, mrb_shared_string *shared) { |
