Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: src/heap/objects-visiting-inl.h

Issue 2808093003: [heap] Introduce HeapVisitor interface. (Closed)
Patch Set: fix compile error Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_INL_H_ 5 #ifndef V8_OBJECTS_VISITING_INL_H_
6 #define V8_OBJECTS_VISITING_INL_H_ 6 #define V8_OBJECTS_VISITING_INL_H_
7 7
8 #include "src/heap/array-buffer-tracker.h" 8 #include "src/heap/array-buffer-tracker.h"
9 #include "src/heap/mark-compact.h" 9 #include "src/heap/mark-compact.h"
10 #include "src/heap/objects-visiting.h" 10 #include "src/heap/objects-visiting.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 table_.Register( 43 table_.Register(
44 kVisitSymbol, 44 kVisitSymbol,
45 &FixedBodyVisitor<StaticVisitor, Symbol::BodyDescriptor, int>::Visit); 45 &FixedBodyVisitor<StaticVisitor, Symbol::BodyDescriptor, int>::Visit);
46 46
47 table_.Register(kVisitFixedArray, 47 table_.Register(kVisitFixedArray,
48 &FlexibleBodyVisitor<StaticVisitor, 48 &FlexibleBodyVisitor<StaticVisitor,
49 FixedArray::BodyDescriptor, int>::Visit); 49 FixedArray::BodyDescriptor, int>::Visit);
50 50
51 table_.Register(kVisitFixedDoubleArray, &VisitFixedDoubleArray); 51 table_.Register(kVisitFixedDoubleArray, &VisitFixedDoubleArray);
52 table_.Register( 52 table_.Register(
53 kVisitFixedTypedArray, 53 kVisitFixedTypedArrayBase,
54 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 54 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
55 int>::Visit); 55 int>::Visit);
56 56
57 table_.Register( 57 table_.Register(
58 kVisitFixedFloat64Array, 58 kVisitFixedFloat64Array,
59 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 59 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
60 int>::Visit); 60 int>::Visit);
61 61
62 table_.Register( 62 table_.Register(
63 kVisitNativeContext, 63 kVisitNativeContext,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 129
130 table_.Register( 130 table_.Register(
131 kVisitSymbol, 131 kVisitSymbol,
132 &FixedBodyVisitor<StaticVisitor, Symbol::BodyDescriptor, void>::Visit); 132 &FixedBodyVisitor<StaticVisitor, Symbol::BodyDescriptor, void>::Visit);
133 133
134 table_.Register(kVisitFixedArray, &FixedArrayVisitor::Visit); 134 table_.Register(kVisitFixedArray, &FixedArrayVisitor::Visit);
135 135
136 table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit); 136 table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit);
137 137
138 table_.Register( 138 table_.Register(
139 kVisitFixedTypedArray, 139 kVisitFixedTypedArrayBase,
140 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 140 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
141 void>::Visit); 141 void>::Visit);
142 142
143 table_.Register( 143 table_.Register(
144 kVisitFixedFloat64Array, 144 kVisitFixedFloat64Array,
145 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 145 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
146 void>::Visit); 146 void>::Visit);
147 147
148 table_.Register(kVisitNativeContext, &VisitNativeContext); 148 table_.Register(kVisitNativeContext, &VisitNativeContext);
149 149
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 621
622 template <typename StaticVisitor> 622 template <typename StaticVisitor>
623 void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionStrongCode( 623 void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionStrongCode(
624 Map* map, HeapObject* object) { 624 Map* map, HeapObject* object) {
625 typedef FlexibleBodyVisitor<StaticVisitor, 625 typedef FlexibleBodyVisitor<StaticVisitor,
626 JSFunction::BodyDescriptorStrongCode, 626 JSFunction::BodyDescriptorStrongCode,
627 void> JSFunctionStrongCodeBodyVisitor; 627 void> JSFunctionStrongCodeBodyVisitor;
628 JSFunctionStrongCodeBodyVisitor::Visit(map, object); 628 JSFunctionStrongCodeBodyVisitor::Visit(map, object);
629 } 629 }
630 630
631
632 template <typename StaticVisitor> 631 template <typename StaticVisitor>
633 void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionWeakCode( 632 void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionWeakCode(
634 Map* map, HeapObject* object) { 633 Map* map, HeapObject* object) {
635 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, 634 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode,
636 void> JSFunctionWeakCodeBodyVisitor; 635 void> JSFunctionWeakCodeBodyVisitor;
637 JSFunctionWeakCodeBodyVisitor::Visit(map, object); 636 JSFunctionWeakCodeBodyVisitor::Visit(map, object);
638 } 637 }
639 638
639 template <typename ResultType, typename ConcreteVisitor>
640 ResultType HeapVisitor<ResultType, ConcreteVisitor>::IterateBody(
641 HeapObject* object) {
642 Map* map = object->map();
643 ConcreteVisitor* visitor = static_cast<ConcreteVisitor*>(this);
644 switch (static_cast<VisitorId>(map->visitor_id())) {
645 #define CASE(type) \
646 case kVisit##type: \
647 return visitor->Visit##type(map, type::cast(object));
648 TYPED_VISITOR_ID_LIST(CASE)
649 #undef CASE
650 case kVisitShortcutCandidate:
651 return visitor->VisitShortcutCandidate(map, ConsString::cast(object));
652 case kVisitNativeContext:
653 return visitor->VisitNativeContext(map, Context::cast(object));
654 case kVisitDataObject:
655 return visitor->VisitDataObject(map, HeapObject::cast(object));
656 case kVisitJSObjectFast:
657 return visitor->VisitJSObjectFast(map, JSObject::cast(object));
658 case kVisitJSApiObject:
659 return visitor->VisitJSApiObject(map, JSObject::cast(object));
660 case kVisitStruct:
661 return visitor->VisitStruct(map, HeapObject::cast(object));
662 case kVisitFreeSpace:
663 return visitor->VisitFreeSpace(map, FreeSpace::cast(object));
664 case kVisitorIdCount:
665 UNREACHABLE();
666 }
667 UNREACHABLE();
668 // Make the compiler happy.
669 return ResultType();
670 }
671
672 #define VISIT(type) \
673 template <typename ResultType, typename ConcreteVisitor> \
674 ResultType HeapVisitor<ResultType, ConcreteVisitor>::Visit##type( \
675 Map* map, type* object) { \
676 int size = type::BodyDescriptor::SizeOf(map, object); \
677 type::BodyDescriptor::IterateBody(object, size, \
678 static_cast<ConcreteVisitor*>(this)); \
679 return static_cast<ResultType>(size); \
680 }
681 TYPED_VISITOR_ID_LIST(VISIT)
682 #undef VISIT
683
684 template <typename ResultType, typename ConcreteVisitor>
685 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitShortcutCandidate(
686 Map* map, ConsString* object) {
687 int size = ConsString::BodyDescriptor::SizeOf(map, object);
688 ConsString::BodyDescriptor::IterateBody(object, size,
689 static_cast<ConcreteVisitor*>(this));
690 return static_cast<ResultType>(size);
691 }
692
693 template <typename ResultType, typename ConcreteVisitor>
694 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitNativeContext(
695 Map* map, Context* object) {
696 int size = Context::BodyDescriptor::SizeOf(map, object);
697 Context::BodyDescriptor::IterateBody(object, size,
698 static_cast<ConcreteVisitor*>(this));
699 return static_cast<ResultType>(size);
700 }
701
702 template <typename ResultType, typename ConcreteVisitor>
703 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitDataObject(
704 Map* map, HeapObject* object) {
705 int size = map->instance_size();
706 return static_cast<ResultType>(size);
707 }
708
709 template <typename ResultType, typename ConcreteVisitor>
710 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitJSObjectFast(
711 Map* map, JSObject* object) {
712 int size = JSObject::FastBodyDescriptor::SizeOf(map, object);
713 JSObject::FastBodyDescriptor::IterateBody(
714 object, size, static_cast<ConcreteVisitor*>(this));
715 return static_cast<ResultType>(size);
716 }
717 template <typename ResultType, typename ConcreteVisitor>
718 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitJSApiObject(
719 Map* map, JSObject* object) {
720 int size = JSObject::BodyDescriptor::SizeOf(map, object);
721 JSObject::BodyDescriptor::IterateBody(object, size,
722 static_cast<ConcreteVisitor*>(this));
723 return static_cast<ResultType>(size);
724 }
725 template <typename ResultType, typename ConcreteVisitor>
726 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitStruct(
727 Map* map, HeapObject* object) {
728 int size = map->instance_size();
729 StructBodyDescriptor::IterateBody(object, size,
730 static_cast<ConcreteVisitor*>(this));
731 return static_cast<ResultType>(size);
732 }
733 template <typename ResultType, typename ConcreteVisitor>
734 ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitFreeSpace(
735 Map* map, FreeSpace* object) {
736 return static_cast<ResultType>(FreeSpace::cast(object)->size());
737 }
640 738
641 } // namespace internal 739 } // namespace internal
642 } // namespace v8 740 } // namespace v8
643 741
644 #endif // V8_OBJECTS_VISITING_INL_H_ 742 #endif // V8_OBJECTS_VISITING_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698