[macruby-changes] [1767] MacRuby/branches/experimental/array.c
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jun 5 19:02:35 PDT 2009
Revision: 1767
http://trac.macosforge.org/projects/ruby/changeset/1767
Author: lsansonetti at apple.com
Date: 2009-06-05 19:02:35 -0700 (Fri, 05 Jun 2009)
Log Message:
-----------
Array#initialize: clear the receiver before doing anything
Modified Paths:
--------------
MacRuby/branches/experimental/array.c
Modified: MacRuby/branches/experimental/array.c
===================================================================
--- MacRuby/branches/experimental/array.c 2009-06-06 01:50:02 UTC (rev 1766)
+++ MacRuby/branches/experimental/array.c 2009-06-06 02:02:35 UTC (rev 1767)
@@ -280,6 +280,7 @@
if (rb_block_given_p()) {
rb_warning("given block not used");
}
+ rb_ary_clear(ary);
return ary;
}
rb_scan_args(argc, argv, "02", &size, &val);
@@ -298,14 +299,14 @@
if (len > LONG_MAX / sizeof(VALUE)) {
rb_raise(rb_eArgError, "array size too big");
}
- rb_ary_modify(ary);
if (rb_block_given_p()) {
long i;
if (argc == 2) {
rb_warn("block supersedes default value argument");
}
- for (i=0; i<len; i++) {
+ rb_ary_clear(ary);
+ for (i = 0; i < len; i++) {
VALUE v = rb_yield(LONG2NUM(i));
RETURN_IF_BROKEN();
rb_ary_store(ary, i, v);
@@ -316,10 +317,13 @@
const void **values = alloca(sizeof(void *) * len);
void *ocval = RB2OC(val);
- for (i=0; i<len; i++)
+ rb_ary_modify(ary);
+ for (i = 0; i < len; i++) {
values[i] = ocval;
+ }
- CFArrayReplaceValues((CFMutableArrayRef)ary, CFRangeMake(0, 0), values, len);
+ CFArrayReplaceValues((CFMutableArrayRef)ary, CFRangeMake(0, 0),
+ values, len);
}
return ary;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090605/94cb5083/attachment.html>
More information about the macruby-changes
mailing list