From 70d8e6cf22515bfbf15bd283726ce9b72730164d Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 27 Nov 2016 11:07:27 +0000 Subject: [PATCH] object.c: no TypeError at special const dup * object.c (rb_obj_dup): no longer raise a TypeError for special constants, and return itself instead. [Feature#12979] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56906 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- object.c | 2 +- test/ruby/test_object.rb | 6 +++--- test/rubygems/test_gem_specification.rb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/object.c b/object.c index 05bef4df28..7075e13683 100644 --- a/object.c +++ b/object.c @@ -423,7 +423,7 @@ rb_obj_dup(VALUE obj) VALUE dup; if (rb_special_const_p(obj)) { - rb_raise(rb_eTypeError, "can't dup %s", rb_obj_classname(obj)); + return obj; } dup = rb_obj_alloc(rb_obj_class(obj)); init_copy(dup, obj); diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb index 7b3defa011..2f80bc6ffb 100644 --- a/test/ruby/test_object.rb +++ b/test/ruby/test_object.rb @@ -19,9 +19,9 @@ class TestObject < Test::Unit::TestCase end def test_dup - assert_raise(TypeError) { 1.dup } - assert_raise(TypeError) { true.dup } - assert_raise(TypeError) { nil.dup } + assert_equal 1, 1.dup + assert_equal true, true.dup + assert_equal nil, nil.dup assert_raise(TypeError) do Object.new.instance_eval { initialize_copy(1) } diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 87f0f360d7..2c0ea770b5 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -1260,7 +1260,7 @@ dependencies: [] s.version = '1' end - spec.instance_variable_set :@licenses, :blah + spec.instance_variable_set :@licenses, Object.new.singleton_class spec.loaded_from = '/path/to/file' e = assert_raises Gem::FormatException do