mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
object.c: use a sized enumerator with #yield_self
* object.c (rb_obj_size): The #yield_self Enumerator instance always has a #count of `1`. This provides a lazy #size of `1` to match the count instead of `nil`. [Fix GH-1615] Author: Shannon Skipper <shannonskipper@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7334e2f836
commit
dc6d7cc58e
2 changed files with 10 additions and 2 deletions
8
object.c
8
object.c
|
@ -497,6 +497,12 @@ rb_obj_itself(VALUE obj)
|
|||
return obj;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
rb_obj_size(VALUE self, VALUE args, VALUE obj)
|
||||
{
|
||||
return LONG2FIX(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* obj.yield_self {|_obj|...} -> an_object
|
||||
|
@ -510,7 +516,7 @@ rb_obj_itself(VALUE obj)
|
|||
static VALUE
|
||||
rb_obj_yield_self(VALUE obj)
|
||||
{
|
||||
RETURN_ENUMERATOR(obj, 0, 0);
|
||||
RETURN_SIZED_ENUMERATOR(obj, 0, 0, rb_obj_size);
|
||||
return rb_yield_values2(1, &obj);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,9 @@ class TestObject < Test::Unit::TestCase
|
|||
object = Object.new
|
||||
assert_same(self, object.yield_self {self}, feature)
|
||||
assert_same(object, object.yield_self {|x| break x}, feature)
|
||||
assert_instance_of(Enumerator, object.yield_self)
|
||||
enum = object.yield_self
|
||||
assert_instance_of(Enumerator, enum)
|
||||
assert_equal(1, enum.size)
|
||||
end
|
||||
|
||||
def test_dup
|
||||
|
|
Loading…
Add table
Reference in a new issue