summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--array.c2
-rw-r--r--test/ruby/test_array.rb7
-rw-r--r--test/ruby/test_enum.rb5
4 files changed, 15 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index bb45282088..7294a2227e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jan 21 14:41:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (take_items): to_ary() raises ArgumentError if cannot to
+ convert to Array. [ruby-dev:37797]
+
Wed Jan 21 14:32:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (debug_lines): calls rb_intern() once.
diff --git a/array.c b/array.c
index d88a9fcc3f..3994ce6e0d 100644
--- a/array.c
+++ b/array.c
@@ -2209,7 +2209,7 @@ take_i(VALUE val, VALUE *args, int argc, VALUE *argv)
static VALUE
take_items(VALUE obj, long n)
{
- VALUE result = to_ary(obj);
+ VALUE result = rb_check_array_type(obj);
VALUE args[2];
if (!NIL_P(result)) return rb_ary_subseq(result, 0, n);
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb
index 04ed13892b..1cd018be85 100644
--- a/test/ruby/test_array.rb
+++ b/test/ruby/test_array.rb
@@ -1505,8 +1505,11 @@ class TestArray < Test::Unit::TestCase
ary = Object.new
def ary.to_a; [1, 2]; end
- def ary.to_ary; [3, 4]; end
- assert_equal([[5, 3], [6, 4]], [5, 6].zip(ary))
+ assert_raise(NoMethodError){ %w(a b).zip(ary) }
+ def ary.each; [3, 4].each{|e|yield e}; end
+ assert_equal([['a', 3], ['b', 4]], %w(a b).zip(ary))
+ def ary.to_ary; [5, 6]; end
+ assert_equal([['a', 5], ['b', 6]], %w(a b).zip(ary))
end
def test_transpose
diff --git a/test/ruby/test_enum.rb b/test/ruby/test_enum.rb
index 973b7cb420..a8a88640bd 100644
--- a/test/ruby/test_enum.rb
+++ b/test/ruby/test_enum.rb
@@ -214,8 +214,11 @@ class TestEnumerable < Test::Unit::TestCase
ary = Object.new
def ary.to_a; [1, 2]; end
- def ary.to_ary; [3, 4]; end
+ assert_raise(NoMethodError){ %w(a b).zip(ary) }
+ def ary.each; [3, 4].each{|e|yield e}; end
assert_equal([[1, 3], [2, 4], [3, nil], [1, nil], [2, nil]], @obj.zip(ary))
+ def ary.to_ary; [5, 6]; end
+ assert_equal([[1, 5], [2, 6], [3, nil], [1, nil], [2, nil]], @obj.zip(ary))
end
def test_take