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