5#ifndef V8_OBJECTS_VISITORS_H_
6#define V8_OBJECTS_VISITORS_H_
20#define ROOT_ID_LIST(V) \
21 V(kBootstrapper, "(Bootstrapper)") \
22 V(kBuiltins, "(Builtins)") \
23 V(kClientHeap, "(Client heap)") \
24 V(kCodeFlusher, "(Code flusher)") \
25 V(kCompilationCache, "(Compilation cache)") \
26 V(kDebug, "(Debugger)") \
27 V(kExtensions, "(Extensions)") \
28 V(kEternalHandles, "(Eternal handles)") \
29 V(kExternalStringsTable, "(External strings)") \
30 V(kGlobalHandles, "(Global handles)") \
31 V(kHandleScope, "(Handle scope)") \
32 V(kMicroTasks, "(Micro tasks)") \
33 V(kReadOnlyRootList, "(Read-only roots)") \
34 V(kRelocatable, "(Relocatable)") \
35 V(kRetainMaps, "(Retain maps)") \
36 V(kSharedHeapObjectCache, "(Shareable object cache)") \
37 V(kSharedStructTypeRegistry, "(SharedStruct type registry)") \
38 V(kSmiRootList, "(Smi roots)") \
39 V(kStackRoots, "(Stack roots)") \
40 V(kStartupObjectCache, "(Startup object cache)") \
41 V(kStringTable, "(Internalized strings)") \
42 V(kStrongRootList, "(Strong root list)") \
43 V(kStrongRoots, "(Strong roots)") \
44 V(kThreadManager, "(Thread manager)") \
45 V(kTracedHandles, "(Traced handles)") \
46 V(kWeakRoots, "(Weak roots)") \
47 V(kWriteBarrier, "(Write barrier)")
51#define DECLARE_ENUM(enum_item, ignore) enum_item,
57#define DECLARE_ENUM(enum_item, ignore) enum_item,
226#ifdef V8_COMPRESS_POINTERS
236#ifdef V8_EXTERNAL_CODE_SPACE
237 return code_cage_base_;
244#ifdef V8_COMPRESS_POINTERS
246#ifdef V8_EXTERNAL_CODE_SPACE
257template <
typename Visitor = RootVisitor>
267#ifdef V8_ENABLE_DIRECT_HANDLE
268 if (
object.ptr() == ValueHelper::kTaggedNullAddress)
continue;
298template <
typename Visitor = ObjectVisitorWithCageBases>
void VisitInstructionStreamPointer(Tagged< Code > host, InstructionStreamSlot slot) final
ClientObjectVisitor(Visitor *actual_visitor)
void VisitPointer(Tagged< HeapObject > host, ObjectSlot p) final
void VisitMapPointer(Tagged< HeapObject > host) final
Visitor *const actual_visitor_
void VisitEmbeddedPointer(Tagged< InstructionStream > host, RelocInfo *rinfo) final
void VisitPointers(Tagged< HeapObject > host, ObjectSlot start, ObjectSlot end) final
void VisitCodeTarget(Tagged< InstructionStream > host, RelocInfo *rinfo) final
static V8_INLINE bool IsSharedHeapObject(Tagged< Object > object)
void VisitPointers(Tagged< HeapObject > host, MaybeObjectSlot start, MaybeObjectSlot end) final
Visitor *const actual_visitor_
ClientRootVisitor(Visitor *actual_visitor)
static V8_INLINE bool IsSharedHeapObject(Tagged< Object > object)
void VisitRunningCode(FullObjectSlot code_slot, FullObjectSlot maybe_istream_slot) final
void VisitRootPointers(Root root, const char *description, OffHeapObjectSlot start, OffHeapObjectSlot end) final
void Synchronize(VisitorSynchronization::SyncTag tag) final
void VisitRootPointers(Root root, const char *description, FullObjectSlot start, FullObjectSlot end) final
PtrComprCageBase code_cage_base() const
PtrComprCageBase cage_base() const
ObjectVisitorWithCageBases(PtrComprCageBase cage_base, PtrComprCageBase code_cage_base)
virtual void VisitProtectedPointer(Tagged< TrustedObject > host, ProtectedPointerSlot slot)
virtual void VisitEmbeddedPointer(Tagged< InstructionStream > host, RelocInfo *rinfo)
virtual void VisitExternalReference(Tagged< InstructionStream > host, RelocInfo *rinfo)
virtual void VisitCodeTarget(Tagged< InstructionStream > host, RelocInfo *rinfo)
virtual void VisitTrustedPointerTableEntry(Tagged< HeapObject > host, IndirectPointerSlot slot)
virtual void VisitOffHeapTarget(Tagged< InstructionStream > host, RelocInfo *rinfo)
virtual void VisitIndirectPointer(Tagged< HeapObject > host, IndirectPointerSlot slot, IndirectPointerMode mode)
virtual void VisitExternalPointer(Tagged< HeapObject > host, ExternalPointerSlot slot)
virtual void VisitMapPointer(Tagged< HeapObject > host)
virtual void VisitCppHeapPointer(Tagged< HeapObject > host, CppHeapPointerSlot slot)
virtual void VisitCustomWeakPointers(Tagged< HeapObject > host, ObjectSlot start, ObjectSlot end)
virtual void VisitProtectedPointer(Tagged< TrustedObject > host, ProtectedMaybeObjectSlot slot)
virtual void VisitPointers(Tagged< HeapObject > host, ObjectSlot start, ObjectSlot end)=0
virtual void VisitJSDispatchTableEntry(Tagged< HeapObject > host, JSDispatchHandle handle)
virtual void VisitEphemeron(Tagged< HeapObject > host, int index, ObjectSlot key, ObjectSlot value)
virtual void VisitPointers(Tagged< HeapObject > host, MaybeObjectSlot start, MaybeObjectSlot end)=0
virtual void VisitPointer(Tagged< HeapObject > host, MaybeObjectSlot p)
virtual void VisitCustomWeakPointer(Tagged< HeapObject > host, ObjectSlot p)
virtual void VisitPointer(Tagged< HeapObject > host, ObjectSlot p)
virtual ~ObjectVisitor()=default
virtual void VisitInternalReference(Tagged< InstructionStream > host, RelocInfo *rinfo)
virtual void VisitInstructionStreamPointer(Tagged< Code > host, InstructionStreamSlot slot)=0
void VisitRelocInfo(Tagged< InstructionStream > host, RelocIterator *it)
virtual ~RootVisitor()=default
virtual void VisitRootPointers(Root root, const char *description, FullObjectSlot start, FullObjectSlot end)=0
static const char * RootName(Root root)
virtual void VisitRunningCode(FullObjectSlot code_slot, FullObjectSlot istream_or_smi_zero_slot)
virtual void Synchronize(VisitorSynchronization::SyncTag tag)
virtual GarbageCollector collector() const
virtual void VisitRootPointers(Root root, const char *description, OffHeapObjectSlot start, OffHeapObjectSlot end)
virtual void VisitRootPointer(Root root, const char *description, FullObjectSlot p)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
static V8_INLINE bool HasWeakHeapObjectTag(const Tagged< Object > value)
DECLARE_ENUM(enum_item, ignore)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)