5#ifndef INCLUDE_V8_TRACED_HANDLE_H_
6#define INCLUDE_V8_TRACED_HANDLE_H_
28class BasicTracedReferenceExtractor;
56 static_assert(
sizeof(std::atomic<internal::Address*>) ==
86 std::memory_order order = std::memory_order_relaxed) {
87 reinterpret_cast<std::atomic<internal::Address*>*
>(&
slot())->store(new_val,
95 return reinterpret_cast<const std::atomic<internal::Address*>*
>(&
slot())
96 ->load(std::memory_order_relaxed);
102 template <
typename F>
104 template <
typename U>
149 template <
typename F>
152 template <
typename F>
154 template <
typename F>
156 template <
typename F>
185 static_assert(std::is_base_of_v<T, S>,
"type check");
190 this->NewFromNonEmptyValue(
191 isolate, *that, &this->
slot(),
194 std::memory_order_release);
208 static_assert(std::is_base_of_v<T, S>,
"type check");
213 this->NewFromNonEmptyValue(
214 isolate, *that, &this->
slot(),
217 std::memory_order_release);
226 *
this = std::move(other);
233 template <
typename S>
236 *
this = std::move(other);
252 template <
typename S>
308 reinterpret_cast<internal::Isolate*
>(isolate),
341 return !(lhs == rhs);
347 return !(lhs == rhs);
353 return !(rhs == lhs);
359 static_assert(std::is_base_of_v<T, S>,
"type check");
364 this->SetSlotThreadSafe(
365 this->NewFromNonEmptyValue(
366 isolate, *other, &this->slot(),
369 std::memory_order_release);
376 static_assert(std::is_base_of_v<T, S>,
"type check");
381 this->SetSlotThreadSafe(
382 this->NewFromNonEmptyValue(
383 isolate, *other, &this->slot(),
386 std::memory_order_release);
393 static_assert(std::is_base_of_v<T, S>,
"type check");
394 *
this = std::move(rhs.template As<T>());
402 static_assert(std::is_base_of_v<T, S>,
"type check");
403 *
this = rhs.template As<T>();
Definition: v8-traced-handle.h:125
BasicTracedReference< S > & As() const
Definition: v8-traced-handle.h:133
Local< T > Get(Isolate *isolate) const
Definition: v8-traced-handle.h:130
friend class BasicTracedReference
Definition: v8-traced-handle.h:155
Definition: v8-isolate.h:298
Definition: v8-local-handle.h:366
static Local< T > New(Isolate *isolate, Local< T > that)
Definition: v8-local-handle.h:448
Definition: v8-object.h:267
Definition: v8-function-callback.h:43
Definition: v8-traced-handle.h:54
void SetSlotThreadSafe(internal::Address *new_val, std::memory_order order=std::memory_order_relaxed)
Definition: v8-traced-handle.h:85
Local< Data > Get(Isolate *isolate) const
Definition: v8-traced-handle.h:68
void Reset()
Definition: v8-traced-handle.h:314
const internal::Address * GetSlotThreadSafe() const
Definition: v8-traced-handle.h:94
TracedReferenceBase()=default
friend class internal::BasicTracedReferenceExtractor
Definition: v8-traced-handle.h:101
friend bool operator==(const TracedReferenceBase &, const Local< U > &)
Definition: v8-traced-handle.h:328
bool IsEmptyThreadSafe() const
Definition: v8-traced-handle.h:77
Definition: v8-traced-handle.h:166
TracedReference(TracedReference &&other) noexcept
Definition: v8-traced-handle.h:224
TracedReference(Isolate *isolate, Local< S > that)
Definition: v8-traced-handle.h:184
TracedReference(const TracedReference &other)
Definition: v8-traced-handle.h:243
TracedReference< S > & As() const
Definition: v8-traced-handle.h:295
TracedReference(TracedReference< S > &&other) noexcept
Definition: v8-traced-handle.h:234
TracedReference()=default
TracedReference & operator=(const TracedReference< S > &rhs)
TracedReference(const TracedReference< S > &other)
Definition: v8-traced-handle.h:253
TracedReference & operator=(TracedReference< S > &&rhs) noexcept
TracedReference(Isolate *isolate, Local< S > that, IsDroppable)
Definition: v8-traced-handle.h:206
TracedReference & operator=(TracedReference &&rhs) noexcept
Definition: v8-traced-handle.h:408
Definition: v8-handle-base.h:57
internal::Address *const & slot() const
Definition: v8-handle-base.h:83
bool IsEmpty() const
Definition: v8-handle-base.h:60
static bool EqualHandles(const T1 &lhs, const T2 &rhs)
Definition: v8-internal.h:1896
static Address ValueAsAddress(const T *value)
Definition: v8-internal.h:1857
Address * GlobalizeTracedReference(Isolate *isolate, Address value, Address *slot, TracedReferenceStoreMode store_mode, TracedReferenceHandling reference_handling)
void MoveTracedReference(Address **from, Address **to)
TracedReferenceHandling
Definition: v8-traced-handle.h:35
TracedReferenceStoreMode
Definition: v8-traced-handle.h:30
void CopyTracedReference(const Address *const *from, Address **to)
void DisposeTracedReference(Address *global_handle)
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
bool operator!=(const TracedReferenceBase &lhs, const TracedReferenceBase &rhs)
Definition: v8-traced-handle.h:339
bool operator==(const TracedReferenceBase &lhs, const TracedReferenceBase &rhs)
Definition: v8-traced-handle.h:322
Definition: v8-traced-handle.h:168
#define V8_EXPORT
Definition: v8config.h:874
#define V8_INLINE
Definition: v8config.h:518
#define V8_UNLIKELY(condition)
Definition: v8config.h:677