Index: src/handles-inl.h |
diff --git a/src/handles-inl.h b/src/handles-inl.h |
index 5a3e9ed2744ac9c0a0ef1c319648d23e174508f1..4f5e9fe720e0b68710ee9e2e6dc23709513c6f89 100644 |
--- a/src/handles-inl.h |
+++ b/src/handles-inl.h |
@@ -53,8 +53,9 @@ Handle<T>::Handle(T* obj, Isolate* isolate) { |
template <typename T> |
inline bool Handle<T>::is_identical_to(const Handle<T> other) const { |
- ASSERT(location_ == NULL || |
- reinterpret_cast<Address>(*location_) != kZapValue); |
+ ASSERT(location_ == NULL || !(*location_)->IsFailure()); |
+ 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_; |
@@ -63,24 +64,22 @@ inline bool Handle<T>::is_identical_to(const Handle<T> other) const { |
template <typename T> |
inline T* Handle<T>::operator*() const { |
- ASSERT(location_ != NULL); |
- ASSERT(reinterpret_cast<Address>(*location_) != kHandleZapValue); |
+ ASSERT(location_ != NULL && !(*location_)->IsFailure()); |
SLOW_ASSERT(IsDereferenceAllowed(false)); |
return *BitCast<T**>(location_); |
} |
template <typename T> |
inline T** Handle<T>::location() const { |
- ASSERT(location_ == NULL || |
- reinterpret_cast<Address>(*location_) != kZapValue); |
- SLOW_ASSERT(IsDereferenceAllowed(false)); |
+ ASSERT(location_ == NULL || !(*location_)->IsFailure()); |
+ 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); |