diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | array.c | 5 | ||||
-rw-r--r-- | test/ruby/test_array.rb | 3 |
3 files changed, 11 insertions, 4 deletions
@@ -1,3 +1,10 @@ +Wed Aug 18 18:36:32 2010 Kenta Murata <mrkn@mrkn.jp> + + * array.c (ary_make_shared), + test/ruby/test_array.rb (test_permutation): + always return the original array when it is shared. + [ruby-dev:42067] [Bug #3708] + Wed Aug 18 01:37:49 2010 NARUSE, Yui <naruse@ruby-lang.org> * regcomp.c: revert r26701; it introduces Bug #3681. @@ -409,10 +409,7 @@ static VALUE ary_make_shared(VALUE ary) { assert(!ARY_EMBED_P(ary)); - if (ARY_SHARED_P(ary)) { - return ARY_SHARED(ary); - } - else if (ARY_SHARED_ROOT_P(ary)) { + if (ARY_SHARED_P(ary) || ARY_SHARED_ROOT_P(ary)) { return ary; } else if (OBJ_FROZEN(ary)) { diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index e8edcc25e3..f2d723ffc9 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -1549,6 +1549,9 @@ class TestArray < Test::Unit::TestCase a.permutation {|x| b << x; a.replace(@cls[9, 8, 7, 6]) } assert_equal(@cls[9, 8, 7, 6], a) assert_equal(@cls[1, 2, 3, 4].permutation.to_a, b) + + bug3708 = '[ruby-dev:42067]' + assert_equal(b, @cls[0, 1, 2, 3, 4][1, 4].permutation.to_a, bug3708) end def test_repeated_permutation |