| 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 var $stringCharAt; | 5 var $stringCharAt; |
| 6 var $stringIndexOf; | 6 var $stringIndexOf; |
| 7 var $stringSubstring; | 7 var $stringSubstring; |
| 8 | 8 |
| 9 (function(global, shared, exports) { | 9 (function(global, shared, exports) { |
| 10 | 10 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 if (result !== null) $regexpLastMatchInfoOverride = null; | 163 if (result !== null) $regexpLastMatchInfoOverride = null; |
| 164 regexp.lastIndex = 0; | 164 regexp.lastIndex = 0; |
| 165 return result; | 165 return result; |
| 166 } | 166 } |
| 167 // Non-regexp argument. | 167 // Non-regexp argument. |
| 168 regexp = new GlobalRegExp(regexp); | 168 regexp = new GlobalRegExp(regexp); |
| 169 return $regexpExecNoTests(regexp, subject, 0); | 169 return $regexpExecNoTests(regexp, subject, 0); |
| 170 } | 170 } |
| 171 | 171 |
| 172 | 172 |
| 173 var NORMALIZATION_FORMS = ['NFC', 'NFD', 'NFKC', 'NFKD']; | |
| 174 | |
| 175 | |
| 176 // ECMA-262 v6, section 21.1.3.12 | 173 // ECMA-262 v6, section 21.1.3.12 |
| 177 // | 174 // |
| 178 // For now we do nothing, as proper normalization requires big tables. | 175 // For now we do nothing, as proper normalization requires big tables. |
| 179 // If Intl is enabled, then i18n.js will override it and provide the the | 176 // If Intl is enabled, then i18n.js will override it and provide the the |
| 180 // proper functionality. | 177 // proper functionality. |
| 181 function StringNormalizeJS(form) { | 178 function StringNormalizeJS(form) { |
| 182 CHECK_OBJECT_COERCIBLE(this, "String.prototype.normalize"); | 179 CHECK_OBJECT_COERCIBLE(this, "String.prototype.normalize"); |
| 183 | 180 |
| 184 var form = form ? TO_STRING_INLINE(form) : 'NFC'; | 181 var form = form ? TO_STRING_INLINE(form) : 'NFC'; |
| 182 |
| 183 var NORMALIZATION_FORMS = ['NFC', 'NFD', 'NFKC', 'NFKD']; |
| 184 |
| 185 var normalizationForm = NORMALIZATION_FORMS.indexOf(form); | 185 var normalizationForm = NORMALIZATION_FORMS.indexOf(form); |
| 186 if (normalizationForm === -1) { | 186 if (normalizationForm === -1) { |
| 187 throw MakeRangeError(kNormalizationForm, NORMALIZATION_FORMS.join(', ')); | 187 throw MakeRangeError(kNormalizationForm, NORMALIZATION_FORMS.join(', ')); |
| 188 } | 188 } |
| 189 | 189 |
| 190 return %_ValueOf(this); | 190 return %_ValueOf(this); |
| 191 } | 191 } |
| 192 | 192 |
| 193 | 193 |
| 194 // This has the same size as the $regexpLastMatchInfo array, and can be used | 194 // This has the same size as the $regexpLastMatchInfo array, and can be used |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 // If start isn't valid, return undefined. | 403 // If start isn't valid, return undefined. |
| 404 if (start < 0) return; | 404 if (start < 0) return; |
| 405 var end = lastCaptureInfo[CAPTURE(scaled + 1)]; | 405 var end = lastCaptureInfo[CAPTURE(scaled + 1)]; |
| 406 return %_SubString(string, start, end); | 406 return %_SubString(string, start, end); |
| 407 } | 407 } |
| 408 | 408 |
| 409 | 409 |
| 410 // TODO(lrn): This array will survive indefinitely if replace is never | 410 // TODO(lrn): This array will survive indefinitely if replace is never |
| 411 // called again. However, it will be empty, since the contents are cleared | 411 // called again. However, it will be empty, since the contents are cleared |
| 412 // in the finally block. | 412 // in the finally block. |
| 413 var reusableReplaceArray = new InternalArray(16); | 413 var reusableReplaceArray = new InternalArray(4); |
| 414 | 414 |
| 415 // Helper function for replacing regular expressions with the result of a | 415 // Helper function for replacing regular expressions with the result of a |
| 416 // function application in String.prototype.replace. | 416 // function application in String.prototype.replace. |
| 417 function StringReplaceGlobalRegExpWithFunction(subject, regexp, replace) { | 417 function StringReplaceGlobalRegExpWithFunction(subject, regexp, replace) { |
| 418 var resultArray = reusableReplaceArray; | 418 var resultArray = reusableReplaceArray; |
| 419 if (resultArray) { | 419 if (resultArray) { |
| 420 reusableReplaceArray = null; | 420 reusableReplaceArray = null; |
| 421 } else { | 421 } else { |
| 422 // Inside a nested replace (replace called from the replacement function | 422 // Inside a nested replace (replace called from the replacement function |
| 423 // of another replace) or we have failed to set the reusable array | 423 // of another replace) or we have failed to set the reusable array |
| (...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1170 "strike", StringStrike, | 1170 "strike", StringStrike, |
| 1171 "sub", StringSub, | 1171 "sub", StringSub, |
| 1172 "sup", StringSup | 1172 "sup", StringSup |
| 1173 ]); | 1173 ]); |
| 1174 | 1174 |
| 1175 $stringCharAt = StringCharAtJS; | 1175 $stringCharAt = StringCharAtJS; |
| 1176 $stringIndexOf = StringIndexOfJS; | 1176 $stringIndexOf = StringIndexOfJS; |
| 1177 $stringSubstring = StringSubstring; | 1177 $stringSubstring = StringSubstring; |
| 1178 | 1178 |
| 1179 }) | 1179 }) |
| OLD | NEW |