| Index: src/heap/objects-visiting.h
|
| diff --git a/src/objects-visiting.h b/src/heap/objects-visiting.h
|
| similarity index 72%
|
| rename from src/objects-visiting.h
|
| rename to src/heap/objects-visiting.h
|
| index b9a4b25fc302ab4f75dd105f556307ba2e8177e7..919a800c9724de0794382863c87ec1c882621f18 100644
|
| --- a/src/objects-visiting.h
|
| +++ b/src/heap/objects-visiting.h
|
| @@ -23,60 +23,60 @@ namespace internal {
|
| // Base class for all static visitors.
|
| class StaticVisitorBase : public AllStatic {
|
| public:
|
| -#define VISITOR_ID_LIST(V) \
|
| - V(SeqOneByteString) \
|
| - V(SeqTwoByteString) \
|
| - V(ShortcutCandidate) \
|
| - V(ByteArray) \
|
| - V(FreeSpace) \
|
| - V(FixedArray) \
|
| - V(FixedDoubleArray) \
|
| - V(FixedTypedArray) \
|
| - V(FixedFloat64Array) \
|
| - V(ConstantPoolArray) \
|
| - 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(Struct2) \
|
| - V(Struct3) \
|
| - V(Struct4) \
|
| - V(Struct5) \
|
| - V(Struct6) \
|
| - V(Struct7) \
|
| - V(Struct8) \
|
| - V(Struct9) \
|
| - V(StructGeneric) \
|
| - V(ConsString) \
|
| - V(SlicedString) \
|
| - V(Symbol) \
|
| - V(Oddball) \
|
| - V(Code) \
|
| - V(Map) \
|
| - V(Cell) \
|
| - V(PropertyCell) \
|
| - V(SharedFunctionInfo) \
|
| - V(JSFunction) \
|
| - V(JSWeakCollection) \
|
| - V(JSArrayBuffer) \
|
| - V(JSTypedArray) \
|
| - V(JSDataView) \
|
| +#define VISITOR_ID_LIST(V) \
|
| + V(SeqOneByteString) \
|
| + V(SeqTwoByteString) \
|
| + V(ShortcutCandidate) \
|
| + V(ByteArray) \
|
| + V(FreeSpace) \
|
| + V(FixedArray) \
|
| + V(FixedDoubleArray) \
|
| + V(FixedTypedArray) \
|
| + V(FixedFloat64Array) \
|
| + V(ConstantPoolArray) \
|
| + 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(Struct2) \
|
| + V(Struct3) \
|
| + V(Struct4) \
|
| + V(Struct5) \
|
| + V(Struct6) \
|
| + V(Struct7) \
|
| + V(Struct8) \
|
| + V(Struct9) \
|
| + V(StructGeneric) \
|
| + V(ConsString) \
|
| + V(SlicedString) \
|
| + V(Symbol) \
|
| + V(Oddball) \
|
| + V(Code) \
|
| + V(Map) \
|
| + V(Cell) \
|
| + V(PropertyCell) \
|
| + V(SharedFunctionInfo) \
|
| + V(JSFunction) \
|
| + V(JSWeakCollection) \
|
| + V(JSArrayBuffer) \
|
| + V(JSTypedArray) \
|
| + V(JSDataView) \
|
| V(JSRegExp)
|
|
|
| // For data objects, JS objects and structs along with generic visitor which
|
| @@ -89,7 +89,7 @@ class StaticVisitorBase : public AllStatic {
|
| // id of specialized visitor from given instance size, base visitor id and
|
| // generic visitor's id.
|
| enum VisitorId {
|
| -#define VISITOR_ID_ENUM_DECL(id) kVisit##id,
|
| +#define VISITOR_ID_ENUM_DECL(id) kVisit##id,
|
| VISITOR_ID_LIST(VISITOR_ID_ENUM_DECL)
|
| #undef VISITOR_ID_ENUM_DECL
|
| kVisitorIdCount,
|
| @@ -112,11 +112,9 @@ class StaticVisitorBase : public AllStatic {
|
|
|
| // 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,
|
| + static VisitorId GetVisitorIdForSize(VisitorId base, VisitorId generic,
|
| int object_size) {
|
| - DCHECK((base == kVisitDataObject) ||
|
| - (base == kVisitStruct) ||
|
| + DCHECK((base == kVisitDataObject) || (base == kVisitStruct) ||
|
| (base == kVisitJSObject));
|
| DCHECK(IsAligned(object_size, kPointerSize));
|
| DCHECK(kMinObjectSizeInWords * kPointerSize <= object_size);
|
| @@ -130,7 +128,7 @@ class StaticVisitorBase : public AllStatic {
|
| };
|
|
|
|
|
| -template<typename Callback>
|
| +template <typename Callback>
|
| class VisitorDispatchTable {
|
| public:
|
| void CopyFrom(VisitorDispatchTable* other) {
|
| @@ -155,10 +153,8 @@ class VisitorDispatchTable {
|
| callbacks_[id] = reinterpret_cast<base::AtomicWord>(callback);
|
| }
|
|
|
| - template<typename Visitor,
|
| - StaticVisitorBase::VisitorId base,
|
| - StaticVisitorBase::VisitorId generic,
|
| - int object_size_in_words>
|
| + 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),
|
| @@ -166,12 +162,11 @@ class VisitorDispatchTable {
|
| }
|
|
|
|
|
| - template<typename Visitor,
|
| - StaticVisitorBase::VisitorId base,
|
| - StaticVisitorBase::VisitorId generic>
|
| + template <typename Visitor, StaticVisitorBase::VisitorId base,
|
| + StaticVisitorBase::VisitorId generic>
|
| void RegisterSpecializations() {
|
| - STATIC_ASSERT(
|
| - (generic - base + StaticVisitorBase::kMinObjectSizeInWords) == 10);
|
| + STATIC_ASSERT((generic - base + StaticVisitorBase::kMinObjectSizeInWords) ==
|
| + 10);
|
| RegisterSpecialization<Visitor, base, generic, 2>();
|
| RegisterSpecialization<Visitor, base, generic, 3>();
|
| RegisterSpecialization<Visitor, base, generic, 4>();
|
| @@ -188,56 +183,46 @@ class VisitorDispatchTable {
|
| };
|
|
|
|
|
| -template<typename StaticVisitor>
|
| +template <typename StaticVisitor>
|
| class BodyVisitorBase : public AllStatic {
|
| public:
|
| - INLINE(static void IteratePointers(Heap* heap,
|
| - HeapObject* object,
|
| - int start_offset,
|
| - int end_offset)) {
|
| - Object** start_slot = reinterpret_cast<Object**>(object->address() +
|
| - start_offset);
|
| - Object** end_slot = reinterpret_cast<Object**>(object->address() +
|
| - end_offset);
|
| + INLINE(static void IteratePointers(Heap* heap, HeapObject* object,
|
| + int start_offset, int end_offset)) {
|
| + Object** start_slot =
|
| + reinterpret_cast<Object**>(object->address() + start_offset);
|
| + Object** end_slot =
|
| + reinterpret_cast<Object**>(object->address() + end_offset);
|
| StaticVisitor::VisitPointers(heap, start_slot, end_slot);
|
| }
|
| };
|
|
|
|
|
| -template<typename StaticVisitor, typename BodyDescriptor, typename ReturnType>
|
| +template <typename StaticVisitor, typename BodyDescriptor, typename ReturnType>
|
| class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> {
|
| public:
|
| INLINE(static ReturnType Visit(Map* map, HeapObject* object)) {
|
| int object_size = BodyDescriptor::SizeOf(map, object);
|
| BodyVisitorBase<StaticVisitor>::IteratePointers(
|
| - map->GetHeap(),
|
| - object,
|
| - BodyDescriptor::kStartOffset,
|
| - object_size);
|
| + map->GetHeap(), object, BodyDescriptor::kStartOffset, object_size);
|
| return static_cast<ReturnType>(object_size);
|
| }
|
|
|
| - template<int object_size>
|
| + template <int object_size>
|
| static inline ReturnType VisitSpecialized(Map* map, HeapObject* object) {
|
| DCHECK(BodyDescriptor::SizeOf(map, object) == object_size);
|
| BodyVisitorBase<StaticVisitor>::IteratePointers(
|
| - map->GetHeap(),
|
| - object,
|
| - BodyDescriptor::kStartOffset,
|
| - object_size);
|
| + map->GetHeap(), object, BodyDescriptor::kStartOffset, object_size);
|
| return static_cast<ReturnType>(object_size);
|
| }
|
| };
|
|
|
|
|
| -template<typename StaticVisitor, typename BodyDescriptor, typename ReturnType>
|
| +template <typename StaticVisitor, typename BodyDescriptor, typename ReturnType>
|
| class FixedBodyVisitor : public BodyVisitorBase<StaticVisitor> {
|
| public:
|
| INLINE(static ReturnType Visit(Map* map, HeapObject* object)) {
|
| BodyVisitorBase<StaticVisitor>::IteratePointers(
|
| - map->GetHeap(),
|
| - object,
|
| - BodyDescriptor::kStartOffset,
|
| + map->GetHeap(), object, BodyDescriptor::kStartOffset,
|
| BodyDescriptor::kEndOffset);
|
| return static_cast<ReturnType>(BodyDescriptor::kSize);
|
| }
|
| @@ -260,7 +245,7 @@ class FixedBodyVisitor : public BodyVisitorBase<StaticVisitor> {
|
| // (see http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern).
|
| // We use CRTP to guarantee aggressive compile time optimizations (i.e.
|
| // inlining and specialization of StaticVisitor::VisitPointers methods).
|
| -template<typename StaticVisitor>
|
| +template <typename StaticVisitor>
|
| class StaticNewSpaceVisitor : public StaticVisitorBase {
|
| public:
|
| static void Initialize();
|
| @@ -283,11 +268,9 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
| // Don't visit code entry. We are using this visitor only during scavenges.
|
|
|
| VisitPointers(
|
| - heap,
|
| - HeapObject::RawField(object,
|
| - JSFunction::kCodeEntryOffset + kPointerSize),
|
| - HeapObject::RawField(object,
|
| - JSFunction::kNonWeakFieldsEndOffset));
|
| + heap, HeapObject::RawField(object,
|
| + JSFunction::kCodeEntryOffset + kPointerSize),
|
| + HeapObject::RawField(object, JSFunction::kNonWeakFieldsEndOffset));
|
| return JSFunction::kSize;
|
| }
|
|
|
| @@ -309,13 +292,13 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
| }
|
|
|
| INLINE(static int VisitSeqOneByteString(Map* map, HeapObject* object)) {
|
| - return SeqOneByteString::cast(object)->
|
| - SeqOneByteStringSize(map->instance_type());
|
| + return SeqOneByteString::cast(object)
|
| + ->SeqOneByteStringSize(map->instance_type());
|
| }
|
|
|
| INLINE(static int VisitSeqTwoByteString(Map* map, HeapObject* object)) {
|
| - return SeqTwoByteString::cast(object)->
|
| - SeqTwoByteStringSize(map->instance_type());
|
| + return SeqTwoByteString::cast(object)
|
| + ->SeqTwoByteStringSize(map->instance_type());
|
| }
|
|
|
| INLINE(static int VisitFreeSpace(Map* map, HeapObject* object)) {
|
| @@ -328,7 +311,7 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
|
|
| class DataObjectVisitor {
|
| public:
|
| - template<int object_size>
|
| + template <int object_size>
|
| static inline int VisitSpecialized(Map* map, HeapObject* object) {
|
| return object_size;
|
| }
|
| @@ -338,13 +321,11 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
| }
|
| };
|
|
|
| - typedef FlexibleBodyVisitor<StaticVisitor,
|
| - StructBodyDescriptor,
|
| - int> StructVisitor;
|
| + typedef FlexibleBodyVisitor<StaticVisitor, StructBodyDescriptor, int>
|
| + StructVisitor;
|
|
|
| - typedef FlexibleBodyVisitor<StaticVisitor,
|
| - JSObject::BodyDescriptor,
|
| - int> JSObjectVisitor;
|
| + typedef FlexibleBodyVisitor<StaticVisitor, JSObject::BodyDescriptor, int>
|
| + JSObjectVisitor;
|
|
|
| typedef int (*Callback)(Map* map, HeapObject* object);
|
|
|
| @@ -352,7 +333,7 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
| };
|
|
|
|
|
| -template<typename StaticVisitor>
|
| +template <typename StaticVisitor>
|
| VisitorDispatchTable<typename StaticNewSpaceVisitor<StaticVisitor>::Callback>
|
| StaticNewSpaceVisitor<StaticVisitor>::table_;
|
|
|
| @@ -371,7 +352,7 @@ VisitorDispatchTable<typename StaticNewSpaceVisitor<StaticVisitor>::Callback>
|
| // }
|
| //
|
| // This is an example of Curiously recurring template pattern.
|
| -template<typename StaticVisitor>
|
| +template <typename StaticVisitor>
|
| class StaticMarkingVisitor : public StaticVisitorBase {
|
| public:
|
| static void Initialize();
|
| @@ -387,10 +368,10 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
| INLINE(static void VisitDebugTarget(Heap* heap, RelocInfo* rinfo));
|
| INLINE(static void VisitCodeTarget(Heap* heap, RelocInfo* rinfo));
|
| INLINE(static void VisitCodeAgeSequence(Heap* heap, RelocInfo* rinfo));
|
| - INLINE(static void VisitExternalReference(RelocInfo* rinfo)) { }
|
| - INLINE(static void VisitRuntimeEntry(RelocInfo* rinfo)) { }
|
| + INLINE(static void VisitExternalReference(RelocInfo* rinfo)) {}
|
| + INLINE(static void VisitRuntimeEntry(RelocInfo* rinfo)) {}
|
| // Skip the weak next code link in a code object.
|
| - INLINE(static void VisitNextCodeLink(Heap* heap, Object** slot)) { }
|
| + INLINE(static void VisitNextCodeLink(Heap* heap, Object** slot)) {}
|
|
|
| // TODO(mstarzinger): This should be made protected once refactoring is done.
|
| // Mark non-optimize code for functions inlined into the given optimized
|
| @@ -429,25 +410,20 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
| class DataObjectVisitor {
|
| public:
|
| - template<int size>
|
| - static inline void VisitSpecialized(Map* map, HeapObject* object) {
|
| - }
|
| + template <int size>
|
| + static inline void VisitSpecialized(Map* map, HeapObject* object) {}
|
|
|
| - INLINE(static void Visit(Map* map, HeapObject* object)) {
|
| - }
|
| + INLINE(static void Visit(Map* map, HeapObject* object)) {}
|
| };
|
|
|
| - typedef FlexibleBodyVisitor<StaticVisitor,
|
| - FixedArray::BodyDescriptor,
|
| - void> FixedArrayVisitor;
|
| + typedef FlexibleBodyVisitor<StaticVisitor, FixedArray::BodyDescriptor, void>
|
| + FixedArrayVisitor;
|
|
|
| - typedef FlexibleBodyVisitor<StaticVisitor,
|
| - JSObject::BodyDescriptor,
|
| - void> JSObjectVisitor;
|
| + typedef FlexibleBodyVisitor<StaticVisitor, JSObject::BodyDescriptor, void>
|
| + JSObjectVisitor;
|
|
|
| - typedef FlexibleBodyVisitor<StaticVisitor,
|
| - StructBodyDescriptor,
|
| - void> StructObjectVisitor;
|
| + typedef FlexibleBodyVisitor<StaticVisitor, StructBodyDescriptor, void>
|
| + StructObjectVisitor;
|
|
|
| typedef void (*Callback)(Map* map, HeapObject* object);
|
|
|
| @@ -455,7 +431,7 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
| };
|
|
|
|
|
| -template<typename StaticVisitor>
|
| +template <typename StaticVisitor>
|
| VisitorDispatchTable<typename StaticMarkingVisitor<StaticVisitor>::Callback>
|
| StaticMarkingVisitor<StaticVisitor>::table_;
|
|
|
| @@ -470,7 +446,7 @@ class WeakObjectRetainer;
|
| // access the next-element pointers.
|
| template <class T>
|
| Object* VisitWeakList(Heap* heap, Object* list, WeakObjectRetainer* retainer);
|
| -
|
| -} } // namespace v8::internal
|
| +}
|
| +} // namespace v8::internal
|
|
|
| #endif // V8_OBJECTS_VISITING_H_
|
|
|