Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Friends | List of all members
dart::GrowableObjectArray Class Reference

#include <object.h>

Inheritance diagram for dart::GrowableObjectArray:
dart::Instance dart::Object

Public Member Functions

intptr_t Capacity () const
 
intptr_t Length () const
 
void SetLength (intptr_t value) const
 
ArrayPtr data () const
 
void SetData (const Array &value) const
 
ObjectPtr At (intptr_t index) const
 
void SetAt (intptr_t index, const Object &value) const
 
void Add (const Object &value, Heap::Space space=Heap::kNew) const
 
void Grow (intptr_t new_capacity, Heap::Space space=Heap::kNew) const
 
ObjectPtr RemoveLast () const
 
virtual TypeArgumentsPtr GetTypeArguments () const
 
virtual void SetTypeArguments (const TypeArguments &value) const
 
virtual bool CanonicalizeEquals (const Instance &other) const
 
virtual InstancePtr CanonicalizeLocked (Thread *thread) const
 
- Public Member Functions inherited from dart::Instance
virtual bool OperatorEquals (const Instance &other) const
 
bool IsIdenticalTo (const Instance &other) const
 
virtual uint32_t CanonicalizeHash () const
 
intptr_t SizeFromClass () const
 
InstancePtr Canonicalize (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
 
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 type_arguments_offset ()
 
static intptr_t length_offset ()
 
static intptr_t data_offset ()
 
static intptr_t InstanceSize ()
 
static GrowableObjectArrayPtr New (Heap::Space space=Heap::kNew)
 
static GrowableObjectArrayPtr New (intptr_t capacity, Heap::Space space=Heap::kNew)
 
static GrowableObjectArrayPtr New (const Array &array, Heap::Space space=Heap::kNew)
 
static SmiPtr NoSafepointLength (const GrowableObjectArrayPtr array)
 
static ArrayPtr NoSafepointData (const GrowableObjectArrayPtr array)
 
- 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)
 

Friends

class Array
 
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
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 
- 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 11039 of file object.h.

Member Function Documentation

◆ Add()

void dart::GrowableObjectArray::Add ( const Object value,
Heap::Space  space = Heap::kNew 
) const

Definition at line 25070 of file object.cc.

25070 {
25071 ASSERT(!IsNull());
25072 if (Length() == Capacity()) {
25073 // Grow from 0 to 3, and then double + 1.
25074 intptr_t new_capacity = (Capacity() * 2) | 3;
25075 if (new_capacity <= Capacity()) {
25077 UNREACHABLE();
25078 }
25079 Grow(new_capacity, space);
25080 }
25081 ASSERT(Length() < Capacity());
25082 intptr_t index = Length();
25083 SetLength(index + 1);
25084 SetAt(index, value);
25085}
#define UNREACHABLE()
Definition assert.h:248
static DART_NORETURN void ThrowOOM()
void SetLength(intptr_t value) const
Definition object.h:11050
intptr_t Length() const
Definition object.h:11046
void SetAt(intptr_t index, const Object &value) const
Definition object.h:11065
intptr_t Capacity() const
Definition object.h:11041
void Grow(intptr_t new_capacity, Heap::Space space=Heap::kNew) const
Definition object.cc:25087
bool IsNull() const
Definition object.h:363
#define ASSERT(E)

◆ At()

ObjectPtr dart::GrowableObjectArray::At ( intptr_t  index) const
inline

Definition at line 11059 of file object.h.

11059 {
11060 NoSafepointScope no_safepoint;
11061 ASSERT(!IsNull());
11062 ASSERT(index < Length());
11063 return data()->untag()->element(index);
11064 }
ArrayPtr data() const
Definition object.h:11056

◆ CanonicalizeEquals()

virtual bool dart::GrowableObjectArray::CanonicalizeEquals ( const Instance other) const
inlinevirtual

Reimplemented from dart::Instance.

Definition at line 11092 of file object.h.

11092 {
11093 UNREACHABLE();
11094 return false;
11095 }

◆ CanonicalizeLocked()

virtual InstancePtr dart::GrowableObjectArray::CanonicalizeLocked ( Thread thread) const
inlinevirtual

Reimplemented from dart::Instance.

Definition at line 11098 of file object.h.

11098 {
11099 UNREACHABLE();
11100 return Instance::null();
11101 }
static ObjectPtr null()
Definition object.h:433

◆ Capacity()

intptr_t dart::GrowableObjectArray::Capacity ( ) const
inline

Definition at line 11041 of file object.h.

11041 {
11042 NoSafepointScope no_safepoint;
11043 ASSERT(!IsNull());
11044 return Smi::Value(DataArray()->length());
11045 }
intptr_t Value() const
Definition object.h:9969
size_t length

◆ data()

ArrayPtr dart::GrowableObjectArray::data ( ) const
inline

Definition at line 11056 of file object.h.

11056{ return untag()->data(); }
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)

◆ data_offset()

static intptr_t dart::GrowableObjectArray::data_offset ( )
inlinestatic

Definition at line 11110 of file object.h.

11110 {
11111 return OFFSET_OF(UntaggedGrowableObjectArray, data_);
11112 }
#define OFFSET_OF(type, field)
Definition globals.h:138

◆ GetTypeArguments()

virtual TypeArgumentsPtr dart::GrowableObjectArray::GetTypeArguments ( ) const
inlinevirtual

Reimplemented from dart::Instance.

Definition at line 11078 of file object.h.

11078 {
11079 return untag()->type_arguments();
11080 }

◆ Grow()

void dart::GrowableObjectArray::Grow ( intptr_t  new_capacity,
Heap::Space  space = Heap::kNew 
) const

Definition at line 25087 of file object.cc.

25087 {
25088 ASSERT(new_capacity > Capacity());
25089 const Array& contents = Array::Handle(data());
25090 const Array& new_contents =
25091 Array::Handle(Array::Grow(contents, new_capacity, space));
25092 untag()->set_data(new_contents.ptr());
25093}
static ArrayPtr Grow(const Array &source, intptr_t new_length, Heap::Space space=Heap::kNew)
Definition object.cc:24932
static Object & Handle()
Definition object.h:407

◆ InstanceSize()

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

Definition at line 11114 of file object.h.

11114 {
11115 return RoundedAllocationSize(sizeof(UntaggedGrowableObjectArray));
11116 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition object.h:758

◆ Length()

intptr_t dart::GrowableObjectArray::Length ( ) const
inline

Definition at line 11046 of file object.h.

11046 {
11047 ASSERT(!IsNull());
11048 return Smi::Value(untag()->length());
11049 }

◆ length_offset()

static intptr_t dart::GrowableObjectArray::length_offset ( )
inlinestatic

Definition at line 11107 of file object.h.

11107 {
11108 return OFFSET_OF(UntaggedGrowableObjectArray, length_);
11109 }

◆ New() [1/3]

GrowableObjectArrayPtr dart::GrowableObjectArray::New ( const Array array,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 25114 of file object.cc.

25115 {
25116 ASSERT(
25117 IsolateGroup::Current()->object_store()->growable_object_array_class() !=
25118 Class::null());
25119 const auto& result =
25120 GrowableObjectArray::Handle(Object::Allocate<GrowableObjectArray>(space));
25121 result.SetLength(0);
25122 result.SetData(array);
25123 return result.ptr();
25124}
static IsolateGroup * Current()
Definition isolate.h:534
GAsyncResult * result

◆ New() [2/3]

static GrowableObjectArrayPtr dart::GrowableObjectArray::New ( Heap::Space  space = Heap::kNew)
inlinestatic

Definition at line 11118 of file object.h.

11118 {
11119 return New(kDefaultInitialCapacity, space);
11120 }
static GrowableObjectArrayPtr New(Heap::Space space=Heap::kNew)
Definition object.h:11118

◆ New() [3/3]

GrowableObjectArrayPtr dart::GrowableObjectArray::New ( intptr_t  capacity,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 25106 of file object.cc.

25107 {
25108 ArrayPtr raw_data = (capacity == 0) ? Object::empty_array().ptr()
25109 : Array::New(capacity, space);
25110 const Array& data = Array::Handle(raw_data);
25111 return New(data, space);
25112}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition object.h:10933

◆ NoSafepointData()

static ArrayPtr dart::GrowableObjectArray::NoSafepointData ( const GrowableObjectArrayPtr  array)
inlinestatic

Definition at line 11130 of file object.h.

11130 {
11131 return array->untag()->data();
11132 }

◆ NoSafepointLength()

static SmiPtr dart::GrowableObjectArray::NoSafepointLength ( const GrowableObjectArrayPtr  array)
inlinestatic

Definition at line 11126 of file object.h.

11126 {
11127 return array->untag()->length();
11128 }

◆ RemoveLast()

ObjectPtr dart::GrowableObjectArray::RemoveLast ( ) const

Definition at line 25095 of file object.cc.

25095 {
25096 ASSERT(!IsNull());
25097 ASSERT(Length() > 0);
25098 intptr_t index = Length() - 1;
25099 const Array& contents = Array::Handle(data());
25100 const PassiveObject& obj = PassiveObject::Handle(contents.At(index));
25101 contents.SetAt(index, Object::null_object());
25102 SetLength(index);
25103 return obj.ptr();
25104}
static PassiveObject & Handle()
Definition object.h:1077

◆ SetAt()

void dart::GrowableObjectArray::SetAt ( intptr_t  index,
const Object value 
) const
inline

Definition at line 11065 of file object.h.

11065 {
11066 ASSERT(!IsNull());
11067 ASSERT(index < Length());
11068
11069 // TODO(iposva): Add storing NoSafepointScope.
11070 data()->untag()->set_element(index, value.ptr());
11071 }
uint8_t value

◆ SetData()

void dart::GrowableObjectArray::SetData ( const Array value) const
inline

Definition at line 11057 of file object.h.

11057{ untag()->set_data(value.ptr()); }

◆ SetLength()

void dart::GrowableObjectArray::SetLength ( intptr_t  value) const
inline

Definition at line 11050 of file object.h.

11050 {
11051 // This is only safe because we create a new Smi, which does not cause
11052 // heap allocation.
11053 untag()->set_length(Smi::New(value));
11054 }
static SmiPtr New(intptr_t value)
Definition object.h:9985

◆ SetTypeArguments()

virtual void dart::GrowableObjectArray::SetTypeArguments ( const TypeArguments value) const
inlinevirtual

Reimplemented from dart::Instance.

Definition at line 11081 of file object.h.

11081 {
11082 // A GrowableObjectArray is raw or takes one type argument. However, its
11083 // type argument vector may be longer than 1 due to a type optimization
11084 // reusing the type argument vector of the instantiator.
11085 ASSERT(value.IsNull() || ((value.Length() >= 1) && value.IsInstantiated() &&
11086 value.IsCanonical()));
11087
11088 untag()->set_type_arguments(value.ptr());
11089 }

◆ type_arguments_offset()

static intptr_t dart::GrowableObjectArray::type_arguments_offset ( )
inlinestatic

Definition at line 11103 of file object.h.

11103 {
11104 return OFFSET_OF(UntaggedGrowableObjectArray, type_arguments_);
11105 }

Friends And Related Symbol Documentation

◆ Array

friend class Array
friend

Definition at line 11140 of file object.h.

◆ Class

friend class Class
friend

Definition at line 11141 of file object.h.


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