From 9ca2fc30a95ef6a5776e4bcfe0ed97765c2191f8 Mon Sep 17 00:00:00 2001 From: "ishell@chromium.org" Date: Tue, 29 Apr 2014 14:16:38 +0000 Subject: [PATCH] OrderedHashTable::FindEntry() handlified. R=yangguo@chromium.org Review URL: https://codereview.chromium.org/260313003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@21057 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/objects.cc | 22 +++++++++++++--------- src/objects.h | 4 ++-- src/runtime.cc | 2 +- test/cctest/test-dictionary.cc | 6 +++--- test/cctest/test-ordered-hash-table.cc | 22 +++++++++++----------- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/objects.cc b/src/objects.cc index a0ffcd9..4d78909 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -16287,7 +16287,9 @@ Handle OrderedHashTable::Rehash( template -int OrderedHashTable::FindEntry(Object* key) { +int OrderedHashTable::FindEntry( + Handle key) { + DisallowHeapAllocation no_gc; ASSERT(!key->IsTheHole()); Object* hash = key->GetHash(); if (hash->IsUndefined()) return kNotFound; @@ -16295,7 +16297,7 @@ int OrderedHashTable::FindEntry(Object* key) { entry != kNotFound; entry = ChainAt(entry)) { Object* candidate = KeyAt(entry); - if (candidate->SameValue(key)) + if (candidate->SameValue(*key)) return entry; } return kNotFound; @@ -16350,7 +16352,8 @@ OrderedHashTable::Clear( Handle table); template int -OrderedHashTable::FindEntry(Object* key); +OrderedHashTable::FindEntry( + Handle key); template int OrderedHashTable::AddEntry(int hash); @@ -16376,7 +16379,8 @@ OrderedHashTable::Clear( Handle table); template int -OrderedHashTable::FindEntry(Object* key); +OrderedHashTable::FindEntry( + Handle key); template int OrderedHashTable::AddEntry(int hash); @@ -16385,14 +16389,14 @@ template void OrderedHashTable::RemoveEntry(int entry); -bool OrderedHashSet::Contains(Object* key) { +bool OrderedHashSet::Contains(Handle key) { return FindEntry(key) != kNotFound; } Handle OrderedHashSet::Add(Handle table, Handle key) { - if (table->FindEntry(*key) != kNotFound) return table; + if (table->FindEntry(key) != kNotFound) return table; table = EnsureGrowable(table); @@ -16405,7 +16409,7 @@ Handle OrderedHashSet::Add(Handle table, Handle OrderedHashSet::Remove(Handle table, Handle key) { - int entry = table->FindEntry(*key); + int entry = table->FindEntry(key); if (entry == kNotFound) return table; table->RemoveEntry(entry); return Shrink(table); @@ -16414,7 +16418,7 @@ Handle OrderedHashSet::Remove(Handle table, Object* OrderedHashMap::Lookup(Handle key) { DisallowHeapAllocation no_gc; - int entry = FindEntry(*key); + int entry = FindEntry(key); if (entry == kNotFound) return GetHeap()->the_hole_value(); return ValueAt(entry); } @@ -16423,7 +16427,7 @@ Object* OrderedHashMap::Lookup(Handle key) { Handle OrderedHashMap::Put(Handle table, Handle key, Handle value) { - int entry = table->FindEntry(*key); + int entry = table->FindEntry(key); if (value->IsTheHole()) { if (entry == kNotFound) return table; diff --git a/src/objects.h b/src/objects.h index 6db16fc..25f9afc 100644 --- a/src/objects.h +++ b/src/objects.h @@ -4270,7 +4270,7 @@ class OrderedHashTable: public FixedArray { static Handle Clear(Handle table); // Returns kNotFound if the key isn't present. - int FindEntry(Object* key); + int FindEntry(Handle key); int NumberOfElements() { return Smi::cast(get(kNumberOfElementsIndex))->value(); @@ -4369,7 +4369,7 @@ class OrderedHashSet: public OrderedHashTable< return reinterpret_cast(obj); } - bool Contains(Object* key); + bool Contains(Handle key); static Handle Add( Handle table, Handle key); static Handle Remove( diff --git a/src/runtime.cc b/src/runtime.cc index c463e05..f5dc2ac 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -1531,7 +1531,7 @@ RUNTIME_FUNCTION(Runtime_SetHas) { CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); Handle table(OrderedHashSet::cast(holder->table())); - return isolate->heap()->ToBoolean(table->Contains(*key)); + return isolate->heap()->ToBoolean(table->Contains(key)); } diff --git a/test/cctest/test-dictionary.cc b/test/cctest/test-dictionary.cc index 0f77772..aa1bc86 100644 --- a/test/cctest/test-dictionary.cc +++ b/test/cctest/test-dictionary.cc @@ -76,7 +76,7 @@ static void TestHashMap(Handle table) { Handle value = factory->NewJSArray(11); table = HashMap::Put(table, key, value); CHECK_EQ(table->NumberOfElements(), i + 1); - CHECK_NE(table->FindEntry(*key), HashMap::kNotFound); + CHECK_NE(table->FindEntry(key), HashMap::kNotFound); CHECK_EQ(table->Lookup(key), *value); CHECK(key->GetIdentityHash()->IsSmi()); } @@ -86,7 +86,7 @@ static void TestHashMap(Handle table) { for (int i = 0; i < 100; i++) { Handle key = factory->NewJSArray(7); CHECK(JSReceiver::GetOrCreateIdentityHash(key)->IsSmi()); - CHECK_EQ(table->FindEntry(*key), HashMap::kNotFound); + CHECK_EQ(table->FindEntry(key), HashMap::kNotFound); CHECK_EQ(table->Lookup(key), CcTest::heap()->the_hole_value()); CHECK(key->GetIdentityHash()->IsSmi()); } @@ -183,7 +183,7 @@ static void TestHashSetCausesGC(Handle table) { // Calling Contains() should not cause GC ever. int gc_count = isolate->heap()->gc_count(); - CHECK(!table->Contains(*key)); + CHECK(!table->Contains(key)); CHECK(gc_count == isolate->heap()->gc_count()); // Calling Remove() will not cause GC in this case. diff --git a/test/cctest/test-ordered-hash-table.cc b/test/cctest/test-ordered-hash-table.cc index 79523be..48a457f 100644 --- a/test/cctest/test-ordered-hash-table.cc +++ b/test/cctest/test-ordered-hash-table.cc @@ -71,13 +71,13 @@ TEST(Set) { Handle map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); Handle obj = factory->NewJSObjectFromMap(map); - CHECK(!ordered_set->Contains(*obj)); + CHECK(!ordered_set->Contains(obj)); ordered_set = OrderedHashSet::Add(ordered_set, obj); CHECK_EQ(1, ordered_set->NumberOfElements()); - CHECK(ordered_set->Contains(*obj)); + CHECK(ordered_set->Contains(obj)); ordered_set = OrderedHashSet::Remove(ordered_set, obj); CHECK_EQ(0, ordered_set->NumberOfElements()); - CHECK(!ordered_set->Contains(*obj)); + CHECK(!ordered_set->Contains(obj)); // Test for collisions/chaining Handle obj1 = factory->NewJSObjectFromMap(map); @@ -87,9 +87,9 @@ TEST(Set) { Handle obj3 = factory->NewJSObjectFromMap(map); ordered_set = OrderedHashSet::Add(ordered_set, obj3); CHECK_EQ(3, ordered_set->NumberOfElements()); - CHECK(ordered_set->Contains(*obj1)); - CHECK(ordered_set->Contains(*obj2)); - CHECK(ordered_set->Contains(*obj3)); + CHECK(ordered_set->Contains(obj1)); + CHECK(ordered_set->Contains(obj2)); + CHECK(ordered_set->Contains(obj3)); // Test iteration CheckIterResultObject( @@ -107,11 +107,11 @@ TEST(Set) { ordered_set = OrderedHashSet::Add(ordered_set, obj); Handle obj4 = factory->NewJSObjectFromMap(map); ordered_set = OrderedHashSet::Add(ordered_set, obj4); - CHECK(ordered_set->Contains(*obj)); - CHECK(ordered_set->Contains(*obj1)); - CHECK(ordered_set->Contains(*obj2)); - CHECK(ordered_set->Contains(*obj3)); - CHECK(ordered_set->Contains(*obj4)); + CHECK(ordered_set->Contains(obj)); + CHECK(ordered_set->Contains(obj1)); + CHECK(ordered_set->Contains(obj2)); + CHECK(ordered_set->Contains(obj3)); + CHECK(ordered_set->Contains(obj4)); CHECK_EQ(5, ordered_set->NumberOfElements()); CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); CHECK_EQ(4, ordered_set->NumberOfBuckets()); -- 2.7.4