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

Side by Side Diff: src/objects.cc

Issue 289503002: ES6 Map/Set iterators/forEach improvements (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Expanded tests and fixed edge case Created 6 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 | Annotate | Revision Log
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 "v8.h" 5 #include "v8.h"
6 6
7 #include "accessors.h" 7 #include "accessors.h"
8 #include "allocation-site-scopes.h" 8 #include "allocation-site-scopes.h"
9 #include "api.h" 9 #include "api.h"
10 #include "arguments.h" 10 #include "arguments.h"
(...skipping 16196 matching lines...) Expand 10 before | Expand all | Expand 10 after
16207 kHashTableStartIndex + num_buckets + (capacity * kEntrySize), pretenure); 16207 kHashTableStartIndex + num_buckets + (capacity * kEntrySize), pretenure);
16208 backing_store->set_map_no_write_barrier( 16208 backing_store->set_map_no_write_barrier(
16209 isolate->heap()->ordered_hash_table_map()); 16209 isolate->heap()->ordered_hash_table_map());
16210 Handle<Derived> table = Handle<Derived>::cast(backing_store); 16210 Handle<Derived> table = Handle<Derived>::cast(backing_store);
16211 for (int i = 0; i < num_buckets; ++i) { 16211 for (int i = 0; i < num_buckets; ++i) {
16212 table->set(kHashTableStartIndex + i, Smi::FromInt(kNotFound)); 16212 table->set(kHashTableStartIndex + i, Smi::FromInt(kNotFound));
16213 } 16213 }
16214 table->SetNumberOfBuckets(num_buckets); 16214 table->SetNumberOfBuckets(num_buckets);
16215 table->SetNumberOfElements(0); 16215 table->SetNumberOfElements(0);
16216 table->SetNumberOfDeletedElements(0); 16216 table->SetNumberOfDeletedElements(0);
16217 table->set_iterators(isolate->heap()->undefined_value());
16218 return table; 16217 return table;
16219 } 16218 }
16220 16219
16221 16220
16222 template<class Derived, class Iterator, int entrysize> 16221 template<class Derived, class Iterator, int entrysize>
16223 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::EnsureGrowable( 16222 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::EnsureGrowable(
16224 Handle<Derived> table) { 16223 Handle<Derived> table) {
16224 ASSERT(!table->IsObsolete());
16225
16225 int nof = table->NumberOfElements(); 16226 int nof = table->NumberOfElements();
16226 int nod = table->NumberOfDeletedElements(); 16227 int nod = table->NumberOfDeletedElements();
16227 int capacity = table->Capacity(); 16228 int capacity = table->Capacity();
16228 if ((nof + nod) < capacity) return table; 16229 if ((nof + nod) < capacity) return table;
16229 // Don't need to grow if we can simply clear out deleted entries instead. 16230 // Don't need to grow if we can simply clear out deleted entries instead.
16230 // Note that we can't compact in place, though, so we always allocate 16231 // Note that we can't compact in place, though, so we always allocate
16231 // a new table. 16232 // a new table.
16232 return Rehash(table, (nod < (capacity >> 1)) ? capacity << 1 : capacity); 16233 return Rehash(table, (nod < (capacity >> 1)) ? capacity << 1 : capacity);
16233 } 16234 }
16234 16235
16235 16236
16236 template<class Derived, class Iterator, int entrysize> 16237 template<class Derived, class Iterator, int entrysize>
16237 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Shrink( 16238 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Shrink(
16238 Handle<Derived> table) { 16239 Handle<Derived> table) {
16240 ASSERT(!table->IsObsolete());
16241
16239 int nof = table->NumberOfElements(); 16242 int nof = table->NumberOfElements();
16240 int capacity = table->Capacity(); 16243 int capacity = table->Capacity();
16241 if (nof > (capacity >> 2)) return table; 16244 if (nof >= (capacity >> 2)) return table;
arv (Not doing code reviews) 2014/05/14 20:36:36 Since kMinCapacity is 4 we end up with nof=1 not b
16242 return Rehash(table, capacity / 2); 16245 return Rehash(table, capacity / 2);
16243 } 16246 }
16244 16247
16245 16248
16246 template<class Derived, class Iterator, int entrysize> 16249 template<class Derived, class Iterator, int entrysize>
16247 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Clear( 16250 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Clear(
16248 Handle<Derived> table) { 16251 Handle<Derived> table) {
16252 ASSERT(!table->IsObsolete());
16253
16249 Handle<Derived> new_table = 16254 Handle<Derived> new_table =
16250 Allocate(table->GetIsolate(), 16255 Allocate(table->GetIsolate(),
16251 kMinCapacity, 16256 kMinCapacity,
16252 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED); 16257 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
16253 16258
16254 new_table->set_iterators(table->iterators()); 16259 table->SetNextTable(*new_table);
16255 table->set_iterators(table->GetHeap()->undefined_value()); 16260 table->SetNumberOfDeletedElements(-1);
16256
16257 DisallowHeapAllocation no_allocation;
16258 for (Object* object = new_table->iterators();
16259 !object->IsUndefined();
16260 object = Iterator::cast(object)->next_iterator()) {
16261 Iterator::cast(object)->TableCleared();
16262 Iterator::cast(object)->set_table(*new_table);
16263 }
16264 16261
16265 return new_table; 16262 return new_table;
16266 } 16263 }
16267 16264
16268 16265
16269 template<class Derived, class Iterator, int entrysize> 16266 template<class Derived, class Iterator, int entrysize>
16270 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Rehash( 16267 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Rehash(
16271 Handle<Derived> table, int new_capacity) { 16268 Handle<Derived> table, int new_capacity) {
16269 ASSERT(!table->IsObsolete());
16270
16272 Handle<Derived> new_table = 16271 Handle<Derived> new_table =
16273 Allocate(table->GetIsolate(), 16272 Allocate(table->GetIsolate(),
16274 new_capacity, 16273 new_capacity,
16275 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED); 16274 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
16276 int nof = table->NumberOfElements(); 16275 int nof = table->NumberOfElements();
16277 int nod = table->NumberOfDeletedElements(); 16276 int nod = table->NumberOfDeletedElements();
16278 int new_buckets = new_table->NumberOfBuckets(); 16277 int new_buckets = new_table->NumberOfBuckets();
16279 int new_entry = 0; 16278 int new_entry = 0;
16279 int removed_holes_index = 0;
16280
16280 for (int old_entry = 0; old_entry < (nof + nod); ++old_entry) { 16281 for (int old_entry = 0; old_entry < (nof + nod); ++old_entry) {
16281 Object* key = table->KeyAt(old_entry); 16282 Object* key = table->KeyAt(old_entry);
16282 if (key->IsTheHole()) continue; 16283 if (key->IsTheHole()) {
16284 table->SetRemovedIndexAt(removed_holes_index++, old_entry);
16285 continue;
16286 }
16287
16283 Object* hash = key->GetHash(); 16288 Object* hash = key->GetHash();
16284 int bucket = Smi::cast(hash)->value() & (new_buckets - 1); 16289 int bucket = Smi::cast(hash)->value() & (new_buckets - 1);
16285 Object* chain_entry = new_table->get(kHashTableStartIndex + bucket); 16290 Object* chain_entry = new_table->get(kHashTableStartIndex + bucket);
16286 new_table->set(kHashTableStartIndex + bucket, Smi::FromInt(new_entry)); 16291 new_table->set(kHashTableStartIndex + bucket, Smi::FromInt(new_entry));
16287 int new_index = new_table->EntryToIndex(new_entry); 16292 int new_index = new_table->EntryToIndex(new_entry);
16288 int old_index = table->EntryToIndex(old_entry); 16293 int old_index = table->EntryToIndex(old_entry);
16289 for (int i = 0; i < entrysize; ++i) { 16294 for (int i = 0; i < entrysize; ++i) {
16290 Object* value = table->get(old_index + i); 16295 Object* value = table->get(old_index + i);
16291 new_table->set(new_index + i, value); 16296 new_table->set(new_index + i, value);
16292 } 16297 }
16293 new_table->set(new_index + kChainOffset, chain_entry); 16298 new_table->set(new_index + kChainOffset, chain_entry);
16294 ++new_entry; 16299 ++new_entry;
16295 } 16300 }
16301
16302 ASSERT_EQ(nod, removed_holes_index);
16303
16296 new_table->SetNumberOfElements(nof); 16304 new_table->SetNumberOfElements(nof);
16297 16305 table->SetNextTable(*new_table);
16298 new_table->set_iterators(table->iterators());
16299 table->set_iterators(table->GetHeap()->undefined_value());
16300
16301 DisallowHeapAllocation no_allocation;
16302 for (Object* object = new_table->iterators();
16303 !object->IsUndefined();
16304 object = Iterator::cast(object)->next_iterator()) {
16305 Iterator::cast(object)->TableCompacted();
16306 Iterator::cast(object)->set_table(*new_table);
16307 }
16308 16306
16309 return new_table; 16307 return new_table;
16310 } 16308 }
16311 16309
16312 16310
16313 template<class Derived, class Iterator, int entrysize> 16311 template<class Derived, class Iterator, int entrysize>
16314 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry( 16312 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry(
16315 Handle<Object> key) { 16313 Handle<Object> key) {
16314 ASSERT(!IsObsolete());
16315
16316 DisallowHeapAllocation no_gc; 16316 DisallowHeapAllocation no_gc;
16317 ASSERT(!key->IsTheHole()); 16317 ASSERT(!key->IsTheHole());
16318 Object* hash = key->GetHash(); 16318 Object* hash = key->GetHash();
16319 if (hash->IsUndefined()) return kNotFound; 16319 if (hash->IsUndefined()) return kNotFound;
16320 for (int entry = HashToEntry(Smi::cast(hash)->value()); 16320 for (int entry = HashToEntry(Smi::cast(hash)->value());
16321 entry != kNotFound; 16321 entry != kNotFound;
16322 entry = ChainAt(entry)) { 16322 entry = ChainAt(entry)) {
16323 Object* candidate = KeyAt(entry); 16323 Object* candidate = KeyAt(entry);
16324 if (candidate->SameValue(*key)) 16324 if (candidate->SameValue(*key))
16325 return entry; 16325 return entry;
16326 } 16326 }
16327 return kNotFound; 16327 return kNotFound;
16328 } 16328 }
16329 16329
16330 16330
16331 template<class Derived, class Iterator, int entrysize> 16331 template<class Derived, class Iterator, int entrysize>
16332 int OrderedHashTable<Derived, Iterator, entrysize>::AddEntry(int hash) { 16332 int OrderedHashTable<Derived, Iterator, entrysize>::AddEntry(int hash) {
16333 ASSERT(!IsObsolete());
16334
16333 int entry = UsedCapacity(); 16335 int entry = UsedCapacity();
16334 int bucket = HashToBucket(hash); 16336 int bucket = HashToBucket(hash);
16335 int index = EntryToIndex(entry); 16337 int index = EntryToIndex(entry);
16336 Object* chain_entry = get(kHashTableStartIndex + bucket); 16338 Object* chain_entry = get(kHashTableStartIndex + bucket);
16337 set(kHashTableStartIndex + bucket, Smi::FromInt(entry)); 16339 set(kHashTableStartIndex + bucket, Smi::FromInt(entry));
16338 set(index + kChainOffset, chain_entry); 16340 set(index + kChainOffset, chain_entry);
16339 SetNumberOfElements(NumberOfElements() + 1); 16341 SetNumberOfElements(NumberOfElements() + 1);
16340 return index; 16342 return index;
16341 } 16343 }
16342 16344
16343 16345
16344 template<class Derived, class Iterator, int entrysize> 16346 template<class Derived, class Iterator, int entrysize>
16345 void OrderedHashTable<Derived, Iterator, entrysize>::RemoveEntry(int entry) { 16347 void OrderedHashTable<Derived, Iterator, entrysize>::RemoveEntry(int entry) {
16348 ASSERT(!IsObsolete());
16349
16346 int index = EntryToIndex(entry); 16350 int index = EntryToIndex(entry);
16347 for (int i = 0; i < entrysize; ++i) { 16351 for (int i = 0; i < entrysize; ++i) {
16348 set_the_hole(index + i); 16352 set_the_hole(index + i);
16349 } 16353 }
16350 SetNumberOfElements(NumberOfElements() - 1); 16354 SetNumberOfElements(NumberOfElements() - 1);
16351 SetNumberOfDeletedElements(NumberOfDeletedElements() + 1); 16355 SetNumberOfDeletedElements(NumberOfDeletedElements() + 1);
16352
16353 DisallowHeapAllocation no_allocation;
16354 for (Object* object = iterators();
16355 !object->IsUndefined();
16356 object = Iterator::cast(object)->next_iterator()) {
16357 Iterator::cast(object)->EntryRemoved(entry);
16358 }
16359 } 16356 }
16360 16357
16361 16358
16362 template Handle<OrderedHashSet> 16359 template Handle<OrderedHashSet>
16363 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Allocate( 16360 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Allocate(
16364 Isolate* isolate, int capacity, PretenureFlag pretenure); 16361 Isolate* isolate, int capacity, PretenureFlag pretenure);
16365 16362
16366 template Handle<OrderedHashSet> 16363 template Handle<OrderedHashSet>
16367 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::EnsureGrowable( 16364 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::EnsureGrowable(
16368 Handle<OrderedHashSet> table); 16365 Handle<OrderedHashSet> table);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
16468 16465
16469 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); 16466 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key);
16470 int index = table->AddEntry(hash->value()); 16467 int index = table->AddEntry(hash->value());
16471 table->set(index, *key); 16468 table->set(index, *key);
16472 table->set(index + kValueOffset, *value); 16469 table->set(index + kValueOffset, *value);
16473 return table; 16470 return table;
16474 } 16471 }
16475 16472
16476 16473
16477 template<class Derived, class TableType> 16474 template<class Derived, class TableType>
16478 void OrderedHashTableIterator<Derived, TableType>::EntryRemoved(int index) {
16479 int i = this->index()->value();
16480 if (index < i) {
16481 set_count(Smi::FromInt(count()->value() - 1));
16482 }
16483 if (index == i) {
16484 Seek();
16485 }
16486 }
16487
16488
16489 template<class Derived, class TableType>
16490 void OrderedHashTableIterator<Derived, TableType>::Close() {
16491 if (Closed()) return;
16492
16493 DisallowHeapAllocation no_allocation;
16494
16495 Object* undefined = GetHeap()->undefined_value();
16496 TableType* table = TableType::cast(this->table());
16497 Object* previous = previous_iterator();
16498 Object* next = next_iterator();
16499
16500 if (previous == undefined) {
16501 ASSERT_EQ(table->iterators(), this);
16502 table->set_iterators(next);
16503 } else {
16504 ASSERT_EQ(Derived::cast(previous)->next_iterator(), this);
16505 Derived::cast(previous)->set_next_iterator(next);
16506 }
16507
16508 if (!next->IsUndefined()) {
16509 ASSERT_EQ(Derived::cast(next)->previous_iterator(), this);
16510 Derived::cast(next)->set_previous_iterator(previous);
16511 }
16512
16513 set_previous_iterator(undefined);
16514 set_next_iterator(undefined);
16515 set_table(undefined);
16516 }
16517
16518
16519 template<class Derived, class TableType>
16520 void OrderedHashTableIterator<Derived, TableType>::Seek() {
16521 ASSERT(!Closed());
16522
16523 DisallowHeapAllocation no_allocation;
16524
16525 int index = this->index()->value();
16526
16527 TableType* table = TableType::cast(this->table());
16528 int used_capacity = table->UsedCapacity();
16529
16530 while (index < used_capacity && table->KeyAt(index)->IsTheHole()) {
16531 index++;
16532 }
16533 set_index(Smi::FromInt(index));
16534 }
16535
16536
16537 template<class Derived, class TableType>
16538 void OrderedHashTableIterator<Derived, TableType>::MoveNext() {
16539 ASSERT(!Closed());
16540
16541 set_index(Smi::FromInt(index()->value() + 1));
16542 set_count(Smi::FromInt(count()->value() + 1));
16543 Seek();
16544 }
16545
16546
16547 template<class Derived, class TableType>
16548 Handle<JSObject> OrderedHashTableIterator<Derived, TableType>::Next( 16475 Handle<JSObject> OrderedHashTableIterator<Derived, TableType>::Next(
16549 Handle<Derived> iterator) { 16476 Handle<Derived> iterator) {
16550 Isolate* isolate = iterator->GetIsolate(); 16477 Isolate* isolate = iterator->GetIsolate();
16551 Factory* factory = isolate->factory(); 16478 Factory* factory = isolate->factory();
16552 16479
16553 Handle<Object> object(iterator->table(), isolate); 16480 Handle<Object> maybe_table(iterator->table(), isolate);
16481 if (!maybe_table->IsUndefined()) {
16482 iterator->Transition();
16554 16483
16555 if (!object->IsUndefined()) { 16484 Handle<TableType> table(TableType::cast(iterator->table()), isolate);
16556 Handle<TableType> table = Handle<TableType>::cast(object); 16485 int index = Smi::cast(iterator->index())->value();
16557 int index = iterator->index()->value(); 16486 int used_capacity = table->UsedCapacity();
16558 if (index < table->UsedCapacity()) { 16487
16488 while (index < used_capacity && table->KeyAt(index)->IsTheHole()) {
16489 index++;
16490 }
16491
16492 if (index < used_capacity) {
16559 int entry_index = table->EntryToIndex(index); 16493 int entry_index = table->EntryToIndex(index);
16560 iterator->MoveNext(); 16494 Handle<Object> value =
16561 Handle<Object> value = Derived::ValueForKind(iterator, entry_index); 16495 Derived::ValueForKind(iterator, entry_index);
16496 iterator->set_index(Smi::FromInt(index + 1));
16562 return factory->NewIteratorResultObject(value, false); 16497 return factory->NewIteratorResultObject(value, false);
16563 } else {
16564 iterator->Close();
16565 } 16498 }
16499
16500 iterator->set_table(iterator->GetHeap()->undefined_value());
16566 } 16501 }
16567 16502
16568 return factory->NewIteratorResultObject(factory->undefined_value(), true); 16503 return factory->NewIteratorResultObject(factory->undefined_value(), true);
16569 } 16504 }
16570 16505
16571 16506
16507 template<class Derived, class TableType>
16508 void OrderedHashTableIterator<Derived, TableType>::Transition() {
16509 Isolate* isolate = GetIsolate();
16510 Handle<TableType> table(TableType::cast(this->table()), isolate);
16511 if (!table->IsObsolete()) return;
16512
16513 int index = Smi::cast(this->index())->value();
16514 while (table->IsObsolete()) {
16515 Handle<TableType> next_table(table->NextTable(), isolate);
16516
16517 if (index > 0) {
16518 int nod = table->NumberOfDeletedElements();
16519
16520 // When we clear the table we set the number of deleted elements to -1.
16521 if (nod == -1) {
16522 index = 0;
16523 } else {
16524 int old_index = index;
16525 for (int i = 0; i < nod; ++i) {
16526 int removed_index = table->RemovedIndexAt(i);
16527 if (removed_index >= old_index) break;
arv (Not doing code reviews) 2014/05/14 20:36:36 This was wrong before. We need to compare with the
16528 --index;
16529 }
16530 }
16531 }
16532
16533 table = next_table;
16534 }
16535
16536 set_table(*table);
16537 set_index(Smi::FromInt(index));
16538 }
16539
16540
16572 template<class Derived, class TableType> 16541 template<class Derived, class TableType>
16573 Handle<Derived> OrderedHashTableIterator<Derived, TableType>::CreateInternal( 16542 Handle<Derived> OrderedHashTableIterator<Derived, TableType>::CreateInternal(
16574 Handle<Map> map, 16543 Handle<Map> map,
16575 Handle<TableType> table, 16544 Handle<TableType> table,
16576 int kind) { 16545 int kind) {
16577 Isolate* isolate = table->GetIsolate(); 16546 Isolate* isolate = table->GetIsolate();
16578 16547
16579 Handle<Object> undefined = isolate->factory()->undefined_value();
16580
16581 Handle<Derived> new_iterator = Handle<Derived>::cast( 16548 Handle<Derived> new_iterator = Handle<Derived>::cast(
16582 isolate->factory()->NewJSObjectFromMap(map)); 16549 isolate->factory()->NewJSObjectFromMap(map));
16583 new_iterator->set_previous_iterator(*undefined);
16584 new_iterator->set_table(*table); 16550 new_iterator->set_table(*table);
16585 new_iterator->set_index(Smi::FromInt(0)); 16551 new_iterator->set_index(Smi::FromInt(0));
16586 new_iterator->set_count(Smi::FromInt(0));
16587 new_iterator->set_kind(Smi::FromInt(kind)); 16552 new_iterator->set_kind(Smi::FromInt(kind));
16588
16589 Handle<Object> old_iterator(table->iterators(), isolate);
16590 if (!old_iterator->IsUndefined()) {
16591 Handle<Derived>::cast(old_iterator)->set_previous_iterator(*new_iterator);
16592 new_iterator->set_next_iterator(*old_iterator);
16593 } else {
16594 new_iterator->set_next_iterator(*undefined);
16595 }
16596
16597 table->set_iterators(*new_iterator);
16598
16599 return new_iterator; 16553 return new_iterator;
16600 } 16554 }
16601 16555
16602 16556
16603 template void
16604 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::EntryRemoved(
16605 int index);
16606
16607 template void
16608 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Close();
16609
16610 template Handle<JSObject> 16557 template Handle<JSObject>
16611 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Next( 16558 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Next(
16612 Handle<JSSetIterator> iterator); 16559 Handle<JSSetIterator> iterator);
16613 16560
16561 template void
16562 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Transition();
16563
16614 template Handle<JSSetIterator> 16564 template Handle<JSSetIterator>
16615 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::CreateInternal( 16565 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::CreateInternal(
16616 Handle<Map> map, Handle<OrderedHashSet> table, int kind); 16566 Handle<Map> map, Handle<OrderedHashSet> table, int kind);
16617 16567
16618 16568
16619 template void
16620 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::EntryRemoved(
16621 int index);
16622
16623 template void
16624 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Close();
16625
16626 template Handle<JSObject> 16569 template Handle<JSObject>
16627 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Next( 16570 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Next(
16628 Handle<JSMapIterator> iterator); 16571 Handle<JSMapIterator> iterator);
16629 16572
16573 template void
16574 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Transition();
16575
16630 template Handle<JSMapIterator> 16576 template Handle<JSMapIterator>
16631 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::CreateInternal( 16577 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::CreateInternal(
16632 Handle<Map> map, Handle<OrderedHashMap> table, int kind); 16578 Handle<Map> map, Handle<OrderedHashMap> table, int kind);
16633 16579
16634 16580
16635 Handle<Object> JSSetIterator::ValueForKind( 16581 Handle<Object> JSSetIterator::ValueForKind(
16636 Handle<JSSetIterator> iterator, int entry_index) { 16582 Handle<JSSetIterator> iterator, int entry_index) {
16637 int kind = iterator->kind()->value(); 16583 int kind = iterator->kind()->value();
16638 // Set.prototype only has values and entries. 16584 // Set.prototype only has values and entries.
16639 ASSERT(kind == kKindValues || kind == kKindEntries); 16585 ASSERT(kind == kKindValues || kind == kKindEntries);
16640 16586
16641 Isolate* isolate = iterator->GetIsolate(); 16587 Isolate* isolate = iterator->GetIsolate();
16642 Factory* factory = isolate->factory(); 16588 Factory* factory = isolate->factory();
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
17274 #define ERROR_MESSAGES_TEXTS(C, T) T, 17220 #define ERROR_MESSAGES_TEXTS(C, T) T,
17275 static const char* error_messages_[] = { 17221 static const char* error_messages_[] = {
17276 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 17222 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
17277 }; 17223 };
17278 #undef ERROR_MESSAGES_TEXTS 17224 #undef ERROR_MESSAGES_TEXTS
17279 return error_messages_[reason]; 17225 return error_messages_[reason];
17280 } 17226 }
17281 17227
17282 17228
17283 } } // namespace v8::internal 17229 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698