diff options
Diffstat (limited to 'deps/v8/src/objects-visiting-inl.h')
-rw-r--r-- | deps/v8/src/objects-visiting-inl.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/deps/v8/src/objects-visiting-inl.h b/deps/v8/src/objects-visiting-inl.h index 46cc9d7989..93b7cb96ad 100644 --- a/deps/v8/src/objects-visiting-inl.h +++ b/deps/v8/src/objects-visiting-inl.h @@ -185,6 +185,8 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() { table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit); + table_.Register(kVisitConstantPoolArray, &VisitConstantPoolArray); + table_.Register(kVisitNativeContext, &VisitNativeContext); table_.Register(kVisitAllocationSite, @@ -261,10 +263,8 @@ void StaticMarkingVisitor<StaticVisitor>::VisitEmbeddedPointer( ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); ASSERT(!rinfo->target_object()->IsConsString()); HeapObject* object = HeapObject::cast(rinfo->target_object()); - if (!FLAG_weak_embedded_maps_in_optimized_code || !FLAG_collect_maps || - rinfo->host()->kind() != Code::OPTIMIZED_FUNCTION || - !object->IsMap() || !Map::cast(object)->CanTransition()) { - heap->mark_compact_collector()->RecordRelocSlot(rinfo, object); + heap->mark_compact_collector()->RecordRelocSlot(rinfo, object); + if (!Code::IsWeakEmbeddedObject(rinfo->host()->kind(), object)) { StaticVisitor::MarkObject(heap, object); } } @@ -452,6 +452,22 @@ void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo( template<typename StaticVisitor> +void StaticMarkingVisitor<StaticVisitor>::VisitConstantPoolArray( + Map* map, HeapObject* object) { + Heap* heap = map->GetHeap(); + ConstantPoolArray* constant_pool = ConstantPoolArray::cast(object); + int first_ptr_offset = constant_pool->OffsetOfElementAt( + constant_pool->first_ptr_index()); + int last_ptr_offset = constant_pool->OffsetOfElementAt( + constant_pool->first_ptr_index() + constant_pool->count_of_ptr_entries()); + StaticVisitor::VisitPointers( + heap, + HeapObject::RawField(object, first_ptr_offset), + HeapObject::RawField(object, last_ptr_offset)); +} + + +template<typename StaticVisitor> void StaticMarkingVisitor<StaticVisitor>::VisitJSFunction( Map* map, HeapObject* object) { Heap* heap = map->GetHeap(); |