Chromium Code Reviews| 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 |