[macruby-changes] [2331] MacRuby/trunk/string.c

source_changes at macosforge.org source_changes at macosforge.org
Sat Aug 15 19:03:46 PDT 2009


Revision: 2331
          http://trac.macosforge.org/projects/ruby/changeset/2331
Author:   lsansonetti at apple.com
Date:     2009-08-15 19:03:45 -0700 (Sat, 15 Aug 2009)
Log Message:
-----------
faster rb_str_new_fast() in case fragments are fixnums

Modified Paths:
--------------
    MacRuby/trunk/string.c

Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c	2009-08-16 02:03:18 UTC (rev 2330)
+++ MacRuby/trunk/string.c	2009-08-16 02:03:45 UTC (rev 2331)
@@ -91,21 +91,27 @@
 VALUE
 rb_str_new_fast(int argc, ...)
 {
-    VALUE str;
-   
-    str = str_alloc(0);
+    VALUE str = str_alloc(0);
 
     if (argc > 0) {
 	va_list ar;
-	int i;
+	va_start(ar, argc);
+	for (int i = 0; i < argc; ++i) {
+	    VALUE fragment = va_arg(ar, VALUE);
+	    switch (TYPE(fragment)) {
+		case T_FIXNUM:
+		    CFStringAppendFormat((CFMutableStringRef)str, NULL, CFSTR("%ld"),
+			    FIX2LONG(fragment));
+		    break;
 
-	va_start(ar, argc);
-	for (i = 0; i < argc; ++i) {
-	    VALUE fragment;
-	   
-	    fragment = va_arg(ar, VALUE);
-	    fragment = rb_obj_as_string(fragment);
-	    CFStringAppend((CFMutableStringRef)str, (CFStringRef)fragment);
+		default:
+		    fragment = rb_obj_as_string(fragment);
+		    // fall through
+
+		case T_STRING:
+		    CFStringAppend((CFMutableStringRef)str, (CFStringRef)fragment);
+		    break;
+	    }
 	}
 	va_end(ar);
     }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090815/2eccad50/attachment.html>


More information about the macruby-changes mailing list