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
|
||