5#ifndef INCLUDE_CPPGC_INTERNAL_GC_INFO_H_
6#define INCLUDE_CPPGC_INTERNAL_GC_INFO_H_
28 std::atomic<GCInfoIndex>& registered_index) {
33 template <typename T, bool = FinalizerTrait<T>::HasFinalizer(),
48#define DISPATCH(has_finalizer, has_non_hidden_name, function) \
49 template <typename T> \
50 struct EnsureGCInfoIndexTrait::EnsureGCInfoIndexTraitDispatch< \
51 T, has_finalizer, has_non_hidden_name> { \
52 V8_INLINE GCInfoIndex \
53 operator()(std::atomic<GCInfoIndex>& registered_index) { \
83struct GCInfoTrait final {
85 static_assert(
sizeof(
T),
"T must be fully defined");
86 static std::atomic<GCInfoIndex>
88 GCInfoIndex index = registered_index.load(std::memory_order_acquire);
90 index = EnsureGCInfoIndexTrait::EnsureIndex<T>(registered_index);
92 CPPGC_DCHECK(index == registered_index.load(std::memory_order_acquire));
97 static constexpr void CheckCallbacksAreDefined() {
108template <
typename T,
typename ParentMostGarbageCollectedType>
111 std::has_virtual_destructor<ParentMostGarbageCollectedType>::value;
113 std::is_trivially_destructible<ParentMostGarbageCollectedType>::value &&
114 std::is_trivially_destructible<T>::value;
117 ParentMostGarbageCollectedType>
::value;
118#ifdef CPPGC_SUPPORTS_OBJECT_NAMES
134 GCInfoTrait<T>::CheckCallbacksAreDefined();
135 GCInfoTrait<ParentMostGarbageCollectedType>::CheckCallbacksAreDefined();
144 std::conditional_t<
WantToFold(), ParentMostGarbageCollectedType, T>;
#define DISPATCH(ret, method)
#define CPPGC_DCHECK(condition)
void(*)(void *) FinalizationCallback
HeapObjectName(*)(const void *, HeapObjectNameForUnnamedObject) NameCallback
EnsureGCInfoIndex(registered_index, TraceTrait< T >::Trace, FinalizerTrait< T >::kCallback)) DISPATCH(false
void(*)(Visitor *visitor, const void *object) TraceCallback
static constexpr bool kBothTypesAreTriviallyDestructible
static constexpr bool kHasVirtualDestructorAtBase
static constexpr bool kHasCustomFinalizerDispatchAtBase
std::conditional_t< WantToFold(), ParentMostGarbageCollectedType, T > ResultType
static constexpr bool kWantsDetailedObjectNames
static constexpr bool WantToFold()
#define V8_UNLIKELY(condition)
std::unique_ptr< ValueMirror > value