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

Side by Side Diff: src/runtime/runtime-collections.cc

Issue 2613723002: [runtime] Use DCHECK_EQ instead of DCHECK for number of args. (Closed)
Patch Set: Rebase. Created 3 years, 11 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/runtime/runtime-classes.cc ('k') | src/runtime/runtime-compiler.cc » ('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 #include "src/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/conversions-inl.h" 8 #include "src/conversions-inl.h"
9 #include "src/factory.h" 9 #include "src/factory.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 14
15 RUNTIME_FUNCTION(Runtime_StringGetRawHashField) { 15 RUNTIME_FUNCTION(Runtime_StringGetRawHashField) {
16 HandleScope scope(isolate); 16 HandleScope scope(isolate);
17 DCHECK(args.length() == 1); 17 DCHECK_EQ(1, args.length());
18 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); 18 CONVERT_ARG_HANDLE_CHECKED(String, string, 0);
19 return *isolate->factory()->NewNumberFromUint(string->hash_field()); 19 return *isolate->factory()->NewNumberFromUint(string->hash_field());
20 } 20 }
21 21
22 22
23 RUNTIME_FUNCTION(Runtime_TheHole) { 23 RUNTIME_FUNCTION(Runtime_TheHole) {
24 SealHandleScope shs(isolate); 24 SealHandleScope shs(isolate);
25 DCHECK(args.length() == 0); 25 DCHECK_EQ(0, args.length());
26 return isolate->heap()->the_hole_value(); 26 return isolate->heap()->the_hole_value();
27 } 27 }
28 28
29 29
30 RUNTIME_FUNCTION(Runtime_JSCollectionGetTable) { 30 RUNTIME_FUNCTION(Runtime_JSCollectionGetTable) {
31 SealHandleScope shs(isolate); 31 SealHandleScope shs(isolate);
32 DCHECK(args.length() == 1); 32 DCHECK_EQ(1, args.length());
33 CONVERT_ARG_CHECKED(JSObject, object, 0); 33 CONVERT_ARG_CHECKED(JSObject, object, 0);
34 CHECK(object->IsJSSet() || object->IsJSMap()); 34 CHECK(object->IsJSSet() || object->IsJSMap());
35 return static_cast<JSCollection*>(object)->table(); 35 return static_cast<JSCollection*>(object)->table();
36 } 36 }
37 37
38 38
39 RUNTIME_FUNCTION(Runtime_GenericHash) { 39 RUNTIME_FUNCTION(Runtime_GenericHash) {
40 HandleScope scope(isolate); 40 HandleScope scope(isolate);
41 DCHECK(args.length() == 1); 41 DCHECK_EQ(1, args.length());
42 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 42 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
43 Smi* hash = Object::GetOrCreateHash(isolate, object); 43 Smi* hash = Object::GetOrCreateHash(isolate, object);
44 return hash; 44 return hash;
45 } 45 }
46 46
47 47
48 RUNTIME_FUNCTION(Runtime_SetInitialize) { 48 RUNTIME_FUNCTION(Runtime_SetInitialize) {
49 HandleScope scope(isolate); 49 HandleScope scope(isolate);
50 DCHECK(args.length() == 1); 50 DCHECK_EQ(1, args.length());
51 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 51 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0);
52 JSSet::Initialize(holder, isolate); 52 JSSet::Initialize(holder, isolate);
53 return *holder; 53 return *holder;
54 } 54 }
55 55
56 56
57 RUNTIME_FUNCTION(Runtime_SetGrow) { 57 RUNTIME_FUNCTION(Runtime_SetGrow) {
58 HandleScope scope(isolate); 58 HandleScope scope(isolate);
59 DCHECK(args.length() == 1); 59 DCHECK_EQ(1, args.length());
60 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 60 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0);
61 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table())); 61 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table()));
62 table = OrderedHashSet::EnsureGrowable(table); 62 table = OrderedHashSet::EnsureGrowable(table);
63 holder->set_table(*table); 63 holder->set_table(*table);
64 return isolate->heap()->undefined_value(); 64 return isolate->heap()->undefined_value();
65 } 65 }
66 66
67 67
68 RUNTIME_FUNCTION(Runtime_SetShrink) { 68 RUNTIME_FUNCTION(Runtime_SetShrink) {
69 HandleScope scope(isolate); 69 HandleScope scope(isolate);
70 DCHECK(args.length() == 1); 70 DCHECK_EQ(1, args.length());
71 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 71 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0);
72 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table())); 72 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table()));
73 table = OrderedHashSet::Shrink(table); 73 table = OrderedHashSet::Shrink(table);
74 holder->set_table(*table); 74 holder->set_table(*table);
75 return isolate->heap()->undefined_value(); 75 return isolate->heap()->undefined_value();
76 } 76 }
77 77
78 78
79 RUNTIME_FUNCTION(Runtime_SetClear) { 79 RUNTIME_FUNCTION(Runtime_SetClear) {
80 HandleScope scope(isolate); 80 HandleScope scope(isolate);
81 DCHECK(args.length() == 1); 81 DCHECK_EQ(1, args.length());
82 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 82 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0);
83 JSSet::Clear(holder); 83 JSSet::Clear(holder);
84 return isolate->heap()->undefined_value(); 84 return isolate->heap()->undefined_value();
85 } 85 }
86 86
87 87
88 RUNTIME_FUNCTION(Runtime_SetIteratorInitialize) { 88 RUNTIME_FUNCTION(Runtime_SetIteratorInitialize) {
89 HandleScope scope(isolate); 89 HandleScope scope(isolate);
90 DCHECK(args.length() == 3); 90 DCHECK_EQ(3, args.length());
91 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0); 91 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0);
92 CONVERT_ARG_HANDLE_CHECKED(JSSet, set, 1); 92 CONVERT_ARG_HANDLE_CHECKED(JSSet, set, 1);
93 CONVERT_SMI_ARG_CHECKED(kind, 2) 93 CONVERT_SMI_ARG_CHECKED(kind, 2)
94 CHECK(kind == JSSetIterator::kKindValues || 94 CHECK(kind == JSSetIterator::kKindValues ||
95 kind == JSSetIterator::kKindEntries); 95 kind == JSSetIterator::kKindEntries);
96 Handle<OrderedHashSet> table(OrderedHashSet::cast(set->table())); 96 Handle<OrderedHashSet> table(OrderedHashSet::cast(set->table()));
97 holder->set_table(*table); 97 holder->set_table(*table);
98 holder->set_index(Smi::kZero); 98 holder->set_index(Smi::kZero);
99 holder->set_kind(Smi::FromInt(kind)); 99 holder->set_kind(Smi::FromInt(kind));
100 return isolate->heap()->undefined_value(); 100 return isolate->heap()->undefined_value();
101 } 101 }
102 102
103 103
104 RUNTIME_FUNCTION(Runtime_SetIteratorClone) { 104 RUNTIME_FUNCTION(Runtime_SetIteratorClone) {
105 HandleScope scope(isolate); 105 HandleScope scope(isolate);
106 DCHECK(args.length() == 1); 106 DCHECK_EQ(1, args.length());
107 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0); 107 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0);
108 108
109 Handle<JSSetIterator> result = isolate->factory()->NewJSSetIterator(); 109 Handle<JSSetIterator> result = isolate->factory()->NewJSSetIterator();
110 result->set_table(holder->table()); 110 result->set_table(holder->table());
111 result->set_index(Smi::FromInt(Smi::cast(holder->index())->value())); 111 result->set_index(Smi::FromInt(Smi::cast(holder->index())->value()));
112 result->set_kind(Smi::FromInt(Smi::cast(holder->kind())->value())); 112 result->set_kind(Smi::FromInt(Smi::cast(holder->kind())->value()));
113 113
114 return *result; 114 return *result;
115 } 115 }
116 116
117 117
118 RUNTIME_FUNCTION(Runtime_SetIteratorNext) { 118 RUNTIME_FUNCTION(Runtime_SetIteratorNext) {
119 SealHandleScope shs(isolate); 119 SealHandleScope shs(isolate);
120 DCHECK(args.length() == 2); 120 DCHECK_EQ(2, args.length());
121 CONVERT_ARG_CHECKED(JSSetIterator, holder, 0); 121 CONVERT_ARG_CHECKED(JSSetIterator, holder, 0);
122 CONVERT_ARG_CHECKED(JSArray, value_array, 1); 122 CONVERT_ARG_CHECKED(JSArray, value_array, 1);
123 return holder->Next(value_array); 123 return holder->Next(value_array);
124 } 124 }
125 125
126 126
127 // The array returned contains the following information: 127 // The array returned contains the following information:
128 // 0: HasMore flag 128 // 0: HasMore flag
129 // 1: Iteration index 129 // 1: Iteration index
130 // 2: Iteration kind 130 // 2: Iteration kind
131 RUNTIME_FUNCTION(Runtime_SetIteratorDetails) { 131 RUNTIME_FUNCTION(Runtime_SetIteratorDetails) {
132 HandleScope scope(isolate); 132 HandleScope scope(isolate);
133 DCHECK(args.length() == 1); 133 DCHECK_EQ(1, args.length());
134 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0); 134 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0);
135 Handle<FixedArray> details = isolate->factory()->NewFixedArray(4); 135 Handle<FixedArray> details = isolate->factory()->NewFixedArray(4);
136 details->set(0, isolate->heap()->ToBoolean(holder->HasMore())); 136 details->set(0, isolate->heap()->ToBoolean(holder->HasMore()));
137 details->set(1, holder->index()); 137 details->set(1, holder->index());
138 details->set(2, holder->kind()); 138 details->set(2, holder->kind());
139 return *isolate->factory()->NewJSArrayWithElements(details); 139 return *isolate->factory()->NewJSArrayWithElements(details);
140 } 140 }
141 141
142 142
143 RUNTIME_FUNCTION(Runtime_MapInitialize) { 143 RUNTIME_FUNCTION(Runtime_MapInitialize) {
144 HandleScope scope(isolate); 144 HandleScope scope(isolate);
145 DCHECK(args.length() == 1); 145 DCHECK_EQ(1, args.length());
146 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 146 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0);
147 JSMap::Initialize(holder, isolate); 147 JSMap::Initialize(holder, isolate);
148 return *holder; 148 return *holder;
149 } 149 }
150 150
151 151
152 RUNTIME_FUNCTION(Runtime_MapShrink) { 152 RUNTIME_FUNCTION(Runtime_MapShrink) {
153 HandleScope scope(isolate); 153 HandleScope scope(isolate);
154 DCHECK(args.length() == 1); 154 DCHECK_EQ(1, args.length());
155 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 155 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0);
156 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table())); 156 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table()));
157 table = OrderedHashMap::Shrink(table); 157 table = OrderedHashMap::Shrink(table);
158 holder->set_table(*table); 158 holder->set_table(*table);
159 return isolate->heap()->undefined_value(); 159 return isolate->heap()->undefined_value();
160 } 160 }
161 161
162 162
163 RUNTIME_FUNCTION(Runtime_MapClear) { 163 RUNTIME_FUNCTION(Runtime_MapClear) {
164 HandleScope scope(isolate); 164 HandleScope scope(isolate);
165 DCHECK(args.length() == 1); 165 DCHECK_EQ(1, args.length());
166 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 166 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0);
167 JSMap::Clear(holder); 167 JSMap::Clear(holder);
168 return isolate->heap()->undefined_value(); 168 return isolate->heap()->undefined_value();
169 } 169 }
170 170
171 171
172 RUNTIME_FUNCTION(Runtime_MapGrow) { 172 RUNTIME_FUNCTION(Runtime_MapGrow) {
173 HandleScope scope(isolate); 173 HandleScope scope(isolate);
174 DCHECK(args.length() == 1); 174 DCHECK_EQ(1, args.length());
175 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 175 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0);
176 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table())); 176 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table()));
177 table = OrderedHashMap::EnsureGrowable(table); 177 table = OrderedHashMap::EnsureGrowable(table);
178 holder->set_table(*table); 178 holder->set_table(*table);
179 return isolate->heap()->undefined_value(); 179 return isolate->heap()->undefined_value();
180 } 180 }
181 181
182 182
183 RUNTIME_FUNCTION(Runtime_MapIteratorInitialize) { 183 RUNTIME_FUNCTION(Runtime_MapIteratorInitialize) {
184 HandleScope scope(isolate); 184 HandleScope scope(isolate);
185 DCHECK(args.length() == 3); 185 DCHECK_EQ(3, args.length());
186 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0); 186 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0);
187 CONVERT_ARG_HANDLE_CHECKED(JSMap, map, 1); 187 CONVERT_ARG_HANDLE_CHECKED(JSMap, map, 1);
188 CONVERT_SMI_ARG_CHECKED(kind, 2) 188 CONVERT_SMI_ARG_CHECKED(kind, 2)
189 CHECK(kind == JSMapIterator::kKindKeys || 189 CHECK(kind == JSMapIterator::kKindKeys ||
190 kind == JSMapIterator::kKindValues || 190 kind == JSMapIterator::kKindValues ||
191 kind == JSMapIterator::kKindEntries); 191 kind == JSMapIterator::kKindEntries);
192 Handle<OrderedHashMap> table(OrderedHashMap::cast(map->table())); 192 Handle<OrderedHashMap> table(OrderedHashMap::cast(map->table()));
193 holder->set_table(*table); 193 holder->set_table(*table);
194 holder->set_index(Smi::kZero); 194 holder->set_index(Smi::kZero);
195 holder->set_kind(Smi::FromInt(kind)); 195 holder->set_kind(Smi::FromInt(kind));
196 return isolate->heap()->undefined_value(); 196 return isolate->heap()->undefined_value();
197 } 197 }
198 198
199 199
200 RUNTIME_FUNCTION(Runtime_MapIteratorClone) { 200 RUNTIME_FUNCTION(Runtime_MapIteratorClone) {
201 HandleScope scope(isolate); 201 HandleScope scope(isolate);
202 DCHECK(args.length() == 1); 202 DCHECK_EQ(1, args.length());
203 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0); 203 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0);
204 204
205 Handle<JSMapIterator> result = isolate->factory()->NewJSMapIterator(); 205 Handle<JSMapIterator> result = isolate->factory()->NewJSMapIterator();
206 result->set_table(holder->table()); 206 result->set_table(holder->table());
207 result->set_index(Smi::FromInt(Smi::cast(holder->index())->value())); 207 result->set_index(Smi::FromInt(Smi::cast(holder->index())->value()));
208 result->set_kind(Smi::FromInt(Smi::cast(holder->kind())->value())); 208 result->set_kind(Smi::FromInt(Smi::cast(holder->kind())->value()));
209 209
210 return *result; 210 return *result;
211 } 211 }
212 212
213 213
214 // The array returned contains the following information: 214 // The array returned contains the following information:
215 // 0: HasMore flag 215 // 0: HasMore flag
216 // 1: Iteration index 216 // 1: Iteration index
217 // 2: Iteration kind 217 // 2: Iteration kind
218 RUNTIME_FUNCTION(Runtime_MapIteratorDetails) { 218 RUNTIME_FUNCTION(Runtime_MapIteratorDetails) {
219 HandleScope scope(isolate); 219 HandleScope scope(isolate);
220 DCHECK(args.length() == 1); 220 DCHECK_EQ(1, args.length());
221 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0); 221 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0);
222 Handle<FixedArray> details = isolate->factory()->NewFixedArray(4); 222 Handle<FixedArray> details = isolate->factory()->NewFixedArray(4);
223 details->set(0, isolate->heap()->ToBoolean(holder->HasMore())); 223 details->set(0, isolate->heap()->ToBoolean(holder->HasMore()));
224 details->set(1, holder->index()); 224 details->set(1, holder->index());
225 details->set(2, holder->kind()); 225 details->set(2, holder->kind());
226 return *isolate->factory()->NewJSArrayWithElements(details); 226 return *isolate->factory()->NewJSArrayWithElements(details);
227 } 227 }
228 228
229 229
230 RUNTIME_FUNCTION(Runtime_GetWeakMapEntries) { 230 RUNTIME_FUNCTION(Runtime_GetWeakMapEntries) {
231 HandleScope scope(isolate); 231 HandleScope scope(isolate);
232 DCHECK(args.length() == 2); 232 DCHECK_EQ(2, args.length());
233 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, holder, 0); 233 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, holder, 0);
234 CONVERT_NUMBER_CHECKED(int, max_entries, Int32, args[1]); 234 CONVERT_NUMBER_CHECKED(int, max_entries, Int32, args[1]);
235 CHECK(max_entries >= 0); 235 CHECK(max_entries >= 0);
236 236
237 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); 237 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table()));
238 if (max_entries == 0 || max_entries > table->NumberOfElements()) { 238 if (max_entries == 0 || max_entries > table->NumberOfElements()) {
239 max_entries = table->NumberOfElements(); 239 max_entries = table->NumberOfElements();
240 } 240 }
241 Handle<FixedArray> entries = 241 Handle<FixedArray> entries =
242 isolate->factory()->NewFixedArray(max_entries * 2); 242 isolate->factory()->NewFixedArray(max_entries * 2);
(...skipping 14 matching lines...) Expand all
257 } 257 }
258 } 258 }
259 DCHECK_EQ(max_entries * 2, count); 259 DCHECK_EQ(max_entries * 2, count);
260 } 260 }
261 return *isolate->factory()->NewJSArrayWithElements(entries); 261 return *isolate->factory()->NewJSArrayWithElements(entries);
262 } 262 }
263 263
264 264
265 RUNTIME_FUNCTION(Runtime_MapIteratorNext) { 265 RUNTIME_FUNCTION(Runtime_MapIteratorNext) {
266 SealHandleScope shs(isolate); 266 SealHandleScope shs(isolate);
267 DCHECK(args.length() == 2); 267 DCHECK_EQ(2, args.length());
268 CONVERT_ARG_CHECKED(JSMapIterator, holder, 0); 268 CONVERT_ARG_CHECKED(JSMapIterator, holder, 0);
269 CONVERT_ARG_CHECKED(JSArray, value_array, 1); 269 CONVERT_ARG_CHECKED(JSArray, value_array, 1);
270 return holder->Next(value_array); 270 return holder->Next(value_array);
271 } 271 }
272 272
273 273
274 RUNTIME_FUNCTION(Runtime_WeakCollectionInitialize) { 274 RUNTIME_FUNCTION(Runtime_WeakCollectionInitialize) {
275 HandleScope scope(isolate); 275 HandleScope scope(isolate);
276 DCHECK(args.length() == 1); 276 DCHECK_EQ(1, args.length());
277 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0); 277 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0);
278 JSWeakCollection::Initialize(weak_collection, isolate); 278 JSWeakCollection::Initialize(weak_collection, isolate);
279 return *weak_collection; 279 return *weak_collection;
280 } 280 }
281 281
282 282
283 RUNTIME_FUNCTION(Runtime_WeakCollectionGet) { 283 RUNTIME_FUNCTION(Runtime_WeakCollectionGet) {
284 HandleScope scope(isolate); 284 HandleScope scope(isolate);
285 DCHECK(args.length() == 3); 285 DCHECK_EQ(3, args.length());
286 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0); 286 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0);
287 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 287 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
288 CONVERT_SMI_ARG_CHECKED(hash, 2) 288 CONVERT_SMI_ARG_CHECKED(hash, 2)
289 CHECK(key->IsJSReceiver() || key->IsSymbol()); 289 CHECK(key->IsJSReceiver() || key->IsSymbol());
290 Handle<ObjectHashTable> table( 290 Handle<ObjectHashTable> table(
291 ObjectHashTable::cast(weak_collection->table())); 291 ObjectHashTable::cast(weak_collection->table()));
292 CHECK(table->IsKey(isolate, *key)); 292 CHECK(table->IsKey(isolate, *key));
293 Handle<Object> lookup(table->Lookup(key, hash), isolate); 293 Handle<Object> lookup(table->Lookup(key, hash), isolate);
294 return lookup->IsTheHole(isolate) ? isolate->heap()->undefined_value() 294 return lookup->IsTheHole(isolate) ? isolate->heap()->undefined_value()
295 : *lookup; 295 : *lookup;
296 } 296 }
297 297
298 298
299 RUNTIME_FUNCTION(Runtime_WeakCollectionHas) { 299 RUNTIME_FUNCTION(Runtime_WeakCollectionHas) {
300 HandleScope scope(isolate); 300 HandleScope scope(isolate);
301 DCHECK(args.length() == 3); 301 DCHECK_EQ(3, args.length());
302 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0); 302 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0);
303 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 303 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
304 CONVERT_SMI_ARG_CHECKED(hash, 2) 304 CONVERT_SMI_ARG_CHECKED(hash, 2)
305 CHECK(key->IsJSReceiver() || key->IsSymbol()); 305 CHECK(key->IsJSReceiver() || key->IsSymbol());
306 Handle<ObjectHashTable> table( 306 Handle<ObjectHashTable> table(
307 ObjectHashTable::cast(weak_collection->table())); 307 ObjectHashTable::cast(weak_collection->table()));
308 CHECK(table->IsKey(isolate, *key)); 308 CHECK(table->IsKey(isolate, *key));
309 Handle<Object> lookup(table->Lookup(key, hash), isolate); 309 Handle<Object> lookup(table->Lookup(key, hash), isolate);
310 return isolate->heap()->ToBoolean(!lookup->IsTheHole(isolate)); 310 return isolate->heap()->ToBoolean(!lookup->IsTheHole(isolate));
311 } 311 }
312 312
313 313
314 RUNTIME_FUNCTION(Runtime_WeakCollectionDelete) { 314 RUNTIME_FUNCTION(Runtime_WeakCollectionDelete) {
315 HandleScope scope(isolate); 315 HandleScope scope(isolate);
316 DCHECK(args.length() == 3); 316 DCHECK_EQ(3, args.length());
317 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0); 317 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0);
318 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 318 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
319 CONVERT_SMI_ARG_CHECKED(hash, 2) 319 CONVERT_SMI_ARG_CHECKED(hash, 2)
320 CHECK(key->IsJSReceiver() || key->IsSymbol()); 320 CHECK(key->IsJSReceiver() || key->IsSymbol());
321 Handle<ObjectHashTable> table( 321 Handle<ObjectHashTable> table(
322 ObjectHashTable::cast(weak_collection->table())); 322 ObjectHashTable::cast(weak_collection->table()));
323 CHECK(table->IsKey(isolate, *key)); 323 CHECK(table->IsKey(isolate, *key));
324 bool was_present = JSWeakCollection::Delete(weak_collection, key, hash); 324 bool was_present = JSWeakCollection::Delete(weak_collection, key, hash);
325 return isolate->heap()->ToBoolean(was_present); 325 return isolate->heap()->ToBoolean(was_present);
326 } 326 }
327 327
328 328
329 RUNTIME_FUNCTION(Runtime_WeakCollectionSet) { 329 RUNTIME_FUNCTION(Runtime_WeakCollectionSet) {
330 HandleScope scope(isolate); 330 HandleScope scope(isolate);
331 DCHECK(args.length() == 4); 331 DCHECK_EQ(4, args.length());
332 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0); 332 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, weak_collection, 0);
333 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 333 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
334 CHECK(key->IsJSReceiver() || key->IsSymbol()); 334 CHECK(key->IsJSReceiver() || key->IsSymbol());
335 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); 335 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);
336 CONVERT_SMI_ARG_CHECKED(hash, 3) 336 CONVERT_SMI_ARG_CHECKED(hash, 3)
337 Handle<ObjectHashTable> table( 337 Handle<ObjectHashTable> table(
338 ObjectHashTable::cast(weak_collection->table())); 338 ObjectHashTable::cast(weak_collection->table()));
339 CHECK(table->IsKey(isolate, *key)); 339 CHECK(table->IsKey(isolate, *key));
340 JSWeakCollection::Set(weak_collection, key, value, hash); 340 JSWeakCollection::Set(weak_collection, key, value, hash);
341 return *weak_collection; 341 return *weak_collection;
342 } 342 }
343 343
344 344
345 RUNTIME_FUNCTION(Runtime_GetWeakSetValues) { 345 RUNTIME_FUNCTION(Runtime_GetWeakSetValues) {
346 HandleScope scope(isolate); 346 HandleScope scope(isolate);
347 DCHECK(args.length() == 2); 347 DCHECK_EQ(2, args.length());
348 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, holder, 0); 348 CONVERT_ARG_HANDLE_CHECKED(JSWeakCollection, holder, 0);
349 CONVERT_NUMBER_CHECKED(int, max_values, Int32, args[1]); 349 CONVERT_NUMBER_CHECKED(int, max_values, Int32, args[1]);
350 CHECK(max_values >= 0); 350 CHECK(max_values >= 0);
351 351
352 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); 352 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table()));
353 if (max_values == 0 || max_values > table->NumberOfElements()) { 353 if (max_values == 0 || max_values > table->NumberOfElements()) {
354 max_values = table->NumberOfElements(); 354 max_values = table->NumberOfElements();
355 } 355 }
356 Handle<FixedArray> values = isolate->factory()->NewFixedArray(max_values); 356 Handle<FixedArray> values = isolate->factory()->NewFixedArray(max_values);
357 // Recompute max_values because GC could have removed elements from the table. 357 // Recompute max_values because GC could have removed elements from the table.
358 if (max_values > table->NumberOfElements()) { 358 if (max_values > table->NumberOfElements()) {
359 max_values = table->NumberOfElements(); 359 max_values = table->NumberOfElements();
360 } 360 }
361 { 361 {
362 DisallowHeapAllocation no_gc; 362 DisallowHeapAllocation no_gc;
363 int count = 0; 363 int count = 0;
364 for (int i = 0; count < max_values && i < table->Capacity(); i++) { 364 for (int i = 0; count < max_values && i < table->Capacity(); i++) {
365 Object* key = table->KeyAt(i); 365 Object* key = table->KeyAt(i);
366 if (table->IsKey(isolate, key)) values->set(count++, key); 366 if (table->IsKey(isolate, key)) values->set(count++, key);
367 } 367 }
368 DCHECK_EQ(max_values, count); 368 DCHECK_EQ(max_values, count);
369 } 369 }
370 return *isolate->factory()->NewJSArrayWithElements(values); 370 return *isolate->factory()->NewJSArrayWithElements(values);
371 } 371 }
372 } // namespace internal 372 } // namespace internal
373 } // namespace v8 373 } // namespace v8
OLDNEW
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | src/runtime/runtime-compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698