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