| 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 pattern = TO_STRING(pattern); | 52 pattern = TO_STRING(pattern); |
| 53 var index = TO_INTEGER(position); | 53 var index = TO_INTEGER(position); |
| 54 if (index < 0) index = 0; | 54 if (index < 0) index = 0; |
| 55 if (index > subject.length) index = subject.length; | 55 if (index > subject.length) index = subject.length; |
| 56 return %StringIndexOf(subject, pattern, index); | 56 return %StringIndexOf(subject, pattern, index); |
| 57 } | 57 } |
| 58 | 58 |
| 59 %FunctionSetLength(StringIndexOf, 1); | 59 %FunctionSetLength(StringIndexOf, 1); |
| 60 | 60 |
| 61 | 61 |
| 62 // ECMA-262 section 15.5.4.8 | |
| 63 function StringLastIndexOf(pat, pos) { // length == 1 | |
| 64 CHECK_OBJECT_COERCIBLE(this, "String.prototype.lastIndexOf"); | |
| 65 | |
| 66 var sub = TO_STRING(this); | |
| 67 var subLength = sub.length; | |
| 68 var pat = TO_STRING(pat); | |
| 69 var patLength = pat.length; | |
| 70 var index = subLength - patLength; | |
| 71 var position = TO_NUMBER(pos); | |
| 72 if (!NUMBER_IS_NAN(position)) { | |
| 73 position = TO_INTEGER(position); | |
| 74 if (position < 0) { | |
| 75 position = 0; | |
| 76 } | |
| 77 if (position + patLength < subLength) { | |
| 78 index = position; | |
| 79 } | |
| 80 } | |
| 81 if (index < 0) { | |
| 82 return -1; | |
| 83 } | |
| 84 return %StringLastIndexOf(sub, pat, index); | |
| 85 } | |
| 86 | |
| 87 %FunctionSetLength(StringLastIndexOf, 1); | |
| 88 | |
| 89 | |
| 90 // ES6 21.1.3.11. | 62 // ES6 21.1.3.11. |
| 91 function StringMatchJS(pattern) { | 63 function StringMatchJS(pattern) { |
| 92 CHECK_OBJECT_COERCIBLE(this, "String.prototype.match"); | 64 CHECK_OBJECT_COERCIBLE(this, "String.prototype.match"); |
| 93 | 65 |
| 94 if (!IS_NULL_OR_UNDEFINED(pattern)) { | 66 if (!IS_NULL_OR_UNDEFINED(pattern)) { |
| 95 var matcher = pattern[matchSymbol]; | 67 var matcher = pattern[matchSymbol]; |
| 96 if (!IS_UNDEFINED(matcher)) { | 68 if (!IS_UNDEFINED(matcher)) { |
| 97 return %_Call(matcher, pattern, this); | 69 return %_Call(matcher, pattern, this); |
| 98 } | 70 } |
| 99 } | 71 } |
| (...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 "raw", StringRaw | 667 "raw", StringRaw |
| 696 ]); | 668 ]); |
| 697 | 669 |
| 698 // Set up the non-enumerable functions on the String prototype object. | 670 // Set up the non-enumerable functions on the String prototype object. |
| 699 utils.InstallFunctions(GlobalString.prototype, DONT_ENUM, [ | 671 utils.InstallFunctions(GlobalString.prototype, DONT_ENUM, [ |
| 700 "codePointAt", StringCodePointAt, | 672 "codePointAt", StringCodePointAt, |
| 701 "concat", StringConcat, | 673 "concat", StringConcat, |
| 702 "endsWith", StringEndsWith, | 674 "endsWith", StringEndsWith, |
| 703 "includes", StringIncludes, | 675 "includes", StringIncludes, |
| 704 "indexOf", StringIndexOf, | 676 "indexOf", StringIndexOf, |
| 705 "lastIndexOf", StringLastIndexOf, | |
| 706 "match", StringMatchJS, | 677 "match", StringMatchJS, |
| 707 "repeat", StringRepeat, | 678 "repeat", StringRepeat, |
| 708 "replace", StringReplace, | 679 "replace", StringReplace, |
| 709 "search", StringSearch, | 680 "search", StringSearch, |
| 710 "slice", StringSlice, | 681 "slice", StringSlice, |
| 711 "split", StringSplitJS, | 682 "split", StringSplitJS, |
| 712 "substring", StringSubstring, | 683 "substring", StringSubstring, |
| 713 "substr", StringSubstr, | 684 "substr", StringSubstr, |
| 714 "startsWith", StringStartsWith, | 685 "startsWith", StringStartsWith, |
| 715 "toLowerCase", StringToLowerCaseJS, | 686 "toLowerCase", StringToLowerCaseJS, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 731 "sub", StringSub, | 702 "sub", StringSub, |
| 732 "sup", StringSup | 703 "sup", StringSup |
| 733 ]); | 704 ]); |
| 734 | 705 |
| 735 // ------------------------------------------------------------------- | 706 // ------------------------------------------------------------------- |
| 736 // Exports | 707 // Exports |
| 737 | 708 |
| 738 utils.Export(function(to) { | 709 utils.Export(function(to) { |
| 739 to.ExpandReplacement = ExpandReplacement; | 710 to.ExpandReplacement = ExpandReplacement; |
| 740 to.StringIndexOf = StringIndexOf; | 711 to.StringIndexOf = StringIndexOf; |
| 741 to.StringLastIndexOf = StringLastIndexOf; | |
| 742 to.StringMatch = StringMatchJS; | 712 to.StringMatch = StringMatchJS; |
| 743 to.StringReplace = StringReplace; | 713 to.StringReplace = StringReplace; |
| 744 to.StringSlice = StringSlice; | 714 to.StringSlice = StringSlice; |
| 745 to.StringSplit = StringSplitJS; | 715 to.StringSplit = StringSplitJS; |
| 746 to.StringSubstr = StringSubstr; | 716 to.StringSubstr = StringSubstr; |
| 747 to.StringSubstring = StringSubstring; | 717 to.StringSubstring = StringSubstring; |
| 748 }); | 718 }); |
| 749 | 719 |
| 750 }) | 720 }) |
| OLD | NEW |