OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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() { | 5 (function() { |
6 | 6 |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
10 | 10 |
(...skipping 30 matching lines...) Expand all Loading... |
41 function StringIteratorNext() { | 41 function StringIteratorNext() { |
42 var iterator = ToObject(this); | 42 var iterator = ToObject(this); |
43 | 43 |
44 if (!HAS_DEFINED_PRIVATE(iterator, stringIteratorNextIndexSymbol)) { | 44 if (!HAS_DEFINED_PRIVATE(iterator, stringIteratorNextIndexSymbol)) { |
45 throw MakeTypeError('incompatible_method_receiver', | 45 throw MakeTypeError('incompatible_method_receiver', |
46 ['String Iterator.prototype.next']); | 46 ['String Iterator.prototype.next']); |
47 } | 47 } |
48 | 48 |
49 var s = GET_PRIVATE(iterator, stringIteratorIteratedStringSymbol); | 49 var s = GET_PRIVATE(iterator, stringIteratorIteratedStringSymbol); |
50 if (IS_UNDEFINED(s)) { | 50 if (IS_UNDEFINED(s)) { |
51 return CreateIteratorResultObject(UNDEFINED, true); | 51 return $iteratorCreateResultObject(UNDEFINED, true); |
52 } | 52 } |
53 | 53 |
54 var position = GET_PRIVATE(iterator, stringIteratorNextIndexSymbol); | 54 var position = GET_PRIVATE(iterator, stringIteratorNextIndexSymbol); |
55 var length = TO_UINT32(s.length); | 55 var length = TO_UINT32(s.length); |
56 | 56 |
57 if (position >= length) { | 57 if (position >= length) { |
58 SET_PRIVATE(iterator, stringIteratorIteratedStringSymbol, | 58 SET_PRIVATE(iterator, stringIteratorIteratedStringSymbol, |
59 UNDEFINED); | 59 UNDEFINED); |
60 return CreateIteratorResultObject(UNDEFINED, true); | 60 return $iteratorCreateResultObject(UNDEFINED, true); |
61 } | 61 } |
62 | 62 |
63 var first = %_StringCharCodeAt(s, position); | 63 var first = %_StringCharCodeAt(s, position); |
64 var resultString = %_StringCharFromCode(first); | 64 var resultString = %_StringCharFromCode(first); |
65 position++; | 65 position++; |
66 | 66 |
67 if (first >= 0xD800 && first <= 0xDBFF && position < length) { | 67 if (first >= 0xD800 && first <= 0xDBFF && position < length) { |
68 var second = %_StringCharCodeAt(s, position); | 68 var second = %_StringCharCodeAt(s, position); |
69 if (second >= 0xDC00 && second <= 0xDFFF) { | 69 if (second >= 0xDC00 && second <= 0xDFFF) { |
70 resultString += %_StringCharFromCode(second); | 70 resultString += %_StringCharFromCode(second); |
71 position++; | 71 position++; |
72 } | 72 } |
73 } | 73 } |
74 | 74 |
75 SET_PRIVATE(iterator, stringIteratorNextIndexSymbol, position); | 75 SET_PRIVATE(iterator, stringIteratorNextIndexSymbol, position); |
76 | 76 |
77 return CreateIteratorResultObject(resultString, false); | 77 return $iteratorCreateResultObject(resultString, false); |
78 } | 78 } |
79 | 79 |
80 | 80 |
81 // 21.1.3.27 String.prototype [ @@iterator ]( ) | 81 // 21.1.3.27 String.prototype [ @@iterator ]( ) |
82 function StringPrototypeIterator() { | 82 function StringPrototypeIterator() { |
83 return CreateStringIterator(this); | 83 return CreateStringIterator(this); |
84 } | 84 } |
85 | 85 |
86 //------------------------------------------------------------------- | 86 //------------------------------------------------------------------- |
87 | 87 |
88 %FunctionSetPrototype(StringIterator, new GlobalObject()); | 88 %FunctionSetPrototype(StringIterator, new GlobalObject()); |
89 %FunctionSetInstanceClassName(StringIterator, 'String Iterator'); | 89 %FunctionSetInstanceClassName(StringIterator, 'String Iterator'); |
90 | 90 |
91 InstallFunctions(StringIterator.prototype, DONT_ENUM, [ | 91 InstallFunctions(StringIterator.prototype, DONT_ENUM, [ |
92 'next', StringIteratorNext | 92 'next', StringIteratorNext |
93 ]); | 93 ]); |
94 %FunctionSetName(StringIteratorIterator, '[Symbol.iterator]'); | 94 %FunctionSetName(StringIteratorIterator, '[Symbol.iterator]'); |
95 %AddNamedProperty(StringIterator.prototype, symbolIterator, | 95 %AddNamedProperty(StringIterator.prototype, symbolIterator, |
96 StringIteratorIterator, DONT_ENUM); | 96 StringIteratorIterator, DONT_ENUM); |
97 %AddNamedProperty(StringIterator.prototype, symbolToStringTag, | 97 %AddNamedProperty(StringIterator.prototype, symbolToStringTag, |
98 "String Iterator", READ_ONLY | DONT_ENUM); | 98 "String Iterator", READ_ONLY | DONT_ENUM); |
99 | 99 |
100 %FunctionSetName(StringPrototypeIterator, '[Symbol.iterator]'); | 100 %FunctionSetName(StringPrototypeIterator, '[Symbol.iterator]'); |
101 %AddNamedProperty(GlobalString.prototype, symbolIterator, | 101 %AddNamedProperty(GlobalString.prototype, symbolIterator, |
102 StringPrototypeIterator, DONT_ENUM); | 102 StringPrototypeIterator, DONT_ENUM); |
103 | 103 |
104 })(); | 104 })(); |
OLD | NEW |