| Index: src/heap/objects-visiting-inl.h
|
| diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h
|
| index 2b82c6b29ef0a7f4ddf9e0fa80ce920535723c70..df3bab76a14040191a0badde93b3666489d1b451 100644
|
| --- a/src/heap/objects-visiting-inl.h
|
| +++ b/src/heap/objects-visiting-inl.h
|
| @@ -50,7 +50,7 @@ void StaticNewSpaceVisitor<StaticVisitor>::Initialize() {
|
|
|
| table_.Register(kVisitFixedDoubleArray, &VisitFixedDoubleArray);
|
| table_.Register(
|
| - kVisitFixedTypedArray,
|
| + kVisitFixedTypedArrayBase,
|
| &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
|
| int>::Visit);
|
|
|
| @@ -136,7 +136,7 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() {
|
| table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit);
|
|
|
| table_.Register(
|
| - kVisitFixedTypedArray,
|
| + kVisitFixedTypedArrayBase,
|
| &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
|
| void>::Visit);
|
|
|
| @@ -628,7 +628,6 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionStrongCode(
|
| JSFunctionStrongCodeBodyVisitor::Visit(map, object);
|
| }
|
|
|
| -
|
| template <typename StaticVisitor>
|
| void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionWeakCode(
|
| Map* map, HeapObject* object) {
|
| @@ -637,6 +636,105 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionWeakCode(
|
| JSFunctionWeakCodeBodyVisitor::Visit(map, object);
|
| }
|
|
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::IterateBody(
|
| + HeapObject* object) {
|
| + Map* map = object->map();
|
| + ConcreteVisitor* visitor = static_cast<ConcreteVisitor*>(this);
|
| + switch (static_cast<VisitorId>(map->visitor_id())) {
|
| +#define CASE(type) \
|
| + case kVisit##type: \
|
| + return visitor->Visit##type(map, type::cast(object));
|
| + TYPED_VISITOR_ID_LIST(CASE)
|
| +#undef CASE
|
| + case kVisitShortcutCandidate:
|
| + return visitor->VisitShortcutCandidate(map, ConsString::cast(object));
|
| + case kVisitNativeContext:
|
| + return visitor->VisitNativeContext(map, Context::cast(object));
|
| + case kVisitDataObject:
|
| + return visitor->VisitDataObject(map, HeapObject::cast(object));
|
| + case kVisitJSObjectFast:
|
| + return visitor->VisitJSObjectFast(map, JSObject::cast(object));
|
| + case kVisitJSApiObject:
|
| + return visitor->VisitJSApiObject(map, JSObject::cast(object));
|
| + case kVisitStruct:
|
| + return visitor->VisitStruct(map, HeapObject::cast(object));
|
| + case kVisitFreeSpace:
|
| + return visitor->VisitFreeSpace(map, FreeSpace::cast(object));
|
| + case kVisitorIdCount:
|
| + UNREACHABLE();
|
| + }
|
| + UNREACHABLE();
|
| + // Make the compiler happy.
|
| + return ResultType();
|
| +}
|
| +
|
| +#define VISIT(type) \
|
| + template <typename ResultType, typename ConcreteVisitor> \
|
| + ResultType HeapVisitor<ResultType, ConcreteVisitor>::Visit##type( \
|
| + Map* map, type* object) { \
|
| + int size = type::BodyDescriptor::SizeOf(map, object); \
|
| + type::BodyDescriptor::IterateBody(object, size, \
|
| + static_cast<ConcreteVisitor*>(this)); \
|
| + return static_cast<ResultType>(size); \
|
| + }
|
| +TYPED_VISITOR_ID_LIST(VISIT)
|
| +#undef VISIT
|
| +
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitShortcutCandidate(
|
| + Map* map, ConsString* object) {
|
| + int size = ConsString::BodyDescriptor::SizeOf(map, object);
|
| + ConsString::BodyDescriptor::IterateBody(object, size,
|
| + static_cast<ConcreteVisitor*>(this));
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitNativeContext(
|
| + Map* map, Context* object) {
|
| + int size = Context::BodyDescriptor::SizeOf(map, object);
|
| + Context::BodyDescriptor::IterateBody(object, size,
|
| + static_cast<ConcreteVisitor*>(this));
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitDataObject(
|
| + Map* map, HeapObject* object) {
|
| + int size = map->instance_size();
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitJSObjectFast(
|
| + Map* map, JSObject* object) {
|
| + int size = JSObject::FastBodyDescriptor::SizeOf(map, object);
|
| + JSObject::FastBodyDescriptor::IterateBody(
|
| + object, size, static_cast<ConcreteVisitor*>(this));
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitJSApiObject(
|
| + Map* map, JSObject* object) {
|
| + int size = JSObject::BodyDescriptor::SizeOf(map, object);
|
| + JSObject::BodyDescriptor::IterateBody(object, size,
|
| + static_cast<ConcreteVisitor*>(this));
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitStruct(
|
| + Map* map, HeapObject* object) {
|
| + int size = map->instance_size();
|
| + StructBodyDescriptor::IterateBody(object, size,
|
| + static_cast<ConcreteVisitor*>(this));
|
| + return static_cast<ResultType>(size);
|
| +}
|
| +template <typename ResultType, typename ConcreteVisitor>
|
| +ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitFreeSpace(
|
| + Map* map, FreeSpace* object) {
|
| + return static_cast<ResultType>(FreeSpace::cast(object)->size());
|
| +}
|
|
|
| } // namespace internal
|
| } // namespace v8
|
|
|