OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 if (index < 0) index = 0; | 113 if (index < 0) index = 0; |
114 if (index > subject_str_len) index = subject_str_len; | 114 if (index > subject_str_len) index = subject_str_len; |
115 if (pattern_str_len + index > subject_str_len) return -1; | 115 if (pattern_str_len + index > subject_str_len) return -1; |
116 return %StringIndexOf(subject_str, pattern_str, index); | 116 return %StringIndexOf(subject_str, pattern_str, index); |
117 } | 117 } |
118 | 118 |
119 | 119 |
120 // ECMA-262 section 15.5.4.8 | 120 // ECMA-262 section 15.5.4.8 |
121 function StringLastIndexOf(searchString /* position */) { // length == 1 | 121 function StringLastIndexOf(searchString /* position */) { // length == 1 |
122 var sub = ToString(this); | 122 var sub = ToString(this); |
| 123 var subLength = sub.length; |
123 var pat = ToString(searchString); | 124 var pat = ToString(searchString); |
124 var index = (%_ArgumentsLength() > 1) | 125 var patLength = pat.length; |
125 ? ToNumber(%_Arguments(1) /* position */) | 126 var index = subLength - patLength; |
126 : $NaN; | 127 if (%_ArgumentsLength() > 1) { |
127 var firstIndex; | 128 var position = ToNumber(%_Arguments(1)); |
128 if ($isNaN(index)) { | 129 if (!$isNaN(position)) { |
129 firstIndex = sub.length - pat.length; | 130 position = TO_INTEGER(position); |
130 } else { | 131 if (position < 0) { |
131 firstIndex = TO_INTEGER(index); | 132 position = 0; |
132 if (firstIndex + pat.length > sub.length) { | 133 } |
133 firstIndex = sub.length - pat.length; | 134 if (position + patLength < subLength) { |
| 135 index = position |
| 136 } |
134 } | 137 } |
135 } | 138 } |
136 return %StringLastIndexOf(sub, pat, firstIndex); | 139 if (index < 0) { |
| 140 return -1; |
| 141 } |
| 142 return %StringLastIndexOf(sub, pat, index); |
137 } | 143 } |
138 | 144 |
139 | 145 |
140 // ECMA-262 section 15.5.4.9 | 146 // ECMA-262 section 15.5.4.9 |
141 // | 147 // |
142 // This function is implementation specific. For now, we do not | 148 // This function is implementation specific. For now, we do not |
143 // do anything locale specific. | 149 // do anything locale specific. |
144 function StringLocaleCompare(other) { | 150 function StringLocaleCompare(other) { |
145 if (%_ArgumentsLength() === 0) return 0; | 151 if (%_ArgumentsLength() === 0) return 0; |
146 | 152 |
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 "small", StringSmall, | 869 "small", StringSmall, |
864 "strike", StringStrike, | 870 "strike", StringStrike, |
865 "sub", StringSub, | 871 "sub", StringSub, |
866 "sup", StringSup, | 872 "sup", StringSup, |
867 "toJSON", StringToJSON | 873 "toJSON", StringToJSON |
868 )); | 874 )); |
869 } | 875 } |
870 | 876 |
871 | 877 |
872 SetupString(); | 878 SetupString(); |
OLD | NEW |