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

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: partial code review feedback update 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()); 16217 table->set_next_table(isolate->heap()->undefined_value());
16218 table->set_changes(isolate->heap()->undefined_value());
16218 return table; 16219 return table;
16219 } 16220 }
16220 16221
16221 16222
16222 template<class Derived, class Iterator, int entrysize> 16223 template<class Derived, class Iterator, int entrysize>
16223 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::EnsureGrowable( 16224 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::EnsureGrowable(
16224 Handle<Derived> table) { 16225 Handle<Derived> table) {
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();
(...skipping 16 matching lines...) Expand all
16244 16245
16245 16246
16246 template<class Derived, class Iterator, int entrysize> 16247 template<class Derived, class Iterator, int entrysize>
16247 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Clear( 16248 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Clear(
16248 Handle<Derived> table) { 16249 Handle<Derived> table) {
16249 Handle<Derived> new_table = 16250 Handle<Derived> new_table =
16250 Allocate(table->GetIsolate(), 16251 Allocate(table->GetIsolate(),
16251 kMinCapacity, 16252 kMinCapacity,
16252 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED); 16253 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
16253 16254
16254 new_table->set_iterators(table->iterators()); 16255 table->set_next_table(*new_table);
16255 table->set_iterators(table->GetHeap()->undefined_value()); 16256 // changes is kept as undefined for Clear.
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 16257
16265 return new_table; 16258 return new_table;
16266 } 16259 }
16267 16260
16268 16261
16269 template<class Derived, class Iterator, int entrysize> 16262 template<class Derived, class Iterator, int entrysize>
16270 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Rehash( 16263 Handle<Derived> OrderedHashTable<Derived, Iterator, entrysize>::Rehash(
16271 Handle<Derived> table, int new_capacity) { 16264 Handle<Derived> table, int new_capacity) {
16272 Handle<Derived> new_table = 16265 Handle<Derived> new_table =
16273 Allocate(table->GetIsolate(), 16266 Allocate(table->GetIsolate(),
16274 new_capacity, 16267 new_capacity,
16275 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED); 16268 table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
16276 int nof = table->NumberOfElements(); 16269 int nof = table->NumberOfElements();
16277 int nod = table->NumberOfDeletedElements(); 16270 int nod = table->NumberOfDeletedElements();
16278 int new_buckets = new_table->NumberOfBuckets(); 16271 int new_buckets = new_table->NumberOfBuckets();
16279 int new_entry = 0; 16272 int new_entry = 0;
16273 Handle<FixedArray> removed_entries =
16274 table->GetIsolate()->factory()->NewFixedArray(nod);
16275 int removed_entries_index = 0;
16280 for (int old_entry = 0; old_entry < (nof + nod); ++old_entry) { 16276 for (int old_entry = 0; old_entry < (nof + nod); ++old_entry) {
16281 Object* key = table->KeyAt(old_entry); 16277 Object* key = table->KeyAt(old_entry);
16282 if (key->IsTheHole()) continue; 16278 if (key->IsTheHole()) {
16279 removed_entries->set(removed_entries_index++, Smi::FromInt(old_entry));
16280 continue;
16281 }
16283 Object* hash = key->GetHash(); 16282 Object* hash = key->GetHash();
16284 int bucket = Smi::cast(hash)->value() & (new_buckets - 1); 16283 int bucket = Smi::cast(hash)->value() & (new_buckets - 1);
16285 Object* chain_entry = new_table->get(kHashTableStartIndex + bucket); 16284 Object* chain_entry = new_table->get(kHashTableStartIndex + bucket);
16286 new_table->set(kHashTableStartIndex + bucket, Smi::FromInt(new_entry)); 16285 new_table->set(kHashTableStartIndex + bucket, Smi::FromInt(new_entry));
16287 int new_index = new_table->EntryToIndex(new_entry); 16286 int new_index = new_table->EntryToIndex(new_entry);
16288 int old_index = table->EntryToIndex(old_entry); 16287 int old_index = table->EntryToIndex(old_entry);
16289 for (int i = 0; i < entrysize; ++i) { 16288 for (int i = 0; i < entrysize; ++i) {
16290 Object* value = table->get(old_index + i); 16289 Object* value = table->get(old_index + i);
16291 new_table->set(new_index + i, value); 16290 new_table->set(new_index + i, value);
16292 } 16291 }
16293 new_table->set(new_index + kChainOffset, chain_entry); 16292 new_table->set(new_index + kChainOffset, chain_entry);
16294 ++new_entry; 16293 ++new_entry;
16295 } 16294 }
16296 new_table->SetNumberOfElements(nof); 16295 new_table->SetNumberOfElements(nof);
16297 16296
16298 new_table->set_iterators(table->iterators()); 16297 table->set_next_table(*new_table);
16299 table->set_iterators(table->GetHeap()->undefined_value()); 16298 table->set_changes(*removed_entries);
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 16299
16309 return new_table; 16300 return new_table;
16310 } 16301 }
16311 16302
16312 16303
16313 template<class Derived, class Iterator, int entrysize> 16304 template<class Derived, class Iterator, int entrysize>
16314 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry( 16305 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry(
16315 Handle<Object> key) { 16306 Handle<Object> key) {
16316 DisallowHeapAllocation no_gc; 16307 DisallowHeapAllocation no_gc;
16317 ASSERT(!key->IsTheHole()); 16308 ASSERT(!key->IsTheHole());
(...skipping 24 matching lines...) Expand all
16342 16333
16343 16334
16344 template<class Derived, class Iterator, int entrysize> 16335 template<class Derived, class Iterator, int entrysize>
16345 void OrderedHashTable<Derived, Iterator, entrysize>::RemoveEntry(int entry) { 16336 void OrderedHashTable<Derived, Iterator, entrysize>::RemoveEntry(int entry) {
16346 int index = EntryToIndex(entry); 16337 int index = EntryToIndex(entry);
16347 for (int i = 0; i < entrysize; ++i) { 16338 for (int i = 0; i < entrysize; ++i) {
16348 set_the_hole(index + i); 16339 set_the_hole(index + i);
16349 } 16340 }
16350 SetNumberOfElements(NumberOfElements() - 1); 16341 SetNumberOfElements(NumberOfElements() - 1);
16351 SetNumberOfDeletedElements(NumberOfDeletedElements() + 1); 16342 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 } 16343 }
16360 16344
16361 16345
16362 template Handle<OrderedHashSet> 16346 template Handle<OrderedHashSet>
16363 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Allocate( 16347 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Allocate(
16364 Isolate* isolate, int capacity, PretenureFlag pretenure); 16348 Isolate* isolate, int capacity, PretenureFlag pretenure);
16365 16349
16366 template Handle<OrderedHashSet> 16350 template Handle<OrderedHashSet>
16367 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::EnsureGrowable( 16351 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::EnsureGrowable(
16368 Handle<OrderedHashSet> table); 16352 Handle<OrderedHashSet> table);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
16468 16452
16469 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); 16453 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key);
16470 int index = table->AddEntry(hash->value()); 16454 int index = table->AddEntry(hash->value());
16471 table->set(index, *key); 16455 table->set(index, *key);
16472 table->set(index + kValueOffset, *value); 16456 table->set(index + kValueOffset, *value);
16473 return table; 16457 return table;
16474 } 16458 }
16475 16459
16476 16460
16477 template<class Derived, class TableType> 16461 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( 16462 Handle<JSObject> OrderedHashTableIterator<Derived, TableType>::Next(
16549 Handle<Derived> iterator) { 16463 Handle<Derived> iterator) {
16550 Isolate* isolate = iterator->GetIsolate(); 16464 Isolate* isolate = iterator->GetIsolate();
16551 Factory* factory = isolate->factory(); 16465 Factory* factory = isolate->factory();
16552 16466
16553 Handle<Object> object(iterator->table(), isolate); 16467 Handle<Object> maybe_table(iterator->table(), isolate);
16468 if (!maybe_table->IsUndefined()) {
16469 iterator->Transition();
16554 16470
16555 if (!object->IsUndefined()) { 16471 Handle<TableType> table(TableType::cast(iterator->table()), isolate);
16556 Handle<TableType> table = Handle<TableType>::cast(object); 16472 int index = Smi::cast(iterator->index())->value();
16557 int index = iterator->index()->value(); 16473 int used_capacity = table->UsedCapacity();
16558 if (index < table->UsedCapacity()) { 16474
16475 while (index < used_capacity && table->KeyAt(index)->IsTheHole()) {
16476 index++;
16477 }
16478
16479 if (index < used_capacity) {
16559 int entry_index = table->EntryToIndex(index); 16480 int entry_index = table->EntryToIndex(index);
16560 iterator->MoveNext(); 16481 Handle<Object> value =
16561 Handle<Object> value = Derived::ValueForKind(iterator, entry_index); 16482 Derived::ValueForKind(iterator, entry_index);
16483 iterator->set_index(Smi::FromInt(index + 1));
16562 return factory->NewIteratorResultObject(value, false); 16484 return factory->NewIteratorResultObject(value, false);
16563 } else {
16564 iterator->Close();
16565 } 16485 }
16486
16487 iterator->set_table(iterator->GetHeap()->undefined_value());
16566 } 16488 }
16567 16489
16568 return factory->NewIteratorResultObject(factory->undefined_value(), true); 16490 return factory->NewIteratorResultObject(factory->undefined_value(), true);
16569 } 16491 }
16570 16492
16571 16493
16494 template<class Derived, class TableType>
16495 void OrderedHashTableIterator<Derived, TableType>::Transition() {
16496 Isolate* isolate = GetIsolate();
16497 Handle<TableType> table(TableType::cast(this->table()), isolate);
16498 Handle<Object> maybe_next_table(table->next_table(), isolate);
16499 if (maybe_next_table->IsUndefined()) return;
16500
16501 int index = Smi::cast(this->index())->value();
16502 while (!maybe_next_table->IsUndefined()) {
16503 Handle<TableType> next_table = Handle<TableType>::cast(maybe_next_table);
16504 Handle<Object> maybe_changes(table->changes(), table->GetIsolate());
16505
16506 // changes is kept as undefined after a Clear.
16507 if (maybe_changes->IsUndefined()) {
16508 index = 0;
16509 } else {
16510 Handle<FixedArray> changes = Handle<FixedArray>::cast(maybe_changes);
16511 for (int i = 0; i < changes->length(); ++i) {
16512 int entry_index = Smi::cast(changes->get(i))->value();
16513 if (entry_index < index) {
rossberg 2014/05/14 14:27:25 You can simplify this slightly to if (entry_ind
16514 index--;
16515 } else {
16516 break;
16517 }
16518 }
16519 }
16520
16521 table = next_table;
16522 maybe_next_table = Handle<Object>(table->next_table(), isolate);
16523 }
16524
16525 set_table(*table);
16526 set_index(Smi::FromInt(index));
16527 }
16528
16529
16572 template<class Derived, class TableType> 16530 template<class Derived, class TableType>
16573 Handle<Derived> OrderedHashTableIterator<Derived, TableType>::CreateInternal( 16531 Handle<Derived> OrderedHashTableIterator<Derived, TableType>::CreateInternal(
16574 Handle<Map> map, 16532 Handle<Map> map,
16575 Handle<TableType> table, 16533 Handle<TableType> table,
16576 int kind) { 16534 int kind) {
16577 Isolate* isolate = table->GetIsolate(); 16535 Isolate* isolate = table->GetIsolate();
16578 16536
16579 Handle<Object> undefined = isolate->factory()->undefined_value();
16580
16581 Handle<Derived> new_iterator = Handle<Derived>::cast( 16537 Handle<Derived> new_iterator = Handle<Derived>::cast(
16582 isolate->factory()->NewJSObjectFromMap(map)); 16538 isolate->factory()->NewJSObjectFromMap(map));
16583 new_iterator->set_previous_iterator(*undefined);
16584 new_iterator->set_table(*table); 16539 new_iterator->set_table(*table);
16585 new_iterator->set_index(Smi::FromInt(0)); 16540 new_iterator->set_index(Smi::FromInt(0));
16586 new_iterator->set_count(Smi::FromInt(0));
16587 new_iterator->set_kind(Smi::FromInt(kind)); 16541 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; 16542 return new_iterator;
16600 } 16543 }
16601 16544
16602 16545
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> 16546 template Handle<JSObject>
16611 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Next( 16547 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Next(
16612 Handle<JSSetIterator> iterator); 16548 Handle<JSSetIterator> iterator);
16613 16549
16550 template void
16551 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::Transition();
16552
16614 template Handle<JSSetIterator> 16553 template Handle<JSSetIterator>
16615 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::CreateInternal( 16554 OrderedHashTableIterator<JSSetIterator, OrderedHashSet>::CreateInternal(
16616 Handle<Map> map, Handle<OrderedHashSet> table, int kind); 16555 Handle<Map> map, Handle<OrderedHashSet> table, int kind);
16617 16556
16618 16557
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> 16558 template Handle<JSObject>
16627 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Next( 16559 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Next(
16628 Handle<JSMapIterator> iterator); 16560 Handle<JSMapIterator> iterator);
16629 16561
16562 template void
16563 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Transition();
16564
16630 template Handle<JSMapIterator> 16565 template Handle<JSMapIterator>
16631 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::CreateInternal( 16566 OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::CreateInternal(
16632 Handle<Map> map, Handle<OrderedHashMap> table, int kind); 16567 Handle<Map> map, Handle<OrderedHashMap> table, int kind);
16633 16568
16634 16569
16635 Handle<Object> JSSetIterator::ValueForKind( 16570 Handle<Object> JSSetIterator::ValueForKind(
16636 Handle<JSSetIterator> iterator, int entry_index) { 16571 Handle<JSSetIterator> iterator,
16572 int entry_index) {
16637 int kind = iterator->kind()->value(); 16573 int kind = iterator->kind()->value();
16638 // Set.prototype only has values and entries. 16574 // Set.prototype only has values and entries.
16639 ASSERT(kind == kKindValues || kind == kKindEntries); 16575 ASSERT(kind == kKindValues || kind == kKindEntries);
16640 16576
16641 Isolate* isolate = iterator->GetIsolate(); 16577 Isolate* isolate = iterator->GetIsolate();
16642 Factory* factory = isolate->factory(); 16578 Factory* factory = isolate->factory();
16643 16579
16644 Handle<OrderedHashSet> table( 16580 Handle<OrderedHashSet> table(
16645 OrderedHashSet::cast(iterator->table()), isolate); 16581 OrderedHashSet::cast(iterator->table()), isolate);
16646 Handle<Object> value = Handle<Object>(table->get(entry_index), isolate); 16582 Handle<Object> value = Handle<Object>(table->get(entry_index), isolate);
16647 16583
16648 if (kind == kKindEntries) { 16584 if (kind == kKindEntries) {
16649 Handle<FixedArray> array = factory->NewFixedArray(2); 16585 Handle<FixedArray> array = factory->NewFixedArray(2);
16650 array->set(0, *value); 16586 array->set(0, *value);
16651 array->set(1, *value); 16587 array->set(1, *value);
16652 return factory->NewJSArrayWithElements(array); 16588 return factory->NewJSArrayWithElements(array);
16653 } 16589 }
16654 16590
16655 return value; 16591 return value;
16656 } 16592 }
16657 16593
16658 16594
16659 Handle<Object> JSMapIterator::ValueForKind( 16595 Handle<Object> JSMapIterator::ValueForKind(
16660 Handle<JSMapIterator> iterator, int entry_index) { 16596 Handle<JSMapIterator> iterator,
16597 int entry_index) {
16661 int kind = iterator->kind()->value(); 16598 int kind = iterator->kind()->value();
16662 ASSERT(kind == kKindKeys || kind == kKindValues || kind == kKindEntries); 16599 ASSERT(kind == kKindKeys || kind == kKindValues || kind == kKindEntries);
16663 16600
16664 Isolate* isolate = iterator->GetIsolate(); 16601 Isolate* isolate = iterator->GetIsolate();
16665 Factory* factory = isolate->factory(); 16602 Factory* factory = isolate->factory();
16666 16603
16667 Handle<OrderedHashMap> table( 16604 Handle<OrderedHashMap> table(
16668 OrderedHashMap::cast(iterator->table()), isolate); 16605 OrderedHashMap::cast(iterator->table()), isolate);
16669 16606
16670 switch (kind) { 16607 switch (kind) {
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
17274 #define ERROR_MESSAGES_TEXTS(C, T) T, 17211 #define ERROR_MESSAGES_TEXTS(C, T) T,
17275 static const char* error_messages_[] = { 17212 static const char* error_messages_[] = {
17276 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 17213 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
17277 }; 17214 };
17278 #undef ERROR_MESSAGES_TEXTS 17215 #undef ERROR_MESSAGES_TEXTS
17279 return error_messages_[reason]; 17216 return error_messages_[reason];
17280 } 17217 }
17281 17218
17282 17219
17283 } } // namespace v8::internal 17220 } } // 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