From 86aa98fed4de1be2e868877fd786d3616d6c6ad5 Mon Sep 17 00:00:00 2001 From: charliesome Date: Fri, 1 Feb 2013 14:05:49 +0000 Subject: * array.c (rb_ary_dup): make returned array the same class as the original array [Bug #7768] [ruby-core:51792] * test/ruby/test_array.rb (class TestArray): add test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'array.c') diff --git a/array.c b/array.c index a7c74a2aa4..b4216ac1d0 100644 --- a/array.c +++ b/array.c @@ -1778,7 +1778,8 @@ rb_ary_empty_p(VALUE ary) VALUE rb_ary_dup(VALUE ary) { - VALUE dup = rb_ary_new2(RARRAY_LEN(ary)); + VALUE ary_class = rb_obj_class(ary); + VALUE dup = ary_new(ary_class ? ary_class : rb_cArray, RARRAY_LEN(ary)); MEMCPY(RARRAY_PTR(dup), RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary)); ARY_SET_LEN(dup, RARRAY_LEN(ary)); return dup; -- cgit v1.2.3