[macruby-changes] [436] MacRuby/branches/lrz_unstable
source_changes at macosforge.org
source_changes at macosforge.org
Wed Aug 13 19:14:01 PDT 2008
Revision: 436
http://trac.macosforge.org/projects/ruby/changeset/436
Author: lsansonetti at apple.com
Date: 2008-08-13 19:14:01 -0700 (Wed, 13 Aug 2008)
Log Message:
-----------
wip
Modified Paths:
--------------
MacRuby/branches/lrz_unstable/array.c
MacRuby/branches/lrz_unstable/objc.m
MacRuby/branches/lrz_unstable/object.c
Modified: MacRuby/branches/lrz_unstable/array.c
===================================================================
--- MacRuby/branches/lrz_unstable/array.c 2008-08-13 23:13:19 UTC (rev 435)
+++ MacRuby/branches/lrz_unstable/array.c 2008-08-14 02:14:01 UTC (rev 436)
@@ -2099,19 +2099,23 @@
rb_ary_delete(VALUE ary, VALUE item)
{
#if WITH_OBJC
- long n, i;
+ long k, n, i;
CFRange r;
+ const void *ocitem;
rb_ary_modify(ary);
- r = CFRangeMake(0, RARRAY_LEN(ary));
- n = 0;
- while ((i = CFArrayGetFirstIndexOfValue((CFArrayRef)ary, r,
- (const void *)RB2OC(item))) != -1) {
+ ocitem = (const void *)RB2OC(item);
+ n = RARRAY_LEN(ary);
+ r = CFRangeMake(0, n);
+ k = 0;
+ while ((i = CFArrayGetFirstIndexOfValue((CFArrayRef)ary, r, ocitem)) != -1) {
CFArrayRemoveValueAtIndex((CFMutableArrayRef)ary, i);
- n++;
+ r.location = i;
+ r.length = --n - i;
+ k++;
}
- if (n == 0) {
+ if (k == 0) {
if (rb_block_given_p()) {
return rb_yield(item);
}
Modified: MacRuby/branches/lrz_unstable/objc.m
===================================================================
--- MacRuby/branches/lrz_unstable/objc.m 2008-08-13 23:13:19 UTC (rev 435)
+++ MacRuby/branches/lrz_unstable/objc.m 2008-08-14 02:14:01 UTC (rev 436)
@@ -1007,10 +1007,15 @@
char buf[128];
id ocrcv;
- /* XXX because Hash.new can accept a block */
+ /* XXX very special exceptions! */
if (recv == rb_cNSMutableHash && sel == @selector(new)) {
+ /* because Hash.new can accept a block */
return rb_class_new_instance(0, NULL, recv);
}
+ else if (RCLASS_META(klass) && sel == @selector(class)) {
+ /* because +[NSObject class] returns self */
+ return rb_cClass;
+ }
ocrcv = RB2OC(recv);
Modified: MacRuby/branches/lrz_unstable/object.c
===================================================================
--- MacRuby/branches/lrz_unstable/object.c 2008-08-13 23:13:19 UTC (rev 435)
+++ MacRuby/branches/lrz_unstable/object.c 2008-08-14 02:14:01 UTC (rev 436)
@@ -133,6 +133,8 @@
#if WITH_OBJC
if (cl == 0)
return 0;
+ if (RCLASS_META(cl))
+ return rb_cClass;
while (RCLASS_SINGLETON(cl)) {
cl = RCLASS_SUPER(cl);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080813/9c3cbbf3/attachment.html
More information about the macruby-changes
mailing list