Reviewers: Søren Gjesse, Description: Optimize concat for one argument (two if you count 'this').
Please review this at http://codereview.chromium.org/584006 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/string.js Index: src/string.js =================================================================== --- src/string.js (revision 3813) +++ src/string.js (working copy) @@ -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); + var len = %_ArgumentsLength(); + var this_as_string = IS_STRING(this) ? this : ToString(this); + if (len === 1) { + return this_as_string + %_Arguments(0); } - return %StringBuilderConcat(parts, len, ""); + 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
