Flutter Engine
The Flutter Engine
Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
dart::SuspendState Class Reference

#include <object.h>

Inheritance diagram for dart::SuspendState:
dart::Instance dart::Object

Public Member Functions

uword pc () const
 
intptr_t frame_size () const
 
InstancePtr function_data () const
 
ClosurePtr then_callback () const
 
ClosurePtr error_callback () const
 
CodePtr GetCodeObject () const
 
- Public Member Functions inherited from dart::Instance
virtual bool OperatorEquals (const Instance &other) const
 
bool IsIdenticalTo (const Instance &other) const
 
virtual bool CanonicalizeEquals (const Instance &other) const
 
virtual uint32_t CanonicalizeHash () const
 
intptr_t SizeFromClass () const
 
InstancePtr Canonicalize (Thread *thread) const
 
virtual InstancePtr CanonicalizeLocked (Thread *thread) const
 
virtual void CanonicalizeFieldsLocked (Thread *thread) const
 
InstancePtr CopyShallowToOldSpace (Thread *thread) const
 
ObjectPtr GetField (const Field &field) const
 
void SetField (const Field &field, const Object &value) const
 
AbstractTypePtr GetType (Heap::Space space) const
 
virtual TypeArgumentsPtr GetTypeArguments () const
 
virtual void SetTypeArguments (const TypeArguments &value) const
 
bool IsInstanceOf (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments) const
 
bool IsAssignableTo (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments) const
 
bool IsValidNativeIndex (int index) const
 
intptr_t * NativeFieldsDataAddr () const
 
intptr_t GetNativeField (int index) const
 
void GetNativeFields (uint16_t num_fields, intptr_t *field_values) const
 
void SetNativeFields (uint16_t num_fields, const intptr_t *field_values) const
 
uint16_t NumNativeFields () const
 
void SetNativeField (int index, intptr_t value) const
 
bool IsCallable (Function *function) const
 
ObjectPtr Invoke (const String &selector, const Array &arguments, const Array &argument_names, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr InvokeGetter (const String &selector, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr InvokeSetter (const String &selector, const Instance &argument, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr EvaluateCompiledExpression (const Class &klass, const ExternalTypedData &kernel_buffer, const Array &type_definitions, const Array &arguments, const TypeArguments &type_arguments) const
 
virtual ObjectPtr HashCode () const
 
IntegerPtr IdentityHashCode (Thread *thread) const
 
virtual bool IsPointer () const
 
- Public Member Functions inherited from dart::Object
virtual ~Object ()
 
ObjectPtr ptr () const
 
void operator= (ObjectPtr value)
 
bool IsCanonical () const
 
void SetCanonical () const
 
void ClearCanonical () const
 
bool IsImmutable () const
 
void SetImmutable () const
 
void ClearImmutable () const
 
intptr_t GetClassId () const
 
ClassPtr clazz () const
 
 CLASS_LIST_FOR_HANDLES (DEFINE_CLASS_TESTER)
 
bool IsNull () const
 
virtual const char * ToCString () const
 
void PrintJSON (JSONStream *stream, bool ref=true) const
 
virtual void PrintJSONImpl (JSONStream *stream, bool ref) const
 
void PrintImplementationFields (JSONStream *stream) const
 
virtual void PrintImplementationFieldsImpl (const JSONArray &jsarr_fields) const
 
virtual const char * JSONType () const
 
virtual StringPtr DictionaryName () const
 
bool IsNew () const
 
bool IsOld () const
 
bool InVMIsolateHeap () const
 
void Print () const
 

Static Public Member Functions

static intptr_t HeaderSize ()
 
static intptr_t UnroundedSize (SuspendStatePtr ptr)
 
static intptr_t UnroundedSize (intptr_t frame_capacity)
 
static intptr_t InstanceSize ()
 
static intptr_t InstanceSize (intptr_t frame_capacity)
 
static intptr_t FrameSizeGrowthGap ()
 
static intptr_t frame_capacity_offset ()
 
static intptr_t frame_size_offset ()
 
static intptr_t pc_offset ()
 
static intptr_t function_data_offset ()
 
static intptr_t then_callback_offset ()
 
static intptr_t error_callback_offset ()
 
static intptr_t payload_offset ()
 
static SuspendStatePtr New (intptr_t frame_size, const Instance &function_data, Heap::Space space=Heap::kNew)
 
static SuspendStatePtr Clone (Thread *thread, const SuspendState &src, Heap::Space space=Heap::kNew)
 
- Static Public Member Functions inherited from dart::Instance
static bool NullIsAssignableTo (const AbstractType &other)
 
static bool NullIsAssignableTo (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments)
 
static ObjectPtr EvaluateCompiledExpression (Thread *thread, const Object &receiver, const Library &library, const Class &klass, const ExternalTypedData &kernel_buffer, const Array &type_definitions, const Array &param_values, const TypeArguments &type_param_values)
 
static intptr_t UnroundedSize ()
 
static intptr_t InstanceSize ()
 
static InstancePtr New (const Class &cls, Heap::Space space=Heap::kNew)
 
static InstancePtr NewAlreadyFinalized (const Class &cls, Heap::Space space=Heap::kNew)
 
static intptr_t DataOffsetFor (intptr_t cid)
 
static intptr_t ElementSizeFor (intptr_t cid)
 
static intptr_t NextFieldOffset ()
 
static intptr_t NativeFieldsOffset ()
 
- Static Public Member Functions inherited from dart::Object
static ObjectPtr RawCast (ObjectPtr obj)
 
static constexpr bool ContainsCompressedPointers ()
 
static intptr_t tags_offset ()
 
static ObjectHandle ()
 
static ObjectHandle (Zone *zone)
 
static ObjectHandle (ObjectPtr ptr)
 
static ObjectHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectZoneHandle ()
 
static ObjectZoneHandle (Zone *zone)
 
static ObjectZoneHandle (ObjectPtr ptr)
 
static ObjectZoneHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectReadOnlyHandle ()
 
static ObjectPtr null ()
 
static void set_vm_isolate_snapshot_object_table (const Array &table)
 
static ClassPtr class_class ()
 
static ClassPtr dynamic_class ()
 
static ClassPtr void_class ()
 
static ClassPtr type_parameters_class ()
 
static ClassPtr type_arguments_class ()
 
static ClassPtr patch_class_class ()
 
static ClassPtr function_class ()
 
static ClassPtr closure_data_class ()
 
static ClassPtr ffi_trampoline_data_class ()
 
static ClassPtr field_class ()
 
static ClassPtr script_class ()
 
static ClassPtr library_class ()
 
static ClassPtr namespace_class ()
 
static ClassPtr kernel_program_info_class ()
 
static ClassPtr code_class ()
 
static ClassPtr instructions_class ()
 
static ClassPtr instructions_section_class ()
 
static ClassPtr instructions_table_class ()
 
static ClassPtr object_pool_class ()
 
static ClassPtr pc_descriptors_class ()
 
static ClassPtr code_source_map_class ()
 
static ClassPtr compressed_stackmaps_class ()
 
static ClassPtr var_descriptors_class ()
 
static ClassPtr exception_handlers_class ()
 
static ClassPtr context_class ()
 
static ClassPtr context_scope_class ()
 
static ClassPtr sentinel_class ()
 
static ClassPtr api_error_class ()
 
static ClassPtr language_error_class ()
 
static ClassPtr unhandled_exception_class ()
 
static ClassPtr unwind_error_class ()
 
static ClassPtr singletargetcache_class ()
 
static ClassPtr unlinkedcall_class ()
 
static ClassPtr monomorphicsmiablecall_class ()
 
static ClassPtr icdata_class ()
 
static ClassPtr megamorphic_cache_class ()
 
static ClassPtr subtypetestcache_class ()
 
static ClassPtr loadingunit_class ()
 
static ClassPtr weak_serialization_reference_class ()
 
static ClassPtr weak_array_class ()
 
static void InitNullAndBool (IsolateGroup *isolate_group)
 
static void Init (IsolateGroup *isolate_group)
 
static void InitVtables ()
 
static void FinishInit (IsolateGroup *isolate_group)
 
static void FinalizeVMIsolate (IsolateGroup *isolate_group)
 
static void FinalizeReadOnlyObject (ObjectPtr object)
 
static void Cleanup ()
 
static ErrorPtr Init (IsolateGroup *isolate_group, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
 
static void MakeUnusedSpaceTraversable (const Object &obj, intptr_t original_size, intptr_t used_size)
 
static intptr_t InstanceSize ()
 
template<class FakeObject >
static void VerifyBuiltinVtable (intptr_t cid)
 
static void VerifyBuiltinVtables ()
 
static bool ShouldHaveImmutabilityBitSet (classid_t class_id)
 

Static Public Attributes

static constexpr intptr_t kSuspendStateVarIndex = 0
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 

Friends

class Class
 

Additional Inherited Members

- Public Types inherited from dart::Object
enum  NameVisibility { kInternalName = 0 , kScrubbedName , kUserVisibleName }
 
enum class  NameDisambiguation { kYes , kNo }
 
using UntaggedObjectType = UntaggedObject
 
using ObjectPtrType = ObjectPtr
 
- Protected Member Functions inherited from dart::Instance
virtual void PrintSharedInstanceJSON (JSONObject *jsobj, bool ref, bool include_id=true) const
 
- Protected Member Functions inherited from dart::Object
 Object ()
 
uword raw_value () const
 
void setPtr (ObjectPtr value, intptr_t default_cid)
 
void CheckHandle () const
 
cpp_vtable vtable () const
 
void set_vtable (cpp_vtable value)
 
bool Contains (uword addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
type LoadPointer (type const *addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StorePointer (type const *addr, type value) const
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void StoreCompressedPointer (compressed_type const *addr, type value) const
 
template<typename type >
void StorePointerUnaligned (type const *addr, type value, Thread *thread) const
 
void StoreSmi (SmiPtr const *addr, SmiPtr value) const
 
template<typename FieldType >
void StoreSimd128 (const FieldType *addr, simd128_value_t value) const
 
template<typename FieldType >
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , std::memory_order order>
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , typename ValueType >
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType , typename ValueType , std::memory_order order>
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType >
FieldType * UnsafeMutableNonPointer (const FieldType *addr) const
 
 CLASS_LIST (STORE_NON_POINTER_ILLEGAL_TYPE)
 
void UnimplementedMethod () const
 
void AddCommonObjectProperties (JSONObject *jsobj, const char *protocol_type, bool ref) const
 
- Static Protected Member Functions inherited from dart::Object
static DART_NOINLINE ObjectHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectZoneHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectReadOnlyHandleImpl (intptr_t cid)
 
static ObjectPtr Allocate (intptr_t cls_id, intptr_t size, Heap::Space space, bool compressed, uword ptr_field_start_offset, uword ptr_field_end_offset)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space, intptr_t elements)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space, intptr_t elements)
 
static constexpr intptr_t RoundedAllocationSize (intptr_t size)
 
static ObjectPtr Clone (const Object &orig, Heap::Space space, bool load_with_relaxed_atomics=false)
 
template<typename T >
static DART_FORCE_INLINE uword from_offset ()
 
template<typename T >
static DART_FORCE_INLINE uword to_offset (intptr_t length=0)
 
- Protected Attributes inherited from dart::Object
ObjectPtr ptr_
 

Detailed Description

Definition at line 12614 of file object.h.

Member Function Documentation

◆ Clone()

SuspendStatePtr dart::SuspendState::Clone ( Thread thread,
const SuspendState src,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 26532 of file object.cc.

26534 {
26535 ASSERT(src.pc() != 0);
26536 Zone* zone = thread->zone();
26537 const intptr_t frame_size = src.frame_size();
26538 const SuspendState& dst = SuspendState::Handle(
26539 zone,
26540 SuspendState::New(frame_size, Instance::Handle(zone, src.function_data()),
26541 space));
26542 dst.set_then_callback(Closure::Handle(zone, src.then_callback()));
26543 dst.set_error_callback(Closure::Handle(zone, src.error_callback()));
26544 {
26545 NoSafepointScope no_safepoint;
26546 memmove(dst.payload(), src.payload(), frame_size);
26547 // Update value of :suspend_state variable in the copied frame.
26548 const uword fp = reinterpret_cast<uword>(dst.payload() + frame_size);
26549 *reinterpret_cast<ObjectPtr*>(
26551 kSuspendStateVarIndex))) = dst.ptr();
26552 dst.set_pc(src.pc());
26553 // Trigger write barrier if needed.
26554 if (dst.ptr()->IsOldObject()) {
26555 dst.untag()->EnsureInRememberedSet(thread);
26556 }
26557 if (thread->is_marking()) {
26558 thread->DeferredMarkingStackAddObject(dst.ptr());
26559 }
26560 }
26561 return dst.ptr();
26562}
static Object & Handle()
Definition: object.h:407
static constexpr intptr_t kSuspendStateVarIndex
Definition: object.h:12617
static SuspendStatePtr New(intptr_t frame_size, const Instance &function_data, Heap::Space space=Heap::kNew)
Definition: object.cc:26508
intptr_t frame_size() const
Definition: object.h:12675
#define ASSERT(E)
uintptr_t uword
Definition: globals.h:501
const uint32_t fp
FrameLayout runtime_frame_layout
Definition: stack_frame.cc:81
static DART_FORCE_INLINE uword LocalVarAddress(uword fp, intptr_t index)
Definition: stack_frame.h:429
dst
Definition: cp.py:12
intptr_t FrameSlotForVariableIndex(intptr_t index) const
Definition: stack_frame.cc:89

◆ error_callback()

ClosurePtr dart::SuspendState::error_callback ( ) const
inline

Definition at line 12681 of file object.h.

12681{ return untag()->error_callback(); }
raw_obj untag() -> num_entries()) VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(TypedData, TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(Record, RecordShape(raw_obj->untag() ->shape()).num_fields()) VARIABLE_NULL_VISITOR(CompressedStackMaps, CompressedStackMaps::PayloadSizeOf(raw_obj)) VARIABLE_NULL_VISITOR(OneByteString, Smi::Value(raw_obj->untag() ->length())) VARIABLE_NULL_VISITOR(TwoByteString, Smi::Value(raw_obj->untag() ->length())) intptr_t UntaggedField::VisitFieldPointers(FieldPtr raw_obj, ObjectPointerVisitor *visitor)
Definition: raw_object.cc:558

◆ error_callback_offset()

static intptr_t dart::SuspendState::error_callback_offset ( )
inlinestatic

Definition at line 12656 of file object.h.

12656 {
12657 return OFFSET_OF(UntaggedSuspendState, error_callback_);
12658 }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ frame_capacity_offset()

static intptr_t dart::SuspendState::frame_capacity_offset ( )
inlinestatic

Definition at line 12642 of file object.h.

12642 {
12643 return OFFSET_OF(UntaggedSuspendState, frame_capacity_);
12644 }

◆ frame_size()

intptr_t dart::SuspendState::frame_size ( ) const
inline

Definition at line 12675 of file object.h.

12675{ return untag()->frame_size_; }

◆ frame_size_offset()

static intptr_t dart::SuspendState::frame_size_offset ( )
inlinestatic

Definition at line 12646 of file object.h.

12646 {
12647 return OFFSET_OF(UntaggedSuspendState, frame_size_);
12648 }

◆ FrameSizeGrowthGap()

static intptr_t dart::SuspendState::FrameSizeGrowthGap ( )
inlinestatic

Definition at line 12637 of file object.h.

12637 {
12639 }
#define NOT_IN_PRECOMPILED(code)
Definition: globals.h:100
#define ONLY_IN_PRECOMPILED(code)
Definition: globals.h:101

◆ function_data()

InstancePtr dart::SuspendState::function_data ( ) const
inline

Definition at line 12677 of file object.h.

12677{ return untag()->function_data(); }

◆ function_data_offset()

static intptr_t dart::SuspendState::function_data_offset ( )
inlinestatic

Definition at line 12650 of file object.h.

12650 {
12651 return OFFSET_OF(UntaggedSuspendState, function_data_);
12652 }

◆ GetCodeObject()

CodePtr dart::SuspendState::GetCodeObject ( ) const

Definition at line 26596 of file object.cc.

26596 {
26597 ASSERT(pc() != 0);
26598#if defined(DART_PRECOMPILED_RUNTIME)
26599 NoSafepointScope no_safepoint;
26601 /*is_return_address=*/true);
26602 ASSERT(code != Code::null());
26603 return code;
26604#else
26605 ObjectPtr code = *(reinterpret_cast<ObjectPtr*>(
26606 untag()->payload() + untag()->frame_size_ +
26608 return Code::RawCast(code);
26609#endif // defined(DART_PRECOMPILED_RUNTIME)
26610}
static IsolateGroup * Current()
Definition: isolate.h:539
static ObjectPtr null()
Definition: object.h:433
static ObjectPtr RawCast(ObjectPtr obj)
Definition: object.h:325
static CodePtr Lookup(IsolateGroup *group, uword pc, bool is_return_address)
uword pc() const
Definition: object.h:12673
constexpr intptr_t kWordSize
Definition: globals.h:509
intptr_t code_from_fp
Definition: frame_layout.h:52

◆ HeaderSize()

static intptr_t dart::SuspendState::HeaderSize ( )
inlinestatic

Definition at line 12619 of file object.h.

12619{ return sizeof(UntaggedSuspendState); }

◆ InstanceSize() [1/2]

static intptr_t dart::SuspendState::InstanceSize ( )
inlinestatic

Definition at line 12626 of file object.h.

12626 {
12627 ASSERT_EQUAL(sizeof(UntaggedSuspendState),
12628 OFFSET_OF_RETURNED_VALUE(UntaggedSuspendState, payload));
12629 return 0;
12630 }
#define ASSERT_EQUAL(expected, actual)
Definition: assert.h:309
#define OFFSET_OF_RETURNED_VALUE(type, accessor)
Definition: globals.h:143

◆ InstanceSize() [2/2]

static intptr_t dart::SuspendState::InstanceSize ( intptr_t  frame_capacity)
inlinestatic

Definition at line 12631 of file object.h.

12631 {
12632 return RoundedAllocationSize(UnroundedSize(frame_capacity));
12633 }
static intptr_t UnroundedSize()
Definition: object.h:8336
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ New()

SuspendStatePtr dart::SuspendState::New ( intptr_t  frame_size,
const Instance function_data,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 26508 of file object.cc.

26510 {
26511 ASSERT(frame_size >= 0);
26512 const intptr_t num_elements = frame_size + SuspendState::FrameSizeGrowthGap();
26513#if !defined(DART_PRECOMPILED_RUNTIME)
26514 // Include heap object alignment overhead into the frame capacity.
26515 const intptr_t instance_size = SuspendState::InstanceSize(num_elements);
26516 const intptr_t frame_capacity =
26517 instance_size - SuspendState::payload_offset();
26518 ASSERT(SuspendState::InstanceSize(frame_capacity) == instance_size);
26519 ASSERT(frame_size <= frame_capacity);
26520#endif
26521 auto raw = Object::Allocate<SuspendState>(space, num_elements);
26522 NoSafepointScope no_safepoint;
26523 ASSERT_EQUAL(raw->untag()->pc_, 0);
26524#if !defined(DART_PRECOMPILED_RUNTIME)
26525 raw->untag()->frame_capacity_ = frame_capacity;
26526#endif
26527 raw->untag()->frame_size_ = frame_size;
26528 raw->untag()->set_function_data(function_data.ptr());
26529 return raw;
26530}
static intptr_t FrameSizeGrowthGap()
Definition: object.h:12637
static intptr_t payload_offset()
Definition: object.h:12659
static intptr_t InstanceSize()
Definition: object.h:12626
InstancePtr function_data() const
Definition: object.h:12677

◆ payload_offset()

static intptr_t dart::SuspendState::payload_offset ( )
inlinestatic

Definition at line 12659 of file object.h.

12659 {
12661 }
static intptr_t payload_offset()
Definition: raw_object.h:3511

◆ pc()

uword dart::SuspendState::pc ( ) const
inline

Definition at line 12673 of file object.h.

12673{ return untag()->pc_; }

◆ pc_offset()

static intptr_t dart::SuspendState::pc_offset ( )
inlinestatic

Definition at line 12649 of file object.h.

12649{ return OFFSET_OF(UntaggedSuspendState, pc_); }

◆ then_callback()

ClosurePtr dart::SuspendState::then_callback ( ) const
inline

Definition at line 12679 of file object.h.

12679{ return untag()->then_callback(); }

◆ then_callback_offset()

static intptr_t dart::SuspendState::then_callback_offset ( )
inlinestatic

Definition at line 12653 of file object.h.

12653 {
12654 return OFFSET_OF(UntaggedSuspendState, then_callback_);
12655 }

◆ UnroundedSize() [1/2]

static intptr_t dart::SuspendState::UnroundedSize ( intptr_t  frame_capacity)
inlinestatic

Definition at line 12623 of file object.h.

12623 {
12624 return HeaderSize() + frame_capacity;
12625 }
static intptr_t HeaderSize()
Definition: object.h:12619

◆ UnroundedSize() [2/2]

static intptr_t dart::SuspendState::UnroundedSize ( SuspendStatePtr  ptr)
inlinestatic

Definition at line 12620 of file object.h.

12620 {
12621 return UnroundedSize(ptr->untag()->frame_capacity());
12622 }
UntaggedObject * untag() const
ObjectPtr ptr() const
Definition: object.h:332

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 12699 of file object.h.

Member Data Documentation

◆ kSuspendStateVarIndex

constexpr intptr_t dart::SuspendState::kSuspendStateVarIndex = 0
staticconstexpr

Definition at line 12617 of file object.h.


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