Chromium Code Reviews| Index: Source/platform/heap/Handle.h |
| diff --git a/Source/platform/heap/Handle.h b/Source/platform/heap/Handle.h |
| index 4fdc0a33c15aa274b4620aa9f0d21908943f0e6c..8ebeb07fe5b90ec6bd759eb2a77261f4d9b590e7 100644 |
| --- a/Source/platform/heap/Handle.h |
| +++ b/Source/platform/heap/Handle.h |
| @@ -159,21 +159,21 @@ public: |
| Persistent(T* raw) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(raw) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| Persistent(T& raw) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(&raw) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| Persistent(const Persistent& other) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -181,7 +181,7 @@ public: |
| Persistent(const Persistent<U>& other) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -189,7 +189,7 @@ public: |
| Persistent(const Member<U>& other) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -197,7 +197,7 @@ public: |
| Persistent(const RawPtr<U>& other) : PersistentNode(TraceMethodDelegate<Persistent<T>, &Persistent<T>::trace>::trampoline), m_raw(other.get()) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -238,7 +238,7 @@ public: |
| Persistent& operator=(U* other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -252,7 +252,7 @@ public: |
| Persistent& operator=(const Persistent& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -261,7 +261,7 @@ public: |
| Persistent& operator=(const Persistent<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -270,7 +270,7 @@ public: |
| Persistent& operator=(const Member<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -279,7 +279,7 @@ public: |
| Persistent& operator=(const RawPtr<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -307,11 +307,11 @@ private: |
| m_prev->m_next = m_next; |
| } |
| - void checkPointer() |
| - { |
| #if ENABLE(ASSERT) |
| + bool checkPointer() |
| + { |
| if (!m_raw) |
| - return; |
| + return true; |
| // Heap::isHeapObjectAlive(m_raw) checks that m_raw is a traceable |
| // object. In other words, it checks that the pointer is either of: |
| @@ -322,8 +322,10 @@ private: |
| // Otherwise, Heap::isHeapObjectAlive will crash when it calls |
| // header->checkHeader(). |
| Heap::isHeapObjectAlive(m_raw); |
| -#endif |
| + // We're not interested in the result of Heap::isHeapObjectAlive. |
| + return true; |
| } |
|
Yuta Kitamura
2015/06/30 06:15:21
IMO this use of ASSERT() is too confusing. When th
|
| +#endif |
| #if ENABLE(GC_PROFILING) |
| void recordBacktrace() |
| @@ -357,21 +359,21 @@ public: |
| CrossThreadPersistent(T* raw) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(raw) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| CrossThreadPersistent(T& raw) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(&raw) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| CrossThreadPersistent(const CrossThreadPersistent& other) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -379,7 +381,7 @@ public: |
| CrossThreadPersistent(const CrossThreadPersistent<U>& other) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -387,7 +389,7 @@ public: |
| CrossThreadPersistent(const Member<U>& other) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(other) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -395,7 +397,7 @@ public: |
| CrossThreadPersistent(const RawPtr<U>& other) : PersistentNode(TraceMethodDelegate<CrossThreadPersistent<T>, &CrossThreadPersistent<T>::trace>::trampoline), m_raw(other.get()) |
| { |
| initialize(); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| } |
| @@ -436,7 +438,7 @@ public: |
| CrossThreadPersistent& operator=(U* other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -450,7 +452,7 @@ public: |
| CrossThreadPersistent& operator=(const CrossThreadPersistent& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -459,7 +461,7 @@ public: |
| CrossThreadPersistent& operator=(const CrossThreadPersistent<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -468,7 +470,7 @@ public: |
| CrossThreadPersistent& operator=(const Member<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -477,7 +479,7 @@ public: |
| CrossThreadPersistent& operator=(const RawPtr<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| recordBacktrace(); |
| return *this; |
| } |
| @@ -505,11 +507,11 @@ private: |
| m_prev->m_next = m_next; |
| } |
| - void checkPointer() |
| - { |
| #if ENABLE(ASSERT) |
| + bool checkPointer() |
| + { |
| if (!m_raw) |
| - return; |
| + return true; |
| // Heap::isHeapObjectAlive(m_raw) checks that m_raw is a traceable |
| // object. In other words, it checks that the pointer is either of: |
| // |
| @@ -519,8 +521,10 @@ private: |
| // Otherwise, Heap::isHeapObjectAlive will crash when it calls |
| // header->checkHeader(). |
| Heap::isHeapObjectAlive(m_raw); |
| -#endif |
| + // We're not interested in the result of isHeapObjectAlive. |
| + return true; |
| } |
| +#endif |
| #if ENABLE(GC_PROFILING) |
| void recordBacktrace() |
| @@ -667,18 +671,18 @@ public: |
| Member(T* raw) : m_raw(raw) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| explicit Member(T& raw) : m_raw(&raw) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| template<typename U> |
| Member(const RawPtr<U>& other) : m_raw(other.get()) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| Member(WTF::HashTableDeletedValueType) : m_raw(reinterpret_cast<T*>(-1)) |
| @@ -690,18 +694,18 @@ public: |
| template<typename U> |
| Member(const Persistent<U>& other) : m_raw(other) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| Member(const Member& other) : m_raw(other) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| template<typename U> |
| Member(const Member<U>& other) : m_raw(other) |
| { |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| T* release() |
| @@ -724,7 +728,7 @@ public: |
| Member& operator=(const Persistent<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| return *this; |
| } |
| @@ -732,7 +736,7 @@ public: |
| Member& operator=(const Member<U>& other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| return *this; |
| } |
| @@ -740,7 +744,7 @@ public: |
| Member& operator=(U* other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| return *this; |
| } |
| @@ -748,7 +752,7 @@ public: |
| Member& operator=(RawPtr<U> other) |
| { |
| m_raw = other; |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| return *this; |
| } |
| @@ -761,7 +765,7 @@ public: |
| void swap(Member<T>& other) |
| { |
| std::swap(m_raw, other.m_raw); |
| - checkPointer(); |
| + ASSERT(checkPointer()); |
| } |
| T* get() const { return m_raw; } |
| @@ -770,17 +774,17 @@ public: |
| protected: |
| - void checkPointer() |
| - { |
| #if ENABLE(ASSERT) |
| + bool checkPointer() |
| + { |
| if (!m_raw) |
| - return; |
| + return true; |
| // HashTable can store a special value (which is not aligned to the |
| // allocation granularity) to Member<> to represent a deleted entry. |
| // Thus we treat a pointer that is not aligned to the granularity |
| // as a valid pointer. |
| if (reinterpret_cast<intptr_t>(m_raw) % allocationGranularity) |
| - return; |
| + return true; |
| // TODO(haraken): What we really want to check here is that the pointer |
| // is a traceable object. In other words, the pointer is either of: |
| @@ -793,8 +797,9 @@ protected: |
| // So we currently implement only the check for (a). |
| if (!IsGarbageCollectedMixin<T>::value) |
| HeapObjectHeader::fromPayload(m_raw)->checkHeader(); |
| -#endif |
| + return true; |
| } |
| +#endif |
| T* m_raw; |
| @@ -830,7 +835,7 @@ public: |
| WeakMember& operator=(const Persistent<U>& other) |
| { |
| this->m_raw = other; |
| - this->checkPointer(); |
| + ASSERT(this->checkPointer()); |
| return *this; |
| } |
| @@ -838,7 +843,7 @@ public: |
| WeakMember& operator=(const Member<U>& other) |
| { |
| this->m_raw = other; |
| - this->checkPointer(); |
| + ASSERT(this->checkPointer()); |
| return *this; |
| } |
| @@ -846,7 +851,7 @@ public: |
| WeakMember& operator=(U* other) |
| { |
| this->m_raw = other; |
| - this->checkPointer(); |
| + ASSERT(this->checkPointer()); |
| return *this; |
| } |
| @@ -854,7 +859,7 @@ public: |
| WeakMember& operator=(const RawPtr<U>& other) |
| { |
| this->m_raw = other; |
| - this->checkPointer(); |
| + ASSERT(this->checkPointer()); |
| return *this; |
| } |