| Index: src/string.js
 | 
| diff --git a/src/string.js b/src/string.js
 | 
| index d97f632b88dc32975830ecc2f50186199c1768ce..a75ccf0fa54f0747223e7be60845cfbd6af95d95 100644
 | 
| --- a/src/string.js
 | 
| +++ b/src/string.js
 | 
| @@ -144,16 +144,6 @@ function StringLastIndexOf(searchString /* position */) {  // length == 1
 | 
|  }
 | 
|  
 | 
|  
 | 
| -function CloneDenseArray(array) {
 | 
| -  if (array === null) return null;
 | 
| -  var clone = new $Array(array.length);
 | 
| -  for (var i = 0; i < array.length; i++) {
 | 
| -    clone[i] = array[i];
 | 
| -  }
 | 
| -  return clone;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  // ECMA-262 section 15.5.4.9
 | 
|  //
 | 
|  // This function is implementation specific.  For now, we do not
 | 
| @@ -173,32 +163,14 @@ function StringMatch(regexp) {
 | 
|    if (IS_REGEXP(regexp)) {
 | 
|      if (!regexp.global) return regexp.exec(subject);
 | 
|  
 | 
| -    var cache = regExpCache;
 | 
|      var saveAnswer = false;
 | 
|  
 | 
| -    if (%_ObjectEquals(cache.type, 'match') &&
 | 
| -        %_IsRegExpEquivalent(cache.regExp, regexp) &&
 | 
| -        %_ObjectEquals(cache.subject, subject)) {
 | 
| -      if (cache.answerSaved) {
 | 
| -        return CloneDenseArray(cache.answer);
 | 
| -      } else {
 | 
| -        saveAnswer = true;
 | 
| -      }
 | 
| -    }
 | 
|      %_Log('regexp', 'regexp-match,%0S,%1r', [subject, regexp]);
 | 
|      // lastMatchInfo is defined in regexp.js.
 | 
| -    var result = %StringMatch(subject, regexp, lastMatchInfo);
 | 
| -    cache.type = 'match';
 | 
| -    cache.regExp = regexp;
 | 
| -    cache.subject = subject;
 | 
| -    if (saveAnswer) cache.answer = CloneDenseArray(result);
 | 
| -    cache.answerSaved = saveAnswer;
 | 
| -    return result;
 | 
| +    return %StringMatch(subject, regexp, lastMatchInfo);
 | 
|    }
 | 
|    // Non-regexp argument.
 | 
|    regexp = new $RegExp(regexp);
 | 
| -  // Don't check regexp exec cache, since the regexp is new.
 | 
| -  // TODO(lrn): Change this if we start caching regexps here.
 | 
|    return RegExpExecNoTests(regexp, subject, 0);
 | 
|  }
 | 
|  
 | 
| @@ -231,7 +203,6 @@ function StringReplace(search, replace) {
 | 
|    if (IS_REGEXP(search)) {
 | 
|      %_Log('regexp', 'regexp-replace,%0r,%1S', [search, subject]);
 | 
|      if (IS_FUNCTION(replace)) {
 | 
| -      regExpCache.type = 'none';
 | 
|        if (search.global) {
 | 
|          return StringReplaceGlobalRegExpWithFunction(subject, search, replace);
 | 
|        } else {
 | 
| @@ -273,24 +244,10 @@ function StringReplace(search, replace) {
 | 
|  
 | 
|  // Helper function for regular expressions in String.prototype.replace.
 | 
|  function StringReplaceRegExp(subject, regexp, replace) {
 | 
| -  var cache = regExpCache;
 | 
| -  if (%_ObjectEquals(cache.type, 'replace') &&
 | 
| -      %_IsRegExpEquivalent(cache.regExp, regexp) &&
 | 
| -      %_ObjectEquals(cache.replaceString, replace) &&
 | 
| -      %_ObjectEquals(cache.subject, subject)) {
 | 
| -    return cache.answer;
 | 
| -  }
 | 
| -  replace = TO_STRING_INLINE(replace);
 | 
| -  var answer = %StringReplaceRegExpWithString(subject,
 | 
| -                                              regexp,
 | 
| -                                              replace,
 | 
| -                                              lastMatchInfo);
 | 
| -  cache.subject = subject;
 | 
| -  cache.regExp = regexp;
 | 
| -  cache.replaceString = replace;
 | 
| -  cache.answer = answer;
 | 
| -  cache.type = 'replace';
 | 
| -  return answer;
 | 
| +  return %StringReplaceRegExpWithString(subject,
 | 
| +                                        regexp,
 | 
| +                                        TO_STRING_INLINE(replace),
 | 
| +                                        lastMatchInfo);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -605,34 +562,14 @@ function StringSplit(separator, limit) {
 | 
|      return result;
 | 
|    }
 | 
|  
 | 
| -  var cache = regExpCache;
 | 
|    var saveAnswer = false;
 | 
|  
 | 
| -  if (%_ObjectEquals(cache.type, 'split') &&
 | 
| -      %_IsRegExpEquivalent(cache.regExp, separator) &&
 | 
| -      %_ObjectEquals(cache.subject, subject) &&
 | 
| -      %_ObjectEquals(cache.splitLimit, limit)) {
 | 
| -    if (cache.answerSaved) {
 | 
| -      return CloneDenseArray(cache.answer);
 | 
| -    } else {
 | 
| -      saveAnswer = true;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  cache.type = 'split';
 | 
| -  cache.regExp = separator;
 | 
| -  cache.subject = subject;
 | 
| -  cache.splitLimit = limit;
 | 
| -
 | 
|    %_Log('regexp', 'regexp-split,%0S,%1r', [subject, separator]);
 | 
|  
 | 
|    if (length === 0) {
 | 
| -    cache.answerSaved = true;
 | 
|      if (splitMatch(separator, subject, 0, 0) != null) {
 | 
| -      cache.answer = [];
 | 
|        return [];
 | 
|      }
 | 
| -    cache.answer = [subject];
 | 
|      return [subject];
 | 
|    }
 | 
|  
 | 
| @@ -680,8 +617,6 @@ function StringSplit(separator, limit) {
 | 
|  
 | 
|      startIndex = currentIndex = endIndex;
 | 
|    }
 | 
| -  if (saveAnswer) cache.answer = CloneDenseArray(result);
 | 
| -  cache.answerSaved = saveAnswer;
 | 
|    return result;
 | 
|  }
 | 
|  
 | 
| 
 |