diff options
Diffstat (limited to 'deps/v8/src/handles-inl.h')
-rw-r--r-- | deps/v8/src/handles-inl.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/deps/v8/src/handles-inl.h b/deps/v8/src/handles-inl.h index 4f4490b75b..5b879d8f08 100644 --- a/deps/v8/src/handles-inl.h +++ b/deps/v8/src/handles-inl.h @@ -32,6 +32,7 @@ #include "api.h" #include "apiutils.h" #include "handles.h" +#include "heap.h" #include "isolate.h" namespace v8 { @@ -85,11 +86,13 @@ bool Handle<T>::IsDereferenceAllowed(DereferenceCheckMode mode) const { Object* object = *BitCast<T**>(location_); if (object->IsSmi()) return true; HeapObject* heap_object = HeapObject::cast(object); - Isolate* isolate = heap_object->GetIsolate(); + Heap* heap = heap_object->GetHeap(); Object** handle = reinterpret_cast<Object**>(location_); - Object** roots_array_start = isolate->heap()->roots_array_start(); + Object** roots_array_start = heap->roots_array_start(); if (roots_array_start <= handle && - handle < roots_array_start + Heap::kStrongRootListLength) { + handle < roots_array_start + Heap::kStrongRootListLength && + heap->RootCanBeTreatedAsConstant( + static_cast<Heap::RootListIndex>(handle - roots_array_start))) { return true; } if (!AllowHandleDereference::IsAllowed()) return false; @@ -98,7 +101,7 @@ bool Handle<T>::IsDereferenceAllowed(DereferenceCheckMode mode) const { // Accessing maps and internalized strings is safe. if (heap_object->IsMap()) return true; if (heap_object->IsInternalizedString()) return true; - return !isolate->IsDeferredHandle(handle); + return !heap->isolate()->IsDeferredHandle(handle); } return true; } |