| Index: src/objects-visiting.h
|
| diff --git a/src/objects-visiting.h b/src/objects-visiting.h
|
| index a84c51225b53c706afb06d895b5de218bc74f880..7415101743f81dcd6b5da41aac727e25fa8a7741 100644
|
| --- a/src/objects-visiting.h
|
| +++ b/src/objects-visiting.h
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2011 the V8 project authors. All rights reserved.
|
| +// Copyright 2012 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -360,7 +360,71 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
|
|
| template<typename StaticVisitor>
|
| VisitorDispatchTable<typename StaticNewSpaceVisitor<StaticVisitor>::Callback>
|
| - StaticNewSpaceVisitor<StaticVisitor>::table_;
|
| + StaticNewSpaceVisitor<StaticVisitor>::table_;
|
| +
|
| +
|
| +// Base class for visitors used to transitively mark the entire heap.
|
| +// IterateBody returns nothing.
|
| +// Certain types of objects might not be handled by this base class and
|
| +// no visitor function is registered by the generic initialization. A
|
| +// specialized visitor function needs to be provided by the inheriting
|
| +// class itself for those cases.
|
| +//
|
| +// This class is intended to be used in the following way:
|
| +//
|
| +// class SomeVisitor : public StaticMarkingVisitor<SomeVisitor> {
|
| +// ...
|
| +// }
|
| +//
|
| +// This is an example of Curiously recurring template pattern.
|
| +template<typename StaticVisitor>
|
| +class StaticMarkingVisitor : public StaticVisitorBase {
|
| + public:
|
| + static void Initialize();
|
| +
|
| + static inline void IterateBody(Map* map, HeapObject* obj) {
|
| + table_.GetVisitor(map)(map, obj);
|
| + }
|
| +
|
| + static inline void VisitCodeEntry(Heap* heap, Address entry_address);
|
| + static inline void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo);
|
| + static inline void VisitDebugTarget(Heap* heap, RelocInfo* rinfo);
|
| + static inline void VisitExternalReference(RelocInfo* rinfo) { }
|
| + static inline void VisitRuntimeEntry(RelocInfo* rinfo) { }
|
| +
|
| + // TODO(mstarzinger): This should be made protected once refactoring is done.
|
| + static inline void VisitGlobalContext(Map* map, HeapObject* object);
|
| +
|
| + protected:
|
| + static inline void VisitJSRegExp(Map* map, HeapObject* object);
|
| +
|
| + class DataObjectVisitor {
|
| + public:
|
| + template<int size>
|
| + static inline void VisitSpecialized(Map* map, HeapObject* object) {
|
| + }
|
| +
|
| + static inline void Visit(Map* map, HeapObject* object) {
|
| + }
|
| + };
|
| +
|
| + typedef FlexibleBodyVisitor<StaticVisitor,
|
| + JSObject::BodyDescriptor,
|
| + void> JSObjectVisitor;
|
| +
|
| + typedef FlexibleBodyVisitor<StaticVisitor,
|
| + StructBodyDescriptor,
|
| + void> StructObjectVisitor;
|
| +
|
| + typedef void (*Callback)(Map* map, HeapObject* object);
|
| +
|
| + static VisitorDispatchTable<Callback> table_;
|
| +};
|
| +
|
| +
|
| +template<typename StaticVisitor>
|
| +VisitorDispatchTable<typename StaticMarkingVisitor<StaticVisitor>::Callback>
|
| + StaticMarkingVisitor<StaticVisitor>::table_;
|
|
|
|
|
| } } // namespace v8::internal
|
|
|