Flutter Engine
The Flutter Engine
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Static Protected Attributes | Friends | List of all members
dart::UntaggedObject Class Reference

#include <raw_object.h>

Inheritance diagram for dart::UntaggedObject:
dart::UntaggedCallSiteData dart::UntaggedClass dart::UntaggedClosureData dart::UntaggedCode dart::UntaggedCodeSourceMap dart::UntaggedCompressedStackMaps dart::UntaggedContext dart::UntaggedContextScope dart::UntaggedError dart::UntaggedExceptionHandlers dart::UntaggedFfiTrampolineData dart::UntaggedField dart::UntaggedFunction dart::UntaggedInstance dart::UntaggedInstructions dart::UntaggedInstructionsSection dart::UntaggedInstructionsTable dart::UntaggedKernelProgramInfo dart::UntaggedLibrary dart::UntaggedLoadingUnit dart::UntaggedLocalVarDescriptors dart::UntaggedMonomorphicSmiableCall dart::UntaggedNamespace dart::UntaggedObjectPool dart::UntaggedPatchClass dart::UntaggedPcDescriptors dart::UntaggedScript dart::UntaggedSentinel dart::UntaggedSingleTargetCache dart::UntaggedSubtypeTestCache dart::UntaggedTypeParameters dart::UntaggedWeakArray dart::UntaggedWeakSerializationReference

Classes

class  AlwaysSetBit
 
class  CanonicalBit
 
class  CardRememberedBit
 
class  ClassIdTag
 
class  ImmutableBit
 
class  NewOrEvacuationCandidateBit
 
class  NotMarkedBit
 
class  OldAndNotRememberedBit
 
class  ReservedBit
 
class  SizeTag
 

Public Types

enum  TagBits {
  kCardRememberedBit = 0 , kCanonicalBit = 1 , kNotMarkedBit = 2 , kNewOrEvacuationCandidateBit = 3 ,
  kAlwaysSetBit = 4 , kOldAndNotRememberedBit = 5 , kImmutableBit = 6 , kReservedBit = 7 ,
  kSizeTagPos = kReservedBit + 1 , kSizeTagSize = 4 , kClassIdTagPos = kSizeTagPos + kSizeTagSize , kClassIdTagSize = 20 ,
  kHashTagPos = kClassIdTagPos + kClassIdTagSize , kHashTagSize = 32
}
 

Public Member Functions

 COMPILE_ASSERT (kNotMarkedBit+kBarrierOverlapShift==kAlwaysSetBit)
 
 COMPILE_ASSERT (kNewOrEvacuationCandidateBit+kBarrierOverlapShift==kOldAndNotRememberedBit)
 
 COMPILE_ASSERT (kCardRememberedBit==0)
 
 COMPILE_ASSERT (kBitsPerByte *sizeof(ClassIdTagType) >=kClassIdTagSize)
 
 COMPILE_ASSERT (kClassIdTagMax==(1<< kClassIdTagSize) - 1)
 
bool IsNewObject () const
 
bool IsOldObject () const
 
uword tags () const
 
uword tags_ignore_race () const
 
bool IsMarked () const
 
void SetMarkBit ()
 
void SetMarkBitUnsynchronized ()
 
void SetMarkBitRelease ()
 
void ClearMarkBit ()
 
void ClearMarkBitUnsynchronized ()
 
DART_WARN_UNUSED_RESULT bool TryAcquireMarkBit ()
 
bool IsEvacuationCandidate ()
 
void SetIsEvacuationCandidate ()
 
void SetIsEvacuationCandidateUnsynchronized ()
 
void ClearIsEvacuationCandidateUnsynchronized ()
 
bool IsCanonical () const
 
void SetCanonical ()
 
void ClearCanonical ()
 
bool IsImmutable () const
 
void SetImmutable ()
 
void ClearImmutable ()
 
bool InVMIsolateHeap () const
 
bool IsRemembered () const
 
bool TryAcquireRememberedBit ()
 
void ClearRememberedBit ()
 
void ClearRememberedBitUnsynchronized ()
 
DART_FORCE_INLINE void EnsureInRememberedSet (Thread *thread)
 
bool IsCardRemembered () const
 
void SetCardRememberedBitUnsynchronized ()
 
intptr_t GetClassId () const
 
intptr_t HeapSize () const
 
intptr_t HeapSize (uword tags) const
 
bool Contains (uword addr) const
 
void Validate (IsolateGroup *isolate_group) const
 
intptr_t VisitPointers (ObjectPointerVisitor *visitor)
 
template<class V >
DART_FORCE_INLINE intptr_t VisitPointersNonvirtual (V *visitor)
 
void VisitPointersPrecise (ObjectPointerVisitor *visitor)
 

Static Public Member Functions

static bool IsMarked (uword tags)
 
static bool IsEvacuationCandidate (uword tags)
 
static ObjectPtr FromAddr (uword addr)
 
static uword ToAddr (const UntaggedObject *raw_obj)
 
static uword ToAddr (const ObjectPtr raw_obj)
 
static bool IsCanonical (intptr_t value)
 

Static Public Attributes

static constexpr intptr_t kGenerationalBarrierMask
 
static constexpr intptr_t kIncrementalBarrierMask = 1 << kNotMarkedBit
 
static constexpr intptr_t kBarrierOverlapShift = 2
 

Protected Member Functions

template<typename type , std::memory_order order = std::memory_order_relaxed>
type LoadPointer (type const *addr) const
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
type LoadCompressedPointer (compressed_type const *addr) const
 
uword heap_base () const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StorePointer (type const *addr, type value)
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void StoreCompressedPointer (compressed_type const *addr, type value)
 
template<typename type >
void StorePointer (type const *addr, type value, Thread *thread)
 
template<typename type , typename compressed_type >
void StoreCompressedPointer (compressed_type const *addr, type value, Thread *thread)
 
template<typename type >
void StorePointerUnaligned (type const *addr, type value, Thread *thread)
 
template<typename type , std::memory_order order = std::memory_order_relaxed, typename value_type = type>
void StoreArrayPointer (type const *addr, value_type value)
 
template<typename type , typename value_type = type>
void StoreArrayPointer (type const *addr, value_type value, Thread *thread)
 
template<typename type , typename compressed_type , std::memory_order order>
void StoreCompressedArrayPointer (compressed_type const *addr, type value)
 
template<typename type , typename compressed_type , std::memory_order order>
void StoreCompressedArrayPointer (compressed_type const *addr, type value, Thread *thread)
 
template<typename type , typename compressed_type >
void StoreCompressedArrayPointer (compressed_type const *addr, type value, Thread *thread)
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
type ExchangeCompressedPointer (compressed_type const *addr, type value)
 
template<std::memory_order order = std::memory_order_relaxed>
SmiPtr LoadSmi (SmiPtr const *addr) const
 
template<std::memory_order order = std::memory_order_relaxed>
SmiPtr LoadCompressedSmi (CompressedSmiPtr const *addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StoreSmi (type const *addr, type value)
 
template<std::memory_order order = std::memory_order_relaxed>
void StoreCompressedSmi (CompressedSmiPtr const *addr, SmiPtr value)
 

Static Protected Member Functions

template<typename T >
static DART_FORCE_INLINE uword from_offset ()
 
template<typename T >
static DART_FORCE_INLINE uword to_offset (intptr_t length=0)
 
template<>
DART_FORCE_INLINE uword from_offset ()
 
template<>
DART_FORCE_INLINE uword to_offset (intptr_t length)
 
template<>
DART_FORCE_INLINE uword to_offset (intptr_t length)
 
template<>
DART_FORCE_INLINE uword to_offset (intptr_t length)
 

Static Protected Attributes

static constexpr bool kContainsCompressedPointers = false
 
static constexpr bool kContainsPointerFields = false
 

Friends

class StoreBufferUpdateVisitor
 
class Array
 
class ByteBuffer
 
class CidRewriteVisitor
 
class Closure
 
class Code
 
class Pointer
 
class Double
 
class DynamicLibrary
 
class ForwardPointersVisitor
 
class FreeListElement
 
class Function
 
class GCMarker
 
class GCSweeper
 
class ExternalTypedData
 
class GrowableObjectArray
 
template<bool >
class MarkingVisitorBase
 
class Mint
 
class Object
 
class OneByteString
 
class UntaggedInstance
 
class Scavenger
 
template<bool >
class ScavengerVisitorBase
 
class ImageReader
 
class ImageWriter
 
class AssemblyImageWriter
 
class BlobImageWriter
 
class Deserializer
 
class String
 
class WeakProperty
 
class Instance
 
class StackFrame
 
class CodeLookupTableBuilder
 
class ObjectLocator
 
class WriteBarrierUpdateVisitor
 
class OffsetsTable
 
class ObjectCopyBase
 
uword TagsFromUntaggedObject (UntaggedObject *)
 
void SetNewSpaceTaggingWord (ObjectPtr, classid_t, uint32_t)
 
void ReportImpossibleNullError (intptr_t cid, StackFrame *caller_frame, Thread *thread)
 

Detailed Description

Definition at line 159 of file raw_object.h.

Member Enumeration Documentation

◆ TagBits

Enumerator
kCardRememberedBit 
kCanonicalBit 
kNotMarkedBit 
kNewOrEvacuationCandidateBit 
kAlwaysSetBit 
kOldAndNotRememberedBit 
kImmutableBit 
kReservedBit 
kSizeTagPos 
kSizeTagSize 
kClassIdTagPos 
kClassIdTagSize 
kHashTagPos 
kHashTagSize 

Definition at line 163 of file raw_object.h.

163 {
165 kCanonicalBit = 1,
166 kNotMarkedBit = 2, // Incremental barrier target.
167 kNewOrEvacuationCandidateBit = 3, // Generational barrier target.
168 kAlwaysSetBit = 4, // Incremental barrier source.
169 kOldAndNotRememberedBit = 5, // Generational barrier source.
170 kImmutableBit = 6,
171 kReservedBit = 7,
172
173 kSizeTagPos = kReservedBit + 1, // = 8
174 kSizeTagSize = 4,
176 kClassIdTagSize = 20,
178 kHashTagSize = 32,
179 };

Member Function Documentation

◆ ClearCanonical()

void dart::UntaggedObject::ClearCanonical ( )
inline

Definition at line 352 of file raw_object.h.

352{ tags_.UpdateBool<CanonicalBit>(false); }
void UpdateBool(bool value)
Definition: bitfield.h:56

◆ ClearImmutable()

void dart::UntaggedObject::ClearImmutable ( )
inline

Definition at line 356 of file raw_object.h.

356{ tags_.UpdateBool<ImmutableBit>(false); }

◆ ClearIsEvacuationCandidateUnsynchronized()

void dart::UntaggedObject::ClearIsEvacuationCandidateUnsynchronized ( )
inline

Definition at line 343 of file raw_object.h.

343 {
345 tags_.UpdateUnsynchronized<NewOrEvacuationCandidateBit>(false);
346 }
void UpdateUnsynchronized(typename TargetBitField::Type value)
Definition: bitfield.h:80
bool IsOldObject() const
Definition: raw_object.h:293
#define ASSERT(E)

◆ ClearMarkBit()

void dart::UntaggedObject::ClearMarkBit ( )
inline

Definition at line 317 of file raw_object.h.

317 {
318 ASSERT(IsMarked());
319 tags_.UpdateBool<NotMarkedBit>(true);
320 }
bool IsMarked() const
Definition: raw_object.h:304

◆ ClearMarkBitUnsynchronized()

void dart::UntaggedObject::ClearMarkBitUnsynchronized ( )
inline

Definition at line 321 of file raw_object.h.

321 {
322 ASSERT(IsMarked());
323 tags_.UpdateUnsynchronized<NotMarkedBit>(true);
324 }

◆ ClearRememberedBit()

void dart::UntaggedObject::ClearRememberedBit ( )
inline

Definition at line 369 of file raw_object.h.

369 {
371 tags_.UpdateBool<OldAndNotRememberedBit>(true);
372 }

◆ ClearRememberedBitUnsynchronized()

void dart::UntaggedObject::ClearRememberedBitUnsynchronized ( )
inline

Definition at line 373 of file raw_object.h.

373 {
375 tags_.UpdateUnsynchronized<OldAndNotRememberedBit>(true);
376 }

◆ COMPILE_ASSERT() [1/5]

dart::UntaggedObject::COMPILE_ASSERT ( kBitsPerByte *sizeof(ClassIdTagType) >=  kClassIdTagSize)

◆ COMPILE_ASSERT() [2/5]

dart::UntaggedObject::COMPILE_ASSERT ( kCardRememberedBit  = =0)

◆ COMPILE_ASSERT() [3/5]

dart::UntaggedObject::COMPILE_ASSERT ( kClassIdTagMax  = =(1<< kClassIdTagSize) - 1)

◆ COMPILE_ASSERT() [4/5]

dart::UntaggedObject::COMPILE_ASSERT ( kNewOrEvacuationCandidateBit kBarrierOverlapShift = =kOldAndNotRememberedBit)

◆ COMPILE_ASSERT() [5/5]

dart::UntaggedObject::COMPILE_ASSERT ( kNotMarkedBit kBarrierOverlapShift = =kAlwaysSetBit)

◆ Contains()

bool dart::UntaggedObject::Contains ( uword  addr) const
inline

Definition at line 436 of file raw_object.h.

436 {
437 intptr_t this_size = HeapSize();
438 uword this_addr = UntaggedObject::ToAddr(this);
439 return (addr >= this_addr) && (addr < (this_addr + this_size));
440 }
static uword ToAddr(const UntaggedObject *raw_obj)
Definition: raw_object.h:522
intptr_t HeapSize() const
Definition: raw_object.h:401
uintptr_t uword
Definition: globals.h:501

◆ EnsureInRememberedSet()

DART_FORCE_INLINE void dart::UntaggedObject::EnsureInRememberedSet ( Thread thread)
inline

Definition at line 379 of file raw_object.h.

379 {
381 thread->StoreBufferAddObject(ObjectPtr(this));
382 }
383 }
bool TryAcquireRememberedBit()
Definition: raw_object.h:365

◆ ExchangeCompressedPointer()

template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
type dart::UntaggedObject::ExchangeCompressedPointer ( compressed_type const *  addr,
type  value 
)
inlineprotected

Definition at line 696 of file raw_object.h.

696 {
697 compressed_type previous_value =
698 reinterpret_cast<std::atomic<compressed_type>*>(
699 const_cast<compressed_type*>(addr))
700 ->exchange(static_cast<compressed_type>(value), order);
701 if (value.IsHeapObject()) {
702 CheckHeapPointerStore(value, Thread::Current());
703 }
704 return static_cast<type>(previous_value.Decompress(heap_base()));
705 }
GLenum type
static Thread * Current()
Definition: thread.h:362
uword heap_base() const
Definition: raw_object.h:590
uint8_t value

◆ from_offset() [1/2]

template<typename T >
DART_FORCE_INLINE uword dart::UntaggedObject::from_offset
staticprotected

Definition at line 860 of file raw_object.h.

860 {
861 if constexpr (T::kContainsPointerFields) {
862 return reinterpret_cast<uword>(reinterpret_cast<T*>(kOffsetOfPtr)->from()) -
864 } else {
865 // Non-zero to ensure to_offset() < from_offset() in this case, as
866 // to_offset() is the offset to the last pointer field, not past it.
867 return sizeof(UntaggedObject);
868 }
869}
const intptr_t kOffsetOfPtr
Definition: globals.h:136
#define T
Definition: precompiler.cc:65

◆ from_offset() [2/2]

template<>
DART_FORCE_INLINE uword dart::UntaggedObject::from_offset ( )
staticprotected

Definition at line 1844 of file raw_object.h.

1844 {
1845 return OFFSET_OF(UntaggedWeakArray, next_seen_by_gc_);
1846}
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ FromAddr()

static ObjectPtr dart::UntaggedObject::FromAddr ( uword  addr)
inlinestatic

Definition at line 516 of file raw_object.h.

516 {
517 // We expect the untagged address here.
519 return static_cast<ObjectPtr>(addr + kHeapObjectTag);
520 }
@ kHeapObjectTag
@ kSmiTagMask

◆ GetClassId()

intptr_t dart::UntaggedObject::GetClassId ( ) const
inline

Definition at line 392 of file raw_object.h.

392{ return tags_.Read<ClassIdTag>(); }
TargetBitField::Type Read() const
Definition: bitfield.h:50

◆ heap_base()

uword dart::UntaggedObject::heap_base ( ) const
inlineprotected

Definition at line 590 of file raw_object.h.

590 {
591 return reinterpret_cast<uword>(this) & kHeapBaseMask;
592 }
static constexpr uintptr_t kHeapBaseMask

◆ HeapSize() [1/2]

intptr_t dart::UntaggedObject::HeapSize ( ) const
inline

Definition at line 401 of file raw_object.h.

401 {
402 uword tags = tags_;
403 intptr_t result = SizeTag::decode(tags);
404 if (result != 0) {
405#if defined(DEBUG)
406 // TODO(22501) Array::MakeFixedLength has a race with this code: we might
407 // have loaded tags field and then MakeFixedLength could have updated it
408 // leading to inconsistency between HeapSizeFromClass() and
409 // SizeTag::decode(tags). We are working around it by reloading tags_ and
410 // recomputing size from tags.
411 const intptr_t size_from_class = HeapSizeFromClass(tags);
412 if ((result > size_from_class) && (GetClassId() == kArrayCid) &&
413 (tags_ != tags)) {
414 result = SizeTag::decode(tags_);
415 }
416 ASSERT(result == size_from_class);
417#endif
418 return result;
419 }
420 result = HeapSizeFromClass(tags);
422 return result;
423 }
static constexpr intptr_t kMaxSizeTag
Definition: raw_object.h:201
static constexpr uword decode(uword tag)
Definition: raw_object.h:208
uword tags() const
Definition: raw_object.h:298
intptr_t GetClassId() const
Definition: raw_object.h:392
GAsyncResult * result

◆ HeapSize() [2/2]

intptr_t dart::UntaggedObject::HeapSize ( uword  tags) const
inline

Definition at line 426 of file raw_object.h.

426 {
427 intptr_t result = SizeTag::decode(tags);
428 if (result != 0) {
429 return result;
430 }
431 result = HeapSizeFromClass(tags);
433 return result;
434 }

◆ InVMIsolateHeap()

bool dart::UntaggedObject::InVMIsolateHeap ( ) const

Definition at line 20 of file raw_object.cc.

20 {
21 // All "vm-isolate" objects are pre-marked and in old space
22 // (see [Object::FinalizeVMIsolate]).
23 if (!IsOldObject() || !IsMarked()) return false;
24
25 auto heap = Dart::vm_isolate_group()->heap();
26 ASSERT(heap->UsedInWords(Heap::kNew) == 0);
27 return heap->old_space()->ContainsUnsafe(ToAddr(this));
28}
static IsolateGroup * vm_isolate_group()
Definition: dart.h:69
@ kNew
Definition: heap.h:38
Heap * heap() const
Definition: isolate.h:296

◆ IsCanonical() [1/2]

bool dart::UntaggedObject::IsCanonical ( ) const
inline

Definition at line 350 of file raw_object.h.

350{ return tags_.Read<CanonicalBit>(); }

◆ IsCanonical() [2/2]

static bool dart::UntaggedObject::IsCanonical ( intptr_t  value)
inlinestatic

Definition at line 529 of file raw_object.h.

529 {
531 }
static constexpr bool decode(uword value)
Definition: bitfield.h:171

◆ IsCardRemembered()

bool dart::UntaggedObject::IsCardRemembered ( ) const
inline

Definition at line 385 of file raw_object.h.

385{ return tags_.Read<CardRememberedBit>(); }

◆ IsEvacuationCandidate() [1/2]

bool dart::UntaggedObject::IsEvacuationCandidate ( )
inline

Definition at line 332 of file raw_object.h.

332 {
333 return tags_.Read<NewOrEvacuationCandidateBit>();
334 }

◆ IsEvacuationCandidate() [2/2]

static bool dart::UntaggedObject::IsEvacuationCandidate ( uword  tags)
inlinestatic

Definition at line 329 of file raw_object.h.

329 {
331 }

◆ IsImmutable()

bool dart::UntaggedObject::IsImmutable ( ) const
inline

Definition at line 354 of file raw_object.h.

354{ return tags_.Read<ImmutableBit>(); }

◆ IsMarked() [1/2]

bool dart::UntaggedObject::IsMarked ( ) const
inline

Definition at line 304 of file raw_object.h.

304{ return !tags_.Read<NotMarkedBit>(); }

◆ IsMarked() [2/2]

static bool dart::UntaggedObject::IsMarked ( uword  tags)
inlinestatic

Definition at line 303 of file raw_object.h.

303{ return !NotMarkedBit::decode(tags); }

◆ IsNewObject()

bool dart::UntaggedObject::IsNewObject ( ) const
inline

Definition at line 288 of file raw_object.h.

288 {
289 uword addr = reinterpret_cast<uword>(this);
291 }
static constexpr intptr_t kNewObjectAlignmentOffset
static constexpr intptr_t kObjectAlignmentMask

◆ IsOldObject()

bool dart::UntaggedObject::IsOldObject ( ) const
inline

Definition at line 293 of file raw_object.h.

293 {
294 uword addr = reinterpret_cast<uword>(this);
296 }
static constexpr intptr_t kOldObjectAlignmentOffset

◆ IsRemembered()

bool dart::UntaggedObject::IsRemembered ( ) const
inline

Definition at line 361 of file raw_object.h.

361 {
363 return !tags_.Read<OldAndNotRememberedBit>();
364 }

◆ LoadCompressedPointer()

template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
type dart::UntaggedObject::LoadCompressedPointer ( compressed_type const *  addr) const
inlineprotected

Definition at line 583 of file raw_object.h.

583 {
584 compressed_type v = reinterpret_cast<std::atomic<compressed_type>*>(
585 const_cast<compressed_type*>(addr))
586 ->load(order);
587 return static_cast<type>(v.Decompress(heap_base()));
588 }

◆ LoadCompressedSmi()

template<std::memory_order order = std::memory_order_relaxed>
SmiPtr dart::UntaggedObject::LoadCompressedSmi ( CompressedSmiPtr const *  addr) const
inlineprotected

Definition at line 713 of file raw_object.h.

713 {
714 return static_cast<SmiPtr>(reinterpret_cast<std::atomic<CompressedSmiPtr>*>(
715 const_cast<CompressedSmiPtr*>(addr))
716 ->load(order)
717 .DecompressSmi());
718 }

◆ LoadPointer()

template<typename type , std::memory_order order = std::memory_order_relaxed>
type dart::UntaggedObject::LoadPointer ( type const *  addr) const
inlineprotected

Definition at line 576 of file raw_object.h.

576 {
577 return reinterpret_cast<std::atomic<type>*>(const_cast<type*>(addr))
578 ->load(order);
579 }

◆ LoadSmi()

template<std::memory_order order = std::memory_order_relaxed>
SmiPtr dart::UntaggedObject::LoadSmi ( SmiPtr const *  addr) const
inlineprotected

Definition at line 708 of file raw_object.h.

708 {
709 return reinterpret_cast<std::atomic<SmiPtr>*>(const_cast<SmiPtr*>(addr))
710 ->load(order);
711 }

◆ SetCanonical()

void dart::UntaggedObject::SetCanonical ( )
inline

Definition at line 351 of file raw_object.h.

351{ tags_.UpdateBool<CanonicalBit>(true); }

◆ SetCardRememberedBitUnsynchronized()

void dart::UntaggedObject::SetCardRememberedBitUnsynchronized ( )
inline

Definition at line 386 of file raw_object.h.

386 {
389 tags_.UpdateUnsynchronized<CardRememberedBit>(true);
390 }
bool IsCardRemembered() const
Definition: raw_object.h:385
bool IsRemembered() const
Definition: raw_object.h:361

◆ SetImmutable()

void dart::UntaggedObject::SetImmutable ( )
inline

Definition at line 355 of file raw_object.h.

355{ tags_.UpdateBool<ImmutableBit>(true); }

◆ SetIsEvacuationCandidate()

void dart::UntaggedObject::SetIsEvacuationCandidate ( )
inline

Definition at line 335 of file raw_object.h.

335 {
337 tags_.UpdateBool<NewOrEvacuationCandidateBit>(true);
338 }

◆ SetIsEvacuationCandidateUnsynchronized()

void dart::UntaggedObject::SetIsEvacuationCandidateUnsynchronized ( )
inline

Definition at line 339 of file raw_object.h.

339 {
341 tags_.UpdateUnsynchronized<NewOrEvacuationCandidateBit>(true);
342 }

◆ SetMarkBit()

void dart::UntaggedObject::SetMarkBit ( )
inline

Definition at line 305 of file raw_object.h.

305 {
306 ASSERT(!IsMarked());
307 tags_.UpdateBool<NotMarkedBit>(false);
308 }

◆ SetMarkBitRelease()

void dart::UntaggedObject::SetMarkBitRelease ( )
inline

Definition at line 313 of file raw_object.h.

313 {
314 ASSERT(!IsMarked());
315 tags_.UpdateBool<NotMarkedBit, std::memory_order_release>(false);
316 }

◆ SetMarkBitUnsynchronized()

void dart::UntaggedObject::SetMarkBitUnsynchronized ( )
inline

Definition at line 309 of file raw_object.h.

309 {
310 ASSERT(!IsMarked());
311 tags_.UpdateUnsynchronized<NotMarkedBit>(false);
312 }

◆ StoreArrayPointer() [1/2]

template<typename type , std::memory_order order = std::memory_order_relaxed, typename value_type = type>
void dart::UntaggedObject::StoreArrayPointer ( type const *  addr,
value_type  value 
)
inlineprotected

Definition at line 645 of file raw_object.h.

645 {
646 reinterpret_cast<std::atomic<type>*>(const_cast<type*>(addr))
647 ->store(type(value), order);
648 if (value->IsHeapObject()) {
649 CheckArrayPointerStore(addr, value, Thread::Current());
650 }
651 }

◆ StoreArrayPointer() [2/2]

template<typename type , typename value_type = type>
void dart::UntaggedObject::StoreArrayPointer ( type const *  addr,
value_type  value,
Thread thread 
)
inlineprotected

Definition at line 654 of file raw_object.h.

654 {
655 *const_cast<type*>(addr) = value;
656 if (value->IsHeapObject()) {
657 CheckArrayPointerStore(addr, value, thread);
658 }
659 }

◆ StoreCompressedArrayPointer() [1/3]

template<typename type , typename compressed_type , std::memory_order order>
void dart::UntaggedObject::StoreCompressedArrayPointer ( compressed_type const *  addr,
type  value 
)
inlineprotected

Definition at line 662 of file raw_object.h.

662 {
663 reinterpret_cast<std::atomic<compressed_type>*>(
664 const_cast<compressed_type*>(addr))
665 ->store(static_cast<compressed_type>(value), order);
666 if (value->IsHeapObject()) {
667 CheckArrayPointerStore(addr, value, Thread::Current());
668 }
669 }

◆ StoreCompressedArrayPointer() [2/3]

template<typename type , typename compressed_type , std::memory_order order>
void dart::UntaggedObject::StoreCompressedArrayPointer ( compressed_type const *  addr,
type  value,
Thread thread 
)
inlineprotected

Definition at line 672 of file raw_object.h.

674 {
675 reinterpret_cast<std::atomic<compressed_type>*>(
676 const_cast<compressed_type*>(addr))
677 ->store(static_cast<compressed_type>(value), order);
678 if (value->IsHeapObject()) {
679 CheckArrayPointerStore(addr, value, thread);
680 }
681 }

◆ StoreCompressedArrayPointer() [3/3]

template<typename type , typename compressed_type >
void dart::UntaggedObject::StoreCompressedArrayPointer ( compressed_type const *  addr,
type  value,
Thread thread 
)
inlineprotected

Definition at line 684 of file raw_object.h.

686 {
687 *const_cast<compressed_type*>(addr) = value;
688 if (value->IsHeapObject()) {
689 CheckArrayPointerStore(addr, value, thread);
690 }
691 }

◆ StoreCompressedPointer() [1/2]

template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void dart::UntaggedObject::StoreCompressedPointer ( compressed_type const *  addr,
type  value 
)
inlineprotected

Definition at line 606 of file raw_object.h.

606 {
607 reinterpret_cast<std::atomic<compressed_type>*>(
608 const_cast<compressed_type*>(addr))
609 ->store(static_cast<compressed_type>(value), order);
610 if (value.IsHeapObject()) {
611 CheckHeapPointerStore(value, Thread::Current());
612 }
613 }

◆ StoreCompressedPointer() [2/2]

template<typename type , typename compressed_type >
void dart::UntaggedObject::StoreCompressedPointer ( compressed_type const *  addr,
type  value,
Thread thread 
)
inlineprotected

Definition at line 624 of file raw_object.h.

626 {
627 *const_cast<compressed_type*>(addr) = value;
628 if (value.IsHeapObject()) {
629 CheckHeapPointerStore(value, thread);
630 }
631 }

◆ StoreCompressedSmi()

template<std::memory_order order = std::memory_order_relaxed>
void dart::UntaggedObject::StoreCompressedSmi ( CompressedSmiPtr const *  addr,
SmiPtr  value 
)
inlineprotected

Definition at line 730 of file raw_object.h.

730 {
731 // Can't use Contains, as array length is initialized through this method.
732 ASSERT(reinterpret_cast<uword>(addr) >= UntaggedObject::ToAddr(this));
733 reinterpret_cast<std::atomic<CompressedSmiPtr>*>(
734 const_cast<CompressedSmiPtr*>(addr))
735 ->store(static_cast<CompressedSmiPtr>(value), order);
736 }

◆ StorePointer() [1/2]

template<typename type , std::memory_order order = std::memory_order_relaxed>
void dart::UntaggedObject::StorePointer ( type const *  addr,
type  value 
)
inlineprotected

Definition at line 595 of file raw_object.h.

595 {
596 reinterpret_cast<std::atomic<type>*>(const_cast<type*>(addr))
597 ->store(value, order);
598 if (value.IsHeapObject()) {
599 CheckHeapPointerStore(value, Thread::Current());
600 }
601 }

◆ StorePointer() [2/2]

template<typename type >
void dart::UntaggedObject::StorePointer ( type const *  addr,
type  value,
Thread thread 
)
inlineprotected

Definition at line 616 of file raw_object.h.

616 {
617 *const_cast<type*>(addr) = value;
618 if (value.IsHeapObject()) {
619 CheckHeapPointerStore(value, thread);
620 }
621 }

◆ StorePointerUnaligned()

template<typename type >
void dart::UntaggedObject::StorePointerUnaligned ( type const *  addr,
type  value,
Thread thread 
)
inlineprotected

Definition at line 634 of file raw_object.h.

634 {
635 StoreUnaligned(const_cast<type*>(addr), value);
636 if (value->IsHeapObject()) {
637 CheckHeapPointerStore(value, thread);
638 }
639 }
static void StoreUnaligned(T *ptr, T value)
Definition: unaligned.h:22

◆ StoreSmi()

template<typename type , std::memory_order order = std::memory_order_relaxed>
void dart::UntaggedObject::StoreSmi ( type const *  addr,
type  value 
)
inlineprotected

Definition at line 723 of file raw_object.h.

723 {
724 // Can't use Contains, as array length is initialized through this method.
725 ASSERT(reinterpret_cast<uword>(addr) >= UntaggedObject::ToAddr(this));
726 reinterpret_cast<std::atomic<type>*>(const_cast<type*>(addr))
727 ->store(value, order);
728 }

◆ tags()

uword dart::UntaggedObject::tags ( ) const
inline

Definition at line 298 of file raw_object.h.

298{ return tags_; }

◆ tags_ignore_race()

uword dart::UntaggedObject::tags_ignore_race ( ) const
inline

Definition at line 299 of file raw_object.h.

299{ return tags_.load_ignore_race(); }
NO_SANITIZE_THREAD T load_ignore_race() const
Definition: bitfield.h:39

◆ to_offset() [1/4]

template<>
DART_FORCE_INLINE uword dart::UntaggedObject::to_offset ( intptr_t  length)
staticprotected

Definition at line 3587 of file raw_object.h.

3588 {
3589 return OFFSET_OF(UntaggedWeakProperty, next_seen_by_gc_);
3590}

◆ to_offset() [2/4]

template<>
DART_FORCE_INLINE uword dart::UntaggedObject::to_offset ( intptr_t  length)
staticprotected

Definition at line 3621 of file raw_object.h.

3622 {
3623 return OFFSET_OF(UntaggedWeakReference, next_seen_by_gc_);
3624}

◆ to_offset() [3/4]

template<>
DART_FORCE_INLINE uword dart::UntaggedObject::to_offset ( intptr_t  length)
staticprotected

Definition at line 3733 of file raw_object.h.

3734 {
3735 return OFFSET_OF(UntaggedFinalizerEntry, next_seen_by_gc_);
3736}

◆ to_offset() [4/4]

template<typename T >
DART_FORCE_INLINE uword dart::UntaggedObject::to_offset ( intptr_t  length = 0)
staticprotected

Definition at line 872 of file raw_object.h.

872 {
873 if constexpr (T::kContainsPointerFields) {
874 return reinterpret_cast<uword>(
875 reinterpret_cast<T*>(kOffsetOfPtr)->to(length)) -
877 } else {
878 USE(length);
879 // Zero to ensure to_offset() < from_offset() in this case, as
880 // from_offset() is guaranteed to return an offset after the header tags.
881 return 0;
882 }
883}
size_t length
static void USE(T &&)
Definition: globals.h:618

◆ ToAddr() [1/2]

static uword dart::UntaggedObject::ToAddr ( const ObjectPtr  raw_obj)
inlinestatic

Definition at line 525 of file raw_object.h.

525 {
526 return static_cast<uword>(raw_obj) - kHeapObjectTag;
527 }

◆ ToAddr() [2/2]

static uword dart::UntaggedObject::ToAddr ( const UntaggedObject raw_obj)
inlinestatic

Definition at line 522 of file raw_object.h.

522 {
523 return reinterpret_cast<uword>(raw_obj);
524 }

◆ TryAcquireMarkBit()

DART_WARN_UNUSED_RESULT bool dart::UntaggedObject::TryAcquireMarkBit ( )
inline

Definition at line 327 of file raw_object.h.

327{ return tags_.TryClear<NotMarkedBit>(); }

◆ TryAcquireRememberedBit()

bool dart::UntaggedObject::TryAcquireRememberedBit ( )
inline

Definition at line 365 of file raw_object.h.

365 {
367 return tags_.TryClear<OldAndNotRememberedBit>();
368 }

◆ Validate()

void dart::UntaggedObject::Validate ( IsolateGroup isolate_group) const

Definition at line 42 of file raw_object.cc.

42 {
43 if (static_cast<uword>(Object::void_class_) == kHeapObjectTag) {
44 // Validation relies on properly initialized class classes. Skip if the
45 // VM is still being initialized.
46 return;
47 }
48 // Validate that the tags_ field is sensible.
49 uword tags = tags_;
50 if (IsNewObject()) {
52 FATAL("New object missing kNewBit: %" Px "\n", tags);
53 }
55 FATAL("New object has kOldAndNotRememberedBit: %" Px "\n", tags);
56 }
57 }
58 const intptr_t class_id = ClassIdTag::decode(tags);
59 if (!isolate_group->class_table()->IsValidIndex(class_id)) {
60 FATAL("Invalid class id encountered %" Pd "\n", class_id);
61 }
62 if (class_id == kNullCid &&
63 isolate_group->class_table()->HasValidClassAt(class_id)) {
64 // Null class not yet initialized; skip.
65 return;
66 }
67 intptr_t size_from_tags = SizeTag::decode(tags);
68 intptr_t size_from_class = HeapSizeFromClass(tags);
69 if ((size_from_tags != 0) && (size_from_tags != size_from_class)) {
70 FATAL(
71 "Inconsistent size encountered "
72 "cid: %" Pd ", size_from_tags: %" Pd ", size_from_class: %" Pd "\n",
73 class_id, size_from_tags, size_from_class);
74 }
75}
bool IsNewObject() const
Definition: raw_object.h:288
#define FATAL(error)
@ kNullCid
Definition: class_id.h:252
#define Px
Definition: globals.h:410
#define Pd
Definition: globals.h:408

◆ VisitPointers()

intptr_t dart::UntaggedObject::VisitPointers ( ObjectPointerVisitor visitor)
inline

Definition at line 447 of file raw_object.h.

447 {
448 // Fall back to virtual variant for predefined classes
449 intptr_t class_id = GetClassId();
450 if (class_id < kNumPredefinedCids) {
451 return VisitPointersPredefined(visitor, class_id);
452 }
453
454 // Calculate the first and last raw object pointer fields.
455 intptr_t instance_size = HeapSize();
456 uword obj_addr = ToAddr(this);
457 uword from = obj_addr + sizeof(UntaggedObject);
458 uword to = obj_addr + instance_size - kCompressedWordSize;
459 const auto first = reinterpret_cast<CompressedObjectPtr*>(from);
460 const auto last = reinterpret_cast<CompressedObjectPtr*>(to);
461
462 const auto unboxed_fields_bitmap =
463 visitor->class_table()->GetUnboxedFieldsMapAt(class_id);
464
465 if (!unboxed_fields_bitmap.IsEmpty()) {
466 intptr_t bit = sizeof(UntaggedObject) / kCompressedWordSize;
467 for (CompressedObjectPtr* current = first; current <= last; current++) {
468 if (!unboxed_fields_bitmap.Get(bit++)) {
469 visitor->VisitCompressedPointers(heap_base(), current, current);
470 }
471 }
472 } else {
473 visitor->VisitCompressedPointers(heap_base(), first, last);
474 }
475
476 return instance_size;
477 }
@ kNumPredefinedCids
Definition: class_id.h:257
static constexpr intptr_t kCompressedWordSize
Definition: globals.h:42
ObjectPtr CompressedObjectPtr

◆ VisitPointersNonvirtual()

template<class V >
DART_FORCE_INLINE intptr_t dart::UntaggedObject::VisitPointersNonvirtual ( V visitor)
inline

Definition at line 480 of file raw_object.h.

480 {
481 // Fall back to virtual variant for predefined classes
482 intptr_t class_id = GetClassId();
483 if (class_id < kNumPredefinedCids) {
484 return VisitPointersPredefined(visitor, class_id);
485 }
486
487 // Calculate the first and last raw object pointer fields.
488 intptr_t instance_size = HeapSize();
489 uword obj_addr = ToAddr(this);
490 uword from = obj_addr + sizeof(UntaggedObject);
491 uword to = obj_addr + instance_size - kCompressedWordSize;
492 const auto first = reinterpret_cast<CompressedObjectPtr*>(from);
493 const auto last = reinterpret_cast<CompressedObjectPtr*>(to);
494
495 const auto unboxed_fields_bitmap =
496 visitor->class_table()->GetUnboxedFieldsMapAt(class_id);
497
498 if (!unboxed_fields_bitmap.IsEmpty()) {
499 intptr_t bit = sizeof(UntaggedObject) / kCompressedWordSize;
500 for (CompressedObjectPtr* current = first; current <= last; current++) {
501 if (!unboxed_fields_bitmap.Get(bit++)) {
502 visitor->V::VisitCompressedPointers(heap_base(), current, current);
503 }
504 }
505 } else {
506 visitor->V::VisitCompressedPointers(heap_base(), first, last);
507 }
508
509 return instance_size;
510 }

◆ VisitPointersPrecise()

void dart::UntaggedObject::VisitPointersPrecise ( ObjectPointerVisitor visitor)

Definition at line 371 of file raw_object.cc.

371 {
372 intptr_t class_id = GetClassId();
373 if ((class_id != kInstanceCid) && (class_id < kNumPredefinedCids)) {
374 VisitPointersPredefined(visitor, class_id);
375 return;
376 }
377
378 // N.B.: Not using the heap size!
379 uword next_field_offset = visitor->class_table()
380 ->At(class_id)
381 ->untag()
382 ->host_next_field_offset_in_words_
384 ASSERT(next_field_offset > 0);
385 uword obj_addr = UntaggedObject::ToAddr(this);
386 uword from = obj_addr + sizeof(UntaggedObject);
387 uword to = obj_addr + next_field_offset - kCompressedWordSize;
388 const auto first = reinterpret_cast<CompressedObjectPtr*>(from);
389 const auto last = reinterpret_cast<CompressedObjectPtr*>(to);
390
391 const auto unboxed_fields_bitmap =
392 visitor->class_table()->GetUnboxedFieldsMapAt(class_id);
393
394 if (!unboxed_fields_bitmap.IsEmpty()) {
395 intptr_t bit = sizeof(UntaggedObject) / kCompressedWordSize;
396 for (CompressedObjectPtr* current = first; current <= last; current++) {
397 if (!unboxed_fields_bitmap.Get(bit++)) {
398 visitor->VisitCompressedPointers(heap_base(), current, current);
399 }
400 }
401 } else {
402 visitor->VisitCompressedPointers(heap_base(), first, last);
403 }
404}
static constexpr intptr_t kCompressedWordSizeLog2
Definition: globals.h:43

Friends And Related Function Documentation

◆ Array

friend class Array
friend

Definition at line 805 of file raw_object.h.

◆ AssemblyImageWriter

friend class AssemblyImageWriter
friend

Definition at line 831 of file raw_object.h.

◆ BlobImageWriter

friend class BlobImageWriter
friend

Definition at line 832 of file raw_object.h.

◆ ByteBuffer

friend class ByteBuffer
friend

Definition at line 806 of file raw_object.h.

◆ CidRewriteVisitor

friend class CidRewriteVisitor
friend

Definition at line 807 of file raw_object.h.

◆ Closure

friend class Closure
friend

Definition at line 808 of file raw_object.h.

◆ Code

friend class Code
friend

Definition at line 809 of file raw_object.h.

◆ CodeLookupTableBuilder

friend class CodeLookupTableBuilder
friend

Definition at line 838 of file raw_object.h.

◆ Deserializer

friend class Deserializer
friend

Definition at line 833 of file raw_object.h.

◆ Double

friend class Double
friend

Definition at line 811 of file raw_object.h.

◆ DynamicLibrary

friend class DynamicLibrary
friend

Definition at line 812 of file raw_object.h.

◆ ExternalTypedData

friend class ExternalTypedData
friend

Definition at line 818 of file raw_object.h.

◆ ForwardPointersVisitor

friend class ForwardPointersVisitor
friend

Definition at line 813 of file raw_object.h.

◆ FreeListElement

friend class FreeListElement
friend

Definition at line 814 of file raw_object.h.

◆ Function

friend class Function
friend

Definition at line 815 of file raw_object.h.

◆ GCMarker

friend class GCMarker
friend

Definition at line 816 of file raw_object.h.

◆ GCSweeper

friend class GCSweeper
friend

Definition at line 817 of file raw_object.h.

◆ GrowableObjectArray

friend class GrowableObjectArray
friend

Definition at line 819 of file raw_object.h.

◆ ImageReader

friend class ImageReader
friend

Definition at line 829 of file raw_object.h.

◆ ImageWriter

friend class ImageWriter
friend

Definition at line 830 of file raw_object.h.

◆ Instance

friend class Instance
friend

Definition at line 836 of file raw_object.h.

◆ MarkingVisitorBase

template<bool >
friend class MarkingVisitorBase
friend

Definition at line 821 of file raw_object.h.

◆ Mint

friend class Mint
friend

Definition at line 822 of file raw_object.h.

◆ Object

Object
friend

Definition at line 823 of file raw_object.h.

◆ ObjectCopyBase

friend class ObjectCopyBase
friend

Definition at line 845 of file raw_object.h.

◆ ObjectLocator

friend class ObjectLocator
friend

Definition at line 839 of file raw_object.h.

◆ OffsetsTable

friend class OffsetsTable
friend

Definition at line 841 of file raw_object.h.

◆ OneByteString

friend class OneByteString
friend

Definition at line 824 of file raw_object.h.

◆ Pointer

friend class Pointer
friend

Definition at line 810 of file raw_object.h.

◆ ReportImpossibleNullError

void ReportImpossibleNullError ( intptr_t  cid,
StackFrame caller_frame,
Thread thread 
)
friend

Definition at line 273 of file runtime_entry.cc.

275 {
276 TextBuffer buffer(512);
277 buffer.Printf("hit null error with cid %" Pd ", caller context: ", cid);
278
279 const intptr_t kMaxSlotsCollected = 5;
280 const auto slots = reinterpret_cast<ObjectPtr*>(caller_frame->sp());
281 const intptr_t num_slots_in_frame =
282 reinterpret_cast<ObjectPtr*>(caller_frame->fp()) - slots;
283 const auto num_slots_to_collect =
284 Utils::Maximum(kMaxSlotsCollected, num_slots_in_frame);
285 bool comma = false;
286 for (intptr_t i = 0; i < num_slots_to_collect; i++) {
287 const ObjectPtr ptr = slots[i];
288 buffer.Printf("%s[sp+%" Pd "] %" Pp "", comma ? ", " : "", i,
289 static_cast<uword>(ptr));
290 if (ptr->IsHeapObject() &&
293 thread->heap()->Contains(UntaggedObject::ToAddr(ptr)))) {
294 buffer.Printf("(%" Pp ")", static_cast<uword>(ptr->untag()->tags_));
295 }
296 comma = true;
297 }
298
299 const char* message = buffer.buffer();
300 FATAL("%s", message);
301}
bool Contains(uword addr) const
Definition: heap.cc:239
static constexpr T Maximum(T x, T y)
Definition: utils.h:41
Win32Message message
const intptr_t cid
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace buffer
Definition: switches.h:126
#define Pp
Definition: globals.h:425

◆ Scavenger

friend class Scavenger
friend

Definition at line 826 of file raw_object.h.

◆ ScavengerVisitorBase

template<bool >
friend class ScavengerVisitorBase
friend

Definition at line 828 of file raw_object.h.

◆ SetNewSpaceTaggingWord

void SetNewSpaceTaggingWord ( ObjectPtr  to,
classid_t  cid,
uint32_t  size 
)
friend

Definition at line 229 of file object_graph_copy.cc.

229 {
230 uword tags = 0;
231
241#if defined(HASH_IN_OBJECT_HEADER)
242 tags = UntaggedObject::HashTag::update(0, tags);
243#endif
244 to.untag()->tags_ = tags;
245}
static constexpr uword update(ClassIdTagType value, uword original)
Definition: bitfield.h:188
static constexpr uword update(intptr_t size, uword tag)
Definition: raw_object.h:212
bool IsUnmodifiableTypedDataViewClassId(intptr_t index)
Definition: class_id.h:453
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259

◆ StackFrame

friend class StackFrame
friend

Definition at line 837 of file raw_object.h.

◆ StoreBufferUpdateVisitor

friend class StoreBufferUpdateVisitor
friend

Definition at line 799 of file raw_object.h.

◆ String

friend class String
friend

Definition at line 834 of file raw_object.h.

◆ TagsFromUntaggedObject

uword TagsFromUntaggedObject ( UntaggedObject obj)
friend

Definition at line 224 of file object_graph_copy.cc.

224 {
225 return obj->tags_;
226}

◆ UntaggedInstance

friend class UntaggedInstance
friend

Definition at line 825 of file raw_object.h.

◆ WeakProperty

friend class WeakProperty
friend

Definition at line 835 of file raw_object.h.

◆ WriteBarrierUpdateVisitor

friend class WriteBarrierUpdateVisitor
friend

Definition at line 840 of file raw_object.h.

Member Data Documentation

◆ kBarrierOverlapShift

constexpr intptr_t dart::UntaggedObject::kBarrierOverlapShift = 2
staticconstexpr

Definition at line 184 of file raw_object.h.

◆ kContainsCompressedPointers

constexpr bool dart::UntaggedObject::kContainsCompressedPointers = false
staticconstexprprotected

Definition at line 548 of file raw_object.h.

◆ kContainsPointerFields

constexpr bool dart::UntaggedObject::kContainsPointerFields = false
staticconstexprprotected

Definition at line 550 of file raw_object.h.

◆ kGenerationalBarrierMask

constexpr intptr_t dart::UntaggedObject::kGenerationalBarrierMask
staticconstexpr
Initial value:

Definition at line 181 of file raw_object.h.

◆ kIncrementalBarrierMask

constexpr intptr_t dart::UntaggedObject::kIncrementalBarrierMask = 1 << kNotMarkedBit
staticconstexpr

Definition at line 183 of file raw_object.h.


The documentation for this class was generated from the following files: