5#ifndef INCLUDE_CPPGC_INTERNAL_POINTER_POLICIES_H_
6#define INCLUDE_CPPGC_INTERNAL_POINTER_POLICIES_H_
22class PersistentRegion;
23class CrossThreadPersistentRegion;
28class UntracedMemberTag;
36 template <WriteBarrierSlotType SlotType>
38#ifdef CPPGC_SLIM_WRITE_BARRIER
40 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
49 template <WriteBarrierSlotType SlotType>
53 "Assigning storages of Member and UncompressedMember is not supported");
54#ifdef CPPGC_SLIM_WRITE_BARRIER
56 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
65#if defined(CPPGC_POINTER_COMPRESSION)
66 template <WriteBarrierSlotType SlotType>
68 CompressedPointer storage) {
71 "Assigning storages of Member and UncompressedMember is not supported");
72#ifdef CPPGC_SLIM_WRITE_BARRIER
74 WriteBarrier::CombinedWriteBarrierSlow<SlotType>(slot);
86 const WriteBarrier::Params& params,
87 const void* slot,
const void* value) {
104 template <WriteBarrierSlotType>
106 template <WriteBarrierSlotType,
typename MemberStorage>
113 bool check_off_heap_assignments);
115 const HeapBase* heap_ =
nullptr;
118template <
bool kCheckOffHeapAssignments>
122 template <
typename T>
126 CheckPointersImplTrampoline<T>::Call(
this, ptr);
130 template <
typename T,
bool = IsCompleteV<T>>
131 struct CheckPointersImplTrampoline {
133 policy->CheckPointerImpl(ptr,
false, kCheckOffHeapAssignments);
137 template <
typename T>
138 struct CheckPointersImplTrampoline<T, true> {
139 static void Call(SameThreadEnabledCheckingPolicy* policy,
const T* ptr) {
140 policy->CheckPointerImpl(ptr, IsGarbageCollectedTypeV<T>,
141 kCheckOffHeapAssignments);
155 SameThreadEnabledCheckingPolicy<
false >;
157 SameThreadEnabledCheckingPolicy<
true >;
174 : location_(location) {}
197#if CPPGC_SUPPORTS_OBJECT_NAMES
226template <
typename T,
typename WeaknessPolicy,
230template <
typename T,
typename WeaknessPolicy,
234template <
typename T,
typename WeaknessTag,
typename WriteBarrierPolicy,
Definition: cross-thread-persistent.h:74
Definition: persistent.h:54
Definition: persistent-node.h:180
Definition: pointer-policies.h:146
void CheckPointer(const void *)
Definition: pointer-policies.h:148
Definition: pointer-policies.h:188
constexpr IgnoreLocationPolicy(const SourceLocation &)
Definition: pointer-policies.h:194
constexpr IgnoreLocationPolicy()=default
constexpr SourceLocation Location() const
Definition: pointer-policies.h:190
Definition: pointer-policies.h:167
constexpr KeepLocationPolicy()=default
constexpr const SourceLocation & Location() const
Definition: pointer-policies.h:169
KeepLocationPolicy & operator=(KeepLocationPolicy &&)=default
KeepLocationPolicy(KeepLocationPolicy &&)=default
constexpr KeepLocationPolicy(const SourceLocation &location)
Definition: pointer-policies.h:173
KeepLocationPolicy & operator=(const KeepLocationPolicy &)=delete
KeepLocationPolicy(const KeepLocationPolicy &)=delete
Definition: persistent-node.h:137
Definition: member-storage.h:197
const void * Load() const
Definition: member-storage.h:206
Definition: pointer-policies.h:110
void CheckPointerImpl(const void *ptr, bool points_to_payload, bool check_off_heap_assignments)
Definition: pointer-policies.h:120
void CheckPointer(const T *ptr)
Definition: pointer-policies.h:123
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:388
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:419
Definition: v8-source-location.h:31
IgnoreLocationPolicy DefaultLocationPolicy
Definition: pointer-policies.h:200
DisabledCheckingPolicy DefaultMemberCheckingPolicy
Definition: pointer-policies.h:159
DisabledCheckingPolicy DefaultPersistentCheckingPolicy
Definition: pointer-policies.h:160
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:37
static void AssigningBarrier(const void *slot, RawPointer storage)
Definition: pointer-policies.h:50
static void InitializingBarrier(const void *, const void *)
Definition: pointer-policies.h:31
Definition: pointer-policies.h:102
static void InitializingBarrier(const void *, const void *)
Definition: pointer-policies.h:103
static void AssigningBarrier(const void *, MemberStorage)
Definition: pointer-policies.h:107
static void AssigningBarrier(const void *, const void *)
Definition: pointer-policies.h:105
Definition: pointer-policies.h:213
static CrossThreadPersistentRegion & GetPersistentRegion(const void *object)
std::true_type IsStrongPersistent
Definition: pointer-policies.h:214
Definition: pointer-policies.h:203
static PersistentRegion & GetPersistentRegion(const void *object)
std::true_type IsStrongPersistent
Definition: pointer-policies.h:204
Definition: pointer-policies.h:219
static CrossThreadPersistentRegion & GetPersistentRegion(const void *object)
std::false_type IsStrongPersistent
Definition: pointer-policies.h:220
Definition: pointer-policies.h:208
std::false_type IsStrongPersistent
Definition: pointer-policies.h:209
static PersistentRegion & GetPersistentRegion(const void *object)
Definition: write-barrier.h:53
#define V8_EXPORT
Definition: v8config.h:762
#define V8_INLINE
Definition: v8config.h:477
#define V8_UNLIKELY(condition)
Definition: v8config.h:626