summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-04-21 13:14:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-04-21 13:21:12 +0900
commitc181d89c9dca0e722a525b871a82cbd75c59bb80 (patch)
tree564331a8ac7af70ede3ad009543b85e6d00ebdce
parentc91c9e2429b31fb2f35ed297152100084531b0cb (diff)
downloadmruby-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.c4
-rw-r--r--test/t/kernel.rb11
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