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

#include <object.h>

Inheritance diagram for dart::TypeParameters:
dart::Object

Public Member Functions

intptr_t Length () const
 
StringPtr NameAt (intptr_t index) const
 
void SetNameAt (intptr_t index, const String &value) const
 
AbstractTypePtr BoundAt (intptr_t index) const
 
void SetBoundAt (intptr_t index, const AbstractType &value) const
 
bool AllDynamicBounds () const
 
AbstractTypePtr DefaultAt (intptr_t index) const
 
void SetDefaultAt (intptr_t index, const AbstractType &value) const
 
bool AllDynamicDefaults () const
 
bool IsGenericCovariantImplAt (intptr_t index) const
 
void SetIsGenericCovariantImplAt (intptr_t index, bool value) const
 
 COMPILE_ASSERT (kFlagsPerSmi< kSmiBits)
 
void Print (Thread *thread, Zone *zone, bool are_class_type_parameters, intptr_t base, NameVisibility name_visibility, BaseTextBuffer *printer) 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 names_offset ()
 
static intptr_t flags_offset ()
 
static intptr_t bounds_offset ()
 
static intptr_t defaults_offset ()
 
static intptr_t InstanceSize ()
 
static TypeParametersPtr New (Heap::Space space=Heap::kOld)
 
static TypeParametersPtr New (intptr_t count, Heap::Space space=Heap::kOld)
 
- 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 kFlagsPerSmiShift = kBitsPerWordLog2 - 1
 
static constexpr intptr_t kFlagsPerSmi = 1LL << kFlagsPerSmiShift
 
static constexpr intptr_t kFlagsPerSmiMask = kFlagsPerSmi - 1
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 

Friends

class Class
 
class ClassFinalizer
 
class FlowGraphSerializer
 
class FlowGraphDeserializer
 
class Function
 
class FunctionType
 
class Object
 
class Precompiler
 
class Type
 

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

Member Function Documentation

◆ AllDynamicBounds()

bool dart::TypeParameters::AllDynamicBounds ( ) const

Definition at line 6605 of file object.cc.

6605 {
6606 return bounds() == TypeArguments::null();
6607}
static ObjectPtr null()
Definition: object.h:433

◆ AllDynamicDefaults()

bool dart::TypeParameters::AllDynamicDefaults ( ) const

Definition at line 6626 of file object.cc.

6626 {
6627 return defaults() == TypeArguments::null();
6628}

◆ BoundAt()

AbstractTypePtr dart::TypeParameters::BoundAt ( intptr_t  index) const

Definition at line 6593 of file object.cc.

6593 {
6594 const TypeArguments& upper_bounds = TypeArguments::Handle(bounds());
6595 return upper_bounds.IsNull() ? Type::DynamicType()
6596 : upper_bounds.TypeAt(index);
6597}
static Object & Handle()
Definition: object.h:407
static TypePtr DynamicType()

◆ bounds_offset()

static intptr_t dart::TypeParameters::bounds_offset ( )
inlinestatic

Definition at line 8503 of file object.h.

8503 {
8504 return OFFSET_OF(UntaggedTypeParameters, bounds_);
8505 }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ COMPILE_ASSERT()

dart::TypeParameters::COMPILE_ASSERT ( )

◆ DefaultAt()

AbstractTypePtr dart::TypeParameters::DefaultAt ( intptr_t  index) const

Definition at line 6614 of file object.cc.

6614 {
6615 const TypeArguments& default_type_args = TypeArguments::Handle(defaults());
6616 return default_type_args.IsNull() ? Type::DynamicType()
6617 : default_type_args.TypeAt(index);
6618}

◆ defaults_offset()

static intptr_t dart::TypeParameters::defaults_offset ( )
inlinestatic

Definition at line 8510 of file object.h.

8510 {
8511 return OFFSET_OF(UntaggedTypeParameters, defaults_);
8512 }

◆ flags_offset()

static intptr_t dart::TypeParameters::flags_offset ( )
inlinestatic

Definition at line 8499 of file object.h.

8499 {
8500 return OFFSET_OF(UntaggedTypeParameters, flags_);
8501 }

◆ InstanceSize()

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

Definition at line 8540 of file object.h.

8540 {
8541 return RoundedAllocationSize(sizeof(UntaggedTypeParameters));
8542 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ IsGenericCovariantImplAt()

bool dart::TypeParameters::IsGenericCovariantImplAt ( intptr_t  index) const

Definition at line 6652 of file object.cc.

6652 {
6653 if (untag()->flags() == Array::null()) return false;
6654 const intptr_t flag = Smi::Value(
6655 Smi::RawCast(Array::Handle(flags()).At(index >> kFlagsPerSmiShift)));
6656 return (flag >> (index & kFlagsPerSmiMask)) != 0;
6657}
static ObjectPtr RawCast(ObjectPtr obj)
Definition: object.h:325
intptr_t Value() const
Definition: object.h:9990
static constexpr intptr_t kFlagsPerSmiShift
Definition: object.h:8525
static constexpr intptr_t kFlagsPerSmiMask
Definition: object.h:8531
FlutterSemanticsFlag flag
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

◆ Length()

intptr_t dart::TypeParameters::Length ( ) const

Definition at line 6564 of file object.cc.

6564 {
6565 if (IsNull() || untag()->names() == Array::null()) return 0;
6566 return Smi::Value(untag()->names()->untag()->length());
6567}
bool IsNull() const
Definition: object.h:363
size_t length

◆ NameAt()

StringPtr dart::TypeParameters::NameAt ( intptr_t  index) const

Definition at line 6574 of file object.cc.

6574 {
6575 const Array& names_array = Array::Handle(names());
6576 return String::RawCast(names_array.At(index));
6577}

◆ names_offset()

static intptr_t dart::TypeParameters::names_offset ( )
inlinestatic

Definition at line 8493 of file object.h.

8493 {
8494 return OFFSET_OF(UntaggedTypeParameters, names_);
8495 }

◆ New() [1/2]

TypeParametersPtr dart::TypeParameters::New ( Heap::Space  space = Heap::kOld)
static

Definition at line 6723 of file object.cc.

6723 {
6725 return Object::Allocate<TypeParameters>(space);
6726}
static ClassPtr type_parameters_class()
Definition: object.h:516
#define ASSERT(E)

◆ New() [2/2]

TypeParametersPtr dart::TypeParameters::New ( intptr_t  count,
Heap::Space  space = Heap::kOld 
)
static

Definition at line 6728 of file object.cc.

6728 {
6729 const TypeParameters& result =
6731 // Create an [ Array ] of [ String ] objects to represent the names.
6732 // Create a [ TypeArguments ] vector representing the bounds.
6733 // Create a [ TypeArguments ] vector representing the defaults.
6734 // Create an [ Array ] of [ Smi] objects to represent the flags.
6735 const Array& names_array = Array::Handle(Array::New(count, space));
6736 result.set_names(names_array);
6737 TypeArguments& type_args = TypeArguments::Handle();
6738 type_args = TypeArguments::New(count, Heap::kNew); // Will get canonicalized.
6739 result.set_bounds(type_args);
6740 type_args = TypeArguments::New(count, Heap::kNew); // Will get canonicalized.
6741 result.set_defaults(type_args);
6742 result.AllocateFlags(space); // Will get optimized.
6743 return result.ptr();
6744}
int count
Definition: FontMgrTest.cpp:50
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition: object.h:10959
@ kNew
Definition: heap.h:38
static TypeArgumentsPtr New(intptr_t len, Heap::Space space=Heap::kOld)
Definition: object.cc:7675
static TypeParametersPtr New(Heap::Space space=Heap::kOld)
Definition: object.cc:6723
GAsyncResult * result

◆ Print()

void dart::TypeParameters::Print ( Thread thread,
Zone zone,
bool  are_class_type_parameters,
intptr_t  base,
NameVisibility  name_visibility,
BaseTextBuffer printer 
) const

Definition at line 6671 of file object.cc.

6676 {
6677 String& name = String::Handle(zone);
6678 AbstractType& type = AbstractType::Handle(zone);
6679 const intptr_t num_type_params = Length();
6680 for (intptr_t i = 0; i < num_type_params; i++) {
6681 if (are_class_type_parameters) {
6682 name = NameAt(i);
6683 printer->AddString(name.ToCString());
6684 } else {
6685 printer->AddString(TypeParameter::CanonicalNameCString(
6686 are_class_type_parameters, base, base + i));
6687 }
6688 if (FLAG_show_internal_names || !AllDynamicBounds()) {
6689 type = BoundAt(i);
6690 // Do not print default bound.
6691 if (!type.IsNull() && (FLAG_show_internal_names || !type.IsObjectType() ||
6692 type.IsNonNullable())) {
6693 printer->AddString(" extends ");
6694 type.PrintName(name_visibility, printer);
6695 if (FLAG_show_internal_names && !AllDynamicDefaults()) {
6696 type = DefaultAt(i);
6697 if (!type.IsNull() &&
6698 (FLAG_show_internal_names || !type.IsDynamicType())) {
6699 printer->AddString(" defaults to ");
6700 type.PrintName(name_visibility, printer);
6701 }
6702 }
6703 }
6704 }
6705 if (i != num_type_params - 1) {
6706 printer->AddString(", ");
6707 }
6708 }
6709}
GLenum type
const char * CanonicalNameCString() const
Definition: object.h:9869
intptr_t Length() const
Definition: object.cc:6564
StringPtr NameAt(intptr_t index) const
Definition: object.cc:6574
AbstractTypePtr DefaultAt(intptr_t index) const
Definition: object.cc:6614
bool AllDynamicDefaults() const
Definition: object.cc:6626
bool AllDynamicBounds() const
Definition: object.cc:6605
AbstractTypePtr BoundAt(intptr_t index) const
Definition: object.cc:6593
const char *const name

◆ SetBoundAt()

void dart::TypeParameters::SetBoundAt ( intptr_t  index,
const AbstractType value 
) const

Definition at line 6599 of file object.cc.

6600 {
6601 const TypeArguments& upper_bounds = TypeArguments::Handle(bounds());
6602 upper_bounds.SetTypeAt(index, value);
6603}
uint8_t value

◆ SetDefaultAt()

void dart::TypeParameters::SetDefaultAt ( intptr_t  index,
const AbstractType value 
) const

Definition at line 6620 of file object.cc.

6621 {
6622 const TypeArguments& default_type_args = TypeArguments::Handle(defaults());
6623 default_type_args.SetTypeAt(index, value);
6624}

◆ SetIsGenericCovariantImplAt()

void dart::TypeParameters::SetIsGenericCovariantImplAt ( intptr_t  index,
bool  value 
) const

Definition at line 6659 of file object.cc.

6660 {
6661 const Array& flg = Array::Handle(flags());
6662 intptr_t flag = Smi::Value(Smi::RawCast(flg.At(index >> kFlagsPerSmiShift)));
6663 if (value) {
6664 flag |= 1 << (index % kFlagsPerSmiMask);
6665 } else {
6666 flag &= ~(1 << (index % kFlagsPerSmiMask));
6667 }
6668 flg.SetAt(index >> kFlagsPerSmiShift, Smi::Handle(Smi::New(flag)));
6669}
static SmiPtr New(intptr_t value)
Definition: object.h:10006

◆ SetNameAt()

void dart::TypeParameters::SetNameAt ( intptr_t  index,
const String value 
) const

Definition at line 6579 of file object.cc.

6579 {
6580 const Array& names_array = Array::Handle(names());
6581 names_array.SetAt(index, value);
6582}

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 8563 of file object.h.

◆ ClassFinalizer

friend class ClassFinalizer
friend

Definition at line 8564 of file object.h.

◆ FlowGraphDeserializer

friend class FlowGraphDeserializer
friend

Definition at line 8566 of file object.h.

◆ FlowGraphSerializer

friend class FlowGraphSerializer
friend

Definition at line 8565 of file object.h.

◆ Function

friend class Function
friend

Definition at line 8567 of file object.h.

◆ FunctionType

friend class FunctionType
friend

Definition at line 8568 of file object.h.

◆ Object

friend class Object
friend

Definition at line 8569 of file object.h.

◆ Precompiler

friend class Precompiler
friend

Definition at line 8570 of file object.h.

◆ Type

friend class Type
friend

Definition at line 8571 of file object.h.

Member Data Documentation

◆ kFlagsPerSmi

constexpr intptr_t dart::TypeParameters::kFlagsPerSmi = 1LL << kFlagsPerSmiShift
staticconstexpr

Definition at line 8529 of file object.h.

◆ kFlagsPerSmiMask

constexpr intptr_t dart::TypeParameters::kFlagsPerSmiMask = kFlagsPerSmi - 1
staticconstexpr

Definition at line 8531 of file object.h.

◆ kFlagsPerSmiShift

constexpr intptr_t dart::TypeParameters::kFlagsPerSmiShift = kBitsPerWordLog2 - 1
staticconstexpr

Definition at line 8525 of file object.h.


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