Revision: 4494 http://trac.macosforge.org/projects/ruby/changeset/4494 Author: lsansonetti@apple.com Date: 2010-09-03 18:55:20 -0700 (Fri, 03 Sep 2010) Log Message: ----------- Range#each: make sure break works in all cases Modified Paths: -------------- MacRuby/trunk/range.c Modified: MacRuby/trunk/range.c =================================================================== --- MacRuby/trunk/range.c 2010-09-03 02:37:28 UTC (rev 4493) +++ MacRuby/trunk/range.c 2010-09-04 01:55:20 UTC (rev 4494) @@ -246,7 +246,7 @@ return LONG2FIX(hash); } -static void +static VALUE range_each_func(VALUE range, VALUE (*func) (VALUE, void *), void *arg) { int c; @@ -257,17 +257,20 @@ if (EXCL(range)) { while (r_lt(v, e)) { (*func) (v, arg); + RETURN_IF_BROKEN(); v = rb_vm_call(v, selSucc, 0, NULL); } } else { while (RTEST(c = r_le(v, e))) { (*func) (v, arg); + RETURN_IF_BROKEN(); if (c == INT2FIX(0)) break; v = rb_vm_call(v, selSucc, 0, NULL); } } + return range; } static VALUE @@ -420,7 +423,7 @@ } args[0] = INT2FIX(1); args[1] = step; - range_each_func(range, step_i, args); + return range_each_func(range, step_i, args); } } return range; @@ -498,7 +501,7 @@ rb_objc_block_call(beg, selUpto, 2, args, rb_yield, 0); } else { - range_each_func(range, each_i, NULL); + return range_each_func(range, each_i, NULL); } return range; }
participants (1)
-
source_changes@macosforge.org