aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--hash.c4
-rw-r--r--test/ruby/test_iterator.rb17
-rw-r--r--test/ruby/test_yield.rb2
4 files changed, 25 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 4f2157a8e9..bdec9ca33f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Fri Jun 15 13:24:18 2007 Koichi Sasada <ko1@atdot.net>
+
+ * 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 <ko1@atdot.net>
* test/ruby/test_iterator.rb: remove debug code (GC.stress=true).
diff --git a/hash.c b/hash.c
index 3f27a0c633..d349a375c6 100644
--- a/hash.c
+++ b/hash.c
@@ -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