Flutter Engine
The Flutter Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
dart::Context Class Reference

#include <object.h>

Inheritance diagram for dart::Context:
dart::Object

Classes

struct  ArrayTraits
 

Public Member Functions

ContextPtr parent () const
 
void set_parent (const Context &parent) const
 
intptr_t num_variables () const
 
ObjectPtr At (intptr_t context_index) const
 
void SetAt (intptr_t context_index, const Object &value) const
 
intptr_t GetLevel () const
 
void Dump (int indent=0) 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 parent_offset ()
 
static intptr_t num_variables_offset ()
 
static intptr_t NumVariables (const ContextPtr context)
 
static intptr_t variable_offset (intptr_t context_index)
 
static bool IsValidLength (intptr_t len)
 
static intptr_t InstanceSize ()
 
static intptr_t InstanceSize (intptr_t len)
 
static ContextPtr New (intptr_t num_variables, Heap::Space space=Heap::kNew)
 
- 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 kBytesPerElement = kCompressedWordSize
 
static constexpr intptr_t kMaxElements = kSmiMax / kBytesPerElement
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 

Friends

class Class
 
class Object
 

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::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 7404 of file object.h.

Member Function Documentation

◆ At()

ObjectPtr dart::Context::At ( intptr_t  context_index) const
inline

Definition at line 7422 of file object.h.

7422 {
7423 return untag()->element(context_index);
7424 }
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

◆ Dump()

void Context::Dump ( int  indent = 0) const

Definition at line 18548 of file object.cc.

18548 {
18549 if (IsNull()) {
18550 IndentN(indent);
18551 THR_Print("Context@null\n");
18552 return;
18553 }
18554
18555 IndentN(indent);
18556 THR_Print("Context vars(%" Pd ") {\n", num_variables());
18557 Object& obj = Object::Handle();
18558 for (intptr_t i = 0; i < num_variables(); i++) {
18559 IndentN(indent + 2);
18560 obj = At(i);
18561 const char* s = obj.ToCString();
18562 if (strlen(s) > 50) {
18563 THR_Print("[%" Pd "] = [first 50 chars:] %.50s...\n", i, s);
18564 } else {
18565 THR_Print("[%" Pd "] = %s\n", i, s);
18566 }
18567 }
18568
18569 const Context& parent_ctx = Context::Handle(parent());
18570 if (!parent_ctx.IsNull()) {
18571 parent_ctx.Dump(indent + 2);
18572 }
18573 IndentN(indent);
18574 THR_Print("}\n");
18575}
friend class Object
Definition: object.h:7469
ObjectPtr At(intptr_t context_index) const
Definition: object.h:7422
intptr_t num_variables() const
Definition: object.h:7414
ContextPtr parent() const
Definition: object.h:7406
bool IsNull() const
Definition: object.h:363
static Object & Handle()
Definition: object.h:407
#define THR_Print(format,...)
Definition: log.h:20
struct MyStruct s
static void IndentN(int count)
Definition: object.cc:18542
#define Pd
Definition: globals.h:408

◆ GetLevel()

intptr_t Context::GetLevel ( ) const

Definition at line 18501 of file object.cc.

18501 {
18502 intptr_t level = 0;
18503 Context& parent_ctx = Context::Handle(parent());
18504 while (!parent_ctx.IsNull()) {
18505 level++;
18506 parent_ctx = parent_ctx.parent();
18507 }
18508 return level;
18509}

◆ InstanceSize() [1/2]

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

Definition at line 7448 of file object.h.

7448 {
7449 ASSERT(sizeof(UntaggedContext) ==
7450 OFFSET_OF_RETURNED_VALUE(UntaggedContext, data));
7451 return 0;
7452 }
#define ASSERT(E)
static int8_t data[kExtLength]
#define OFFSET_OF_RETURNED_VALUE(type, accessor)
Definition: globals.h:143

◆ InstanceSize() [2/2]

static intptr_t dart::Context::InstanceSize ( intptr_t  len)
inlinestatic

Definition at line 7454 of file object.h.

7454 {
7456 return RoundedAllocationSize(sizeof(UntaggedContext) +
7457 (len * kBytesPerElement));
7458 }
static bool IsValidLength(intptr_t len)
Definition: object.h:7444
static constexpr intptr_t kBytesPerElement
Definition: object.h:7431
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ IsValidLength()

static bool dart::Context::IsValidLength ( intptr_t  len)
inlinestatic

Definition at line 7444 of file object.h.

7444 {
7446 }
static const word kMaxElements
Definition: runtime_api.h:1462

◆ New()

ContextPtr Context::New ( intptr_t  num_variables,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 18511 of file object.cc.

18511 {
18512 ASSERT(num_variables >= 0);
18514
18516 // This should be caught before we reach here.
18517 FATAL("Fatal error in Context::New: invalid num_variables %" Pd "\n",
18519 }
18520 auto raw = Object::Allocate<Context>(space, num_variables);
18521 NoSafepointScope no_safepoint;
18522 raw->untag()->num_variables_ = num_variables;
18523 return raw;
18524}
static ObjectPtr null()
Definition: object.h:433
static ClassPtr context_class()
Definition: object.h:549
#define FATAL(error)

◆ num_variables()

intptr_t dart::Context::num_variables ( ) const
inline

Definition at line 7414 of file object.h.

7414{ return untag()->num_variables_; }

◆ num_variables_offset()

static intptr_t dart::Context::num_variables_offset ( )
inlinestatic

Definition at line 7415 of file object.h.

7415 {
7416 return OFFSET_OF(UntaggedContext, num_variables_);
7417 }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ NumVariables()

static intptr_t dart::Context::NumVariables ( const ContextPtr  context)
inlinestatic

Definition at line 7418 of file object.h.

7418 {
7419 return context->untag()->num_variables_;
7420 }

◆ parent()

ContextPtr dart::Context::parent ( ) const
inline

Definition at line 7406 of file object.h.

7406{ return untag()->parent(); }

◆ parent_offset()

static intptr_t dart::Context::parent_offset ( )
inlinestatic

Definition at line 7410 of file object.h.

7410 {
7411 return OFFSET_OF(UntaggedContext, parent_);
7412 }

◆ set_parent()

void dart::Context::set_parent ( const Context parent) const
inline

Definition at line 7407 of file object.h.

7407 {
7408 untag()->set_parent(parent.ptr());
7409 }

◆ SetAt()

void Context::SetAt ( intptr_t  context_index,
const Object value 
) const
inline

Definition at line 13303 of file object.h.

13303 {
13304 untag()->set_element(index, value.ptr());
13305}
uint8_t value

◆ variable_offset()

static intptr_t dart::Context::variable_offset ( intptr_t  context_index)
inlinestatic

Definition at line 7439 of file object.h.

7439 {
7440 return OFFSET_OF_RETURNED_VALUE(UntaggedContext, data) +
7441 (kBytesPerElement * context_index);
7442 }

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 7468 of file object.h.

◆ Object

friend class Object
friend

Definition at line 7469 of file object.h.

Member Data Documentation

◆ kBytesPerElement

constexpr intptr_t dart::Context::kBytesPerElement = kCompressedWordSize
staticconstexpr

Definition at line 7431 of file object.h.

◆ kMaxElements

constexpr intptr_t dart::Context::kMaxElements = kSmiMax / kBytesPerElement
staticconstexpr

Definition at line 7432 of file object.h.


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