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

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

Issue 1094563002: Wrap map and set implementation in functions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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/collection.js ('k') | src/mirror-debugger.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;
6 var $mapIteratorNext;
7 var $setIteratorNext;
8 var $setValues;
9
10 (function() {
11
5 "use strict"; 12 "use strict";
6 13
14 %CheckIsBootstrapping();
7 15
8 // This file relies on the fact that the following declaration has been made 16 var GlobalMap = global.Map;
9 // in runtime.js: 17 var GlobalObject = global.Object;
10 // var $Set = global.Set; 18 var GlobalSet = global.Set;
11 // var $Map = global.Map;
12 19
20 // -------------------------------------------------------------------
13 21
14 function SetIteratorConstructor(set, kind) { 22 function SetIteratorConstructor(set, kind) {
15 %SetIteratorInitialize(this, set, kind); 23 %SetIteratorInitialize(this, set, kind);
16 } 24 }
17 25
18 26
19 function SetIteratorNextJS() { 27 function SetIteratorNextJS() {
20 if (!IS_SET_ITERATOR(this)) { 28 if (!IS_SET_ITERATOR(this)) {
21 throw MakeTypeError('incompatible_method_receiver', 29 throw MakeTypeError('incompatible_method_receiver',
22 ['Set Iterator.prototype.next', this]); 30 ['Set Iterator.prototype.next', this]);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 64
57 65
58 function SetValues() { 66 function SetValues() {
59 if (!IS_SET(this)) { 67 if (!IS_SET(this)) {
60 throw MakeTypeError('incompatible_method_receiver', 68 throw MakeTypeError('incompatible_method_receiver',
61 ['Set.prototype.values', this]); 69 ['Set.prototype.values', this]);
62 } 70 }
63 return new SetIterator(this, ITERATOR_KIND_VALUES); 71 return new SetIterator(this, ITERATOR_KIND_VALUES);
64 } 72 }
65 73
74 // -------------------------------------------------------------------
66 75
67 function SetUpSetIterator() { 76 %SetCode(SetIterator, SetIteratorConstructor);
68 %CheckIsBootstrapping(); 77 %FunctionSetPrototype(SetIterator, new GlobalObject());
78 %FunctionSetInstanceClassName(SetIterator, 'Set Iterator');
79 InstallFunctions(SetIterator.prototype, DONT_ENUM, [
80 'next', SetIteratorNextJS
81 ]);
69 82
70 %SetCode(SetIterator, SetIteratorConstructor); 83 %FunctionSetName(SetIteratorSymbolIterator, '[Symbol.iterator]');
71 %FunctionSetPrototype(SetIterator, new $Object()); 84 %AddNamedProperty(SetIterator.prototype, symbolIterator,
72 %FunctionSetInstanceClassName(SetIterator, 'Set Iterator'); 85 SetIteratorSymbolIterator, DONT_ENUM);
73 InstallFunctions(SetIterator.prototype, DONT_ENUM, [ 86 %AddNamedProperty(SetIterator.prototype, symbolToStringTag,
74 'next', SetIteratorNextJS 87 "Set Iterator", READ_ONLY | DONT_ENUM);
75 ]);
76 88
77 %FunctionSetName(SetIteratorSymbolIterator, '[Symbol.iterator]'); 89 InstallFunctions(GlobalSet.prototype, DONT_ENUM, [
78 %AddNamedProperty(SetIterator.prototype, symbolIterator, 90 'entries', SetEntries,
79 SetIteratorSymbolIterator, DONT_ENUM); 91 'keys', SetValues,
80 %AddNamedProperty(SetIterator.prototype, symbolToStringTag, 92 'values', SetValues
81 "Set Iterator", READ_ONLY | DONT_ENUM); 93 ]);
82 }
83 94
84 SetUpSetIterator(); 95 %AddNamedProperty(GlobalSet.prototype, symbolIterator, SetValues, DONT_ENUM);
85 96
97 $setIteratorNext = SetIteratorNextJS;
98 $setValues = SetValues;
86 99
87 function ExtendSetPrototype() { 100 // -------------------------------------------------------------------
88 %CheckIsBootstrapping();
89
90 InstallFunctions($Set.prototype, DONT_ENUM, [
91 'entries', SetEntries,
92 'keys', SetValues,
93 'values', SetValues
94 ]);
95
96 %AddNamedProperty($Set.prototype, symbolIterator, SetValues, DONT_ENUM);
97 }
98
99 ExtendSetPrototype();
100
101
102 101
103 function MapIteratorConstructor(map, kind) { 102 function MapIteratorConstructor(map, kind) {
104 %MapIteratorInitialize(this, map, kind); 103 %MapIteratorInitialize(this, map, kind);
105 } 104 }
106 105
107 106
108 function MapIteratorSymbolIterator() { 107 function MapIteratorSymbolIterator() {
109 return this; 108 return this;
110 } 109 }
111 110
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 154
156 155
157 function MapValues() { 156 function MapValues() {
158 if (!IS_MAP(this)) { 157 if (!IS_MAP(this)) {
159 throw MakeTypeError('incompatible_method_receiver', 158 throw MakeTypeError('incompatible_method_receiver',
160 ['Map.prototype.values', this]); 159 ['Map.prototype.values', this]);
161 } 160 }
162 return new MapIterator(this, ITERATOR_KIND_VALUES); 161 return new MapIterator(this, ITERATOR_KIND_VALUES);
163 } 162 }
164 163
164 // -------------------------------------------------------------------
165 165
166 function SetUpMapIterator() { 166 %SetCode(MapIterator, MapIteratorConstructor);
167 %CheckIsBootstrapping(); 167 %FunctionSetPrototype(MapIterator, new GlobalObject());
168 %FunctionSetInstanceClassName(MapIterator, 'Map Iterator');
169 InstallFunctions(MapIterator.prototype, DONT_ENUM, [
170 'next', MapIteratorNextJS
171 ]);
168 172
169 %SetCode(MapIterator, MapIteratorConstructor); 173 %FunctionSetName(MapIteratorSymbolIterator, '[Symbol.iterator]');
170 %FunctionSetPrototype(MapIterator, new $Object()); 174 %AddNamedProperty(MapIterator.prototype, symbolIterator,
171 %FunctionSetInstanceClassName(MapIterator, 'Map Iterator'); 175 MapIteratorSymbolIterator, DONT_ENUM);
172 InstallFunctions(MapIterator.prototype, DONT_ENUM, [ 176 %AddNamedProperty(MapIterator.prototype, symbolToStringTag,
173 'next', MapIteratorNextJS 177 "Map Iterator", READ_ONLY | DONT_ENUM);
174 ]);
175
176 %FunctionSetName(MapIteratorSymbolIterator, '[Symbol.iterator]');
177 %AddNamedProperty(MapIterator.prototype, symbolIterator,
178 MapIteratorSymbolIterator, DONT_ENUM);
179 %AddNamedProperty(MapIterator.prototype, symbolToStringTag,
180 "Map Iterator", READ_ONLY | DONT_ENUM);
181 }
182
183 SetUpMapIterator();
184 178
185 179
186 function ExtendMapPrototype() { 180 InstallFunctions(GlobalMap.prototype, DONT_ENUM, [
187 %CheckIsBootstrapping(); 181 'entries', MapEntries,
182 'keys', MapKeys,
183 'values', MapValues
184 ]);
188 185
189 InstallFunctions($Map.prototype, DONT_ENUM, [ 186 %AddNamedProperty(GlobalMap.prototype, symbolIterator, MapEntries, DONT_ENUM);
190 'entries', MapEntries,
191 'keys', MapKeys,
192 'values', MapValues
193 ]);
194 187
195 %AddNamedProperty($Map.prototype, symbolIterator, MapEntries, DONT_ENUM); 188 $mapEntries = MapEntries;
196 } 189 $mapIteratorNext = MapIteratorNextJS;
197 190
198 ExtendMapPrototype(); 191 })();
OLDNEW
« no previous file with comments | « src/collection.js ('k') | src/mirror-debugger.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698