| Index: src/string.js
|
| diff --git a/src/string.js b/src/string.js
|
| index 5db937bc77ca446b935cca394ef8366528006076..7e186871ba87547466eec7cc7eb2b714d3074e48 100644
|
| --- a/src/string.js
|
| +++ b/src/string.js
|
| @@ -644,6 +644,8 @@ function StringSplit(separator, limit) {
|
| }
|
|
|
|
|
| +var ArrayPushBuiltin = $Array.prototype.push;
|
| +
|
| function StringSplitOnRegExp(subject, separator, limit, length) {
|
| %_Log('regexp', 'regexp-split,%0S,%1r', [subject, separator]);
|
|
|
| @@ -657,19 +659,21 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
|
| var currentIndex = 0;
|
| var startIndex = 0;
|
| var startMatch = 0;
|
| - var result = new InternalArray();
|
| + var result = [];
|
|
|
| outer_loop:
|
| while (true) {
|
|
|
| if (startIndex === length) {
|
| - result.push(%_SubString(subject, currentIndex, length));
|
| + %_CallFunction(result, %_SubString(subject, currentIndex, length),
|
| + ArrayPushBuiltin);
|
| break;
|
| }
|
|
|
| var matchInfo = DoRegExpExec(separator, subject, startIndex);
|
| if (matchInfo == null || length === (startMatch = matchInfo[CAPTURE0])) {
|
| - result.push(%_SubString(subject, currentIndex, length));
|
| + %_CallFunction(result, %_SubString(subject, currentIndex, length),
|
| + ArrayPushBuiltin);
|
| break;
|
| }
|
| var endIndex = matchInfo[CAPTURE1];
|
| @@ -680,7 +684,8 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
|
| continue;
|
| }
|
|
|
| - result.push(%_SubString(subject, currentIndex, startMatch));
|
| + %_CallFunction(result, %_SubString(subject, currentIndex, startMatch),
|
| + ArrayPushBuiltin);
|
|
|
| if (result.length === limit) break;
|
|
|
| @@ -689,16 +694,17 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
|
| var start = matchInfo[i++];
|
| var end = matchInfo[i++];
|
| if (end != -1) {
|
| - result.push(%_SubString(subject, start, end));
|
| + %_CallFunction(result, %_SubString(subject, start, end),
|
| + ArrayPushBuiltin);
|
| } else {
|
| - result.push(void 0);
|
| + %_CallFunction(result, void 0, ArrayPushBuiltin);
|
| }
|
| if (result.length === limit) break outer_loop;
|
| }
|
|
|
| startIndex = currentIndex = endIndex;
|
| }
|
| - return %MoveArrayContents(result, []);
|
| + return result;
|
| }
|
|
|
|
|
|
|