Chromium Code Reviews| Index: src/harmony-string.js |
| diff --git a/src/harmony-string.js b/src/harmony-string.js |
| index ae13745cdbf55989ad78b288843396ee5fab36e9..e9b93d86a4f900503d3cae6fc8a8ed9575352ecd 100644 |
| --- a/src/harmony-string.js |
| +++ b/src/harmony-string.js |
| @@ -17,16 +17,19 @@ function StringRepeat(count) { |
| var s = TO_STRING_INLINE(this); |
| var n = ToInteger(count); |
| - if (n < 0 || !NUMBER_IS_FINITE(n)) { |
| + // The maximum string length is stored in a smi, so a longer repeat |
| + // must result in a range error. |
| + if (n < 0 || n > %_MaxSmi()) { |
| throw MakeRangeError("invalid_count_value", []); |
| } |
| - var elements = new InternalArray(n); |
| - for (var i = 0; i < n; i++) { |
| - elements[i] = s; |
| + var r = ""; |
| + while (n > 0) { |
| + if (n & 1) r += s; |
| + n >>= 1; |
| + s += s; |
|
aandrey
2014/10/15 17:54:43
There will be extra unnecessary concatenation at t
|
| } |
| - |
| - return %StringBuilderConcat(elements, n, ""); |
| + return r; |
| } |