From 125b62e76d97fd9483c9e15313f80c43a8c1a213 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 18 Sep 2011 22:54:25 +0000 Subject: * object.c (rb_obj_clone): singleton class should be attached singleton object to. a patch by Satoshi Shiba at [ruby-dev:44460]. [Bug #5274] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- object.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'object.c') diff --git a/object.c b/object.c index 5d21709a5d..3a7265b31d 100644 --- a/object.c +++ b/object.c @@ -273,12 +273,17 @@ VALUE rb_obj_clone(VALUE obj) { VALUE clone; + VALUE singleton; if (rb_special_const_p(obj)) { rb_raise(rb_eTypeError, "can't clone %s", rb_obj_classname(obj)); } clone = rb_obj_alloc(rb_obj_class(obj)); - RBASIC(clone)->klass = rb_singleton_class_clone(obj); + singleton = rb_singleton_class_clone(obj); + RBASIC(clone)->klass = singleton; + if (FL_TEST(singleton, FL_SINGLETON)) { + rb_singleton_class_attached(singleton, clone); + } RBASIC(clone)->flags = (RBASIC(obj)->flags | FL_TEST(clone, FL_TAINT) | FL_TEST(clone, FL_UNTRUSTED)) & ~(FL_FREEZE|FL_FINALIZE|FL_MARK); init_copy(clone, obj); rb_funcall(clone, id_init_clone, 1, obj); -- cgit v1.2.3