ruby-changes:19161
From: yugui <ko1@a...>
Date: Mon, 28 Mar 2011 22:42:33 +0900 (JST)
Subject: [ruby-changes:19161] Ruby:r31200 (ruby_1_9_2): merges r30736,r30738 and r30739 from trunk into ruby_1_9_2.
yugui 2011-03-28 22:40:50 +0900 (Mon, 28 Mar 2011) New Revision: 31200 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31200 Log: merges r30736,r30738 and r30739 from trunk into ruby_1_9_2. -- * array.c (rb_ary_uniq_bang): call ARY_SET_LEN(ary, 0) before rb_resize_capa because rb_resize_capa expects resized length is smaller than current array length. call rb_ary_unshare before rb_resize_capa because rb_resize_capa losts the reference to original shared array. -- Add ML Reference and a test for r30736 [ruby-core:34997] -- Additional fix for r30736 Modified files: branches/ruby_1_9_2/ChangeLog branches/ruby_1_9_2/array.c branches/ruby_1_9_2/test/ruby/test_array.rb branches/ruby_1_9_2/version.h Index: ruby_1_9_2/array.c =================================================================== --- ruby_1_9_2/array.c (revision 31199) +++ ruby_1_9_2/array.c (revision 31200) @@ -3430,8 +3430,12 @@ if (RARRAY_LEN(ary) == (i = RHASH_SIZE(hash))) { return Qnil; } + ARY_SET_LEN(ary, 0); + if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) { + rb_ary_unshare(ary); + FL_SET_EMBED(ary); + } ary_resize_capa(ary, i); - ARY_SET_LEN(ary, 0); st_foreach(RHASH_TBL(hash), push_value, ary); } else { Index: ruby_1_9_2/ChangeLog =================================================================== --- ruby_1_9_2/ChangeLog (revision 31199) +++ ruby_1_9_2/ChangeLog (revision 31200) @@ -1,3 +1,11 @@ +Mon Jan 31 04:45:12 2011 NARUSE, Yui <naruse@r...> + + * array.c (rb_ary_uniq_bang): call ARY_SET_LEN(ary, 0) before + rb_resize_capa because rb_resize_capa expects resized length is + smaller than current array length. call rb_ary_unshare before + rb_resize_capa because rb_resize_capa losts the reference to + original shared array. [ruby-core:34997] + Sun Jan 30 16:15:20 2011 Nobuyoshi Nakada <nobu@r...> * test/dl/test_dl2.rb (TestDL#test_sin): math functions do not Index: ruby_1_9_2/version.h =================================================================== --- ruby_1_9_2/version.h (revision 31199) +++ ruby_1_9_2/version.h (revision 31200) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.2" -#define RUBY_PATCHLEVEL 183 +#define RUBY_PATCHLEVEL 184 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 9 #define RUBY_VERSION_TEENY 1 Index: ruby_1_9_2/test/ruby/test_array.rb =================================================================== --- ruby_1_9_2/test/ruby/test_array.rb (revision 31199) +++ ruby_1_9_2/test/ruby/test_array.rb (revision 31200) @@ -1456,6 +1456,12 @@ assert_raise(ArgumentError) { a.uniq!(1) } assert_raise(ArgumentError) { f.uniq!(1) } assert_raise(RuntimeError) { f.uniq! } + + assert_nothing_raised do + a = [ {c: "b"}, {c: "r"}, {c: "w"}, {c: "g"}, {c: "g"} ] + a.sort_by!{|e| e[:c]} + a.uniq! {|e| e[:c]} + end end def test_uniq_bang_with_block -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/