diff options
Diffstat (limited to 'src/objects-visiting.h')
-rw-r--r-- | src/objects-visiting.h | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/objects-visiting.h b/src/objects-visiting.h index ea6d7954..42f90608 100644 --- a/src/objects-visiting.h +++ b/src/objects-visiting.h @@ -186,14 +186,15 @@ class VisitorDispatchTable { template<typename StaticVisitor> class BodyVisitorBase : public AllStatic { public: - INLINE(static void IteratePointers(HeapObject* object, + INLINE(static void IteratePointers(Heap* heap, + HeapObject* object, int start_offset, int end_offset)) { Object** start_slot = reinterpret_cast<Object**>(object->address() + start_offset); Object** end_slot = reinterpret_cast<Object**>(object->address() + end_offset); - StaticVisitor::VisitPointers(start_slot, end_slot); + StaticVisitor::VisitPointers(heap, start_slot, end_slot); } }; @@ -204,7 +205,10 @@ class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> { static inline ReturnType Visit(Map* map, HeapObject* object) { int object_size = BodyDescriptor::SizeOf(map, object); BodyVisitorBase<StaticVisitor>::IteratePointers( - object, BodyDescriptor::kStartOffset, object_size); + map->heap(), + object, + BodyDescriptor::kStartOffset, + object_size); return static_cast<ReturnType>(object_size); } @@ -212,7 +216,10 @@ class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> { static inline ReturnType VisitSpecialized(Map* map, HeapObject* object) { ASSERT(BodyDescriptor::SizeOf(map, object) == object_size); BodyVisitorBase<StaticVisitor>::IteratePointers( - object, BodyDescriptor::kStartOffset, object_size); + map->heap(), + object, + BodyDescriptor::kStartOffset, + object_size); return static_cast<ReturnType>(object_size); } }; @@ -223,7 +230,10 @@ class FixedBodyVisitor : public BodyVisitorBase<StaticVisitor> { public: static inline ReturnType Visit(Map* map, HeapObject* object) { BodyVisitorBase<StaticVisitor>::IteratePointers( - object, BodyDescriptor::kStartOffset, BodyDescriptor::kEndOffset); + map->heap(), + object, + BodyDescriptor::kStartOffset, + BodyDescriptor::kEndOffset); return static_cast<ReturnType>(BodyDescriptor::kSize); } }; @@ -299,8 +309,8 @@ class StaticNewSpaceVisitor : public StaticVisitorBase { return table_.GetVisitor(map)(map, obj); } - static inline void VisitPointers(Object** start, Object** end) { - for (Object** p = start; p < end; p++) StaticVisitor::VisitPointer(p); + static inline void VisitPointers(Heap* heap, Object** start, Object** end) { + for (Object** p = start; p < end; p++) StaticVisitor::VisitPointer(heap, p); } private: @@ -372,7 +382,7 @@ void Code::CodeIterateBody(ObjectVisitor* v) { template<typename StaticVisitor> -void Code::CodeIterateBody() { +void Code::CodeIterateBody(Heap* heap) { int mode_mask = RelocInfo::kCodeTargetMask | RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) | RelocInfo::ModeMask(RelocInfo::GLOBAL_PROPERTY_CELL) | @@ -386,12 +396,14 @@ void Code::CodeIterateBody() { RelocIterator it(this, mode_mask); StaticVisitor::VisitPointer( + heap, reinterpret_cast<Object**>(this->address() + kRelocationInfoOffset)); StaticVisitor::VisitPointer( + heap, reinterpret_cast<Object**>(this->address() + kDeoptimizationDataOffset)); for (; !it.done(); it.next()) { - it.rinfo()->template Visit<StaticVisitor>(); + it.rinfo()->template Visit<StaticVisitor>(heap); } } |