Chromium Code Reviews| Index: src/handles-inl.h |
| diff --git a/src/handles-inl.h b/src/handles-inl.h |
| index 5a3e9ed2744ac9c0a0ef1c319648d23e174508f1..2747cbcc1d0f2ed25eafbb11a51e23c355dea150 100644 |
| --- a/src/handles-inl.h |
| +++ b/src/handles-inl.h |
| @@ -55,6 +55,8 @@ template <typename T> |
| inline bool Handle<T>::is_identical_to(const Handle<T> other) const { |
| ASSERT(location_ == NULL || |
| reinterpret_cast<Address>(*location_) != kZapValue); |
|
Michael Starzinger
2013/05/07 11:58:37
As discussed offline: This should actually check a
rossberg
2013/05/07 12:00:25
Done (here and elsewhere).
|
| + if (location_ == other.location_) return true; |
| + if (location_ == NULL || other.location_ == NULL) return false; |
| // Dereferencing deferred handles to check object equality is safe. |
| SLOW_ASSERT(IsDereferenceAllowed(true) && other.IsDereferenceAllowed(true)); |
| return *location_ == *other.location_; |
| @@ -73,14 +75,14 @@ template <typename T> |
| inline T** Handle<T>::location() const { |
| ASSERT(location_ == NULL || |
| reinterpret_cast<Address>(*location_) != kZapValue); |
| - SLOW_ASSERT(IsDereferenceAllowed(false)); |
| + SLOW_ASSERT(location_ == NULL || IsDereferenceAllowed(false)); |
| return location_; |
| } |
| #ifdef DEBUG |
| template <typename T> |
| bool Handle<T>::IsDereferenceAllowed(bool allow_deferred) const { |
| - if (location_ == NULL) return true; |
| + ASSERT(location_ != NULL); |
| Object* object = *BitCast<T**>(location_); |
| if (object->IsSmi()) return true; |
| HeapObject* heap_object = HeapObject::cast(object); |