Revision: 3815
Author: [email protected]
Date: Mon Feb  8 06:00:50 2010
Log: Optimize concat for one argument (two if you count 'this').
Review URL: http://codereview.chromium.org/584006
http://code.google.com/p/v8/source/detail?r=3815

Modified:
 /branches/bleeding_edge/src/string.js

=======================================
--- /branches/bleeding_edge/src/string.js       Thu Jan  7 04:18:56 2010
+++ /branches/bleeding_edge/src/string.js       Mon Feb  8 06:00:50 2010
@@ -87,14 +87,18 @@

 // ECMA-262, section 15.5.4.6
 function StringConcat() {
-  var len = %_ArgumentsLength() + 1;
-  var parts = new $Array(len);
-  parts[0] = IS_STRING(this) ? this : ToString(this);
-  for (var i = 1; i < len; i++) {
-    var part = %_Arguments(i - 1);
-    parts[i] = IS_STRING(part) ? part : ToString(part);
-  }
-  return %StringBuilderConcat(parts, len, "");
+  var len = %_ArgumentsLength();
+  var this_as_string = IS_STRING(this) ? this : ToString(this);
+  if (len === 1) {
+    return this_as_string + %_Arguments(0);
+  }
+  var parts = new $Array(len + 1);
+  parts[0] = this_as_string;
+  for (var i = 0; i < len; i++) {
+    var part = %_Arguments(i);
+    parts[i + 1] = IS_STRING(part) ? part : ToString(part);
+  }
+  return %StringBuilderConcat(parts, len + 1, "");
 }

 // Match ES3 and Safari

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to