| 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 // .... special case that replaces with one single character | 241 // .... special case that replaces with one single character |
| 242 // ...... function replace | 242 // ...... function replace |
| 243 // ...... string replace (with $-expansion) | 243 // ...... string replace (with $-expansion) |
| 244 | 244 |
| 245 if (IS_REGEXP(search)) { | 245 if (IS_REGEXP(search)) { |
| 246 // Emulate RegExp.prototype.exec's side effect in step 5, even if | 246 // Emulate RegExp.prototype.exec's side effect in step 5, even if |
| 247 // value is discarded. | 247 // value is discarded. |
| 248 var lastIndex = search.lastIndex; | 248 var lastIndex = search.lastIndex; |
| 249 TO_INTEGER_FOR_SIDE_EFFECT(lastIndex); | 249 TO_INTEGER_FOR_SIDE_EFFECT(lastIndex); |
| 250 | 250 |
| 251 if (!IS_SPEC_FUNCTION(replace)) { | 251 if (!IS_CALLABLE(replace)) { |
| 252 replace = TO_STRING_INLINE(replace); | 252 replace = TO_STRING_INLINE(replace); |
| 253 | 253 |
| 254 if (!search.global) { | 254 if (!search.global) { |
| 255 // Non-global regexp search, string replace. | 255 // Non-global regexp search, string replace. |
| 256 var match = RegExpExec(search, subject, 0); | 256 var match = RegExpExec(search, subject, 0); |
| 257 if (match == null) { | 257 if (match == null) { |
| 258 search.lastIndex = 0 | 258 search.lastIndex = 0 |
| 259 return subject; | 259 return subject; |
| 260 } | 260 } |
| 261 if (replace.length == 0) { | 261 if (replace.length == 0) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 // replaced by a simple string and only pays off for long strings. | 308 // replaced by a simple string and only pays off for long strings. |
| 309 return %StringReplaceOneCharWithString(subject, search, replace); | 309 return %StringReplaceOneCharWithString(subject, search, replace); |
| 310 } | 310 } |
| 311 var start = %StringIndexOf(subject, search, 0); | 311 var start = %StringIndexOf(subject, search, 0); |
| 312 if (start < 0) return subject; | 312 if (start < 0) return subject; |
| 313 var end = start + search.length; | 313 var end = start + search.length; |
| 314 | 314 |
| 315 var result = %_SubString(subject, 0, start); | 315 var result = %_SubString(subject, 0, start); |
| 316 | 316 |
| 317 // Compute the string to replace with. | 317 // Compute the string to replace with. |
| 318 if (IS_SPEC_FUNCTION(replace)) { | 318 if (IS_CALLABLE(replace)) { |
| 319 var receiver = UNDEFINED; | 319 var receiver = UNDEFINED; |
| 320 result += %_CallFunction(receiver, search, start, subject, replace); | 320 result += %_CallFunction(receiver, search, start, subject, replace); |
| 321 } else { | 321 } else { |
| 322 reusableMatchInfo[CAPTURE0] = start; | 322 reusableMatchInfo[CAPTURE0] = start; |
| 323 reusableMatchInfo[CAPTURE1] = end; | 323 reusableMatchInfo[CAPTURE1] = end; |
| 324 result = ExpandReplacement(TO_STRING_INLINE(replace), | 324 result = ExpandReplacement(TO_STRING_INLINE(replace), |
| 325 subject, | 325 subject, |
| 326 reusableMatchInfo, | 326 reusableMatchInfo, |
| 327 result); | 327 result); |
| 328 } | 328 } |
| (...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1204 to.StringLastIndexOf = StringLastIndexOfJS; | 1204 to.StringLastIndexOf = StringLastIndexOfJS; |
| 1205 to.StringMatch = StringMatchJS; | 1205 to.StringMatch = StringMatchJS; |
| 1206 to.StringReplace = StringReplace; | 1206 to.StringReplace = StringReplace; |
| 1207 to.StringSlice = StringSlice; | 1207 to.StringSlice = StringSlice; |
| 1208 to.StringSplit = StringSplitJS; | 1208 to.StringSplit = StringSplitJS; |
| 1209 to.StringSubstr = StringSubstr; | 1209 to.StringSubstr = StringSubstr; |
| 1210 to.StringSubstring = StringSubstring; | 1210 to.StringSubstring = StringSubstring; |
| 1211 }); | 1211 }); |
| 1212 | 1212 |
| 1213 }) | 1213 }) |
| OLD | NEW |