diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-04-21 13:14:10 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-04-21 13:21:12 +0900 |
| commit | c181d89c9dca0e722a525b871a82cbd75c59bb80 (patch) | |
| tree | 564331a8ac7af70ede3ad009543b85e6d00ebdce | |
| parent | c91c9e2429b31fb2f35ed297152100084531b0cb (diff) | |
| download | mruby-c181d89c9dca0e722a525b871a82cbd75c59bb80.tar.gz mruby-c181d89c9dca0e722a525b871a82cbd75c59bb80.zip | |
`Kernel#clone` and `Kernel#dup` no longer raise `TypeError`; fix #4974
In ISO, those methods should raise `TypeError`, but the spec has been
changed. The change was discussed in [Feature#12979].
| -rw-r--r-- | src/kernel.c | 4 | ||||
| -rw-r--r-- | test/t/kernel.rb | 11 |
2 files changed, 2 insertions, 13 deletions
diff --git a/src/kernel.c b/src/kernel.c index 8bb837eca..ae9617686 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -325,7 +325,7 @@ mrb_obj_clone(mrb_state *mrb, mrb_value self) mrb_value clone; if (mrb_immediate_p(self)) { - mrb_raisef(mrb, E_TYPE_ERROR, "can't clone %v", self); + return self; } if (mrb_sclass_p(self)) { mrb_raise(mrb, E_TYPE_ERROR, "can't clone singleton class"); @@ -366,7 +366,7 @@ mrb_obj_dup(mrb_state *mrb, mrb_value obj) mrb_value dup; if (mrb_immediate_p(obj)) { - mrb_raisef(mrb, E_TYPE_ERROR, "can't dup %v", obj); + return obj; } if (mrb_sclass_p(obj)) { mrb_raise(mrb, E_TYPE_ERROR, "can't dup singleton class"); diff --git a/test/t/kernel.rb b/test/t/kernel.rb index c2eeee1a5..aac6373fa 100644 --- a/test/t/kernel.rb +++ b/test/t/kernel.rb @@ -197,17 +197,6 @@ assert('Kernel#dup', '15.3.1.3.9') do a.set(2) c = a.dup - immutables = [ 1, :foo, true, false, nil ] - error_count = 0 - immutables.each do |i| - begin - i.dup - rescue TypeError - error_count += 1 - end - end - - assert_equal immutables.size, error_count assert_equal 2, a.get assert_equal 1, b.get assert_equal 2, c.get |
