Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: src/js/string.js

Issue 1439083003: Revert "[es6] Optimize String{Starts, Ends}With" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 11
12 var ArrayIndexOf; 12 var ArrayIndexOf;
13 var ArrayJoin; 13 var ArrayJoin;
14 var GlobalRegExp = global.RegExp; 14 var GlobalRegExp = global.RegExp;
15 var GlobalString = global.String; 15 var GlobalString = global.String;
16 var InternalArray = utils.InternalArray; 16 var InternalArray = utils.InternalArray;
17 var InternalPackedArray = utils.InternalPackedArray; 17 var InternalPackedArray = utils.InternalPackedArray;
18 var MakeRangeError; 18 var MakeRangeError;
19 var MakeTypeError; 19 var MakeTypeError;
20 var MathMax;
21 var MathMin;
20 var RegExpExec; 22 var RegExpExec;
21 var RegExpExecNoTests; 23 var RegExpExecNoTests;
22 var RegExpLastMatchInfo; 24 var RegExpLastMatchInfo;
23 var splitSymbol = utils.ImportNow("split_symbol"); 25 var splitSymbol = utils.ImportNow("split_symbol");
24 26
25 utils.Import(function(from) { 27 utils.Import(function(from) {
26 ArrayIndexOf = from.ArrayIndexOf; 28 ArrayIndexOf = from.ArrayIndexOf;
27 ArrayJoin = from.ArrayJoin; 29 ArrayJoin = from.ArrayJoin;
28 MakeRangeError = from.MakeRangeError; 30 MakeRangeError = from.MakeRangeError;
29 MakeTypeError = from.MakeTypeError; 31 MakeTypeError = from.MakeTypeError;
32 MathMax = from.MathMax;
33 MathMin = from.MathMin;
30 RegExpExec = from.RegExpExec; 34 RegExpExec = from.RegExpExec;
31 RegExpExecNoTests = from.RegExpExecNoTests; 35 RegExpExecNoTests = from.RegExpExecNoTests;
32 RegExpLastMatchInfo = from.RegExpLastMatchInfo; 36 RegExpLastMatchInfo = from.RegExpLastMatchInfo;
33 }); 37 });
34 38
35 //------------------------------------------------------------------- 39 //-------------------------------------------------------------------
36 40
37 // ECMA-262 section 15.5.4.2 41 // ECMA-262 section 15.5.4.2
38 function StringToString() { 42 function StringToString() {
39 if (!IS_STRING(this) && !IS_STRING_WRAPPER(this)) { 43 if (!IS_STRING(this) && !IS_STRING_WRAPPER(this)) {
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 var ss = TO_STRING(searchString); 876 var ss = TO_STRING(searchString);
873 var pos = 0; 877 var pos = 0;
874 if (%_ArgumentsLength() > 1) { 878 if (%_ArgumentsLength() > 1) {
875 var arg = %_Arguments(1); // position 879 var arg = %_Arguments(1); // position
876 if (!IS_UNDEFINED(arg)) { 880 if (!IS_UNDEFINED(arg)) {
877 pos = TO_INTEGER(arg); 881 pos = TO_INTEGER(arg);
878 } 882 }
879 } 883 }
880 884
881 var s_len = s.length; 885 var s_len = s.length;
882 if (pos < 0) pos = 0; 886 var start = MathMin(MathMax(pos, 0), s_len);
883 if (pos > s_len) pos = s_len;
884 var ss_len = ss.length; 887 var ss_len = ss.length;
885 888 if (ss_len + start > s_len) {
886 if (ss_len + pos > s_len) {
887 return false; 889 return false;
888 } 890 }
889 891
890 for (var i = 0; i < ss_len; i++) { 892 return %_SubString(s, start, start + ss_len) === ss;
891 if (%_StringCharCodeAt(s, pos + i) !== %_StringCharCodeAt(ss, i)) {
892 return false;
893 }
894 }
895
896 return true;
897 } 893 }
898 894
899 895
900 // ES6 draft 04-05-14, section 21.1.3.7 896 // ES6 draft 04-05-14, section 21.1.3.7
901 function StringEndsWith(searchString /* position */) { // length == 1 897 function StringEndsWith(searchString /* position */) { // length == 1
902 CHECK_OBJECT_COERCIBLE(this, "String.prototype.endsWith"); 898 CHECK_OBJECT_COERCIBLE(this, "String.prototype.endsWith");
903 899
904 var s = TO_STRING(this); 900 var s = TO_STRING(this);
905 901
906 if (IS_REGEXP(searchString)) { 902 if (IS_REGEXP(searchString)) {
907 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.endsWith"); 903 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.endsWith");
908 } 904 }
909 905
910 var ss = TO_STRING(searchString); 906 var ss = TO_STRING(searchString);
911 var s_len = s.length; 907 var s_len = s.length;
912 var pos = s_len; 908 var pos = s_len;
913 if (%_ArgumentsLength() > 1) { 909 if (%_ArgumentsLength() > 1) {
914 var arg = %_Arguments(1); // position 910 var arg = %_Arguments(1); // position
915 if (!IS_UNDEFINED(arg)) { 911 if (!IS_UNDEFINED(arg)) {
916 pos = TO_INTEGER(arg); 912 pos = TO_INTEGER(arg);
917 } 913 }
918 } 914 }
919 915
920 if (pos < 0) pos = 0; 916 var end = MathMin(MathMax(pos, 0), s_len);
921 if (pos > s_len) pos = s_len;
922 var ss_len = ss.length; 917 var ss_len = ss.length;
923 pos = pos - ss_len; 918 var start = end - ss_len;
924 919 if (start < 0) {
925 if (pos < 0) {
926 return false; 920 return false;
927 } 921 }
928 922
929 for (var i = 0; i < ss_len; i++) { 923 return %_SubString(s, start, start + ss_len) === ss;
930 if (%_StringCharCodeAt(s, pos + i) !== %_StringCharCodeAt(ss, i)) {
931 return false;
932 }
933 }
934
935 return true;
936 } 924 }
937 925
938 926
939 // ES6 draft 04-05-14, section 21.1.3.6 927 // ES6 draft 04-05-14, section 21.1.3.6
940 function StringIncludes(searchString /* position */) { // length == 1 928 function StringIncludes(searchString /* position */) { // length == 1
941 CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes"); 929 CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes");
942 930
943 var string = TO_STRING(this); 931 var string = TO_STRING(this);
944 932
945 if (IS_REGEXP(searchString)) { 933 if (IS_REGEXP(searchString)) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 to.StringLastIndexOf = StringLastIndexOfJS; 1097 to.StringLastIndexOf = StringLastIndexOfJS;
1110 to.StringMatch = StringMatchJS; 1098 to.StringMatch = StringMatchJS;
1111 to.StringReplace = StringReplace; 1099 to.StringReplace = StringReplace;
1112 to.StringSlice = StringSlice; 1100 to.StringSlice = StringSlice;
1113 to.StringSplit = StringSplitJS; 1101 to.StringSplit = StringSplitJS;
1114 to.StringSubstr = StringSubstr; 1102 to.StringSubstr = StringSubstr;
1115 to.StringSubstring = StringSubstring; 1103 to.StringSubstring = StringSubstring;
1116 }); 1104 });
1117 1105
1118 }) 1106 })
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698