[macruby-changes] [2249] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 6 21:22:40 PDT 2009


Revision: 2249
          http://trac.macosforge.org/projects/ruby/changeset/2249
Author:   lsansonetti at apple.com
Date:     2009-08-06 21:22:38 -0700 (Thu, 06 Aug 2009)
Log Message:
-----------
more small Array optimizations

Modified Paths:
--------------
    MacRuby/trunk/array.c
    MacRuby/trunk/id.c
    MacRuby/trunk/id.h

Modified: MacRuby/trunk/array.c
===================================================================
--- MacRuby/trunk/array.c	2009-08-06 22:38:33 UTC (rev 2248)
+++ MacRuby/trunk/array.c	2009-08-07 04:22:38 UTC (rev 2249)
@@ -101,8 +101,9 @@
     CFMutableArrayRef ary;
 
     ary = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
-    if (klass != 0 && klass != rb_cNSArray && klass != rb_cNSMutableArray)
+    if (klass != 0 && klass != rb_cNSArray && klass != rb_cNSMutableArray) {
 	*(Class *)ary = (Class)klass;
+    }
 
     CFMakeCollectable(ary);
 
@@ -112,18 +113,20 @@
 VALUE
 rb_ary_new_fast(int argc, ...) 
 {
-    va_list ar;
-    VALUE ary;
-    int i;
+    VALUE ary = ary_alloc(0);
 
-    ary = ary_alloc(0);
+    if (argc > 0) {
+	rb_ary_set_capacity(ary, argc);
+	va_list ar = va_start(ar, argc);
 
-    va_start(ar, argc);
-    for (i = 0; i < argc; i++) {
-	VALUE item = va_arg(ar, VALUE);
-	CFArrayAppendValue((CFMutableArrayRef)ary, (const void *)RB2OC(item));
+	int i;
+	for (i = 0; i < argc; i++) {
+	    VALUE item = va_arg(ar, VALUE);
+	    CFArrayAppendValue((CFMutableArrayRef)ary,
+		    (const void *)RB2OC(item));
+	}
+	va_end(ar);
     }
-    va_end(ar);
 
     return ary;
 }
@@ -1274,7 +1277,8 @@
 	OBJ_TAINT(dup);
     }
 
-    CFMakeCollectable((CFTypeRef)dup);
+    CFMakeCollectable((CFMutableArrayRef)dup);
+
     return dup;
 }
 
@@ -2483,7 +2487,7 @@
 	return Qtrue;
     }
     if (TYPE(ary2) != T_ARRAY) {
-	if (!rb_respond_to(ary2, rb_intern("to_ary"))) {
+	if (!rb_vm_respond_to(ary2, selToAry, true)) {
 	    return Qfalse;
 	}
 	return rb_equal(ary2, ary1);

Modified: MacRuby/trunk/id.c
===================================================================
--- MacRuby/trunk/id.c	2009-08-06 22:38:33 UTC (rev 2248)
+++ MacRuby/trunk/id.c	2009-08-07 04:22:38 UTC (rev 2249)
@@ -76,6 +76,7 @@
     assert(sel_ignored == sel_registerName("release"));
     sel_zone = sel_registerName("zone");
     selToS = sel_registerName("to_s");
+    selToAry = sel_registerName("to_ary");
     selSend = sel_registerName("send:");
     sel__send__ = sel_registerName("__send__:");
     selEqTilde = sel_registerName("=~:");

Modified: MacRuby/trunk/id.h
===================================================================
--- MacRuby/trunk/id.h	2009-08-06 22:38:33 UTC (rev 2248)
+++ MacRuby/trunk/id.h	2009-08-07 04:22:38 UTC (rev 2249)
@@ -83,6 +83,7 @@
 extern SEL selCopy;
 extern SEL selMutableCopy;
 extern SEL selToS;
+extern SEL selToAry;
 extern SEL sel_ignored;
 extern SEL sel_zone;
 extern SEL selSend;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090806/e209e3f2/attachment.html>


More information about the macruby-changes mailing list