Project

General

Profile

Feature #10498 » 0001-vm_eval.c-loop-now-yields-a-incremented-counter.patch

Updated patch (no more limited to FIXNUM_MAX iterations) - cesario (Franck Verrot), 11/14/2014 10:27 PM

View differences:

ChangeLog
Wed Nov 12 05:57:20 2014 Franck Verrot <franck@verrot.fr>
* vm_eval.c (loop_i): make loop yield a counter to
keep track of the iteration count.
Wed Nov 12 00:26:37 2014 Tanaka Akira <akr@fsij.org>
* test/ruby/test_object.rb: Specify an exception class for rescue clause.
test/ruby/test_enumerator.rb
}
end
def test_loop_yield
max = 0
loop do |i|
max = i
raise StopIteration if i >= 1
end
assert_equal 1, max
end
def test_nested_iteration
def (o = Object.new).each
yield :ok1
vm_eval.c
static VALUE
loop_i(void)
{
for (;;) {
rb_yield_0(0, 0);
}
return Qnil;
VALUE counter = INT2FIX(0);
VALUE increment = INT2FIX(1);
for (;;) {
rb_yield_values(1, counter);
counter = rb_funcall(counter, '+', 1, increment);
}
return Qnil;
}
static VALUE
(2-2/2)