diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | hash.c | 4 | ||||
-rw-r--r-- | test/ruby/test_iterator.rb | 17 | ||||
-rw-r--r-- | test/ruby/test_yield.rb | 2 |
4 files changed, 25 insertions, 7 deletions
@@ -1,3 +1,12 @@ +Fri Jun 15 13:24:18 2007 Koichi Sasada <[email protected]> + + * hash.c: exchange semantics of Hash#each and Hash#each_pair. + pointed out by [ruby-dev:30997]. + + * test/ruby/test_iterator.rb: ditto. + + * test/ruby/test_yield.rb: ditto. + Fri Jun 15 12:38:29 2007 Koichi Sasada <[email protected]> * test/ruby/test_iterator.rb: remove debug code (GC.stress=true). @@ -994,7 +994,7 @@ static int each_pair_i(VALUE key, VALUE value) { if (key == Qundef) return ST_CONTINUE; - rb_yield(rb_assoc_new(key, value)); + rb_yield_values(2, key, value); return ST_CONTINUE; } @@ -1027,7 +1027,7 @@ static int each_i(VALUE key, VALUE value) { if (key == Qundef) return ST_CONTINUE; - rb_yield_values(2, key, value); + rb_yield(rb_assoc_new(key, value)); return ST_CONTINUE; } diff --git a/test/ruby/test_iterator.rb b/test/ruby/test_iterator.rb index 20d3b55d1c..0fce5eabd7 100644 --- a/test/ruby/test_iterator.rb +++ b/test/ruby/test_iterator.rb @@ -359,15 +359,24 @@ class TestIterator < Test::Unit::TestCase class H def each + yield [:key, :value] + end + + def each_pair yield :key, :value end end def test_assoc_yield - [{:key=>:value}, H.new].each {|h| - h.each{|a| assert_equal(:key, a)} # changed at 1.9 - h.each{|*a| assert_equal([:key, :value], a)} - h.each{|k,v| assert_equal([:key, :value], [k,v])} + [{:key=>:value}, H.new].each {|h| + h.each{|a| assert_equal([:key, :value], a)} + h.each{|a,| assert_equal(:key, a)} + h.each{|*a| assert_equal([[:key, :value]], a)} + h.each{|k,v| assert_equal([:key, :value], [k,v])} + h.each_pair{|a| assert_equal(:key, a)} + h.each_pair{|a,| assert_equal(:key, a)} + h.each_pair{|*a| assert_equal([:key, :value], a)} + h.each_pair{|k,v| assert_equal([:key, :value], [k,v])} } end diff --git a/test/ruby/test_yield.rb b/test/ruby/test_yield.rb index e5e288be1a..99f0a0c3fc 100644 --- a/test/ruby/test_yield.rb +++ b/test/ruby/test_yield.rb @@ -17,7 +17,7 @@ class TestRubyYield < Test::Unit::TestCase assert_equal 1, v end h.each do |k| - assert_equal :a, k # changed at 1.9 + assert_equal [:a, 1], k end end |