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