5#ifndef V8_OBJECTS_OBJECTS_BODY_DESCRIPTORS_H_
6#define V8_OBJECTS_OBJECTS_BODY_DESCRIPTORS_H_
25 template <
typename ObjectVisitor>
29 template <
typename ObjectVisitor>
33 template <
typename ObjectVisitor>
35 int start_offset,
int end_offset,
38 template <
typename ObjectVisitor>
42 template <
typename ObjectVisitor>
44 int key_offset,
int value_offset,
47 template <
typename ObjectVisitor>
49 int start_offset,
int end_offset,
52 template <
typename ObjectVisitor>
56 template <
typename ObjectVisitor>
61 template <
typename ObjectVisitor>
65 template <
typename ObjectVisitor>
70 template <
typename ObjectVisitor>
73#ifdef V8_ENABLE_LEAPTIERING
74 template <
typename ObjectVisitor>
88 template <
typename ObjectVisitor>
91 int start_offset,
int end_offset,
95 template <
typename ObjectVisitor>
104 template <
typename ObjectVisitor>
116template <
int start_offset,
int end_offset>
122 template <
typename ObjectVisitor>
128 template <
typename ObjectVisitor>
142template <
int start_offset,
int end_offset,
int size>
143class FixedBodyDescriptor
144 :
public std::conditional_t<
145 start_offset == end_offset, DataOnlyBodyDescriptor,
146 FixedRangeBodyDescriptor<start_offset, end_offset>> {
159 T::kEndOfStrongFieldsOffset, T::kSize>;
164template <
int start_offset>
169 template <
typename ObjectVisitor>
183template <
int start_offset>
184class FlexibleBodyDescriptor :
public SuffixRangeBodyDescriptor<start_offset> {
196template <
int start_offset>
201 template <
typename ObjectVisitor>
215template <
int start_offset>
216class FlexibleWeakBodyDescriptor
217 :
public SuffixRangeWeakBodyDescriptor<start_offset> {
227template <
class ParentBodyDescriptor,
class ChildBodyDescriptor>
228class SubclassBodyDescriptor :
public BodyDescriptorBase {
232 static_assert(ParentBodyDescriptor::kSize <=
233 ChildBodyDescriptor::kStartOffset);
235 template <
typename ObjectVisitor>
238 ParentBodyDescriptor::IterateBody(map, obj, v);
239 ChildBodyDescriptor::IterateBody(map, obj, v);
242 template <
typename ObjectVisitor>
245 ParentBodyDescriptor::IterateBody(map, obj, object_size, v);
246 ChildBodyDescriptor::IterateBody(map, obj, object_size, v);
251 return ChildBodyDescriptor::SizeOf(map,
object);
257template <
typename T, IndirectPo
interTag kTag>
260 static_assert(std::is_base_of_v<ExposedTrustedObject, T>);
264 template <
typename ObjectVisitor>
267 Base::IterateSelfIndirectPointer(obj, kTag, v);
268 Base::IterateBody(map, obj, object_size, v);
273template <
size_t kFieldOffset, IndirectPo
interTag kTag>
275 template <
typename Base>
278 template <
typename ObjectVisitor>
281 Base::IterateBody(map, obj, object_size, v);
282 Base::IterateTrustedPointer(obj, kFieldOffset, v,
288template <
size_t kFieldOffset>
293template <
size_t kFieldOffset, ExternalPo
interTagRange kTagRange>
295 template <
typename Base>
298 template <
typename ObjectVisitor>
301 Base::IterateBody(map, obj, object_size, v);
303 obj, obj->RawExternalPointerField(kFieldOffset, kTagRange));
309template <
size_t kFieldOffset>
311 template <
typename Base>
314 template <
typename ObjectVisitor>
317 Base::IterateBody(map, obj, object_size, v);
318 Base::IterateProtectedPointer(obj, kFieldOffset, v);
325template <
typename Base,
typename FirstMixin,
typename... MoreMixins>
328 typename FirstMixin::template BodyDescriptor<Base>, MoreMixins...> {};
331template <
typename Base,
typename FirstMixin>
333 :
public FirstMixin::template BodyDescriptor<Base> {};
static void IteratePointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *v)
static bool IsValidEmbedderJSObjectSlotImpl(Tagged< Map > map, Tagged< HeapObject > obj, int offset)
static void IterateCustomWeakPointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *v)
static void IterateSelfIndirectPointer(Tagged< HeapObject > obj, IndirectPointerTag tag, ObjectVisitor *v)
static void IterateMaybeWeakPointers(Tagged< HeapObject > obj, int start_offset, int end_offset, ObjectVisitor *v)
static void IterateJSObjectBodyImpl(Tagged< Map > map, Tagged< HeapObject > obj, int start_offset, int end_offset, ObjectVisitor *v)
static void IterateCodePointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *visitor, IndirectPointerMode mode)
static void IterateTrustedPointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *visitor, IndirectPointerMode mode, IndirectPointerTag tag)
static void IterateProtectedPointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *v)
static void IterateJSObjectBodyWithoutEmbedderFieldsImpl(Tagged< Map > map, Tagged< HeapObject > obj, int start_offset, int end_offset, ObjectVisitor *v)
static void IteratePointers(Tagged< HeapObject > obj, int start_offset, int end_offset, ObjectVisitor *v)
static void IterateMaybeWeakPointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *v)
static void IterateCustomWeakPointers(Tagged< HeapObject > obj, int start_offset, int end_offset, ObjectVisitor *v)
static void IterateEphemeron(Tagged< HeapObject > obj, int index, int key_offset, int value_offset, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int kSize
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static const int kEndOffset
static const int kStartOffset
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
virtual void VisitExternalPointer(Tagged< HeapObject > host, ExternalPointerSlot slot)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static const int kStartOffset
static const int kStartOffset
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
kInterpreterTrampolineOffset Tagged< HeapObject >
#define DCHECK_EQ(v1, v2)