| 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 var $stringCharAt; |
| 6 var $stringIndexOf; |
| 7 var $stringSubstring; |
| 8 |
| 9 (function(global, shared, exports) { |
| 6 | 10 |
| 7 %CheckIsBootstrapping(); | 11 %CheckIsBootstrapping(); |
| 8 | 12 |
| 9 // ------------------------------------------------------------------- | 13 // ------------------------------------------------------------------- |
| 10 // Imports | 14 // Imports |
| 11 | 15 |
| 12 var GlobalRegExp = global.RegExp; | 16 var GlobalRegExp = global.RegExp; |
| 13 var GlobalString = global.String; | 17 var GlobalString = global.String; |
| 14 var InternalArray = utils.InternalArray; | 18 var InternalArray = shared.InternalArray; |
| 15 var InternalPackedArray = utils.InternalPackedArray; | 19 var InternalPackedArray = shared.InternalPackedArray; |
| 16 | |
| 17 var MathMax; | |
| 18 var MathMin; | |
| 19 | |
| 20 utils.Import(function(from) { | |
| 21 MathMax = from.MathMax; | |
| 22 MathMin = from.MathMin; | |
| 23 }); | |
| 24 | 20 |
| 25 //------------------------------------------------------------------- | 21 //------------------------------------------------------------------- |
| 26 | 22 |
| 27 function StringConstructor(x) { | 23 function StringConstructor(x) { |
| 28 if (%_ArgumentsLength() == 0) x = ''; | 24 if (%_ArgumentsLength() == 0) x = ''; |
| 29 if (%_IsConstructCall()) { | 25 if (%_IsConstructCall()) { |
| 30 %_SetValueOf(this, TO_STRING_INLINE(x)); | 26 %_SetValueOf(this, TO_STRING_INLINE(x)); |
| 31 } else { | 27 } else { |
| 32 return IS_SYMBOL(x) ? | 28 return IS_SYMBOL(x) ? |
| 33 %_CallFunction(x, $symbolToString) : TO_STRING_INLINE(x); | 29 %_CallFunction(x, $symbolToString) : TO_STRING_INLINE(x); |
| (...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 } | 961 } |
| 966 | 962 |
| 967 var ss = TO_STRING_INLINE(searchString); | 963 var ss = TO_STRING_INLINE(searchString); |
| 968 var pos = 0; | 964 var pos = 0; |
| 969 if (%_ArgumentsLength() > 1) { | 965 if (%_ArgumentsLength() > 1) { |
| 970 pos = %_Arguments(1); // position | 966 pos = %_Arguments(1); // position |
| 971 pos = $toInteger(pos); | 967 pos = $toInteger(pos); |
| 972 } | 968 } |
| 973 | 969 |
| 974 var s_len = s.length; | 970 var s_len = s.length; |
| 975 var start = MathMin(MathMax(pos, 0), s_len); | 971 var start = $min($max(pos, 0), s_len); |
| 976 var ss_len = ss.length; | 972 var ss_len = ss.length; |
| 977 if (ss_len + start > s_len) { | 973 if (ss_len + start > s_len) { |
| 978 return false; | 974 return false; |
| 979 } | 975 } |
| 980 | 976 |
| 981 return %StringIndexOf(s, ss, start) === start; | 977 return %StringIndexOf(s, ss, start) === start; |
| 982 } | 978 } |
| 983 | 979 |
| 984 | 980 |
| 985 // ES6 draft 04-05-14, section 21.1.3.7 | 981 // ES6 draft 04-05-14, section 21.1.3.7 |
| 986 function StringEndsWith(searchString /* position */) { // length == 1 | 982 function StringEndsWith(searchString /* position */) { // length == 1 |
| 987 CHECK_OBJECT_COERCIBLE(this, "String.prototype.endsWith"); | 983 CHECK_OBJECT_COERCIBLE(this, "String.prototype.endsWith"); |
| 988 | 984 |
| 989 var s = TO_STRING_INLINE(this); | 985 var s = TO_STRING_INLINE(this); |
| 990 | 986 |
| 991 if (IS_REGEXP(searchString)) { | 987 if (IS_REGEXP(searchString)) { |
| 992 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.endsWith"); | 988 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.endsWith"); |
| 993 } | 989 } |
| 994 | 990 |
| 995 var ss = TO_STRING_INLINE(searchString); | 991 var ss = TO_STRING_INLINE(searchString); |
| 996 var s_len = s.length; | 992 var s_len = s.length; |
| 997 var pos = s_len; | 993 var pos = s_len; |
| 998 if (%_ArgumentsLength() > 1) { | 994 if (%_ArgumentsLength() > 1) { |
| 999 var arg = %_Arguments(1); // position | 995 var arg = %_Arguments(1); // position |
| 1000 if (!IS_UNDEFINED(arg)) { | 996 if (!IS_UNDEFINED(arg)) { |
| 1001 pos = $toInteger(arg); | 997 pos = $toInteger(arg); |
| 1002 } | 998 } |
| 1003 } | 999 } |
| 1004 | 1000 |
| 1005 var end = MathMin(MathMax(pos, 0), s_len); | 1001 var end = $min($max(pos, 0), s_len); |
| 1006 var ss_len = ss.length; | 1002 var ss_len = ss.length; |
| 1007 var start = end - ss_len; | 1003 var start = end - ss_len; |
| 1008 if (start < 0) { | 1004 if (start < 0) { |
| 1009 return false; | 1005 return false; |
| 1010 } | 1006 } |
| 1011 | 1007 |
| 1012 return %StringLastIndexOf(s, ss, start) === start; | 1008 return %StringLastIndexOf(s, ss, start) === start; |
| 1013 } | 1009 } |
| 1014 | 1010 |
| 1015 | 1011 |
| 1016 // ES6 draft 04-05-14, section 21.1.3.6 | 1012 // ES6 draft 04-05-14, section 21.1.3.6 |
| 1017 function StringIncludes(searchString /* position */) { // length == 1 | 1013 function StringIncludes(searchString /* position */) { // length == 1 |
| 1018 CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes"); | 1014 CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes"); |
| 1019 | 1015 |
| 1020 var s = TO_STRING_INLINE(this); | 1016 var s = TO_STRING_INLINE(this); |
| 1021 | 1017 |
| 1022 if (IS_REGEXP(searchString)) { | 1018 if (IS_REGEXP(searchString)) { |
| 1023 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.includes"); | 1019 throw MakeTypeError(kFirstArgumentNotRegExp, "String.prototype.includes"); |
| 1024 } | 1020 } |
| 1025 | 1021 |
| 1026 var ss = TO_STRING_INLINE(searchString); | 1022 var ss = TO_STRING_INLINE(searchString); |
| 1027 var pos = 0; | 1023 var pos = 0; |
| 1028 if (%_ArgumentsLength() > 1) { | 1024 if (%_ArgumentsLength() > 1) { |
| 1029 pos = %_Arguments(1); // position | 1025 pos = %_Arguments(1); // position |
| 1030 pos = $toInteger(pos); | 1026 pos = $toInteger(pos); |
| 1031 } | 1027 } |
| 1032 | 1028 |
| 1033 var s_len = s.length; | 1029 var s_len = s.length; |
| 1034 var start = MathMin(MathMax(pos, 0), s_len); | 1030 var start = $min($max(pos, 0), s_len); |
| 1035 var ss_len = ss.length; | 1031 var ss_len = ss.length; |
| 1036 if (ss_len + start > s_len) { | 1032 if (ss_len + start > s_len) { |
| 1037 return false; | 1033 return false; |
| 1038 } | 1034 } |
| 1039 | 1035 |
| 1040 return %StringIndexOf(s, ss, start) !== -1; | 1036 return %StringIndexOf(s, ss, start) !== -1; |
| 1041 } | 1037 } |
| 1042 | 1038 |
| 1043 | 1039 |
| 1044 // ES6 Draft 05-22-2014, section 21.1.3.3 | 1040 // ES6 Draft 05-22-2014, section 21.1.3.3 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 "blink", StringBlink, | 1165 "blink", StringBlink, |
| 1170 "bold", StringBold, | 1166 "bold", StringBold, |
| 1171 "fixed", StringFixed, | 1167 "fixed", StringFixed, |
| 1172 "italics", StringItalics, | 1168 "italics", StringItalics, |
| 1173 "small", StringSmall, | 1169 "small", StringSmall, |
| 1174 "strike", StringStrike, | 1170 "strike", StringStrike, |
| 1175 "sub", StringSub, | 1171 "sub", StringSub, |
| 1176 "sup", StringSup | 1172 "sup", StringSup |
| 1177 ]); | 1173 ]); |
| 1178 | 1174 |
| 1179 // ------------------------------------------------------------------- | 1175 $stringCharAt = StringCharAtJS; |
| 1180 // Exports | 1176 $stringIndexOf = StringIndexOfJS; |
| 1181 | 1177 $stringSubstring = StringSubstring; |
| 1182 utils.Export(function(to) { | |
| 1183 to.StringCharAt = StringCharAtJS; | |
| 1184 to.StringIndexOf = StringIndexOfJS; | |
| 1185 to.StringSubstring = StringSubstring; | |
| 1186 }); | |
| 1187 | 1178 |
| 1188 }) | 1179 }) |
| OLD | NEW |