| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 1e398a5a730e1625119e20d75fd580e4169fb18b..fb39b3691464a2fedfbb4831ee941a35ad9fa636 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -5190,8 +5190,8 @@ int CodeCacheHashTable::GetIndex(String* name, Code::Flags flags) {
|
| void CodeCacheHashTable::RemoveByIndex(int index) {
|
| ASSERT(index >= 0);
|
| Heap* heap = GetHeap();
|
| - set(EntryToIndex(index), heap->null_value());
|
| - set(EntryToIndex(index) + 1, heap->null_value());
|
| + set(EntryToIndex(index), heap->the_hole_value());
|
| + set(EntryToIndex(index) + 1, heap->the_hole_value());
|
| ElementRemoved();
|
| }
|
|
|
| @@ -10909,14 +10909,14 @@ int StringDictionary::FindEntry(String* key) {
|
| if (element->IsUndefined()) break; // Empty entry.
|
| if (key == element) return entry;
|
| if (!element->IsSymbol() &&
|
| - !element->IsNull() &&
|
| + !element->IsTheHole() &&
|
| String::cast(element)->Equals(key)) {
|
| // Replace a non-symbol key by the equivalent symbol for faster further
|
| // lookups.
|
| set(index, key);
|
| return entry;
|
| }
|
| - ASSERT(element->IsNull() || !String::cast(element)->Equals(key));
|
| + ASSERT(element->IsTheHole() || !String::cast(element)->Equals(key));
|
| entry = NextProbe(entry, count++, capacity);
|
| }
|
| return kNotFound;
|
| @@ -11020,7 +11020,7 @@ uint32_t HashTable<Shape, Key>::FindInsertionEntry(uint32_t hash) {
|
| // EnsureCapacity will guarantee the hash table is never full.
|
| while (true) {
|
| Object* element = KeyAt(entry);
|
| - if (element->IsUndefined() || element->IsNull()) break;
|
| + if (element->IsUndefined() || element->IsTheHole()) break;
|
| entry = NextProbe(entry, count++, capacity);
|
| }
|
| return entry;
|
| @@ -11819,13 +11819,13 @@ MaybeObject* CompilationCacheTable::PutRegExp(String* src,
|
|
|
|
|
| void CompilationCacheTable::Remove(Object* value) {
|
| - Object* null_value = GetHeap()->null_value();
|
| + Object* the_hole_value = GetHeap()->the_hole_value();
|
| for (int entry = 0, size = Capacity(); entry < size; entry++) {
|
| int entry_index = EntryToIndex(entry);
|
| int value_index = entry_index + 1;
|
| if (get(value_index) == value) {
|
| - NoWriteBarrierSet(this, entry_index, null_value);
|
| - NoWriteBarrierSet(this, value_index, null_value);
|
| + NoWriteBarrierSet(this, entry_index, the_hole_value);
|
| + NoWriteBarrierSet(this, value_index, the_hole_value);
|
| ElementRemoved();
|
| }
|
| }
|
| @@ -11984,14 +11984,14 @@ void NumberDictionary::RemoveNumberEntries(uint32_t from, uint32_t to) {
|
|
|
| Heap* heap = GetHeap();
|
| int removed_entries = 0;
|
| - Object* sentinel = heap->null_value();
|
| + Object* the_hole_value = heap->the_hole_value();
|
| int capacity = Capacity();
|
| for (int i = 0; i < capacity; i++) {
|
| Object* key = KeyAt(i);
|
| if (key->IsNumber()) {
|
| uint32_t number = static_cast<uint32_t>(key->Number());
|
| if (from <= number && number < to) {
|
| - SetEntry(i, sentinel, sentinel);
|
| + SetEntry(i, the_hole_value, the_hole_value);
|
| removed_entries++;
|
| }
|
| }
|
| @@ -12011,7 +12011,7 @@ Object* Dictionary<Shape, Key>::DeleteProperty(int entry,
|
| if (details.IsDontDelete() && mode != JSReceiver::FORCE_DELETION) {
|
| return heap->false_value();
|
| }
|
| - SetEntry(entry, heap->null_value(), heap->null_value());
|
| + SetEntry(entry, heap->the_hole_value(), heap->the_hole_value());
|
| HashTable<Shape, Key>::ElementRemoved();
|
| return heap->true_value();
|
| }
|
| @@ -12395,6 +12395,8 @@ MaybeObject* StringDictionary::TransformPropertiesToFastFor(
|
|
|
|
|
| bool ObjectHashSet::Contains(Object* key) {
|
| + ASSERT(IsKey(key));
|
| +
|
| // If the object does not have an identity hash, it was never used as a key.
|
| { MaybeObject* maybe_hash = key->GetHash(OMIT_CREATION);
|
| if (maybe_hash->ToObjectUnchecked()->IsUndefined()) return false;
|
| @@ -12404,6 +12406,8 @@ bool ObjectHashSet::Contains(Object* key) {
|
|
|
|
|
| MaybeObject* ObjectHashSet::Add(Object* key) {
|
| + ASSERT(IsKey(key));
|
| +
|
| // Make sure the key object has an identity hash code.
|
| int hash;
|
| { MaybeObject* maybe_hash = key->GetHash(ALLOW_CREATION);
|
| @@ -12429,6 +12433,8 @@ MaybeObject* ObjectHashSet::Add(Object* key) {
|
|
|
|
|
| MaybeObject* ObjectHashSet::Remove(Object* key) {
|
| + ASSERT(IsKey(key));
|
| +
|
| // If the object does not have an identity hash, it was never used as a key.
|
| { MaybeObject* maybe_hash = key->GetHash(OMIT_CREATION);
|
| if (maybe_hash->ToObjectUnchecked()->IsUndefined()) return this;
|
| @@ -12439,13 +12445,15 @@ MaybeObject* ObjectHashSet::Remove(Object* key) {
|
| if (entry == kNotFound) return this;
|
|
|
| // Remove entry and try to shrink this hash set.
|
| - set_null(EntryToIndex(entry));
|
| + set_the_hole(EntryToIndex(entry));
|
| ElementRemoved();
|
| return Shrink(key);
|
| }
|
|
|
|
|
| Object* ObjectHashTable::Lookup(Object* key) {
|
| + ASSERT(IsKey(key));
|
| +
|
| // If the object does not have an identity hash, it was never used as a key.
|
| { MaybeObject* maybe_hash = key->GetHash(OMIT_CREATION);
|
| if (maybe_hash->ToObjectUnchecked()->IsUndefined()) {
|
| @@ -12459,6 +12467,8 @@ Object* ObjectHashTable::Lookup(Object* key) {
|
|
|
|
|
| MaybeObject* ObjectHashTable::Put(Object* key, Object* value) {
|
| + ASSERT(IsKey(key));
|
| +
|
| // Make sure the key object has an identity hash code.
|
| int hash;
|
| { MaybeObject* maybe_hash = key->GetHash(ALLOW_CREATION);
|
| @@ -12498,9 +12508,9 @@ void ObjectHashTable::AddEntry(int entry, Object* key, Object* value) {
|
| }
|
|
|
|
|
| -void ObjectHashTable::RemoveEntry(int entry, Heap* heap) {
|
| - set_null(heap, EntryToIndex(entry));
|
| - set_null(heap, EntryToIndex(entry) + 1);
|
| +void ObjectHashTable::RemoveEntry(int entry) {
|
| + set_the_hole(EntryToIndex(entry));
|
| + set_the_hole(EntryToIndex(entry) + 1);
|
| ElementRemoved();
|
| }
|
|
|
|
|