5 #ifndef V8_OBJECTS_VISITING_H_
6 #define V8_OBJECTS_VISITING_H_
26 #define VISITOR_ID_LIST(V) \
29 V(ShortcutCandidate) \
35 V(FixedFloat64Array) \
36 V(ConstantPoolArray) \
47 V(DataObjectGeneric) \
74 V(SharedFunctionInfo) \
92 #define VISITOR_ID_ENUM_DECL(id) kVisit##id,
94 #undef VISITOR_ID_ENUM_DECL
126 return Min(specialization,
generic);
131 template <
typename Callback>
144 return reinterpret_cast<Callback
>(
callbacks_[id]);
148 return reinterpret_cast<Callback
>(
callbacks_[
map->visitor_id()]);
161 &Visitor::template VisitSpecialized<size>);
170 RegisterSpecialization<Visitor, base, generic, 2>();
171 RegisterSpecialization<Visitor, base, generic, 3>();
172 RegisterSpecialization<Visitor, base, generic, 4>();
173 RegisterSpecialization<Visitor, base, generic, 5>();
174 RegisterSpecialization<Visitor, base, generic, 6>();
175 RegisterSpecialization<Visitor, base, generic, 7>();
176 RegisterSpecialization<Visitor, base, generic, 8>();
177 RegisterSpecialization<Visitor, base, generic, 9>();
186 template <
typename StaticVisitor>
190 int start_offset,
int end_offset)) {
192 reinterpret_cast<Object**
>(
object->address() + start_offset);
194 reinterpret_cast<Object**
>(
object->address() + end_offset);
195 StaticVisitor::VisitPointers(heap, start_slot, end_slot);
200 template <
typename StaticVisitor,
typename BodyDescriptor,
typename ReturnType>
204 int object_size = BodyDescriptor::SizeOf(
map,
object);
206 map->GetHeap(),
object, BodyDescriptor::kStartOffset, object_size);
207 return static_cast<ReturnType
>(object_size);
210 template <
int object_size>
212 DCHECK(BodyDescriptor::SizeOf(
map,
object) == object_size);
214 map->GetHeap(),
object, BodyDescriptor::kStartOffset, object_size);
215 return static_cast<ReturnType
>(object_size);
220 template <
typename StaticVisitor,
typename BodyDescriptor,
typename ReturnType>
225 map->GetHeap(),
object, BodyDescriptor::kStartOffset,
226 BodyDescriptor::kEndOffset);
227 return static_cast<ReturnType
>(BodyDescriptor::kSize);
248 template <
typename StaticVisitor>
258 for (
Object** p = start; p < end; p++) StaticVisitor::VisitPointer(heap, p);
278 return reinterpret_cast<ByteArray*
>(object)->ByteArraySize();
291 return JSObjectVisitor::Visit(
map,
object);
295 return SeqOneByteString::cast(
object)
296 ->SeqOneByteStringSize(
map->instance_type());
300 return SeqTwoByteString::cast(
object)
301 ->SeqTwoByteStringSize(
map->instance_type());
305 return FreeSpace::cast(
object)->Size();
314 template <
int object_size>
320 return map->instance_size();
336 template <
typename StaticVisitor>
355 template <
typename StaticVisitor>
434 template <
typename StaticVisitor>
INLINE(static void IteratePointers(Heap *heap, HeapObject *object, int start_offset, int end_offset))
INLINE(static ReturnType Visit(Map *map, HeapObject *object))
static int SizeFor(int length)
INLINE(static ReturnType Visit(Map *map, HeapObject *object))
static ReturnType VisitSpecialized(Map *map, HeapObject *object)
static Object ** RawField(HeapObject *obj, int offset)
static const int kNonWeakFieldsEndOffset
static const int kCodeEntryOffset
static const int kPropertiesOffset
static const int kMaxRegularHeapObjectSize
static void VisitSpecialized(Map *map, HeapObject *object)
INLINE(static void Visit(Map *map, HeapObject *object))
void(* Callback)(Map *map, HeapObject *object)
INLINE(static bool IsFlushable(Heap *heap, SharedFunctionInfo *shared_info))
static void VisitJSFunctionStrongCode(Heap *heap, HeapObject *object)
static void MarkInlinedFunctionsCode(Heap *heap, Code *code)
INLINE(static void VisitCodeEntry(Heap *heap, Address entry_address))
static VisitorDispatchTable< Callback > table_
INLINE(static void VisitCodeAgeSequence(Heap *heap, RelocInfo *rinfo))
INLINE(static void VisitConstantPoolArray(Map *map, HeapObject *object))
INLINE(static void VisitJSTypedArray(Map *map, HeapObject *object))
INLINE(static void VisitJSFunction(Map *map, HeapObject *object))
INLINE(static void VisitJSDataView(Map *map, HeapObject *object))
INLINE(static void VisitRuntimeEntry(RelocInfo *rinfo))
static void VisitJSFunctionWeakCode(Heap *heap, HeapObject *object)
static void VisitSharedFunctionInfoStrongCode(Heap *heap, HeapObject *object)
static void MarkTransitionArray(Heap *heap, TransitionArray *transitions)
INLINE(static void VisitJSRegExp(Map *map, HeapObject *object))
INLINE(static void VisitNextCodeLink(Heap *heap, Object **slot))
INLINE(static void VisitCode(Map *map, HeapObject *object))
INLINE(static void VisitExternalReference(RelocInfo *rinfo))
INLINE(static void IterateBody(Map *map, HeapObject *obj))
INLINE(static void VisitEmbeddedPointer(Heap *heap, RelocInfo *rinfo))
INLINE(static void VisitPropertyCell(Map *map, HeapObject *object))
INLINE(static bool IsFlushable(Heap *heap, JSFunction *function))
INLINE(static void VisitCell(Heap *heap, RelocInfo *rinfo))
INLINE(static void VisitSharedFunctionInfo(Map *map, HeapObject *object))
static void MarkMapContents(Heap *heap, Map *map)
INLINE(static void VisitJSArrayBuffer(Map *map, HeapObject *object))
INLINE(static void VisitNativeContext(Map *map, HeapObject *object))
INLINE(static void VisitMap(Map *map, HeapObject *object))
FlexibleBodyVisitor< StaticVisitor, JSObject::BodyDescriptor, void > JSObjectVisitor
INLINE(static void VisitCodeTarget(Heap *heap, RelocInfo *rinfo))
INLINE(static void VisitAllocationSite(Map *map, HeapObject *object))
static void VisitSharedFunctionInfoWeakCode(Heap *heap, HeapObject *object)
INLINE(static void VisitDebugTarget(Heap *heap, RelocInfo *rinfo))
INLINE(static void VisitWeakCollection(Map *map, HeapObject *object))
FlexibleBodyVisitor< StaticVisitor, StructBodyDescriptor, void > StructObjectVisitor
FlexibleBodyVisitor< StaticVisitor, FixedArray::BodyDescriptor, void > FixedArrayVisitor
static int VisitSpecialized(Map *map, HeapObject *object)
INLINE(static int Visit(Map *map, HeapObject *object))
INLINE(static void VisitPointers(Heap *heap, Object **start, Object **end))
INLINE(static int IterateBody(Map *map, HeapObject *obj))
INLINE(static int VisitFixedDoubleArray(Map *map, HeapObject *object))
INLINE(static int VisitSeqOneByteString(Map *map, HeapObject *object))
int(* Callback)(Map *map, HeapObject *object)
INLINE(static int VisitFreeSpace(Map *map, HeapObject *object))
INLINE(static int VisitJSDataView(Map *map, HeapObject *object))
INLINE(static int VisitJSArrayBuffer(Map *map, HeapObject *object))
INLINE(static int VisitJSFunction(Map *map, HeapObject *object))
FlexibleBodyVisitor< StaticVisitor, JSObject::BodyDescriptor, int > JSObjectVisitor
INLINE(static int VisitJSObject(Map *map, HeapObject *object))
INLINE(static int VisitByteArray(Map *map, HeapObject *object))
INLINE(static int VisitFixedTypedArray(Map *map, HeapObject *object))
FlexibleBodyVisitor< StaticVisitor, StructBodyDescriptor, int > StructVisitor
INLINE(static int VisitSeqTwoByteString(Map *map, HeapObject *object))
INLINE(static int VisitJSTypedArray(Map *map, HeapObject *object))
static VisitorDispatchTable< Callback > table_
static VisitorId GetVisitorId(int instance_type, int instance_size)
STATIC_ASSERT(kVisitorIdCount<=256)
static VisitorId GetVisitorId(Map *map)
static VisitorId GetVisitorIdForSize(VisitorId base, VisitorId generic, int object_size)
base::AtomicWord callbacks_[StaticVisitorBase::kVisitorIdCount]
Callback GetVisitor(Map *map)
Callback GetVisitorById(StaticVisitorBase::VisitorId id)
void RegisterSpecialization()
void Register(StaticVisitorBase::VisitorId id, Callback callback)
void CopyFrom(VisitorDispatchTable *other)
void RegisterSpecializations()
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf map
enable harmony numeric enable harmony object literal extensions Optimize object size
#define DCHECK(condition)
void NoBarrier_Store(volatile Atomic8 *ptr, Atomic8 value)
static LifetimePosition Min(LifetimePosition a, LifetimePosition b)
const int kPointerSizeLog2
STATIC_ASSERT(sizeof(CPURegister)==sizeof(Register))
bool IsAligned(T value, U alignment)
Object * VisitWeakList(Heap *heap, Object *list, WeakObjectRetainer *retainer)
Debugger support for the V8 JavaScript engine.
#define VISITOR_ID_LIST(V)
#define VISITOR_ID_ENUM_DECL(id)