[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