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

Unified Diff: third_party/WebKit/Source/wtf/HashTable.h

Issue 2585673002: Replace ASSERT, ENABLE(ASSERT), and ASSERT_NOT_REACHED in wtf (Closed)
Patch Set: Fix an Asan issue with LinkedHashSetNodeBase::unlink Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/wtf/HashMapTest.cpp ('k') | third_party/WebKit/Source/wtf/HexNumber.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/wtf/HashTable.h
diff --git a/third_party/WebKit/Source/wtf/HashTable.h b/third_party/WebKit/Source/wtf/HashTable.h
index 8bd040e424b3f8a2319a948673f35bfb36f31d03..d6b00a63c89bf86480db3355283f22d9f61d7f2f 100644
--- a/third_party/WebKit/Source/wtf/HashTable.h
+++ b/third_party/WebKit/Source/wtf/HashTable.h
@@ -294,7 +294,7 @@ class HashTableConstIterator final {
const HashTableType* container)
: m_position(position),
m_endPosition(endPosition)
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
,
m_container(container),
m_containerModifications(container->modifications())
@@ -309,22 +309,26 @@ class HashTableConstIterator final {
HashItemKnownGoodTag)
: m_position(position),
m_endPosition(endPosition)
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
,
m_container(container),
m_containerModifications(container->modifications())
#endif
{
- ASSERT(m_containerModifications == m_container->modifications());
+#if DCHECK_IS_ON()
+ DCHECK_EQ(m_containerModifications, m_container->modifications());
+#endif
}
void checkModifications() const {
+#if DCHECK_IS_ON()
// HashTable and collections that build on it do not support
// modifications while there is an iterator in use. The exception is
// ListHashSet, which has its own iterators that tolerate modification
// of the underlying set.
- ASSERT(m_containerModifications == m_container->modifications());
- ASSERT(!m_container->accessForbidden());
+ DCHECK_EQ(m_containerModifications, m_container->modifications());
+ DCHECK(!m_container->accessForbidden());
+#endif
}
public:
@@ -340,7 +344,7 @@ class HashTableConstIterator final {
GetType operator->() const { return get(); }
const_iterator& operator++() {
- ASSERT(m_position != m_endPosition);
+ DCHECK_NE(m_position, m_endPosition);
checkModifications();
++m_position;
skipEmptyBuckets();
@@ -374,7 +378,7 @@ class HashTableConstIterator final {
private:
PointerType m_position;
PointerType m_endPosition;
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
const HashTableType* m_container;
int64_t m_containerModifications;
#endif
@@ -680,17 +684,12 @@ class HashTable final
HashTable();
void finalize() {
- ASSERT(!Allocator::isGarbageCollected);
+ DCHECK(!Allocator::isGarbageCollected);
if (LIKELY(!m_table))
return;
- ASSERT(!m_accessForbidden);
-#if ENABLE(ASSERT)
- m_accessForbidden = true;
-#endif
+ enterAccessForbiddenScope();
deleteAllBucketsAndDeallocate(m_table, m_tableSize);
-#if ENABLE(ASSERT)
- m_accessForbidden = false;
-#endif
+ leaveAccessForbiddenScope();
m_table = nullptr;
}
@@ -714,15 +713,15 @@ class HashTable final
}
unsigned size() const {
- ASSERT(!m_accessForbidden);
+ DCHECK(!accessForbidden());
return m_keyCount;
}
unsigned capacity() const {
- ASSERT(!m_accessForbidden);
+ DCHECK(!accessForbidden());
return m_tableSize;
}
bool isEmpty() const {
- ASSERT(!m_accessForbidden);
+ DCHECK(!accessForbidden());
return !m_keyCount;
}
@@ -784,7 +783,12 @@ class HashTable final
template <typename VisitorDispatcher>
void trace(VisitorDispatcher);
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
+ void enterAccessForbiddenScope() {
+ DCHECK(!m_accessForbidden);
+ m_accessForbidden = true;
+ }
+ void leaveAccessForbiddenScope() { m_accessForbidden = false; }
bool accessForbidden() const { return m_accessForbidden; }
int64_t modifications() const { return m_modifications; }
void registerModification() { m_modifications++; }
@@ -792,9 +796,12 @@ class HashTable final
// while there is an iterator in use. The exception is ListHashSet, which
// has its own iterators that tolerate modification of the underlying set.
void checkModifications(int64_t mods) const {
- ASSERT(mods == m_modifications);
+ DCHECK_EQ(mods, m_modifications);
}
#else
+ void enterAccessForbiddenScope() {}
+ void leaveAccessForbiddenScope() {}
+ bool accessForbidden() const { return false; }
int64_t modifications() const { return 0; }
void registerModification() {}
void checkModifications(int64_t mods) const {}
@@ -870,7 +877,7 @@ class HashTable final
unsigned tableSizeMask() const {
size_t mask = m_tableSize - 1;
- ASSERT((mask & m_tableSize) == 0);
+ DCHECK_EQ((mask & m_tableSize), 0u);
return mask;
}
@@ -881,7 +888,7 @@ class HashTable final
ValueType* m_table;
unsigned m_tableSize;
unsigned m_keyCount;
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
unsigned m_deletedCount : 30;
unsigned m_queueFlag : 1;
unsigned m_accessForbidden : 1;
@@ -931,7 +938,7 @@ inline HashTable<Key,
m_keyCount(0),
m_deletedCount(0),
m_queueFlag(false)
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
,
m_accessForbidden(false),
m_modifications(0)
@@ -1015,8 +1022,8 @@ template <typename HashTranslator, typename T>
inline const Value*
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
lookup(const T& key) const {
- ASSERT(!m_accessForbidden);
- ASSERT((HashTableKeyChecker<
+ DCHECK(!accessForbidden());
+ DCHECK((HashTableKeyChecker<
HashTranslator, KeyTraits,
HashFunctions::safeToCompareToEmptyOrDeleted>::checkKey(key)));
const ValueType* table = m_table;
@@ -1071,8 +1078,8 @@ inline typename HashTable<Key,
Allocator>::LookupType
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
lookupForWriting(const T& key) {
- ASSERT(!m_accessForbidden);
- ASSERT(m_table);
+ DCHECK(!accessForbidden());
+ DCHECK(m_table);
registerModification();
ValueType* table = m_table;
@@ -1127,8 +1134,8 @@ inline typename HashTable<Key,
Allocator>::FullLookupType
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
fullLookupForWriting(const T& key) {
- ASSERT(!m_accessForbidden);
- ASSERT(m_table);
+ DCHECK(!accessForbidden());
+ DCHECK(m_table);
registerModification();
ValueType* table = m_table;
@@ -1222,12 +1229,12 @@ typename HashTable<Key,
Allocator>::AddResult
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
add(T&& key, Extra&& extra) {
- ASSERT(!m_accessForbidden);
- ASSERT(Allocator::isAllocationAllowed());
+ DCHECK(!accessForbidden());
+ DCHECK(Allocator::isAllocationAllowed());
if (!m_table)
expand();
- ASSERT(m_table);
+ DCHECK(m_table);
ValueType* table = m_table;
size_t k = 0;
@@ -1275,7 +1282,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
HashTranslator::translate(*entry, std::forward<T>(key),
std::forward<Extra>(extra));
- ASSERT(!isEmptyOrDeletedBucket(*entry));
+ DCHECK(!isEmptyOrDeletedBucket(*entry));
++m_keyCount;
@@ -1318,8 +1325,8 @@ typename HashTable<Key,
Allocator>::AddResult
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
addPassingHashCode(T&& key, Extra&& extra) {
- ASSERT(!m_accessForbidden);
- ASSERT(Allocator::isAllocationAllowed());
+ DCHECK(!accessForbidden());
+ DCHECK(Allocator::isAllocationAllowed());
if (!m_table)
expand();
@@ -1341,7 +1348,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
HashTranslator::translate(*entry, std::forward<T>(key),
std::forward<Extra>(extra), h);
- ASSERT(!isEmptyOrDeletedBucket(*entry));
+ DCHECK(!isEmptyOrDeletedBucket(*entry));
++m_keyCount;
if (shouldExpand())
@@ -1360,10 +1367,10 @@ template <typename Key,
Value*
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
reinsert(ValueType&& entry) {
- ASSERT(m_table);
+ DCHECK(m_table);
registerModification();
- ASSERT(!lookupForWriting(Extractor::extract(entry)).second);
- ASSERT(
+ DCHECK(!lookupForWriting(Extractor::extract(entry)).second);
+ DCHECK(
!isDeletedBucket(*(lookupForWriting(Extractor::extract(entry)).first)));
#if DUMP_HASHTABLE_STATS
atomicIncrement(&HashTableStats::instance().numReinserts);
@@ -1467,14 +1474,9 @@ void HashTable<Key,
++m_stats->numRemoves;
#endif
- ASSERT(!m_accessForbidden);
-#if ENABLE(ASSERT)
- m_accessForbidden = true;
-#endif
+ enterAccessForbiddenScope();
deleteBucket(*pos);
-#if ENABLE(ASSERT)
- m_accessForbidden = false;
-#endif
+ leaveAccessForbiddenScope();
++m_deletedCount;
--m_keyCount;
@@ -1637,7 +1639,7 @@ Value*
HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
expandBuffer(unsigned newTableSize, Value* entry, bool& success) {
success = false;
- ASSERT(m_tableSize < newTableSize);
+ DCHECK_LT(m_tableSize, newTableSize);
if (!Allocator::expandHashTableBacking(m_table,
newTableSize * sizeof(ValueType)))
return nullptr;
@@ -1653,7 +1655,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
if (&m_table[i] == entry)
newEntry = &temporaryTable[i];
if (isEmptyOrDeletedBucket(m_table[i])) {
- ASSERT(&m_table[i] != entry);
+ DCHECK_NE(&m_table[i], entry);
if (Traits::emptyValueIsZero) {
memset(&temporaryTable[i], 0, sizeof(ValueType));
} else {
@@ -1675,14 +1677,9 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
}
newEntry = rehashTo(originalTable, newTableSize, newEntry);
- ASSERT(!m_accessForbidden);
-#if ENABLE(ASSERT)
- m_accessForbidden = true;
-#endif
+ enterAccessForbiddenScope();
deleteAllBucketsAndDeallocate(temporaryTable, oldTableSize);
-#if ENABLE(ASSERT)
- m_accessForbidden = false;
-#endif
+ leaveAccessForbiddenScope();
return newEntry;
}
@@ -1716,12 +1713,12 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
Value* newEntry = nullptr;
for (unsigned i = 0; i != oldTableSize; ++i) {
if (isEmptyOrDeletedBucket(oldTable[i])) {
- ASSERT(&oldTable[i] != entry);
+ DCHECK_NE(&oldTable[i], entry);
continue;
}
Value* reinsertedEntry = reinsert(std::move(oldTable[i]));
if (&oldTable[i] == entry) {
- ASSERT(!newEntry);
+ DCHECK(!newEntry);
newEntry = reinsertedEntry;
}
}
@@ -1772,14 +1769,9 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
ValueType* newTable = allocateTable(newTableSize);
Value* newEntry = rehashTo(newTable, newTableSize, entry);
- ASSERT(!m_accessForbidden);
-#if ENABLE(ASSERT)
- m_accessForbidden = true;
-#endif
+ enterAccessForbiddenScope();
deleteAllBucketsAndDeallocate(oldTable, oldTableSize);
-#if ENABLE(ASSERT)
- m_accessForbidden = false;
-#endif
+ leaveAccessForbiddenScope();
return newEntry;
}
@@ -1802,14 +1794,9 @@ void HashTable<Key,
if (!m_table)
return;
- ASSERT(!m_accessForbidden);
-#if ENABLE(ASSERT)
- m_accessForbidden = true;
-#endif
+ enterAccessForbiddenScope();
deleteAllBucketsAndDeallocate(m_table, m_tableSize);
-#if ENABLE(ASSERT)
- m_accessForbidden = false;
-#endif
+ leaveAccessForbiddenScope();
m_table = nullptr;
m_tableSize = 0;
m_keyCount = 0;
@@ -1829,7 +1816,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
m_keyCount(0),
m_deletedCount(0),
m_queueFlag(false)
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
,
m_accessForbidden(false),
m_modifications(0)
@@ -1861,7 +1848,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::
m_keyCount(0),
m_deletedCount(0),
m_queueFlag(false)
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
,
m_accessForbidden(false),
m_modifications(0)
@@ -1888,7 +1875,7 @@ void HashTable<Key,
Traits,
KeyTraits,
Allocator>::swap(HashTable& other) {
- ASSERT(!m_accessForbidden);
+ DCHECK(!accessForbidden());
std::swap(m_table, other.m_table);
std::swap(m_tableSize, other.m_tableSize);
std::swap(m_keyCount, other.m_keyCount);
@@ -1896,10 +1883,10 @@ void HashTable<Key,
unsigned deleted = m_deletedCount;
m_deletedCount = other.m_deletedCount;
other.m_deletedCount = deleted;
- ASSERT(!m_queueFlag);
- ASSERT(!other.m_queueFlag);
+ DCHECK(!m_queueFlag);
+ DCHECK(!other.m_queueFlag);
-#if ENABLE(ASSERT)
+#if DCHECK_IS_ON()
std::swap(m_modifications, other.m_modifications);
#endif
@@ -2031,7 +2018,7 @@ struct WeakProcessingHashTableHelper<WeakHandlingInCollections,
static void ephemeronIteration(typename Allocator::Visitor* visitor,
void* closure) {
HashTableType* table = reinterpret_cast<HashTableType*>(closure);
- ASSERT(table->m_table);
+ DCHECK(table->m_table);
// Check the hash table for elements that we now know will not be
// removed by weak processing. Those elements need to have their strong
// pointers traced.
@@ -2049,7 +2036,9 @@ struct WeakProcessingHashTableHelper<WeakHandlingInCollections,
static void ephemeronIterationDone(typename Allocator::Visitor* visitor,
void* closure) {
HashTableType* table = reinterpret_cast<HashTableType*>(closure);
- ASSERT(Allocator::weakTableRegistered(visitor, table));
+#if DCHECK_IS_ON()
+ DCHECK(Allocator::weakTableRegistered(visitor, table));
+#endif
table->clearEnqueued();
}
};
@@ -2118,7 +2107,9 @@ void HashTable<Key,
// Ephemerons:
// http://dl.acm.org/citation.cfm?doid=263698.263733 - see also
// http://www.jucs.org/jucs_14_21/eliminating_cycles_in_weak
- ASSERT(!enqueued() || Allocator::weakTableRegistered(visitor, this));
+#if DCHECK_IS_ON()
+ DCHECK(!enqueued() || Allocator::weakTableRegistered(visitor, this));
+#endif
if (!enqueued()) {
Allocator::registerWeakTable(
visitor, this,
« no previous file with comments | « third_party/WebKit/Source/wtf/HashMapTest.cpp ('k') | third_party/WebKit/Source/wtf/HexNumber.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698