| Index: src/heap/heap-inl.h
|
| diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h
|
| index a87d347c1dd700c1e477e6149e4f9e79097748c6..57e6cc4c935d41e4fd130cff4a62d82b1745a2fa 100644
|
| --- a/src/heap/heap-inl.h
|
| +++ b/src/heap/heap-inl.h
|
| @@ -622,9 +622,18 @@ void Heap::ExternalStringTable::ShrinkNewStrings(int position) {
|
| #endif
|
| }
|
|
|
| +// static
|
| +int DescriptorLookupCache::Hash(Object* source, Name* name) {
|
| + DCHECK(name->IsUniqueName());
|
| + // Uses only lower 32 bits if pointers are larger.
|
| + uint32_t source_hash =
|
| + static_cast<uint32_t>(reinterpret_cast<uintptr_t>(source)) >>
|
| + kPointerSizeLog2;
|
| + uint32_t name_hash = name->hash_field();
|
| + return (source_hash ^ name_hash) % kLength;
|
| +}
|
|
|
| int DescriptorLookupCache::Lookup(Map* source, Name* name) {
|
| - if (!name->IsUniqueName()) return kAbsent;
|
| int index = Hash(source, name);
|
| Key& key = keys_[index];
|
| if ((key.source == source) && (key.name == name)) return results_[index];
|
| @@ -634,13 +643,11 @@ int DescriptorLookupCache::Lookup(Map* source, Name* name) {
|
|
|
| void DescriptorLookupCache::Update(Map* source, Name* name, int result) {
|
| DCHECK(result != kAbsent);
|
| - if (name->IsUniqueName()) {
|
| - int index = Hash(source, name);
|
| - Key& key = keys_[index];
|
| - key.source = source;
|
| - key.name = name;
|
| - results_[index] = result;
|
| - }
|
| + int index = Hash(source, name);
|
| + Key& key = keys_[index];
|
| + key.source = source;
|
| + key.name = name;
|
| + results_[index] = result;
|
| }
|
|
|
|
|
|
|