5#ifndef V8_HANDLES_MAYBE_HANDLES_INL_H_
6#define V8_HANDLES_MAYBE_HANDLES_INL_H_
27template <
typename T,
typename U>
32template <
typename To,
typename From>
52 DCHECK(!
object.IsCleared());
53 if (
object.GetHeapObjectIfWeak(&heap_object)) {
65 DCHECK(!
object.IsCleared());
66 if (
object.GetHeapObjectIfWeak(&heap_object)) {
76 : reference_type_(HeapObjectReferenceType::
STRONG),
handle_(object) {}
79 : reference_type_(HeapObjectReferenceType::
STRONG),
83 : reference_type_(HeapObjectReferenceType::
STRONG),
88 : reference_type_(HeapObjectReferenceType::
STRONG),
92 : reference_type_(HeapObjectReferenceType::
STRONG),
96 HeapObjectReferenceType reference_type,
98 : reference_type_(reference_type),
handle_(
handle(object, isolate)) {}
101 HeapObjectReferenceType reference_type)
102 : reference_type_(reference_type),
handle_(object) {}
117 handle_.ToHandle(&this_handle) ==
118 other.handle_.ToHandle(&other_handle) &&
126 return *
handle_.ToHandleChecked();
134 return *
handle_.ToHandleChecked();
139 return handle_.ToHandleChecked();
154 if (
handle.is_null())
return os <<
"null";
155 return os <<
handle.ToHandleChecked();
158#ifdef V8_ENABLE_DIRECT_HANDLE
165MaybeDirectHandle<T>::MaybeDirectHandle(Tagged<T>
object, LocalHeap* local_heap)
166 : MaybeDirectHandle(direct_handle(object, local_heap)) {}
168template <
typename T,
typename U>
169inline bool Is(MaybeDirectHandle<U> value) {
171 return !value.ToHandle(&handle) || Is<T>(handle);
174template <
typename To,
typename From>
175inline MaybeDirectHandle<To>
UncheckedCast(MaybeDirectHandle<From> value) {
176 return MaybeDirectHandle<To>(value.location_);
181template <
typename T,
typename U>
187template <
typename To,
typename From>
196 if (
handle.is_null())
return os <<
"null";
197 return os <<
handle.ToHandleChecked();
203 DCHECK(!
object.IsCleared());
204 if (
object.GetHeapObjectIfWeak(&heap_object)) {
206 reference_type_ = HeapObjectReferenceType::WEAK;
209 reference_type_ = HeapObjectReferenceType::STRONG;
216 DCHECK(!
object.IsCleared());
217 if (
object.GetHeapObjectIfWeak(&heap_object)) {
219 reference_type_ = HeapObjectReferenceType::WEAK;
222 reference_type_ = HeapObjectReferenceType::STRONG;
228 : reference_type_(HeapObjectReferenceType::
STRONG),
233 : reference_type_(HeapObjectReferenceType::
STRONG),
238 : reference_type_(HeapObjectReferenceType::
STRONG),
243 : reference_type_(HeapObjectReferenceType::
STRONG),
249 : reference_type_(reference_type),
handle_(object, isolate) {}
252 : reference_type_(object.reference_type_),
handle_(object.
handle_) {}
265 handle_.ToHandle(&this_handle) ==
266 other.
handle_.ToHandle(&other_handle) &&
275 handle_.ToHandle(&this_handle) ==
276 other.handle_.ToHandle(&other_handle) &&
284 return *
handle_.ToHandleChecked();
292 return *
handle_.ToHandleChecked();
299#ifdef V8_ENABLE_DIRECT_HANDLE
311#ifdef V8_ENABLE_DIRECT_HANDLE
static V8_INLINE const DirectHandle null()
V8_INLINE bool is_identical_to(Handle< S > other) const
IndirectHandle< T > handle_
V8_INLINE bool is_identical_to(const HandleBase &that) const
friend class MaybeDirectHandle
V8_WARN_UNUSED_RESULT V8_INLINE bool ToHandle(DirectHandle< S > *out) const
MaybeIndirectHandle< T > handle_
V8_WARN_UNUSED_RESULT V8_INLINE bool ToHandle(Handle< S > *out) const
bool is_identical_to(const MaybeObjectDirectHandle &other) const
MaybeDirectHandle< Object > handle_
Tagged< MaybeObject > operator*() const
HeapObjectReferenceType reference_type_
Tagged< MaybeObject > operator->() const
MaybeObjectDirectHandle()
static MaybeObjectDirectHandle Weak(Tagged< Object > object, Isolate *isolate)
HeapObjectReferenceType reference_type_
bool is_identical_to(const MaybeObjectHandle &other) const
static MaybeObjectHandle Weak(Tagged< Object > object, Isolate *isolate)
Tagged< MaybeObject > operator->() const
IndirectHandle< Object > object() const
Tagged< MaybeObject > operator*() const
MaybeHandle< Object > handle_
LinkageLocation location_
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
bool Is(IndirectHandle< U > value)
MaybeHandle< T > MaybeIndirectHandle
V8_INLINE IndirectHandle< T > indirect_handle(DirectHandle< T > handle)
V8_INLINE DirectHandle< T > direct_handle(Tagged< T > object, Isolate *isolate)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
Handle< To > UncheckedCast(Handle< From > value)
Tagged< MaybeWeak< T > > MakeWeak(Tagged< T > value)
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
std::ostream & operator<<(std::ostream &os, const Operation &operation)
#define DCHECK(condition)
WasmOrphanedGlobalHandle * handle_