[macruby-changes] [4494] MacRuby/trunk/range.c
source_changes at macosforge.org
source_changes at macosforge.org
Fri Sep 3 18:55:23 PDT 2010
Revision: 4494
http://trac.macosforge.org/projects/ruby/changeset/4494
Author: lsansonetti at 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;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100903/36f62ee7/attachment.html>
More information about the macruby-changes
mailing list