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 |
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; | 20 var MathMax; |
21 var MathMin; | 21 var MathMin; |
22 var matchSymbol = utils.ImportNow("match_symbol"); | 22 var matchSymbol = utils.ImportNow("match_symbol"); |
23 var RegExpExec; | 23 var RegExpExec; |
24 var RegExpExecNoTests; | 24 var RegExpExecNoTests; |
25 var RegExpLastMatchInfo; | 25 var RegExpLastMatchInfo; |
| 26 var searchSymbol = utils.ImportNow("search_symbol"); |
26 var splitSymbol = utils.ImportNow("split_symbol"); | 27 var splitSymbol = utils.ImportNow("split_symbol"); |
27 | 28 |
28 utils.Import(function(from) { | 29 utils.Import(function(from) { |
29 ArrayIndexOf = from.ArrayIndexOf; | 30 ArrayIndexOf = from.ArrayIndexOf; |
30 ArrayJoin = from.ArrayJoin; | 31 ArrayJoin = from.ArrayJoin; |
31 MakeRangeError = from.MakeRangeError; | 32 MakeRangeError = from.MakeRangeError; |
32 MakeTypeError = from.MakeTypeError; | 33 MakeTypeError = from.MakeTypeError; |
33 MathMax = from.MathMax; | 34 MathMax = from.MathMax; |
34 MathMin = from.MathMin; | 35 MathMin = from.MathMin; |
35 RegExpExec = from.RegExpExec; | 36 RegExpExec = from.RegExpExec; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 // | 149 // |
149 // This function is implementation specific. For now, we do not | 150 // This function is implementation specific. For now, we do not |
150 // do anything locale specific. | 151 // do anything locale specific. |
151 function StringLocaleCompareJS(other) { | 152 function StringLocaleCompareJS(other) { |
152 CHECK_OBJECT_COERCIBLE(this, "String.prototype.localeCompare"); | 153 CHECK_OBJECT_COERCIBLE(this, "String.prototype.localeCompare"); |
153 | 154 |
154 return %StringLocaleCompare(TO_STRING(this), TO_STRING(other)); | 155 return %StringLocaleCompare(TO_STRING(this), TO_STRING(other)); |
155 } | 156 } |
156 | 157 |
157 | 158 |
158 // ECMA-262 section 15.5.4.10 | 159 // ES6 21.1.3.11. |
159 function StringMatchJS(pattern) { | 160 function StringMatchJS(pattern) { |
160 CHECK_OBJECT_COERCIBLE(this, "String.prototype.match"); | 161 CHECK_OBJECT_COERCIBLE(this, "String.prototype.match"); |
161 | 162 |
162 if (!IS_NULL_OR_UNDEFINED(pattern)) { | 163 if (!IS_NULL_OR_UNDEFINED(pattern)) { |
163 var matcher = pattern[matchSymbol]; | 164 var matcher = pattern[matchSymbol]; |
164 if (!IS_UNDEFINED(matcher)) { | 165 if (!IS_UNDEFINED(matcher)) { |
165 if (!IS_CALLABLE(matcher)) { | 166 if (!IS_CALLABLE(matcher)) { |
166 throw MakeTypeError(kCalledNonCallable, matcher); | 167 throw MakeTypeError(kCalledNonCallable, matcher); |
167 } | 168 } |
168 return %_Call(matcher, pattern, this); | 169 return %_Call(matcher, pattern, this); |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 replacement = %Apply(replace, UNDEFINED, parameters, 0, j + 2); | 499 replacement = %Apply(replace, UNDEFINED, parameters, 0, j + 2); |
499 } | 500 } |
500 | 501 |
501 result += replacement; // The add method converts to string if necessary. | 502 result += replacement; // The add method converts to string if necessary. |
502 // Can't use matchInfo any more from here, since the function could | 503 // Can't use matchInfo any more from here, since the function could |
503 // overwrite it. | 504 // overwrite it. |
504 return result + %_SubString(subject, endOfMatch, subject.length); | 505 return result + %_SubString(subject, endOfMatch, subject.length); |
505 } | 506 } |
506 | 507 |
507 | 508 |
508 // ECMA-262 section 15.5.4.12 | 509 // ES6 21.1.3.15. |
509 function StringSearch(re) { | 510 function StringSearch(pattern) { |
510 CHECK_OBJECT_COERCIBLE(this, "String.prototype.search"); | 511 CHECK_OBJECT_COERCIBLE(this, "String.prototype.search"); |
511 | 512 |
512 var regexp; | 513 if (!IS_NULL_OR_UNDEFINED(pattern)) { |
513 if (IS_REGEXP(re)) { | 514 var searcher = pattern[searchSymbol]; |
514 regexp = re; | 515 if (!IS_UNDEFINED(searcher)) { |
515 } else { | 516 return %_Call(searcher, pattern, this); |
516 regexp = new GlobalRegExp(re); | 517 } |
517 } | 518 } |
518 var match = RegExpExec(regexp, TO_STRING(this), 0); | 519 |
519 if (match) { | 520 var subject = TO_STRING(this); |
520 return match[CAPTURE0]; | 521 var regexp = new GlobalRegExp(pattern); |
521 } | 522 return %_Call(regexp[searchSymbol], regexp, subject); |
522 return -1; | |
523 } | 523 } |
524 | 524 |
525 | 525 |
526 // ECMA-262 section 15.5.4.13 | 526 // ECMA-262 section 15.5.4.13 |
527 function StringSlice(start, end) { | 527 function StringSlice(start, end) { |
528 CHECK_OBJECT_COERCIBLE(this, "String.prototype.slice"); | 528 CHECK_OBJECT_COERCIBLE(this, "String.prototype.slice"); |
529 | 529 |
530 var s = TO_STRING(this); | 530 var s = TO_STRING(this); |
531 var s_len = s.length; | 531 var s_len = s.length; |
532 var start_i = TO_INTEGER(start); | 532 var start_i = TO_INTEGER(start); |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1109 to.StringLastIndexOf = StringLastIndexOfJS; | 1109 to.StringLastIndexOf = StringLastIndexOfJS; |
1110 to.StringMatch = StringMatchJS; | 1110 to.StringMatch = StringMatchJS; |
1111 to.StringReplace = StringReplace; | 1111 to.StringReplace = StringReplace; |
1112 to.StringSlice = StringSlice; | 1112 to.StringSlice = StringSlice; |
1113 to.StringSplit = StringSplitJS; | 1113 to.StringSplit = StringSplitJS; |
1114 to.StringSubstr = StringSubstr; | 1114 to.StringSubstr = StringSubstr; |
1115 to.StringSubstring = StringSubstring; | 1115 to.StringSubstring = StringSubstring; |
1116 }); | 1116 }); |
1117 | 1117 |
1118 }) | 1118 }) |
OLD | NEW |