| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index ed66dc6423c8764ffb9c0778f8bb2192a9da259e..668f71636fc82e41fb67878510bb1331b2504735 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -2875,8 +2875,8 @@ DescriptorArray::WhitenessWitness::~WhitenessWitness() {
|
| }
|
|
|
|
|
| -template<typename Shape, typename Key>
|
| -int HashTable<Shape, Key>::ComputeCapacity(int at_least_space_for) {
|
| +template<typename Derived, typename Shape, typename Key>
|
| +int HashTable<Derived, Shape, Key>::ComputeCapacity(int at_least_space_for) {
|
| const int kMinCapacity = 32;
|
| int capacity = RoundUpToPowerOf2(at_least_space_for * 2);
|
| if (capacity < kMinCapacity) {
|
| @@ -2886,17 +2886,17 @@ int HashTable<Shape, Key>::ComputeCapacity(int at_least_space_for) {
|
| }
|
|
|
|
|
| -template<typename Shape, typename Key>
|
| -int HashTable<Shape, Key>::FindEntry(Key key) {
|
| +template<typename Derived, typename Shape, typename Key>
|
| +int HashTable<Derived, Shape, Key>::FindEntry(Key key) {
|
| return FindEntry(GetIsolate(), key);
|
| }
|
|
|
|
|
| // Find entry for key otherwise return kNotFound.
|
| -template<typename Shape, typename Key>
|
| -int HashTable<Shape, Key>::FindEntry(Isolate* isolate, Key key) {
|
| +template<typename Derived, typename Shape, typename Key>
|
| +int HashTable<Derived, Shape, Key>::FindEntry(Isolate* isolate, Key key) {
|
| uint32_t capacity = Capacity();
|
| - uint32_t entry = FirstProbe(HashTable<Shape, Key>::Hash(key), capacity);
|
| + uint32_t entry = FirstProbe(HashTable::Hash(key), capacity);
|
| uint32_t count = 1;
|
| // EnsureCapacity will guarantee the hash table is never full.
|
| while (true) {
|
| @@ -3021,8 +3021,9 @@ FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) {
|
| #undef MAKE_STRUCT_CAST
|
|
|
|
|
| -template <typename Shape, typename Key>
|
| -HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) {
|
| +template <typename Derived, typename Shape, typename Key>
|
| +HashTable<Derived, Shape, Key>*
|
| +HashTable<Derived, Shape, Key>::cast(Object* obj) {
|
| ASSERT(obj->IsHashTable());
|
| return reinterpret_cast<HashTable*>(obj);
|
| }
|
| @@ -6682,23 +6683,23 @@ bool AccessorPair::prohibits_overwriting() {
|
| }
|
|
|
|
|
| -template<typename Shape, typename Key>
|
| -void Dictionary<Shape, Key>::SetEntry(int entry,
|
| - Object* key,
|
| - Object* value) {
|
| +template<typename Derived, typename Shape, typename Key>
|
| +void Dictionary<Derived, Shape, Key>::SetEntry(int entry,
|
| + Object* key,
|
| + Object* value) {
|
| SetEntry(entry, key, value, PropertyDetails(Smi::FromInt(0)));
|
| }
|
|
|
|
|
| -template<typename Shape, typename Key>
|
| -void Dictionary<Shape, Key>::SetEntry(int entry,
|
| - Object* key,
|
| - Object* value,
|
| - PropertyDetails details) {
|
| +template<typename Derived, typename Shape, typename Key>
|
| +void Dictionary<Derived, Shape, Key>::SetEntry(int entry,
|
| + Object* key,
|
| + Object* value,
|
| + PropertyDetails details) {
|
| ASSERT(!key->IsName() ||
|
| details.IsDeleted() ||
|
| details.dictionary_index() > 0);
|
| - int index = HashTable<Shape, Key>::EntryToIndex(entry);
|
| + int index = DerivedHashTable::EntryToIndex(entry);
|
| DisallowHeapAllocation no_gc;
|
| WriteBarrierMode mode = FixedArray::GetWriteBarrierMode(no_gc);
|
| FixedArray::set(index, key, mode);
|
| @@ -6784,6 +6785,12 @@ MaybeObject* ObjectHashTableShape::AsObject(Heap* heap, Object* key) {
|
| }
|
|
|
|
|
| +Handle<ObjectHashTable> ObjectHashTable::Shrink(
|
| + Handle<ObjectHashTable> table, Handle<Object> key) {
|
| + return HashTable_::Shrink(table, *key);
|
| +}
|
| +
|
| +
|
| template <int entrysize>
|
| bool WeakHashTableShape<entrysize>::IsMatch(Object* key, Object* other) {
|
| return key->SameValue(other);
|
|
|