5#ifndef INCLUDE_V8_INTERNAL_H_
6#define INCLUDE_V8_INTERNAL_H_
23#if __has_include
(<version>)
26#if defined(__cpp_lib_three_way_comparison) &&
27 __cpp_lib_three_way_comparison >= 201711L
&&
28 defined(__cpp_lib_concepts) && __cpp_lib_concepts >= 202002L
32#define V8_HAVE_SPACESHIP_OPERATOR 1
34#define V8_HAVE_SPACESHIP_OPERATOR 0
53static constexpr Address kNullAddress = 0;
55constexpr int KB = 1024;
56constexpr int MB =
KB * 1024;
57constexpr int GB =
MB * 1024;
58#ifdef V8_TARGET_ARCH_X64
59constexpr size_t TB =
size_t{
GB} * 1024;
63
64
90template <size_t tagged_ptr_size>
109 return static_cast<int32_t>(
static_cast<uint32_t>(value)) >> shift_bits;
112 template <
class T,
typename std::enable_if_t<std::is_integral_v<T> &&
113 std::is_signed_v<T>>* =
nullptr>
118 return (
static_cast<uintptr_t>(value) -
125 typename std::enable_if_t<std::is_integral_v<T> &&
126 std::is_unsigned_v<T>>* =
nullptr>
128 static_assert(
kSmiMaxValue <= std::numeric_limits<uintptr_t>::max());
135 return (
static_cast<uint64_t>(value) -
142 static_assert(
kSmiMaxValue <= std::numeric_limits<uint64_t>::max());
149struct SmiTagging<8> {
159 return static_cast<
int>(
static_cast<intptr_t>(value) >> shift_bits);
162 template <
class T,
typename std::enable_if_t<std::is_integral_v<T> &&
163 std::is_signed_v<T>>* =
nullptr>
166 return std::numeric_limits<int32_t>::min() <= value &&
167 value <= std::numeric_limits<int32_t>::max();
171 typename std::enable_if_t<std::is_integral_v<T> &&
172 std::is_unsigned_v<T>>* =
nullptr>
174 return value <= std::numeric_limits<int32_t>::max();
178#ifdef V8_COMPRESS_POINTERS
186 "Pointer compression can be enabled only for 64-bit architectures");
196#ifdef V8_31BIT_SMIS_ON_64BIT_ARCH
218
219
221#ifdef V8_ENABLE_SANDBOX
232#ifdef V8_ENABLE_SANDBOX
235#if defined(V8_TARGET_OS_ANDROID)
240#elif defined(V8_TARGET_OS_IOS)
274 "The size of the guard regions around the sandbox must be a "
275 "multiple of its required alignment.");
290 "The minimum reservation size for a sandbox must be larger than "
291 "the pointer compression cage contained within it.");
299 "The maximum allowed buffer size must not be larger than the "
300 "sandbox's guard regions");
305 "The maximum size of a BoundedSize must be synchronized with the "
306 "kMaxSafeBufferSizeForSandbox");
310#ifdef V8_COMPRESS_POINTERS
312#ifdef V8_TARGET_OS_ANDROID
336 "kExternalPointerTableReservationSize and "
337 "kExternalPointerIndexShift don't match");
363using ExternalPointerHandle = uint32_t;
368#ifdef V8_ENABLE_SANDBOX
382using CppHeapPointerHandle = uint32_t;
388#ifdef V8_COMPRESS_POINTERS
401#ifdef V8_COMPRESS_POINTERS
414 "kCppHeapPointerTableReservationSize and "
415 "kCppHeapPointerIndexShift don't match");
427#define V8_EMBEDDER_DATA_TAG_COUNT 5
441
443
456template <
typename Tag>
460 "Tag parameter must be an enum with base type uint16_t");
491 return static_cast<uint32_t>(tag) -
first <=
496 return tag_range.first >=
first && tag_range.last <=
last;
500 return first == other.first &&
last == other.last;
504 static_assert(std::is_same_v<std::underlying_type_t<Tag>, uint16_t>);
505 return (
static_cast<size_t>(
first) << 16) |
last;
693V8_INLINE static constexpr bool IsSharedExternalPointerType(
694 ExternalPointerTagRange tag_range) {
695 return kAnySharedExternalPointerTagRange.Contains(tag_range);
701V8_INLINE static constexpr bool IsMaybeReadOnlyExternalPointerType(
702 ExternalPointerTagRange tag_range) {
703 return kAnyMaybeReadOnlyExternalPointerTagRange.Contains(tag_range);
710V8_INLINE static constexpr bool IsManagedExternalPointerType(
711 ExternalPointerTagRange tag_range) {
712 return kAnyManagedResourceExternalPointerTag.Contains(tag_range);
722V8_INLINE static constexpr bool ExternalPointerCanBeEmpty(
723 ExternalPointerTagRange tag_range) {
727 kAnyInterceptorInfoExternalPointerTagRange.Contains(tag_range);
746using IndirectPointerHandle = uint32_t;
766using TrustedPointerHandle = IndirectPointerHandle;
787 "kTrustedPointerTableReservationSize and "
788 "kTrustedPointerHandleShift don't match");
804using CodePointerHandle = IndirectPointerHandle;
836 "kCodePointerTableReservationSize and kCodePointerHandleShift don't match");
852 "Use GetCurrentIsolate() instead, which is guaranteed to return the same "
853 "isolate since https://crrev.com/c/6458560.")
861struct HandleScopeData
final {
876static_assert(HandleScopeData
::kSizeInBytes ==
sizeof(HandleScopeData));
879
880
881
882
901#ifdef V8_COMPRESS_POINTERS
911#ifdef V8_ENABLE_SANDBOX
984#ifdef V8_COMPRESS_POINTERS
991#ifdef V8_ENABLE_SANDBOX
1028#define EXPORTED_STATIC_ROOTS_PTR_LIST(V)
1029 V(UndefinedValue, 0x11
)
1033 V(EmptyString, 0x49
)
1036 V(TheHoleValue, kBuildDependentTheHoleValue)
1040#ifdef V8_ENABLE_WEBASSEMBLY
1041#ifdef V8_INTL_SUPPORT
1047#ifdef V8_INTL_SUPPORT
1054#define DEF_ROOT(name, value) static constexpr Tagged_t k##name = value;
1062#define PLUSONE(...) +1
1108#ifdef V8_MAP_PACKING
1121#ifdef V8_ENABLE_CHECKS
1122 CheckInitializedImpl(isolate);
1143 template <
typename T,
1144 typename std::enable_if_t<std::is_integral_v<T>>* =
nullptr>
1149 template <
typename T,
1150 typename std::enable_if_t<std::is_integral_v<T>>* =
nullptr>
1152 return PlatformSmiTagging::IsValidSmi(value);
1155 template <
typename T,
1156 typename std::enable_if_t<std::is_integral_v<T>>* =
nullptr>
1158 if (
V8_LIKELY(PlatformSmiTagging::IsValidSmi(value))) {
1172#ifdef V8_MAP_PACKING
1181#ifdef V8_MAP_PACKING
1182 map = UnpackMapWord(map);
1190#ifdef V8_MAP_PACKING
1191 map = UnpackMapWord(map);
1212 (
static_cast<
unsigned>(
static_cast<
unsigned>(instance_type) -
1219 return *addr &
static_cast<uint8_t>(1U << shift);
1224 uint8_t mask =
static_cast<uint8_t>(1U << shift);
1225 *addr =
static_cast<uint8_t>((*addr & ~mask) | (value << shift));
1242 *
reinterpret_cast<
void**>(addr) = data;
1249 return *
reinterpret_cast<
void*
const*>(addr);
1255 return reinterpret_cast<HandleScopeData*>(addr);
1261 ++(*
reinterpret_cast<size_t*>(addr));
1267 return reinterpret_cast<
Address*>(addr);
1272 Address base = *
reinterpret_cast<Address*>(
1273 reinterpret_cast<uintptr_t>(isolate) + kIsolateCageBaseOffset);
1275#define DECOMPRESS_ROOT(name, ...)
1276 case k##name##RootIndex:
1277 return base + StaticReadOnlyRoot::k##name;
1278 EXPORTED_STATIC_ROOTS_PTR_LIST(DECOMPRESS_ROOT)
1279#undef DECOMPRESS_ROOT
1280#undef EXPORTED_STATIC_ROOTS_PTR_LIST
1288#ifdef V8_ENABLE_SANDBOX
1306 template <
typename T>
1309#ifdef V8_COMPRESS_POINTERS
1310 if constexpr (
sizeof(T) > kApiTaggedSize) {
1316 memcpy(&r,
reinterpret_cast<
void*>(addr),
sizeof(T));
1320 return *
reinterpret_cast<
const T*>(addr);
1325#ifdef V8_COMPRESS_POINTERS
1326 uint32_t value = ReadRawField<uint32_t>(heap_object_ptr, offset);
1327 Address base = GetPtrComprCageBaseFromOnHeapAddress(heap_object_ptr);
1328 return base +
static_cast<Address>(
static_cast<uintptr_t>(value));
1330 return ReadRawField<
Address>(heap_object_ptr, offset);
1336#ifdef V8_COMPRESS_POINTERS
1337 uint32_t value = ReadRawField<uint32_t>(heap_object_ptr, offset);
1338 return static_cast<Address>(
static_cast<uintptr_t>(value));
1340 return ReadRawField<
Address>(heap_object_ptr, offset);
1345 "Use GetCurrentIsolateForSandbox() instead, which is guaranteed to "
1346 "return the same isolate since https://crrev.com/c/6458560.")
1348#ifdef V8_ENABLE_SANDBOX
1349 return GetCurrentIsolate();
1361#ifdef V8_ENABLE_SANDBOX
1362 return GetCurrentIsolate();
1369 template <ExternalPointerTagRange tag_range>
1373#ifdef V8_ENABLE_SANDBOX
1374 static_assert(!tag_range.IsEmpty());
1377 Address* table = IsSharedExternalPointerType(tag_range)
1378 ? GetSharedExternalPointerTableBase(isolate)
1379 : GetExternalPointerTableBase(isolate);
1380 internal::ExternalPointerHandle handle =
1381 ReadRawField<ExternalPointerHandle>(heap_object_ptr, offset);
1382 uint32_t index = handle >> kExternalPointerIndexShift;
1383 std::atomic<Address>* ptr =
1384 reinterpret_cast<std::atomic<Address>*>(&table[index]);
1385 Address entry = std::atomic_load_explicit(ptr, std::memory_order_relaxed);
1386 ExternalPointerTag actual_tag =
static_cast<ExternalPointerTag>(
1387 (entry & kExternalPointerTagMask) >> kExternalPointerTagShift);
1388 if (V8_LIKELY(tag_range.Contains(actual_tag))) {
1389 return entry & kExternalPointerPayloadMask;
1395 return ReadRawField<
Address>(heap_object_ptr, offset);
1399#ifdef V8_COMPRESS_POINTERS
1419template <
bool PerformCheck>
1437 CastCheck<std::is_base_of_v<Data, T> &&
1438 !std::is_same_v<Data, std::remove_cv_t<T>>>::Perform(data);
1453 Heap*
heap()
const {
return heap_; }
1459 return a.heap_ == b.heap_;
1482template <
typename T>
1485 using value_type = T;
1487 template <
typename HeapOrIsolateT>
1489 template <
typename U>
1492 using std::allocator<T>::allocate;
1493 using std::allocator<T>::deallocate;
1498template <
typename Iterator,
typename =
void>
1504template <
typename Iterator,
typename =
void>
1513template <
typename Iterator,
typename =
void>
1531#if __has_include
(<ranges>)
1541template <
typename Iterator,
typename ElementType =
void>
1551 using difference_type =
1552 typename std::iterator_traits<Iterator>::difference_type;
1565 using iterator_category =
1566 typename std::iterator_traits<Iterator>::iterator_category;
1573 template <
typename OtherIterator,
typename OtherElementType,
1577 const WrappedIterator<OtherIterator, OtherElementType>& other)
noexcept
1578 : it_(other.base()) {}
1582 if constexpr (std::is_pointer_v<Iterator>) {
1585 return it_.operator->();
1589 template <
typename OtherIterator,
typename OtherElementType>
1593 return it_ == other.base();
1622 template <
typename OtherIterator,
typename OtherElementType>
1626 return it_ != other.base();
1629 template <
typename OtherIterator,
typename OtherElementType>
1633 return it_ < other.base();
1635 template <
typename OtherIterator,
typename OtherElementType>
1639 return it_ <= other.base();
1641 template <
typename OtherIterator,
typename OtherElementType>
1645 return it_ > other.base();
1647 template <
typename OtherIterator,
typename OtherElementType>
1651 return it_ >= other.base();
1675 difference_type n)
const noexcept {
1689 difference_type n)
const noexcept {
1695 template <
typename OtherIterator,
typename OtherElementType>
1699 return it_ - other.base();
1702 difference_type n)
const noexcept {
1715class ValueHelper
final {
1723#ifdef V8_ENABLE_DIRECT_HANDLE
1724 static constexpr Address kTaggedNullAddress = 1;
1726 using InternalRepresentationType = internal::Address;
1727 static constexpr InternalRepresentationType kEmpty = kTaggedNullAddress;
1730 static constexpr InternalRepresentationType
kEmpty =
nullptr;
1733 template <
typename T>
1735 return ValueAsRepr(value) ==
kEmpty;
1741 template <
template <
typename T,
typename... Ms>
typename H,
typename T,
1744 return handle.
template value<T>();
1747#ifdef V8_ENABLE_DIRECT_HANDLE
1749 template <
typename T>
1750 V8_INLINE
static Address ValueAsAddress(
const T* value) {
1751 return reinterpret_cast<Address>(value);
1754 template <
typename T,
bool check_null =
true,
typename S>
1755 V8_INLINE
static T* SlotAsValue(S* slot) {
1756 if (check_null && slot ==
nullptr) {
1757 return reinterpret_cast<T*>(kTaggedNullAddress);
1759 return *
reinterpret_cast<T**>(slot);
1762 template <
typename T>
1763 V8_INLINE
static InternalRepresentationType ValueAsRepr(
const T* value) {
1764 return reinterpret_cast<InternalRepresentationType>(value);
1767 template <
typename T>
1768 V8_INLINE
static T* ReprAsValue(InternalRepresentationType repr) {
1769 return reinterpret_cast<T*>(repr);
1774 template <
typename T>
1776 return *
reinterpret_cast<
const Address*>(value);
1779 template <
typename T,
bool check_null =
true,
typename S>
1781 return reinterpret_cast<T*>(slot);
1784 template <
typename T>
1786 return const_cast<InternalRepresentationType>(
1787 reinterpret_cast<
const Address*>(value));
1790 template <
typename T>
1792 return reinterpret_cast<T*>(repr);
1799
1800
1801class HandleHelper
final {
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813 template <
typename T1,
typename T2>
1815 if (lhs.IsEmpty())
return rhs.IsEmpty();
1816 if (rhs.IsEmpty())
return false;
1817 return lhs.ptr() == rhs.ptr();
friend void internal::PrintFunctionCallbackInfo(void *)
friend void internal::PrintPropertyCallbackInfo(void *)
static V8_INLINE bool EqualHandles(const T1 &lhs, const T2 &rhs)
static const int kTrustedPointerTableBasePointerOffset
static const int kIsolateCageBaseOffset
static V8_INLINE Address LoadMap(Address obj)
static const int kTrueValueRootIndex
static const int kInferShouldThrowMode
static V8_INLINE void UpdateNodeFlag(Address *obj, bool value, int shift)
static const int kLastYoungAllocationOffset
static const int kJSSpecialApiObjectType
static V8_INLINE void IncrementLongTasksStatsCounter(v8::Isolate *isolate)
static const int kExternalPointerTableSize
static const int kOddballKindOffset
static const int kOldAllocationInfoOffset
static const int kFirstEmbedderJSApiObjectType
static const int kFastCCallAlignmentPaddingSize
static const int kErrorMessageParamSize
static const int kFalseValueRootIndex
static const int kIsolateStackGuardOffset
static const int kNullValueRootIndex
static const int kIsolateFastCCallCallerPcOffset
static const int kDontThrow
static const int kEmptyStringRootIndex
static V8_INLINE uint8_t GetNodeState(Address *obj)
static const int kNativeContextEmbedderDataOffset
static V8_INLINE uint8_t GetNodeFlag(Address *obj, int shift)
static const int kStringRepresentationAndEncodingMask
static const int kIsolateThreadLocalTopOffset
static const int kDisallowGarbageCollectionSize
static const int kIsolateLongTaskStatsCounterOffset
static const int kEmbedderDataArrayHeaderSize
static const int kExternalTwoByteRepresentationTag
static const int kNodeStateMask
static const int kUndefinedValueRootIndex
static const int kDisallowGarbageCollectionAlign
static const int kRegExpStaticResultOffsetsVectorSize
static V8_INLINE constexpr bool HasHeapObjectTag(Address value)
static V8_INLINE HandleScopeData * GetHandleScopeData(v8::Isolate *isolate)
static const int kThrowOnError
static const int kEmbedderDataSlotExternalPointerOffset
static const int kBuiltinTier0TableSize
static const int kHandleScopeDataSize
static V8_INLINE Address ReadTaggedSignedField(Address heap_object_ptr, int offset)
static V8_INLINE constexpr Address AddressToSmi(Address value)
static V8_INLINE T ReadRawField(Address heap_object_ptr, int offset)
static V8_INLINE void CheckInitialized(v8::Isolate *isolate)
static const uint32_t kNumIsolateDataSlots
static const int kNumberOfBooleanFlags
static V8_INLINE Address * GetRootSlot(v8::Isolate *isolate, int index)
static const int kBuiltinTier0EntryTableSize
static const int kStackGuardSize
static const int kIsolateFastApiCallTargetOffset
static V8_INLINE constexpr bool CanHaveInternalField(int instance_type)
static constexpr size_t kExternalAllocationSoftLimit
static const int kNodeFlagsOffset
static const int kContinuationPreservedEmbedderDataOffset
static const int kLastJSApiObjectType
static const int kExternalOneByteRepresentationTag
static const int kNodeStateIsWeakValue
static V8_EXPORT void CheckInitializedImpl(v8::Isolate *isolate)
static const int kTrustedPointerTableSize
static const int kBuiltinTier0TableOffset
static const int kForeignType
static const int kNodeClassIdOffset
static V8_INLINE int GetInstanceType(Address obj)
static const int kIsolateRootsOffset
static const int kIsolateApiCallbackThunkArgumentOffset
static const int kExternalPointerTableBasePointerOffset
static const int kFirstJSApiObjectType
static const int kOddballType
static const int kMapInstanceTypeOffset
static const int kLinearAllocationAreaSize
static const int kIsolateEmbedderDataOffset
static V8_INLINE int GetOddballKind(Address obj)
static V8_INLINE v8::Isolate * GetCurrentIsolateForSandbox()
static V8_INLINE void * GetEmbedderData(const v8::Isolate *isolate, uint32_t slot)
static const int kNewAllocationInfoOffset
static V8_INLINE constexpr int SmiValue(Address value)
static const int kUndefinedOddballKind
static const int kEmbedderDataSlotSize
static const int kHeapObjectMapOffset
static V8_INLINE Address ReadTaggedPointerField(Address heap_object_ptr, int offset)
static const int kNullOddballKind
static V8_INLINE bool IsExternalTwoByteString(int instance_type)
static constexpr std::optional< Address > TryIntegralToSmi(T value)
static V8_INLINE constexpr Address IntToSmi(int value)
static V8_EXPORT v8::Isolate * GetCurrentIsolate()
static const int kFirstNonstringType
static V8_INLINE void UpdateNodeState(Address *obj, uint8_t value)
static const int kJSAPIObjectWithEmbedderSlotsHeaderSize
static const int kJSDispatchTableOffset
static const int kBuiltinTier0EntryTableOffset
static const int kStringEncodingMask
static const int kSegmentedTableSegmentPoolSize
static const int kIsolateRegexpExecVectorArgumentOffset
static V8_INLINE Address GetRoot(v8::Isolate *isolate, int index)
static const int kLastEmbedderJSApiObjectType
static const int kVariousBooleanFlagsOffset
static V8_INLINE constexpr Address IntegralToSmi(T value)
static const int kThreadLocalTopSize
static const int kTablesAlignmentPaddingSize
static V8_INLINE constexpr bool IsValidSmi(T value)
static const int kJSObjectHeaderSize
static V8_INLINE void SetEmbedderData(v8::Isolate *isolate, uint32_t slot, void *data)
static const int kFixedArrayHeaderSize
static const int kJSObjectType
static const int kTheHoleValueRootIndex
static V8_INLINE Address ReadExternalPointerField(v8::Isolate *isolate, Address heap_object_ptr, int offset)
static const int kStringResourceOffset
static const int kIsolateHandleScopeDataOffset
static const int kIsolateFastCCallCallerFpOffset
static const int kErrorMessageParamOffset
friend bool operator==(const StrongRootAllocatorBase &a, const StrongRootAllocatorBase &b)
StrongRootAllocatorBase(Isolate *isolate)
Address * allocate_impl(size_t n)
void deallocate_impl(Address *p, size_t n) noexcept
StrongRootAllocatorBase(LocalHeap *heap)
StrongRootAllocatorBase(LocalIsolate *isolate)
StrongRootAllocatorBase(v8::Isolate *isolate)
StrongRootAllocatorBase(Heap *heap)
StrongRootAllocator(HeapOrIsolateT *)
StrongRootAllocator(const StrongRootAllocator< U > &other) noexcept
static V8_INLINE Address ValueAsAddress(const T *value)
static constexpr InternalRepresentationType kEmpty
static V8_INLINE T * HandleAsValue(const H< T, Ms... > &handle)
static V8_INLINE T * SlotAsValue(S *slot)
static V8_INLINE bool IsEmpty(T *value)
static V8_INLINE T * ReprAsValue(InternalRepresentationType repr)
static V8_INLINE InternalRepresentationType ValueAsRepr(const T *value)
constexpr const Iterator & base() const noexcept
constexpr WrappedIterator(const WrappedIterator< OtherIterator, OtherElementType > &other) noexcept
constexpr WrappedIterator operator++(int) noexcept
constexpr bool operator>=(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr WrappedIterator operator-(difference_type n) const noexcept
constexpr reference operator[](difference_type n) const noexcept
constexpr pointer operator->() const noexcept
constexpr WrappedIterator operator+(difference_type n) const noexcept
constexpr auto operator-(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr WrappedIterator & operator--() noexcept
constexpr WrappedIterator operator--(int) noexcept
constexpr WrappedIterator() noexcept=default
constexpr reference operator*() const noexcept
friend constexpr WrappedIterator operator+(difference_type n, const WrappedIterator &x) noexcept
constexpr WrappedIterator & operator+=(difference_type n) noexcept
constexpr WrappedIterator(Iterator it) noexcept
constexpr bool operator<=(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr WrappedIterator & operator++() noexcept
constexpr bool operator!=(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr bool operator==(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr bool operator>(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr bool operator<(const WrappedIterator< OtherIterator, OtherElementType > &other) const noexcept
constexpr WrappedIterator & operator-=(difference_type n) noexcept
constexpr bool PointerCompressionIsEnabled()
constexpr int kCodePointerTableEntryCodeObjectOffset
const int kApiSystemPointerSize
constexpr size_t kMaxTrustedPointers
V8_DEPRECATE_SOON("Use GetCurrentIsolate() instead, which is guaranteed to return the same " "isolate since https://crrev.com/c/6458560.") V8_EXPORT internal V8_EXPORT bool ShouldThrowOnError(internal::Isolate *isolate)
constexpr ExternalPointerTagRange kAnyManagedResourceExternalPointerTag(kFirstManagedResourceTag, kLastManagedResourceTag)
V8_EXPORT void VerifyHandleIsNonEmpty(bool is_empty)
constexpr ExternalPointerTagRange kAnyManagedExternalPointerTagRange(kFirstManagedExternalPointerTag, kLastManagedExternalPointerTag)
constexpr IndirectPointerHandle kNullIndirectPointerHandle
constexpr int kTrustedPointerTableEntrySizeLog2
constexpr uint64_t kExternalPointerTagShift
constexpr uint64_t kExternalPointerTagAndMarkbitMask
const intptr_t kHeapObjectTagMask
constexpr bool kHaveIteratorCategory
constexpr CppHeapPointerHandle kNullCppHeapPointerHandle
constexpr int kCodePointerTableEntryEntrypointOffset
constexpr size_t kMaxExternalPointers
constexpr ExternalPointerTagRange kAnyForeignExternalPointerTagRange(kFirstForeignExternalPointerTag, kLastForeignExternalPointerTag)
@ kExternalPointerNullTag
@ kDisplayNamesInternalTag
@ kApiIndexedPropertyDefinerCallbackTag
@ kLastManagedResourceTag
@ kFirstExternalPointerTag
@ kApiAbortScriptExecutionCallbackTag
@ kExternalPointerFreeEntryTag
@ kFirstManagedResourceTag
@ kExternalStringResourceDataTag
@ kApiNamedPropertyDefinerCallbackTag
@ kTemporalZonedDateTimeTag
@ kTemporalPlainDateTimeTag
@ kApiNamedPropertyEnumeratorCallbackTag
@ kIcuLocalizedNumberFormatterTag
@ kLastExternalPointerTag
@ kFirstForeignExternalPointerTag
@ kExternalPointerZappedEntryTag
@ kIcuDateIntervalFormatTag
@ kEmbedderDataSlotPayloadTag
@ kLastMaybeReadOnlyExternalPointerTag
@ kExternalPointerEvacuationEntryTag
@ kLastSharedExternalPointerTag
@ kFunctionTemplateInfoCallbackTag
@ kFirstInterceptorInfoExternalPointerTag
@ kApiIndexedPropertyDescriptorCallbackTag
@ kApiNamedPropertyQueryCallbackTag
@ kLastInterceptorInfoExternalPointerTag
@ kLastManagedExternalPointerTag
@ kIcuRelativeDateTimeFormatterTag
@ kApiNamedPropertyDeleterCallbackTag
@ kExternalObjectValueTag
@ kApiIndexedPropertySetterCallbackTag
@ kD8ModuleEmbedderDataTag
@ kIcuSimpleDateFormatTag
@ kArrayBufferExtensionTag
@ kApiNamedPropertySetterCallbackTag
@ kApiNamedPropertyDescriptorCallbackTag
@ kTemporalPlainMonthDayTag
@ kFirstManagedExternalPointerTag
@ kExternalStringResourceTag
@ kApiNamedPropertyGetterCallbackTag
@ kFirstSharedExternalPointerTag
@ kFirstMaybeReadOnlyExternalPointerTag
@ kApiIndexedPropertyEnumeratorCallbackTag
@ kApiIndexedPropertyQueryCallbackTag
@ kLastForeignExternalPointerTag
@ kTemporalPlainYearMonthTag
@ kNativeContextMicrotaskQueueTag
@ kApiAccessCheckCallbackTag
@ kApiIndexedPropertyGetterCallbackTag
@ kMicrotaskCallbackDataTag
@ kApiIndexedPropertyDeleterCallbackTag
constexpr ExternalPointerTagRange kAnyInterceptorInfoExternalPointerTagRange(kFirstInterceptorInfoExternalPointerTag, kLastInterceptorInfoExternalPointerTag)
const int kHeapObjectTagSize
constexpr size_t kTrustedPointerTableReservationSize
constexpr ExternalPointerTagRange kAnyExternalPointerTagRange(kFirstExternalPointerTag, kLastExternalPointerTag)
constexpr uint64_t kCppHeapPointerMarkBit
constexpr size_t kMaxCppHeapPointers
constexpr ExternalPointerHandle kNullExternalPointerHandle
constexpr uint32_t kCodePointerHandleMarker
const intptr_t kForwardingTagMask
constexpr uint32_t kCodePointerHandleShift
constexpr ExternalPointer_t kNullExternalPointer
constexpr int kCodePointerTableEntrySize
constexpr bool kHaveIteratorConcept
constexpr ExternalPointerTagRange kAnySharedExternalPointerTagRange(kFirstSharedExternalPointerTag, kLastSharedExternalPointerTag)
constexpr bool kBuiltinCodeObjectsLiveInTrustedSpace
constexpr bool SmiValuesAre32Bits()
constexpr bool SmiValuesAre31Bits()
constexpr ExternalPointerTagRange kAnyMaybeReadOnlyExternalPointerTagRange(kFirstMaybeReadOnlyExternalPointerTag, kLastMaybeReadOnlyExternalPointerTag)
constexpr uintptr_t kUintptrAllBitsSet
constexpr bool kAllCodeObjectsLiveInTrustedSpace
constexpr TrustedPointerHandle kNullTrustedPointerHandle
constexpr uint64_t kCppHeapPointerTagShift
constexpr uint64_t kExternalPointerTagMask
constexpr size_t kCodePointerTableReservationSize
constexpr int kTrustedPointerTableEntrySize
constexpr bool kRuntimeGeneratedCodeObjectsLiveInTrustedSpace
const int kForwardingTagSize
V8_INLINE void PerformCastCheck(T *data)
constexpr bool SandboxIsEnabled()
constexpr int kCodePointerTableEntrySizeLog2
constexpr CppHeapPointer_t kNullCppHeapPointer
const int kWeakHeapObjectTag
constexpr intptr_t kIntptrAllBitsSet
constexpr uint64_t kExternalPointerPayloadMask
constexpr uint32_t kTrustedPointerHandleShift
const intptr_t kHeapObjectReferenceTagMask
constexpr size_t kMaxCodePointers
constexpr uint64_t kExternalPointerShiftedTagMask
constexpr CodePointerHandle kNullCodePointerHandle
constexpr uint64_t kCppHeapPointerPayloadShift
const intptr_t kSmiTagMask
constexpr uint64_t kExternalPointerMarkBit
constexpr int kGarbageCollectionReasonMaxValue
static void Perform(T *data)
static constexpr uint32_t kSizeInBytes
static V8_INLINE constexpr bool IsValidSmi(int64_t value)
static V8_INLINE constexpr int SmiToInt(Address value)
static V8_INLINE constexpr bool IsValidSmi(uint64_t value)
static V8_INLINE constexpr bool IsValidSmi(T value)
static constexpr intptr_t kSmiMinValue
static constexpr intptr_t kSmiMaxValue
static V8_INLINE constexpr int SmiToInt(Address value)
static V8_INLINE constexpr bool IsValidSmi(T value)
static constexpr intptr_t kSmiMinValue
static constexpr intptr_t kSmiMaxValue
constexpr bool Contains(TagRange tag_range) const
constexpr bool IsEmpty() const
constexpr size_t hash_value() const
constexpr bool operator==(const TagRange other) const
constexpr TagRange(Tag first, Tag last)
constexpr size_t Size() const
constexpr TagRange(Tag tag)
constexpr bool Contains(Tag tag) const
#define V8_HAVE_SPACESHIP_OPERATOR
#define V8_EMBEDDER_DATA_TAG_COUNT
#define V8_STATIC_ROOTS_BOOL
#define V8_DEPRECATE_SOON(message)
#define V8_DEPRECATED(message)
#define V8_LIKELY(condition)