5#ifndef INCLUDE_CPPGC_INTERNAL_POINTER_POLICIES_H_
6#define INCLUDE_CPPGC_INTERNAL_POINTER_POLICIES_H_
22class PersistentRegion;
23class CrossThreadPersistentRegion;
28class UntracedMemberTag;
36#if defined(CPPGC_POINTER_COMPRESSION)
38 CompressedPointer storage) {}
41 template <WriteBarrierSlotType SlotType>
44#ifdef CPPGC_SLIM_WRITE_BARRIER
46 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
56 template <WriteBarrierSlotType SlotType>
60 "Assigning storages of Member and UncompressedMember is not supported");
61#ifdef CPPGC_SLIM_WRITE_BARRIER
63 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
73#if defined(CPPGC_POINTER_COMPRESSION)
74 template <WriteBarrierSlotType SlotType>
76 CompressedPointer storage) {
79 "Assigning storages of Member and UncompressedMember is not supported");
80#ifdef CPPGC_SLIM_WRITE_BARRIER
82 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
85 WriteBarrier::Params params;
88 WriteBarrier(type, params, slot, storage.Load());
95 const WriteBarrier::Params& params,
96 const void* slot,
const void* value) {
114#if defined(CPPGC_POINTER_COMPRESSION)
116 CompressedPointer storage) {}
118 template <WriteBarrierSlotType>
120 template <WriteBarrierSlotType,
typename MemberStorage>
127 bool check_off_heap_assignments);
129 const HeapBase* heap_ =
nullptr;
132template <
bool kCheckOffHeapAssignments>
136 template <
typename T>
141 CheckPointersImplTrampoline<T>::Call(
142 this,
static_cast<const T*
>(raw_pointer.
Load()));
144#if defined(CPPGC_POINTER_COMPRESSION)
145 template <
typename T>
146 V8_INLINE void CheckPointer(CompressedPointer compressed_pointer) {
147 if (compressed_pointer.IsCleared() || compressed_pointer.IsSentinel()) {
150 CheckPointersImplTrampoline<T>::Call(
151 this,
static_cast<const T*
>(compressed_pointer.Load()));
154 template <
typename T>
159 CheckPointersImplTrampoline<T>::Call(
this, ptr);
163 template <
typename T,
bool = IsCompleteV<T>>
164 struct CheckPointersImplTrampoline {
166 policy->CheckPointerImpl(ptr,
false, kCheckOffHeapAssignments);
170 template <
typename T>
171 struct CheckPointersImplTrampoline<T, true> {
172 static void Call(SameThreadEnabledCheckingPolicy* policy,
const T* ptr) {
173 policy->CheckPointerImpl(ptr, IsGarbageCollectedTypeV<T>,
174 kCheckOffHeapAssignments);
181 template <
typename T>
183 template <
typename T>
185#if defined(CPPGC_POINTER_COMPRESSION)
186 template <
typename T>
191#ifdef CPPGC_ENABLE_SLOW_API_CHECKS
195 SameThreadEnabledCheckingPolicy<
false >;
197 SameThreadEnabledCheckingPolicy<
true >;
214 : location_(location) {}
237#if CPPGC_SUPPORTS_OBJECT_NAMES
266template <
typename T,
typename WeaknessPolicy,
270template <
typename T,
typename WeaknessPolicy,
274template <
typename T,
typename WeaknessTag,
typename WriteBarrierPolicy,
Definition: cross-thread-persistent.h:74
Definition: persistent.h:54
Definition: persistent-node.h:185
Definition: pointer-policies.h:179
void CheckPointer(T *)
Definition: pointer-policies.h:182
void CheckPointer(RawPointer)
Definition: pointer-policies.h:184
Definition: pointer-policies.h:228
constexpr IgnoreLocationPolicy()=default
constexpr IgnoreLocationPolicy(SourceLocation)
Definition: pointer-policies.h:234
constexpr SourceLocation Location() const
Definition: pointer-policies.h:230
Definition: pointer-policies.h:207
constexpr KeepLocationPolicy()=default
KeepLocationPolicy & operator=(KeepLocationPolicy &&)=default
constexpr SourceLocation Location() const
Definition: pointer-policies.h:209
KeepLocationPolicy(KeepLocationPolicy &&)=default
constexpr KeepLocationPolicy(SourceLocation location)
Definition: pointer-policies.h:213
KeepLocationPolicy & operator=(const KeepLocationPolicy &)=delete
KeepLocationPolicy(const KeepLocationPolicy &)=delete
Definition: persistent-node.h:138
Definition: member-storage.h:228
const void * Load() const
Definition: member-storage.h:242
bool IsSentinel() const
Definition: member-storage.h:257
bool IsCleared() const
Definition: member-storage.h:255
Definition: pointer-policies.h:124
void CheckPointerImpl(const void *ptr, bool points_to_payload, bool check_off_heap_assignments)
Definition: pointer-policies.h:134
void CheckPointer(RawPointer raw_pointer)
Definition: pointer-policies.h:137
void CheckPointer(const T *ptr)
Definition: pointer-policies.h:155
Definition: write-barrier.h:39
Type
Definition: write-barrier.h:41
static Type GetWriteBarrierType(const void *slot, const void *value, Params ¶ms)
Definition: write-barrier.h:393
static void GenerationalBarrier(const Params ¶ms, const void *slot)
Definition: write-barrier.h:105
static bool IsEnabled()
Definition: write-barrier.h:118
static void DijkstraMarkingBarrier(const Params ¶ms, const void *object)
Definition: write-barrier.h:424
Definition: v8-source-location.h:22
IgnoreLocationPolicy DefaultLocationPolicy
Definition: pointer-policies.h:240
DisabledCheckingPolicy DefaultMemberCheckingPolicy
Definition: pointer-policies.h:199
DisabledCheckingPolicy DefaultPersistentCheckingPolicy
Definition: pointer-policies.h:200
Definition: allocation.h:38
constexpr internal::SentinelPointer kSentinelPointer
Definition: sentinel-pointer.h:35
Definition: pointer-policies.h:30
static void AssigningBarrier(const void *slot, const void *value)
Definition: pointer-policies.h:42
static void AssigningBarrier(const void *slot, RawPointer storage)
Definition: pointer-policies.h:57
static void InitializingBarrier(const void *, const void *)
Definition: pointer-policies.h:33
static void InitializingBarrier(const void *, RawPointer storage)
Definition: pointer-policies.h:34
Definition: pointer-policies.h:111
static void InitializingBarrier(const void *, const void *)
Definition: pointer-policies.h:112
static void AssigningBarrier(const void *, MemberStorage)
Definition: pointer-policies.h:121
static void InitializingBarrier(const void *, RawPointer storage)
Definition: pointer-policies.h:113
static void AssigningBarrier(const void *, const void *)
Definition: pointer-policies.h:119
Definition: pointer-policies.h:253
static CrossThreadPersistentRegion & GetPersistentRegion(const void *object)
std::true_type IsStrongPersistent
Definition: pointer-policies.h:254
Definition: pointer-policies.h:243
static PersistentRegion & GetPersistentRegion(const void *object)
std::true_type IsStrongPersistent
Definition: pointer-policies.h:244
Definition: pointer-policies.h:259
static CrossThreadPersistentRegion & GetPersistentRegion(const void *object)
std::false_type IsStrongPersistent
Definition: pointer-policies.h:260
Definition: pointer-policies.h:248
std::false_type IsStrongPersistent
Definition: pointer-policies.h:249
static PersistentRegion & GetPersistentRegion(const void *object)
Definition: write-barrier.h:53
#define V8_EXPORT
Definition: v8config.h:854
#define V8_INLINE
Definition: v8config.h:508
#define V8_UNLIKELY(condition)
Definition: v8config.h:667