5#ifndef V8_OBJECTS_OBJECTS_BODY_DESCRIPTORS_INL_H_
6#define V8_OBJECTS_OBJECTS_BODY_DESCRIPTORS_INL_H_
51#if V8_ENABLE_WEBASSEMBLY
58template <
int start_offset>
61 return object->SizeFromMap(map);
64template <
int start_offset>
67 return object->SizeFromMap(map);
70template <
typename ObjectVisitor>
76#ifdef V8_COMPRESS_POINTERS
79 int inobject_fields_start_offset = map->GetInObjectPropertyOffset(0);
81 DCHECK_LE(inobject_fields_start_offset, end_offset);
83 if (header_end_offset < inobject_fields_start_offset) {
87 for (
int offset = header_end_offset;
offset < inobject_fields_start_offset;
91 obj, obj->RawExternalPointerField(
96 start_offset = inobject_fields_start_offset;
106template <
typename ObjectVisitor>
123 template <
typename ObjectVisitor>
129 JSObject::kEndOfStrongFieldsOffset, v);
132 static_assert(JSObject::kEndOfStrongFieldsOffset ==
133 JSAPIObjectWithEmbedderSlots::kCppHeapWrappableOffset);
134 static_assert(JSAPIObjectWithEmbedderSlots::kCppHeapWrappableOffset ==
135 JSSpecialObject::kCppHeapWrappableOffset);
136 static_assert(JSAPIObjectWithEmbedderSlots::kCppHeapWrappableOffsetEnd +
138 JSAPIObjectWithEmbedderSlots::kHeaderSize);
140 obj, obj->RawCppHeapPointerField(
141 JSAPIObjectWithEmbedderSlots::kCppHeapWrappableOffset));
144 template <
typename ConcreteType,
typename ObjectVisitor>
156 template <
typename ConcreteType,
typename ObjectVisitor>
161 map, obj, ConcreteType::kHeaderSize, object_size, v);
166 static_assert(JSAPIObjectWithEmbedderSlots::kHeaderSize ==
167 JSSpecialObject::kHeaderSize);
169 JSSpecialObject::kHeaderSize);
175 template <
typename ObjectVisitor>
181 map, obj, object_size, v);
185 return map->instance_size();
189template <
typename ObjectVisitor>
197 v->
VisitPointers(obj, obj->RawField(start_offset), obj->RawField(end_offset));
200template <
typename ObjectVisitor>
207template <
typename ObjectVisitor>
212 obj->RawMaybeWeakField(end_offset));
215template <
typename ObjectVisitor>
222template <
typename ObjectVisitor>
227 obj->RawField(end_offset));
230template <
typename ObjectVisitor>
235 obj->RawField(value_offset));
238template <
typename ObjectVisitor>
245template <
typename ObjectVisitor>
250#ifdef V8_ENABLE_SANDBOX
261template <
typename ObjectVisitor>
268template <
typename ObjectVisitor>
272#ifdef V8_ENABLE_SANDBOX
274 obj, obj->RawIndirectPointerField(
275 ExposedTrustedObject::kSelfIndirectPointerOffset, tag));
279template <
typename ObjectVisitor>
282 DCHECK(IsTrustedObject(obj));
287#ifdef V8_ENABLE_LEAPTIERING
288template <
typename ObjectVisitor>
308 return map->instance_size();
323 template <
typename ObjectVisitor>
330 return map->instance_size();
338 template <
typename ObjectVisitor>
345 return map->instance_size();
351 template <
typename ObjectVisitor>
355 JSDate::kValueOffset, v);
361 return map->instance_size();
369 template <
typename ObjectVisitor>
372 IteratePointers(obj, kPropertiesOrHashOffset, JSObject::kHeaderSize, v);
374 kRegExpDataIndirectPointerTag);
380 return map->instance_size();
386 template <
typename ObjectVisitor>
407 template <
typename ObjectVisitor>
425 template <
typename ObjectVisitor>
447 template <
typename ObjectVisitor>
451 kRegExpDataIndirectPointerTag);
461 template <
typename ObjectVisitor>
471 return map->instance_size();
477 template <
typename ObjectVisitor>
480 IteratePointers(obj, JSReceiver::kPropertiesOrHashOffset, kTargetOffset, v);
487 return map->instance_size();
493 template <
typename ObjectVisitor>
497 kNextDirtyOffset, v);
504 return map->instance_size();
522 template <
typename ObjectVisitor>
537 return map->instance_size();
544#ifdef V8_ENABLE_LEAPTIERING
550 template <
typename ObjectVisitor>
558#ifdef V8_ENABLE_LEAPTIERING
559 IterateJSDispatchEntry(obj, kDispatchHandleOffset, v);
577 return map->instance_size();
586 template <
typename ObjectVisitor>
593 JSArrayBuffer::kEndOfStrongFieldsOffset, v);
595 obj, obj->RawExternalPointerField(JSArrayBuffer::kExtensionOffset,
608 return map->instance_size();
617 template <
typename ObjectVisitor>
624 JSArrayBufferView::kEndOfStrongFieldsOffset, v);
632 template <
typename ObjectVisitor>
639 JSTypedArray::kEndOfStrongFieldsOffset, v);
652 return map->instance_size();
661 template <
typename ObjectVisitor>
668 JSDataViewOrRabGsabDataView::kStartOfStrongFieldsOffset,
669 JSDataViewOrRabGsabDataView::kEndOfStrongFieldsOffset, v);
673 map, obj, object_size, v);
676 map, obj, object_size, v);
681 return map->instance_size();
687 template <
typename ObjectVisitor>
690 DCHECK_EQ(0, map->GetInObjectProperties());
697 return map->instance_size();
701template <
typename Derived>
705 template <
typename ObjectVisitor>
709 int start_offset = DataTableStartOffset();
710 int end_offset = table->GetBucketsStartOffset();
711 IteratePointers(obj, start_offset, end_offset, v);
716 return Derived::SizeFor(table->Capacity());
723 template <
typename ObjectVisitor>
727 static_assert(MetaTablePointerOffset() +
kTaggedSize ==
728 DataTableStartOffset());
729 int start_offset = MetaTablePointerOffset();
730 int end_offset = table->DataTableEndOffset(table->Capacity());
731 IteratePointers(obj, start_offset, end_offset, v);
736 return SwissNameDictionary::SizeFor(table->Capacity());
756 template <
typename ObjectVisitor>
774 template <
typename ObjectVisitor>
778 kBytecodeArrayIndirectPointerTag);
809 template <
typename ObjectVisitor>
813 int start_offset = data->inner_start_offset();
814 int end_offset = start_offset + data->children_length() *
kTaggedSize;
826 template <
typename ObjectVisitor>
842 template <
typename ObjectVisitor>
857 template <
typename ObjectVisitor>
873 template <
typename ObjectVisitor>
888 template <
typename ObjectVisitor>
903 template <
typename ObjectVisitor>
909 IteratePointers(obj, kStartOfStrongFieldsOffset, kEndOfStrongFieldsOffset,
921 template <
typename ObjectVisitor>
934 template <
typename ObjectVisitor>
937 IteratePointers(obj, kStartOfStrongFieldsOffset, kEndOfStrongFieldsOffset,
941 kBytecodeArrayIndirectPointerTag);
944 kBytecodeArrayIndirectPointerTag);
948 return obj->SizeFromMap(map);
954 template <
typename ObjectVisitor>
962 IteratePointers(obj, kStartOfStrongFieldsOffset, kEndOfStrongFieldsOffset,
967 return obj->SizeFromMap(map);
973 template <
typename ObjectVisitor>
980 return obj->SizeFromMap(map);
988 template <
typename ObjectVisitor>
995 return map->instance_size();
1002 template <
typename ObjectVisitor>
1007 obj->RawExternalPointerField(kWaiterQueueHeadOffset,
1012 return map->instance_size();
1016#if V8_ENABLE_WEBASSEMBLY
1019 template <
typename ObjectVisitor>
1022 IteratePointers(obj, kSupertypesOffset, SizeOf(map, obj), v);
1025 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1026 return kSupertypesOffset +
1027 Cast<WasmTypeInfo>(
object)->supertypes_length() * kTaggedSize;
1031class WasmMemoryMapDescriptor::BodyDescriptor :
public BodyDescriptorBase {
1033 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1034 int object_size, ObjectVisitor* v) {
1035 IterateMaybeWeakPointer(obj, kMemoryOffset, v);
1038 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1039 return map->instance_size();
1043class WasmInstanceObject::BodyDescriptor final :
public BodyDescriptorBase {
1045 template <
typename ObjectVisitor>
1046 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1047 int object_size, ObjectVisitor* v) {
1048 IteratePointers(obj, kPropertiesOrHashOffset, JSObject::kHeaderSize, v);
1049 IterateTrustedPointer(obj, kTrustedDataOffset, v,
1050 IndirectPointerMode::kStrong,
1051 kWasmTrustedInstanceDataIndirectPointerTag);
1052 IteratePointer(obj, kModuleObjectOffset, v);
1053 IteratePointer(obj, kExportsObjectOffset, v);
1054 IterateJSObjectBodyImpl(map, obj, kHeaderSize, object_size, v);
1057 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1058 return map->instance_size();
1062class WasmTrustedInstanceData::BodyDescriptor final
1063 :
public BodyDescriptorBase {
1065 template <
typename ObjectVisitor>
1066 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1067 int object_size, ObjectVisitor* v) {
1068 IterateSelfIndirectPointer(obj, kWasmTrustedInstanceDataIndirectPointerTag,
1070 for (uint16_t
offset : kTaggedFieldOffsets) {
1071 IteratePointer(obj,
offset, v);
1074 for (uint16_t
offset : kProtectedFieldOffsets) {
1075 IterateProtectedPointer(obj,
offset, v);
1079 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1084class WasmTableObject::BodyDescriptor final :
public BodyDescriptorBase {
1086 template <
typename ObjectVisitor>
1087 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1088 int object_size, ObjectVisitor* v) {
1089 IteratePointers(obj, JSObject::BodyDescriptor::kStartOffset,
1090 kTrustedDispatchTableOffset, v);
1091 IterateTrustedPointer(obj, kTrustedDispatchTableOffset, v,
1092 IndirectPointerMode::kStrong,
1093 kWasmDispatchTableIndirectPointerTag);
1094 IterateTrustedPointer(obj, kTrustedDataOffset, v,
1095 IndirectPointerMode::kStrong,
1096 kWasmTrustedInstanceDataIndirectPointerTag);
1097 IterateJSObjectBodyImpl(map, obj, kHeaderSize, object_size, v);
1100 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1101 return map->instance_size();
1105class WasmTagObject::BodyDescriptor final :
public BodyDescriptorBase {
1107 template <
typename ObjectVisitor>
1108 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1109 int object_size, ObjectVisitor* v) {
1110 IteratePointers(obj, JSObject::BodyDescriptor::kStartOffset,
1111 kTrustedDataOffset, v);
1112 IterateTrustedPointer(obj, kTrustedDataOffset, v,
1113 IndirectPointerMode::kStrong,
1114 kWasmTrustedInstanceDataIndirectPointerTag);
1115 IterateJSObjectBodyImpl(map, obj, kHeaderSize, object_size, v);
1118 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1119 return map->instance_size();
1123class WasmGlobalObject::BodyDescriptor final :
public BodyDescriptorBase {
1125 template <
typename ObjectVisitor>
1126 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1127 int object_size, ObjectVisitor* v) {
1128 IteratePointers(obj, JSObject::BodyDescriptor::kStartOffset,
1129 kTrustedDataOffset, v);
1130 IterateTrustedPointer(obj, kTrustedDataOffset, v,
1131 IndirectPointerMode::kStrong,
1132 kWasmTrustedInstanceDataIndirectPointerTag);
1133 IteratePointer(obj, kUntaggedBufferOffset, v);
1134 IteratePointer(obj, kTaggedBufferOffset, v);
1135 IterateJSObjectBodyImpl(map, obj, kIsMutableOffset + kTaggedSize,
1139 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1140 return map->instance_size();
1144class WasmDispatchTable::BodyDescriptor final :
public BodyDescriptorBase {
1146 template <
typename ObjectVisitor>
1147 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1148 int object_size, ObjectVisitor* v) {
1149 IterateSelfIndirectPointer(obj, kWasmDispatchTableIndirectPointerTag, v);
1150 IterateProtectedPointer(obj, kProtectedOffheapDataOffset, v);
1151 IterateProtectedPointer(obj, kProtectedUsesOffset, v);
1152 int length = Cast<WasmDispatchTable>(obj)->length(kAcquireLoad);
1154 IterateProtectedPointer(obj, OffsetOf(
i) + kImplicitArgBias, v);
1158 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1159 int capacity = Cast<WasmDispatchTable>(
object)->capacity();
1160 return SizeFor(capacity);
1164class WasmArray::BodyDescriptor final :
public BodyDescriptorBase {
1166 template <
typename ObjectVisitor>
1167 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1168 int object_size, ObjectVisitor* v) {
1169 if (!WasmArray::GcSafeElementType(map).
is_reference())
return;
1170 IteratePointers(obj, WasmArray::kHeaderSize, object_size, v);
1173 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1174 return WasmArray::SizeFor(map, UncheckedCast<WasmArray>(
object)->
length());
1178class WasmStruct::BodyDescriptor final :
public BodyDescriptorBase {
1180 template <
typename ObjectVisitor>
1181 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1182 int object_size, ObjectVisitor* v) {
1183 Tagged<WasmStruct> wasm_struct = UncheckedCast<WasmStruct>(obj);
1184 const wasm::CanonicalStructType* type = WasmStruct::GcSafeType(map);
1185 if (type->is_descriptor()) {
1188 v->VisitPointer(wasm_struct, wasm_struct->RawField(0));
1190 for (uint32_t
i = 0;
i < type->field_count();
i++) {
1191 if (!type->field(
i).is_reference())
continue;
1192 int offset =
static_cast<int>(type->field_offset(
i));
1193 v->VisitPointer(wasm_struct, wasm_struct->RawField(
offset));
1197 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1198 return WasmStruct::GcSafeSize(map);
1202class WasmNull::BodyDescriptor :
public DataOnlyBodyDescriptor {
1204 static_assert(WasmNull::kStartOfStrongFieldsOffset ==
1205 WasmNull::kEndOfStrongFieldsOffset);
1207 static constexpr int kSize = WasmNull::kSize;
1209 static constexpr int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1214class WasmMemoryObject::BodyDescriptor final :
public BodyDescriptorBase {
1216 template <
typename ObjectVisitor>
1217 static inline void IterateBody(Tagged<Map> map, Tagged<HeapObject> obj,
1218 int object_size, ObjectVisitor* v) {
1219 IteratePointers(obj, JSObject::BodyDescriptor::kStartOffset,
1220 kEndOfStrongFieldsOffset, v);
1221 IterateJSObjectBodyImpl(map, obj, kHeaderSize, object_size, v);
1224 static inline int SizeOf(Tagged<Map> map, Tagged<HeapObject>
object) {
1225 return map->instance_size();
1232 template <
typename ObjectVisitor>
1237 if (string->is_uncached())
return;
1261 static_cast<int>(kCodeOffset));
1262 static_assert(kCodeOffset +
kTaggedSize == kRelocationInfoOffset);
1263 static_assert(kRelocationInfoOffset +
kTaggedSize == kDataStart);
1276 template <
typename ObjectVisitor>
1283 if (istream->IsFullyInitialized()) {
1289 template <
typename ObjectVisitor>
1302 template <
typename ObjectVisitor>
1306 Map::kEndOfStrongFieldsOffset, v);
1317 template <
typename ObjectVisitor>
1322 "Field order must be in sync with this iteration code");
1330 return object->SizeFromMap(map);
1336 template <
typename ObjectVisitor>
1340 NativeContext::kEndOfStrongFieldsOffset, v);
1342 NativeContext::kEndOfWeakFieldsOffset, v);
1344 obj, obj->RawExternalPointerField(kMicrotaskQueueOffset,
1349 return NativeContext::kSize;
1355 template <
typename ObjectVisitor>
1360 obj, Code::kDeoptimizationDataOrInterpreterDataOffset, v);
1363 Code::kEndOfStrongFieldsWithMainCageBaseOffset, v);
1365 static_assert(Code::kEndOfStrongFieldsWithMainCageBaseOffset ==
1366 Code::kInstructionStreamOffset);
1368#ifdef V8_ENABLE_LEAPTIERING
1369 IterateJSDispatchEntry(obj, kDispatchHandleOffset, v);
1374 obj->RawInstructionStreamField(kInstructionStreamOffset));
1384 template <
typename ObjectVisitor>
1397 template <
typename ObjectVisitor>
1400#ifdef V8_COMPRESS_POINTERS
1406 obj, obj->RawExternalPointerField(
1420 return object->SizeFromMap(map);
1426 template <
typename ObjectVisitor>
1429 int entries_start = EphemeronHashTable::OffsetOfElementAt(
1430 EphemeronHashTable::kElementsStartIndex);
1435 const int key_index = EphemeronHashTable::EntryToIndex(
i);
1436 const int value_index = EphemeronHashTable::EntryToValueIndex(
i);
1438 OffsetOfElementAt(value_index), v);
1443 return object->SizeFromMap(map);
1449 static_assert(AccessorInfo::kEndOfStrongFieldsOffset ==
1450 AccessorInfo::kMaybeRedirectedGetterOffset);
1451 static_assert(AccessorInfo::kMaybeRedirectedGetterOffset <
1452 AccessorInfo::kSetterOffset);
1453 static_assert(AccessorInfo::kSetterOffset < AccessorInfo::kFlagsOffset);
1454 static_assert(AccessorInfo::kFlagsOffset < AccessorInfo::kSize);
1456 template <
typename ObjectVisitor>
1460 AccessorInfo::kEndOfStrongFieldsOffset, v);
1462 AccessorInfo::kMaybeRedirectedGetterOffset,
1465 obj, obj->RawExternalPointerField(AccessorInfo::kSetterOffset,
1476 static_assert(InterceptorInfo::kEndOfStrongFieldsOffset ==
1477 InterceptorInfo::kFlagsOffset);
1478 static_assert(InterceptorInfo::kFlagsOffset < InterceptorInfo::kGetterOffset);
1479 static_assert(InterceptorInfo::kGetterOffset <
1480 InterceptorInfo::kSetterOffset);
1481 static_assert(InterceptorInfo::kSetterOffset < InterceptorInfo::kQueryOffset);
1482 static_assert(InterceptorInfo::kQueryOffset <
1483 InterceptorInfo::kDescriptorOffset);
1484 static_assert(InterceptorInfo::kDescriptorOffset <
1485 InterceptorInfo::kDeleterOffset);
1486 static_assert(InterceptorInfo::kDeleterOffset <
1487 InterceptorInfo::kEnumeratorOffset);
1488 static_assert(InterceptorInfo::kEnumeratorOffset <
1489 InterceptorInfo::kDefinerOffset);
1490 static_assert(InterceptorInfo::kDefinerOffsetEnd + 1 ==
1491 InterceptorInfo::kSize);
1493 template <
typename ObjectVisitor>
1497 InterceptorInfo::kEndOfStrongFieldsOffset, v);
1501#define VISIT_FIELD(Name, name) \
1502 v->VisitExternalPointer( \
1503 obj, obj->RawExternalPointerField( \
1504 InterceptorInfo::k##Name##Offset, \
1505 is_named ? kApiNamedProperty##Name##CallbackTag \
1506 : kApiIndexedProperty##Name##CallbackTag));
1519 template <
typename ObjectVisitor>
1523 FunctionTemplateInfo::kEndOfStrongFieldsOffset, v);
1525 obj, obj->RawExternalPointerField(
1526 FunctionTemplateInfo::kMaybeRedirectedCallbackOffset,
1554 template <
typename ObjectVisitor>
1603 template <
typename ObjectVisitor>
1608#ifdef V8_ENABLE_LEAPTIERING
1609 IterateJSDispatchEntry(obj, kDispatchHandleOffset, v);
1653 template <
typename ObjectVisitor>
1660 host->RawProtectedMaybeObjectField(
offset));
1669#include "torque-generated/objects-body-descriptors-inl.inc"
#define INTERCEPTOR_INFO_CALLBACK_LIST(V)
UnderlyingType underlying_type
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static constexpr int kCommonPointerFieldsStart
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int kCommonPointerFieldsEnd
int32_t pretenure_create_count_
TaggedMember< DependentCode > dependent_code_
std::atomic< int32_t > pretenure_data_
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static uint32_t SizeFor(uint32_t length)
static void IteratePointer(Tagged< HeapObject > obj, int offset, ObjectVisitor *v)
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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static constexpr int SizeFor(int length)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, 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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static int SizeFor(int slot_count)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
TaggedMember< UnionOf< Smi, Code > > smi_handler_
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int OffsetOfElementAt(int index)
static const int kHeaderSize
static constexpr int kTaggedPayloadOffset
static constexpr int kExternalPointerOffset
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, 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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kAlignedSize
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
HeapObjectLayout()=delete
static constexpr int kHeaderSize
static constexpr int kMapOffset
static constexpr int kRelocModeMask
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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kJSAPIObjectWithEmbedderSlotsHeaderSize
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int kHeaderSize
static void IterateJSAPIObjectWithEmbedderSlotsHeader(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateJSAPIObjectWithoutEmbedderSlotsTail(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static void IterateJSAPIObjectWithEmbedderSlotsTail(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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, 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 constexpr bool kContainsEmbedderFields
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static constexpr bool kContainsEmbedderFields
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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static constexpr int kEndOfTaggedFieldsOffset
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kStartOffset
static const int kCodeFieldOffset
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int GetHeaderSize(bool function_has_prototype_slot)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kStartOffset
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, 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 const int kStartOffset
bool MayHaveEmbedderFields() const
int GetEmbedderFieldsStartOffset()
static V8_EXPORT_PRIVATE int GetHeaderSize(InstanceType instance_type, bool function_has_prototype_slot=false)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kStartOffset
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr int kEndOfTaggedFieldsOffset
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static constexpr bool kContainsEmbedderFields
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static const int kHeaderSizeOfAllWeakCollections
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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
virtual void VisitProtectedPointer(Tagged< TrustedObject > host, ProtectedPointerSlot slot)
virtual void VisitTrustedPointerTableEntry(Tagged< HeapObject > host, IndirectPointerSlot slot)
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 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 VisitCustomWeakPointer(Tagged< HeapObject > host, ObjectSlot p)
virtual void VisitPointer(Tagged< HeapObject > host, ObjectSlot p)
virtual void VisitInstructionStreamPointer(Tagged< Code > host, InstructionStreamSlot slot)=0
void VisitRelocInfo(Tagged< InstructionStream > host, RelocIterator *it)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeFor(int data_length, int children_length)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static constexpr int ModeMask(Mode mode)
@ COMPRESSED_EMBEDDED_OBJECT
@ INTERNAL_REFERENCE_ENCODED
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > obj)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, ObjectVisitor *v)
static int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
static void IterateBody(Tagged< Map > map, Tagged< HeapObject > obj, int object_size, 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 int SizeOf(Tagged< Map > map, Tagged< HeapObject > raw_object)
std::optional< std::tuple< size_t, std::string > > SizeOf(const Type *type)
constexpr bool is_reference(ValueKind kind)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr int kTaggedSize
@ kUnknownIndirectPointerTag
const uint32_t kUncachedExternalStringTag
constexpr int kEmbedderDataSlotSize
const uint32_t kUncachedExternalStringMask
kOriginalBytecodeArrayOffset
Handle< To > UncheckedCast(Handle< From > value)
@ kExternalObjectValueTag
@ kEmbedderDataSlotPayloadTag
@ kNativeContextMicrotaskQueueTag
@ kArrayBufferExtensionTag
@ kFunctionTemplateInfoCallbackTag
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
static constexpr AcquireLoadTag kAcquireLoad
#define VISIT_FIELD(Name, name)
#define DCHECK_LE(v1, v2)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
#define OFFSET_OF_DATA_START(Type)