#ifndef INCLUDE_V8_TRACED_HANDLE_H_
#define INCLUDE_V8_TRACED_HANDLE_H_
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <atomic>
#include <memory>
#include <type_traits>
#include <utility>
#include "v8-internal.h"
#include "v8-local-handle.h"
#include "v8-weak-callback-info.h"
#include "v8config.h"
namespace v8 {
class Value;
namespace internal {
class BasicTracedReferenceExtractor;
enum class TracedReferenceStoreMode { … };
enum class TracedReferenceHandling { … };
V8_EXPORT Address* GlobalizeTracedReference(
Isolate* isolate, Address value, Address* slot,
TracedReferenceStoreMode store_mode,
TracedReferenceHandling reference_handling);
V8_EXPORT void MoveTracedReference(Address** from, Address** to);
V8_EXPORT void CopyTracedReference(const Address* const* from, Address** to);
V8_EXPORT void DisposeTracedReference(Address* global_handle);
}
class TracedReferenceBase : public api_internal::IndirectHandleBase { … };
template <typename T>
class BasicTracedReference : public TracedReferenceBase { … };
template <typename T>
class TracedReference : public BasicTracedReference<T> { … };
template <class T>
internal::Address* BasicTracedReference<T>::NewFromNonEmptyValue(
Isolate* isolate, T* that, internal::Address** slot,
internal::TracedReferenceStoreMode store_mode,
internal::TracedReferenceHandling reference_handling) { … }
void TracedReferenceBase::Reset() { … }
V8_INLINE bool operator==(const TracedReferenceBase& lhs,
const TracedReferenceBase& rhs) { … }
template <typename U>
V8_INLINE bool operator==(const TracedReferenceBase& lhs,
const v8::Local<U>& rhs) { … }
template <typename U>
V8_INLINE bool operator==(const v8::Local<U>& lhs,
const TracedReferenceBase& rhs) { … }
V8_INLINE bool operator!=(const TracedReferenceBase& lhs,
const TracedReferenceBase& rhs) { … }
template <typename U>
V8_INLINE bool operator!=(const TracedReferenceBase& lhs,
const v8::Local<U>& rhs) { … }
template <typename U>
V8_INLINE bool operator!=(const v8::Local<U>& lhs,
const TracedReferenceBase& rhs) { … }
template <class T>
template <class S>
void TracedReference<T>::Reset(Isolate* isolate, const Local<S>& other) { … }
template <class T>
template <class S>
void TracedReference<T>::Reset(Isolate* isolate, const Local<S>& other,
IsDroppable) { … }
template <class T>
template <class S>
TracedReference<T>& TracedReference<T>::operator=(
TracedReference<S>&& rhs) noexcept { … }
template <class T>
template <class S>
TracedReference<T>& TracedReference<T>::operator=(
const TracedReference<S>& rhs) { … }
template <class T>
TracedReference<T>& TracedReference<T>::operator=(
TracedReference&& rhs) noexcept { … }
template <class T>
TracedReference<T>& TracedReference<T>::operator=(const TracedReference& rhs) { … }
}
#endif