[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