5#ifndef V8_OBJECTS_TAGGED_IMPL_INL_H_
6#define V8_OBJECTS_TAGGED_IMPL_INL_H_
11#ifdef V8_COMPRESS_POINTERS
23template <HeapObjectReferenceType kRefType,
typename StorageType>
32template <HeapObjectReferenceType kRefType,
typename StorageType>
35 if constexpr (kIsFull) {
47template <HeapObjectReferenceType kRefType,
typename StorageType>
51 if (!IsStrongOrWeak())
return false;
56template <HeapObjectReferenceType kRefType,
typename StorageType>
59 if (kIsFull)
return GetHeapObject(
result);
61 if (!IsStrongOrWeak())
return false;
62 *
result = GetHeapObject(isolate);
72template <HeapObjectReferenceType kRefType,
typename StorageType>
76 if (!IsStrongOrWeak())
return false;
77 *reference_type = IsWeakOrCleared() ? HeapObjectReferenceType::WEAK
78 : HeapObjectReferenceType::STRONG;
83template <HeapObjectReferenceType kRefType,
typename StorageType>
86 HeapObjectReferenceType* reference_type)
const {
87 if (kIsFull)
return GetHeapObject(
result, reference_type);
89 if (!IsStrongOrWeak())
return false;
90 *reference_type = IsWeakOrCleared() ? HeapObjectReferenceType::WEAK
91 : HeapObjectReferenceType::STRONG;
92 *
result = GetHeapObject(isolate);
100template <HeapObjectReferenceType kRefType,
typename StorageType>
111template <HeapObjectReferenceType kRefType,
typename StorageType>
114 if (kIsFull)
return GetHeapObjectIfStrong(
result);
129template <HeapObjectReferenceType kRefType,
typename StorageType>
137template <HeapObjectReferenceType kRefType,
typename StorageType>
140 if (kIsFull)
return GetHeapObjectAssumeStrong();
152template <HeapObjectReferenceType kRefType,
typename StorageType>
158 *
result = GetHeapObject();
168template <HeapObjectReferenceType kRefType,
typename StorageType>
171 if (kIsFull)
return GetHeapObjectIfWeak(
result);
175 *
result = GetHeapObject(isolate);
189template <HeapObjectReferenceType kRefType,
typename StorageType>
194 return GetHeapObject();
197template <HeapObjectReferenceType kRefType,
typename StorageType>
200 if (kIsFull)
return GetHeapObjectAssumeWeak();
203 return GetHeapObject(isolate);
210template <HeapObjectReferenceType kRefType,
typename StorageType>
223template <HeapObjectReferenceType kRefType,
typename StorageType>
226 if (kIsFull)
return GetHeapObject();
246template <HeapObjectReferenceType kRefType,
typename StorageType>
252 return GetHeapObject();
255template <HeapObjectReferenceType kRefType,
typename StorageType>
258 if constexpr (kIsFull)
return GetHeapObjectOrSmi();
260 if (
IsSmi())
return ToSmi();
261 return GetHeapObject(isolate);
bool GetHeapObjectIfStrong(Tagged< HeapObject > *result) const
Tagged< HeapObject > GetHeapObjectAssumeStrong() const
bool GetHeapObjectIfWeak(Tagged< HeapObject > *result) const
Tagged< Smi > ToSmi() const
Tagged< HeapObject > GetHeapObject() const
Tagged< Object > GetHeapObjectOrSmi() const
Tagged< HeapObject > GetHeapObjectAssumeWeak() const
static V8_INLINE Address DecompressTaggedSigned(Tagged_t raw_value)
static V8_INLINE Address DecompressTagged(TOnHeapAddress on_heap_addr, Tagged_t raw_value)
#define HAS_SMI_TAG(value)
#define HAS_WEAK_HEAP_OBJECT_TAG(value)
ZoneVector< RpoNumber > & result
const Address kWeakHeapObjectMask
V8_INLINE constexpr bool IsWeak(TaggedImpl< HeapObjectReferenceType::WEAK, StorageType > obj)
V8_INLINE constexpr bool IsSmi(TaggedImpl< kRefType, StorageType > obj)
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK(condition)