From 44cf56d6e70dbe06a160b004494ba40dd4cfb426 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 22 Jun 2000 08:29:58 +0000 Subject: 2000-06-22 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'array.c') diff --git a/array.c b/array.c index d8dc37195c..f2089996e5 100644 --- a/array.c +++ b/array.c @@ -680,9 +680,13 @@ static VALUE rb_ary_dup(ary) VALUE ary; { + VALUE klass = CLASS_OF(ary); VALUE dup; - dup = rb_ary_s_create(RARRAY(ary)->len, RARRAY(ary)->ptr, CLASS_OF(ary)); + while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { + klass = (VALUE)RCLASS(klass)->super; + } + dup = rb_ary_s_create(RARRAY(ary)->len, RARRAY(ary)->ptr, klass); if (OBJ_TAINTED(ary)) OBJ_TAINT(dup); return dup; } -- cgit v1.2.3