| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 (function(global, utils) { | 5 (function(global, utils) { |
| 6 | 6 |
| 7 %CheckIsBootstrapping(); | 7 %CheckIsBootstrapping(); |
| 8 | 8 |
| 9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- |
| 10 // Imports | 10 // Imports |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 // .... special case that replaces with one single character | 243 // .... special case that replaces with one single character |
| 244 // ...... function replace | 244 // ...... function replace |
| 245 // ...... string replace (with $-expansion) | 245 // ...... string replace (with $-expansion) |
| 246 | 246 |
| 247 if (IS_REGEXP(search)) { | 247 if (IS_REGEXP(search)) { |
| 248 // Emulate RegExp.prototype.exec's side effect in step 5, even if | 248 // Emulate RegExp.prototype.exec's side effect in step 5, even if |
| 249 // value is discarded. | 249 // value is discarded. |
| 250 var lastIndex = search.lastIndex; | 250 var lastIndex = search.lastIndex; |
| 251 TO_INTEGER_FOR_SIDE_EFFECT(lastIndex); | 251 TO_INTEGER_FOR_SIDE_EFFECT(lastIndex); |
| 252 | 252 |
| 253 if (!IS_SPEC_FUNCTION(replace)) { | 253 if (!IS_CALLABLE(replace)) { |
| 254 replace = TO_STRING_INLINE(replace); | 254 replace = TO_STRING_INLINE(replace); |
| 255 | 255 |
| 256 if (!search.global) { | 256 if (!search.global) { |
| 257 // Non-global regexp search, string replace. | 257 // Non-global regexp search, string replace. |
| 258 var match = RegExpExec(search, subject, 0); | 258 var match = RegExpExec(search, subject, 0); |
| 259 if (match == null) { | 259 if (match == null) { |
| 260 search.lastIndex = 0 | 260 search.lastIndex = 0 |
| 261 return subject; | 261 return subject; |
| 262 } | 262 } |
| 263 if (replace.length == 0) { | 263 if (replace.length == 0) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 // replaced by a simple string and only pays off for long strings. | 310 // replaced by a simple string and only pays off for long strings. |
| 311 return %StringReplaceOneCharWithString(subject, search, replace); | 311 return %StringReplaceOneCharWithString(subject, search, replace); |
| 312 } | 312 } |
| 313 var start = %StringIndexOf(subject, search, 0); | 313 var start = %StringIndexOf(subject, search, 0); |
| 314 if (start < 0) return subject; | 314 if (start < 0) return subject; |
| 315 var end = start + search.length; | 315 var end = start + search.length; |
| 316 | 316 |
| 317 var result = %_SubString(subject, 0, start); | 317 var result = %_SubString(subject, 0, start); |
| 318 | 318 |
| 319 // Compute the string to replace with. | 319 // Compute the string to replace with. |
| 320 if (IS_SPEC_FUNCTION(replace)) { | 320 if (IS_CALLABLE(replace)) { |
| 321 var receiver = UNDEFINED; | 321 var receiver = UNDEFINED; |
| 322 result += %_CallFunction(receiver, search, start, subject, replace); | 322 result += %_CallFunction(receiver, search, start, subject, replace); |
| 323 } else { | 323 } else { |
| 324 reusableMatchInfo[CAPTURE0] = start; | 324 reusableMatchInfo[CAPTURE0] = start; |
| 325 reusableMatchInfo[CAPTURE1] = end; | 325 reusableMatchInfo[CAPTURE1] = end; |
| 326 result = ExpandReplacement(TO_STRING_INLINE(replace), | 326 result = ExpandReplacement(TO_STRING_INLINE(replace), |
| 327 subject, | 327 subject, |
| 328 reusableMatchInfo, | 328 reusableMatchInfo, |
| 329 result); | 329 result); |
| 330 } | 330 } |
| (...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 to.StringLastIndexOf = StringLastIndexOfJS; | 1206 to.StringLastIndexOf = StringLastIndexOfJS; |
| 1207 to.StringMatch = StringMatchJS; | 1207 to.StringMatch = StringMatchJS; |
| 1208 to.StringReplace = StringReplace; | 1208 to.StringReplace = StringReplace; |
| 1209 to.StringSlice = StringSlice; | 1209 to.StringSlice = StringSlice; |
| 1210 to.StringSplit = StringSplitJS; | 1210 to.StringSplit = StringSplitJS; |
| 1211 to.StringSubstr = StringSubstr; | 1211 to.StringSubstr = StringSubstr; |
| 1212 to.StringSubstring = StringSubstring; | 1212 to.StringSubstring = StringSubstring; |
| 1213 }); | 1213 }); |
| 1214 | 1214 |
| 1215 }) | 1215 }) |
| OLD | NEW |