]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: avoid allocation for "" + x + ""
authorRuss Cox <rsc@golang.org>
Wed, 27 Jun 2012 21:06:49 +0000 (17:06 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 27 Jun 2012 21:06:49 +0000 (17:06 -0400)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6359043

src/pkg/runtime/string.goc

index 090c4cd20e1b8790be4e007265b4f8c3057e2ef5..8a5d59b81dcb641a712749db7f6b88f10c5406c9 100644 (file)
@@ -141,15 +141,22 @@ runtime·catstring(String s1, String s2)
 static String
 concatstring(int32 n, String *s)
 {
-       int32 i, l;
+       int32 i, l, count;
        String out;
 
        l = 0;
+       count = 0;
        for(i=0; i<n; i++) {
                if(l + s[i].len < l)
                        runtime·throw("string concatenation too long");
                l += s[i].len;
+               if(s[i].len > 0) {
+                       count++;
+                       out = s[i];
+               }
        }
+       if(count <= 1) // zero or one non-empty string in concatenation
+               return out;
        
        out = gostringsize(l);
        l = 0;