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; |
} |