OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_VISITING_H_ | 5 #ifndef V8_OBJECTS_VISITING_H_ |
6 #define V8_OBJECTS_VISITING_H_ | 6 #define V8_OBJECTS_VISITING_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/layout-descriptor.h" | 9 #include "src/layout-descriptor.h" |
10 | 10 |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
219 HeapObject::RawField(object, end_offset)); | 219 HeapObject::RawField(object, end_offset)); |
220 } | 220 } |
221 | 221 |
222 static void IterateBodyUsingLayoutDescriptor(Heap* heap, HeapObject* object, | 222 static void IterateBodyUsingLayoutDescriptor(Heap* heap, HeapObject* object, |
223 int start_offset, | 223 int start_offset, |
224 int end_offset) { | 224 int end_offset) { |
225 DCHECK(FLAG_unbox_double_fields); | 225 DCHECK(FLAG_unbox_double_fields); |
226 DCHECK(IsAligned(start_offset, kPointerSize) && | 226 DCHECK(IsAligned(start_offset, kPointerSize) && |
227 IsAligned(end_offset, kPointerSize)); | 227 IsAligned(end_offset, kPointerSize)); |
228 | 228 |
229 InobjectPropertiesHelper helper(object->map()); | 229 LayoutDescriptorHelper helper(object->map()); |
230 DCHECK(!helper.all_fields_tagged()); | 230 DCHECK(!helper.all_fields_tagged()); |
231 | 231 for (int offset = start_offset; offset < end_offset;) { |
232 for (int offset = start_offset; offset < end_offset; | 232 int end_of_region_offset; |
233 offset += kPointerSize) { | 233 if (helper.IsTagged(offset, end_offset, &end_of_region_offset)) { |
234 // Visit tagged fields only. | 234 IterateRawPointers(heap, object, offset, end_of_region_offset); |
235 if (helper.IsTagged(offset)) { | |
236 // TODO(ishell): call this once for contiguous region of tagged fields. | |
237 IterateRawPointers(heap, object, offset, offset + kPointerSize); | |
238 } | 235 } |
236 DCHECK(offset < end_of_region_offset); | |
Hannes Payer (out of office)
2014/11/25 17:20:13
I think that DCHECK should be in the IsTagged func
Igor Sheludko
2014/12/10 18:22:04
Done.
| |
237 offset = end_of_region_offset; | |
239 } | 238 } |
240 } | 239 } |
241 }; | 240 }; |
242 | 241 |
243 | 242 |
244 template <typename StaticVisitor, typename BodyDescriptor, typename ReturnType> | 243 template <typename StaticVisitor, typename BodyDescriptor, typename ReturnType> |
245 class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> { | 244 class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> { |
246 public: | 245 public: |
247 INLINE(static ReturnType Visit(Map* map, HeapObject* object)) { | 246 INLINE(static ReturnType Visit(Map* map, HeapObject* object)) { |
248 int object_size = BodyDescriptor::SizeOf(map, object); | 247 int object_size = BodyDescriptor::SizeOf(map, object); |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
488 // the next element. Given the head of the list, this function removes dead | 487 // the next element. Given the head of the list, this function removes dead |
489 // elements from the list and if requested records slots for next-element | 488 // elements from the list and if requested records slots for next-element |
490 // pointers. The template parameter T is a WeakListVisitor that defines how to | 489 // pointers. The template parameter T is a WeakListVisitor that defines how to |
491 // access the next-element pointers. | 490 // access the next-element pointers. |
492 template <class T> | 491 template <class T> |
493 Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer); | 492 Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer); |
494 } | 493 } |
495 } // namespace v8::internal | 494 } // namespace v8::internal |
496 | 495 |
497 #endif // V8_OBJECTS_VISITING_H_ | 496 #endif // V8_OBJECTS_VISITING_H_ |
OLD | NEW |