Index: src/heap/objects-visiting.h |
diff --git a/src/heap/objects-visiting.h b/src/heap/objects-visiting.h |
index f10f370314766cebfb8520aa118b899e4440cde0..abbb27a3267d7fba7618ccddf8930a93da667e50 100644 |
--- a/src/heap/objects-visiting.h |
+++ b/src/heap/objects-visiting.h |
@@ -41,42 +41,11 @@ class StaticVisitorBase : public AllStatic { |
V(FixedFloat64Array) \ |
V(NativeContext) \ |
V(AllocationSite) \ |
- V(DataObject2) \ |
- V(DataObject3) \ |
- V(DataObject4) \ |
- V(DataObject5) \ |
- V(DataObject6) \ |
- V(DataObject7) \ |
- V(DataObject8) \ |
- V(DataObject9) \ |
- V(DataObjectGeneric) \ |
- V(JSObject2) \ |
- V(JSObject3) \ |
- V(JSObject4) \ |
- V(JSObject5) \ |
- V(JSObject6) \ |
- V(JSObject7) \ |
- V(JSObject8) \ |
- V(JSObject9) \ |
- V(JSObjectGeneric) \ |
- V(JSApiObject2) \ |
- V(JSApiObject3) \ |
- V(JSApiObject4) \ |
- V(JSApiObject5) \ |
- V(JSApiObject6) \ |
- V(JSApiObject7) \ |
- V(JSApiObject8) \ |
- V(JSApiObject9) \ |
- V(JSApiObjectGeneric) \ |
- V(Struct2) \ |
- V(Struct3) \ |
- V(Struct4) \ |
- V(Struct5) \ |
- V(Struct6) \ |
- V(Struct7) \ |
- V(Struct8) \ |
- V(Struct9) \ |
- V(StructGeneric) \ |
+ V(DataObject) \ |
+ V(JSObjectFast) \ |
+ V(JSObject) \ |
+ V(JSApiObject) \ |
+ V(Struct) \ |
V(ConsString) \ |
V(SlicedString) \ |
V(ThinString) \ |
@@ -107,11 +76,7 @@ class StaticVisitorBase : public AllStatic { |
#define VISITOR_ID_ENUM_DECL(id) kVisit##id, |
VISITOR_ID_LIST(VISITOR_ID_ENUM_DECL) |
#undef VISITOR_ID_ENUM_DECL |
- kVisitorIdCount, |
- kVisitDataObject = kVisitDataObject2, |
- kVisitJSObject = kVisitJSObject2, |
- kVisitJSApiObject = kVisitJSApiObject2, |
- kVisitStruct = kVisitStruct2, |
+ kVisitorIdCount |
}; |
// Visitor ID should fit in one byte. |
@@ -124,28 +89,6 @@ class StaticVisitorBase : public AllStatic { |
// Determine which specialized visitor should be used for given map. |
static VisitorId GetVisitorId(Map* map); |
- |
- // For visitors that allow specialization by size calculate VisitorId based |
- // on size, base visitor id and generic visitor id. |
- static VisitorId GetVisitorIdForSize(VisitorId base, VisitorId generic, |
- int object_size, |
- bool has_unboxed_fields) { |
- DCHECK((base == kVisitDataObject) || (base == kVisitStruct) || |
- (base == kVisitJSObject) || (base == kVisitJSApiObject)); |
- DCHECK(IsAligned(object_size, kPointerSize)); |
- DCHECK(Heap::kMinObjectSizeInWords * kPointerSize <= object_size); |
- DCHECK(object_size <= kMaxRegularHeapObjectSize); |
- DCHECK(!has_unboxed_fields || (base == kVisitJSObject) || |
- (base == kVisitJSApiObject)); |
- |
- if (has_unboxed_fields) return generic; |
- |
- int visitor_id = Min( |
- base + (object_size >> kPointerSizeLog2) - Heap::kMinObjectSizeInWords, |
- static_cast<int>(generic)); |
- |
- return static_cast<VisitorId>(visitor_id); |
- } |
}; |
@@ -172,30 +115,6 @@ class VisitorDispatchTable { |
callbacks_[id] = reinterpret_cast<base::AtomicWord>(callback); |
} |
- template <typename Visitor, StaticVisitorBase::VisitorId base, |
- StaticVisitorBase::VisitorId generic, int object_size_in_words> |
- void RegisterSpecialization() { |
- static const int size = object_size_in_words * kPointerSize; |
- Register(StaticVisitorBase::GetVisitorIdForSize(base, generic, size, false), |
- &Visitor::template VisitSpecialized<size>); |
- } |
- |
- |
- template <typename Visitor, StaticVisitorBase::VisitorId base, |
- StaticVisitorBase::VisitorId generic> |
- void RegisterSpecializations() { |
- STATIC_ASSERT((generic - base + Heap::kMinObjectSizeInWords) == 10); |
- RegisterSpecialization<Visitor, base, generic, 2>(); |
- RegisterSpecialization<Visitor, base, generic, 3>(); |
- RegisterSpecialization<Visitor, base, generic, 4>(); |
- RegisterSpecialization<Visitor, base, generic, 5>(); |
- RegisterSpecialization<Visitor, base, generic, 6>(); |
- RegisterSpecialization<Visitor, base, generic, 7>(); |
- RegisterSpecialization<Visitor, base, generic, 8>(); |
- RegisterSpecialization<Visitor, base, generic, 9>(); |
- Register(generic, &Visitor::Visit); |
- } |
- |
private: |
base::AtomicWord callbacks_[StaticVisitorBase::kVisitorIdCount]; |
}; |
@@ -209,18 +128,6 @@ class FlexibleBodyVisitor : public AllStatic { |
BodyDescriptor::template IterateBody<StaticVisitor>(object, object_size); |
return static_cast<ReturnType>(object_size); |
} |
- |
- // This specialization is only suitable for objects containing pointer fields. |
- template <int object_size> |
- static inline ReturnType VisitSpecialized(Map* map, HeapObject* object) { |
- DCHECK(BodyDescriptor::SizeOf(map, object) == object_size); |
- DCHECK(!FLAG_unbox_double_fields || map->HasFastPointerLayout()); |
- StaticVisitor::VisitPointers( |
- object->GetHeap(), object, |
- HeapObject::RawField(object, BodyDescriptor::kStartOffset), |
- HeapObject::RawField(object, object_size)); |
- return static_cast<ReturnType>(object_size); |
- } |
}; |
@@ -289,10 +196,6 @@ class StaticNewSpaceVisitor : public StaticVisitorBase { |
return FixedDoubleArray::SizeFor(length); |
} |
- INLINE(static int VisitJSObject(Map* map, HeapObject* object)) { |
- return JSObjectVisitor::Visit(map, object); |
- } |
- |
INLINE(static int VisitSeqOneByteString(Map* map, HeapObject* object)) { |
return SeqOneByteString::cast(object) |
->SeqOneByteStringSize(map->instance_type()); |
@@ -325,6 +228,10 @@ class StaticNewSpaceVisitor : public StaticVisitorBase { |
typedef FlexibleBodyVisitor<StaticVisitor, JSObject::BodyDescriptor, int> |
JSObjectVisitor; |
+ // Visitor for JSObjects without unboxed double fields. |
+ typedef FlexibleBodyVisitor<StaticVisitor, JSObject::FastBodyDescriptor, int> |
+ JSObjectFastVisitor; |
+ |
typedef int (*Callback)(Map* map, HeapObject* object); |
static VisitorDispatchTable<Callback> table_; |
@@ -408,17 +315,13 @@ class StaticMarkingVisitor : public StaticVisitorBase { |
typedef FlexibleBodyVisitor<StaticVisitor, FixedArray::BodyDescriptor, void> |
FixedArrayVisitor; |
+ typedef FlexibleBodyVisitor<StaticVisitor, JSObject::FastBodyDescriptor, void> |
+ JSObjectFastVisitor; |
typedef FlexibleBodyVisitor<StaticVisitor, JSObject::BodyDescriptor, void> |
JSObjectVisitor; |
class JSApiObjectVisitor : AllStatic { |
public: |
- template <int size> |
- static inline void VisitSpecialized(Map* map, HeapObject* object) { |
- TracePossibleWrapper(object); |
- JSObjectVisitor::template VisitSpecialized<size>(map, object); |
- } |
- |
INLINE(static void Visit(Map* map, HeapObject* object)) { |
TracePossibleWrapper(object); |
JSObjectVisitor::Visit(map, object); |