diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-19 07:31:05 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-19 07:31:05 +0000 |
commit | 7588c674d52791a15fa7631ba2628d6547ad1185 (patch) | |
tree | 46dad3625d921c06a2b28a2e11bcce506068aa33 | |
parent | 2370556d3d8ec4138c4326208a6da7c1c485e908 (diff) | |
download | ruby-7588c674d52791a15fa7631ba2628d6547ad1185.tar.gz |
struct.c: yield assoc in each_pair
* struct.c (rb_struct_each_pair): yield associated pairs so that
an unsplat argument can get both, for consistency with Hash,
OpenStruct, and etc. [ruby-dev:46533] [Bug #7382]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | struct.c | 4 | ||||
-rw-r--r-- | test/ruby/test_struct.rb | 5 |
3 files changed, 14 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Mon Nov 19 16:30:59 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * struct.c (rb_struct_each_pair): yield associated pairs so that + an unsplat argument can get both, for consistency with Hash, + OpenStruct, and etc. [ruby-dev:46533] [Bug #7382] + Mon Nov 19 16:17:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> * configure.in (LIBS): libelf is need on only FreeBSD. @@ -495,7 +495,9 @@ rb_struct_each_pair(VALUE s) RETURN_SIZED_ENUMERATOR(s, 0, 0, rb_struct_size); members = rb_struct_members(s); for (i=0; i<RSTRUCT_LEN(s); i++) { - rb_yield_values(2, rb_ary_entry(members, i), RSTRUCT_PTR(s)[i]); + VALUE key = rb_ary_entry(members, i); + VALUE value = RSTRUCT_PTR(s)[i]; + rb_yield(rb_assoc_new(key, vlaue)); } return s; } diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb index b3191902a3..03cb55999c 100644 --- a/test/ruby/test_struct.rb +++ b/test/ruby/test_struct.rb @@ -1,3 +1,4 @@ +# -*- coding: us-ascii -*- require 'test/unit' require 'timeout' require_relative 'envutil' @@ -117,6 +118,10 @@ class TestStruct < Test::Unit::TestCase klass = Struct.new(:a, :b) o = klass.new(1, 2) assert_equal([[:a, 1], [:b, 2]], o.each_pair.to_a) + bug7382 = '[ruby-dev:46533]' + a = [] + o.each_pair {|x| a << x} + assert_equal([[:a, 1], [:b, 2]], a, bug7382) end def test_inspect |