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

Side by Side Diff: src/collection-iterator.js

Issue 1128233008: [es6] Iterators and generators should "extend" %IteratorPrototype% (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add missing files Created 5 years, 7 months 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 | « src/bootstrapper.cc ('k') | src/generator.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 var $mapEntries; 5 var $mapEntries;
6 var $mapIteratorNext; 6 var $mapIteratorNext;
7 var $setIteratorNext; 7 var $setIteratorNext;
8 var $setValues; 8 var $setValues;
9 9
10 (function(global, shared, exports) { 10 (function(global, shared, exports) {
11 11
12 "use strict"; 12 "use strict";
13 13
14 %CheckIsBootstrapping(); 14 %CheckIsBootstrapping();
15 15
16 var GlobalMap = global.Map; 16 var GlobalMap = global.Map;
17 var GlobalObject = global.Object;
18 var GlobalSet = global.Set; 17 var GlobalSet = global.Set;
19 18
20 // ------------------------------------------------------------------- 19 // -------------------------------------------------------------------
21 20
22 function SetIteratorConstructor(set, kind) { 21 function SetIteratorConstructor(set, kind) {
23 %SetIteratorInitialize(this, set, kind); 22 %SetIteratorInitialize(this, set, kind);
24 } 23 }
25 24
26 25
27 function SetIteratorNextJS() { 26 function SetIteratorNextJS() {
(...skipping 14 matching lines...) Expand all
42 break; 41 break;
43 case ITERATOR_KIND_ENTRIES: 42 case ITERATOR_KIND_ENTRIES:
44 value_array[1] = value_array[0]; 43 value_array[1] = value_array[0];
45 break; 44 break;
46 } 45 }
47 46
48 return entry; 47 return entry;
49 } 48 }
50 49
51 50
52 function SetIteratorSymbolIterator() {
53 return this;
54 }
55
56
57 function SetEntries() { 51 function SetEntries() {
58 if (!IS_SET(this)) { 52 if (!IS_SET(this)) {
59 throw MakeTypeError(kIncompatibleMethodReceiver, 53 throw MakeTypeError(kIncompatibleMethodReceiver,
60 'Set.prototype.entries', this); 54 'Set.prototype.entries', this);
61 } 55 }
62 return new SetIterator(this, ITERATOR_KIND_ENTRIES); 56 return new SetIterator(this, ITERATOR_KIND_ENTRIES);
63 } 57 }
64 58
65 59
66 function SetValues() { 60 function SetValues() {
67 if (!IS_SET(this)) { 61 if (!IS_SET(this)) {
68 throw MakeTypeError(kIncompatibleMethodReceiver, 62 throw MakeTypeError(kIncompatibleMethodReceiver,
69 'Set.prototype.values', this); 63 'Set.prototype.values', this);
70 } 64 }
71 return new SetIterator(this, ITERATOR_KIND_VALUES); 65 return new SetIterator(this, ITERATOR_KIND_VALUES);
72 } 66 }
73 67
74 // ------------------------------------------------------------------- 68 // -------------------------------------------------------------------
75 69
76 %SetCode(SetIterator, SetIteratorConstructor); 70 %SetCode(SetIterator, SetIteratorConstructor);
77 %FunctionSetPrototype(SetIterator, new GlobalObject()); 71 %FunctionSetPrototype(SetIterator, {__proto__: $iteratorPrototype});
78 %FunctionSetInstanceClassName(SetIterator, 'Set Iterator'); 72 %FunctionSetInstanceClassName(SetIterator, 'Set Iterator');
79 $installFunctions(SetIterator.prototype, DONT_ENUM, [ 73 $installFunctions(SetIterator.prototype, DONT_ENUM, [
80 'next', SetIteratorNextJS 74 'next', SetIteratorNextJS
81 ]); 75 ]);
82 76
83 $setFunctionName(SetIteratorSymbolIterator, symbolIterator);
84 %AddNamedProperty(SetIterator.prototype, symbolIterator,
85 SetIteratorSymbolIterator, DONT_ENUM);
86 %AddNamedProperty(SetIterator.prototype, symbolToStringTag, 77 %AddNamedProperty(SetIterator.prototype, symbolToStringTag,
87 "Set Iterator", READ_ONLY | DONT_ENUM); 78 "Set Iterator", READ_ONLY | DONT_ENUM);
88 79
89 $installFunctions(GlobalSet.prototype, DONT_ENUM, [ 80 $installFunctions(GlobalSet.prototype, DONT_ENUM, [
90 'entries', SetEntries, 81 'entries', SetEntries,
91 'keys', SetValues, 82 'keys', SetValues,
92 'values', SetValues 83 'values', SetValues
93 ]); 84 ]);
94 85
95 %AddNamedProperty(GlobalSet.prototype, symbolIterator, SetValues, DONT_ENUM); 86 %AddNamedProperty(GlobalSet.prototype, symbolIterator, SetValues, DONT_ENUM);
96 87
97 $setIteratorNext = SetIteratorNextJS; 88 $setIteratorNext = SetIteratorNextJS;
98 $setValues = SetValues; 89 $setValues = SetValues;
99 90
100 // ------------------------------------------------------------------- 91 // -------------------------------------------------------------------
101 92
102 function MapIteratorConstructor(map, kind) { 93 function MapIteratorConstructor(map, kind) {
103 %MapIteratorInitialize(this, map, kind); 94 %MapIteratorInitialize(this, map, kind);
104 } 95 }
105 96
106 97
107 function MapIteratorSymbolIterator() {
108 return this;
109 }
110
111
112 function MapIteratorNextJS() { 98 function MapIteratorNextJS() {
113 if (!IS_MAP_ITERATOR(this)) { 99 if (!IS_MAP_ITERATOR(this)) {
114 throw MakeTypeError(kIncompatibleMethodReceiver, 100 throw MakeTypeError(kIncompatibleMethodReceiver,
115 'Map Iterator.prototype.next', this); 101 'Map Iterator.prototype.next', this);
116 } 102 }
117 103
118 var value_array = [UNDEFINED, UNDEFINED]; 104 var value_array = [UNDEFINED, UNDEFINED];
119 var entry = {value: value_array, done: false}; 105 var entry = {value: value_array, done: false};
120 switch (%MapIteratorNext(this, value_array)) { 106 switch (%MapIteratorNext(this, value_array)) {
121 case 0: 107 case 0:
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 if (!IS_MAP(this)) { 143 if (!IS_MAP(this)) {
158 throw MakeTypeError(kIncompatibleMethodReceiver, 144 throw MakeTypeError(kIncompatibleMethodReceiver,
159 'Map.prototype.values', this); 145 'Map.prototype.values', this);
160 } 146 }
161 return new MapIterator(this, ITERATOR_KIND_VALUES); 147 return new MapIterator(this, ITERATOR_KIND_VALUES);
162 } 148 }
163 149
164 // ------------------------------------------------------------------- 150 // -------------------------------------------------------------------
165 151
166 %SetCode(MapIterator, MapIteratorConstructor); 152 %SetCode(MapIterator, MapIteratorConstructor);
167 %FunctionSetPrototype(MapIterator, new GlobalObject()); 153 %FunctionSetPrototype(MapIterator, {__proto__: $iteratorPrototype});
168 %FunctionSetInstanceClassName(MapIterator, 'Map Iterator'); 154 %FunctionSetInstanceClassName(MapIterator, 'Map Iterator');
169 $installFunctions(MapIterator.prototype, DONT_ENUM, [ 155 $installFunctions(MapIterator.prototype, DONT_ENUM, [
170 'next', MapIteratorNextJS 156 'next', MapIteratorNextJS
171 ]); 157 ]);
172 158
173 $setFunctionName(MapIteratorSymbolIterator, symbolIterator);
174 %AddNamedProperty(MapIterator.prototype, symbolIterator,
175 MapIteratorSymbolIterator, DONT_ENUM);
176 %AddNamedProperty(MapIterator.prototype, symbolToStringTag, 159 %AddNamedProperty(MapIterator.prototype, symbolToStringTag,
177 "Map Iterator", READ_ONLY | DONT_ENUM); 160 "Map Iterator", READ_ONLY | DONT_ENUM);
178 161
179 162
180 $installFunctions(GlobalMap.prototype, DONT_ENUM, [ 163 $installFunctions(GlobalMap.prototype, DONT_ENUM, [
181 'entries', MapEntries, 164 'entries', MapEntries,
182 'keys', MapKeys, 165 'keys', MapKeys,
183 'values', MapValues 166 'values', MapValues
184 ]); 167 ]);
185 168
186 %AddNamedProperty(GlobalMap.prototype, symbolIterator, MapEntries, DONT_ENUM); 169 %AddNamedProperty(GlobalMap.prototype, symbolIterator, MapEntries, DONT_ENUM);
187 170
188 $mapEntries = MapEntries; 171 $mapEntries = MapEntries;
189 $mapIteratorNext = MapIteratorNextJS; 172 $mapIteratorNext = MapIteratorNextJS;
190 173
191 }) 174 })
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/generator.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698