Bug #15613 ยป enum-chain-lambda-15613.patch
enumerator.c | ||
---|---|---|
return enum_chain_size(obj);
|
||
}
|
||
static VALUE
|
||
enum_chain_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(_, block))
|
||
{
|
||
return rb_funcallv(block, id_call, argc, argv);
|
||
}
|
||
static VALUE
|
||
enum_chain_enum_no_size(VALUE obj, VALUE args, VALUE eobj)
|
||
{
|
||
... | ... | |
enums = objptr->enums;
|
||
block = rb_block_proc();
|
||
for (i = 0; i < RARRAY_LEN(enums); i++) {
|
||
objptr->pos = i;
|
||
rb_block_call(RARRAY_AREF(enums, i), id_each, argc, argv, enum_chain_yield_block, block);
|
||
rb_funcall_with_block(RARRAY_AREF(enums, i), id_each, argc, argv, block);
|
||
}
|
||
return obj;
|
test/ruby/test_enumerator.rb | ||
---|---|---|
e5.inspect
|
||
)
|
||
end
|
||
def test_chain_each_lambda
|
||
c = Class.new do
|
||
include Enumerable
|
||
attr_reader :is_lambda
|
||
def each(&block)
|
||
return to_enum unless block
|
||
@is_lambda = block.lambda?
|
||
end
|
||
end
|
||
e = c.new
|
||
e.chain.each{}
|
||
assert_equal(false, e.is_lambda)
|
||
e.chain.each(&->{})
|
||
assert_equal(true, e.is_lambda)
|
||
end
|
||
end
|