[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