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

#include <object.h>

Inheritance diagram for dart::UserTag:
dart::Instance dart::Object

Public Member Functions

uword tag () const
 
void set_tag (uword t) const
 
bool streamable () const
 
void set_streamable (bool streamable)
 
StringPtr label () const
 
UserTagPtr MakeActive () 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 tag_offset ()
 
static intptr_t InstanceSize ()
 
static UserTagPtr New (const String &label, Heap::Space space=Heap::kOld)
 
static UserTagPtr DefaultTag ()
 
static bool TagTableIsFull (Thread *thread)
 
static UserTagPtr FindTagById (const Isolate *isolate, uword tag_id)
 
static UserTagPtr FindTagInIsolate (Isolate *isolate, Thread *thread, const String &label)
 
- 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 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 13152 of file object.h.

Member Function Documentation

◆ DefaultTag()

UserTagPtr dart::UserTag::DefaultTag ( )
static

Definition at line 26974 of file object.cc.

26974 {
26975 Thread* thread = Thread::Current();
26976 Zone* zone = thread->zone();
26977 Isolate* isolate = thread->isolate();
26978 ASSERT(isolate != nullptr);
26979 if (isolate->default_tag() != UserTag::null()) {
26980 // Already created.
26981 return isolate->default_tag();
26982 }
26983 // Create default tag.
26984 const UserTag& result =
26985 UserTag::Handle(zone, UserTag::New(Symbols::Default()));
26987 isolate->set_default_tag(result);
26988 return result.ptr();
26989}
static ObjectPtr null()
Definition: object.h:433
static Object & Handle()
Definition: object.h:407
friend class Thread
Definition: object.h:1025
static Thread * Current()
Definition: thread.h:362
static UserTagPtr New(const String &label, Heap::Space space=Heap::kOld)
Definition: object.cc:26949
static constexpr uword kDefaultUserTag
Definition: tags.h:112
#define ASSERT(E)
GAsyncResult * result

◆ FindTagById()

UserTagPtr dart::UserTag::FindTagById ( const Isolate isolate,
uword  tag_id 
)
static

Definition at line 27053 of file object.cc.

27053 {
27054 ASSERT(isolate != nullptr);
27055 Thread* thread = Thread::Current();
27056 Zone* zone = thread->zone();
27057 ASSERT(isolate->tag_table() != GrowableObjectArray::null());
27058 const GrowableObjectArray& tag_table =
27059 GrowableObjectArray::Handle(zone, isolate->tag_table());
27060 UserTag& tag = UserTag::Handle(zone);
27061 for (intptr_t i = 0; i < tag_table.Length(); i++) {
27062 tag ^= tag_table.At(i);
27063 if (tag.tag() == tag_id) {
27064 return tag.ptr();
27065 }
27066 }
27067 return UserTag::null();
27068}
uword tag() const
Definition: object.h:13154

◆ FindTagInIsolate()

UserTagPtr dart::UserTag::FindTagInIsolate ( Isolate isolate,
Thread thread,
const String label 
)
static

Definition at line 26991 of file object.cc.

26993 {
26994 Zone* zone = thread->zone();
26995 if (isolate->tag_table() == GrowableObjectArray::null()) {
26996 return UserTag::null();
26997 }
26998 const GrowableObjectArray& tag_table =
26999 GrowableObjectArray::Handle(zone, isolate->tag_table());
27000 UserTag& other = UserTag::Handle(zone);
27001 String& tag_label = String::Handle(zone);
27002 for (intptr_t i = 0; i < tag_table.Length(); i++) {
27003 other ^= tag_table.At(i);
27004 ASSERT(!other.IsNull());
27005 tag_label = other.label();
27006 ASSERT(!tag_label.IsNull());
27007 if (tag_label.Equals(label)) {
27008 return other.ptr();
27009 }
27010 }
27011 return UserTag::null();
27012}
StringPtr label() const
Definition: object.h:13168

◆ InstanceSize()

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

Definition at line 13172 of file object.h.

13172 {
13173 return RoundedAllocationSize(sizeof(UntaggedUserTag));
13174 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ label()

StringPtr dart::UserTag::label ( ) const
inline

Definition at line 13168 of file object.h.

13168{ return untag()->label(); }
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

◆ MakeActive()

UserTagPtr dart::UserTag::MakeActive ( ) const

Definition at line 26928 of file object.cc.

26928 {
26929 Isolate* isolate = Isolate::Current();
26930 ASSERT(isolate != nullptr);
26931 UserTag& old = UserTag::Handle(isolate->current_tag());
26932 isolate->set_current_tag(*this);
26933
26934#if !defined(PRODUCT)
26935 // Notify VM service clients that the current UserTag has changed.
26936 if (Service::profiler_stream.enabled()) {
26937 ServiceEvent event(isolate, ServiceEvent::kUserTagChanged);
26938 String& name = String::Handle(old.label());
26939 event.set_previous_tag(name.ToCString());
26940 name ^= label();
26941 event.set_updated_tag(name.ToCString());
26943 }
26944#endif // !defined(PRODUCT)
26945
26946 return old.ptr();
26947}
static Isolate * Current()
Definition: isolate.h:986
static void HandleEvent(ServiceEvent *event, bool enter_safepoint=true)
Definition: service.cc:1206
static StreamInfo profiler_stream
Definition: service.h:188
FlKeyEvent * event
const char *const name

◆ New()

UserTagPtr dart::UserTag::New ( const String label,
Heap::Space  space = Heap::kOld 
)
static

Definition at line 26949 of file object.cc.

26949 {
26950 Thread* thread = Thread::Current();
26951 Isolate* isolate = thread->isolate();
26952 ASSERT(isolate->tag_table() != GrowableObjectArray::null());
26953 // Canonicalize by name.
26954 UserTag& result = UserTag::Handle(FindTagInIsolate(thread, label));
26955 if (!result.IsNull()) {
26956 // Tag already exists, return existing instance.
26957 return result.ptr();
26958 }
26959 if (TagTableIsFull(thread)) {
26961 "UserTag instance limit (%" Pd ") reached.", UserTags::kMaxUserTags));
26962 const Array& args = Array::Handle(Array::New(1));
26963 args.SetAt(0, error);
26965 }
26966 // No tag with label exists, create and register with isolate tag table.
26967 result = Object::Allocate<UserTag>(space);
26968 result.set_label(label);
26969 result.set_streamable(UserTags::IsTagNameStreamable(label.ToCString()));
26970 AddTagToIsolate(thread, result);
26971 return result.ptr();
26972}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition: object.h:10959
static DART_NORETURN void ThrowByType(ExceptionType type, const Array &arguments)
Definition: exceptions.cc:1052
static StringPtr NewFormatted(const char *format,...) PRINTF_ATTRIBUTE(1
Definition: object.cc:24004
static UserTagPtr FindTagInIsolate(Isolate *isolate, Thread *thread, const String &label)
Definition: object.cc:26991
static bool TagTableIsFull(Thread *thread)
Definition: object.cc:27044
static constexpr intptr_t kMaxUserTags
Definition: tags.h:110
static bool IsTagNameStreamable(const char *tag)
Definition: tags.cc:177
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const uint8_t uint32_t uint32_t GError ** error
#define Pd
Definition: globals.h:408

◆ set_streamable()

void dart::UserTag::set_streamable ( bool  streamable)
inline

Definition at line 13162 of file object.h.

13162 {
13163 StoreNonPointer(&untag()->streamable_, streamable);
13164 }
void StoreNonPointer(const FieldType *addr, ValueType value) const
Definition: object.h:819
bool streamable() const
Definition: object.h:13161

◆ set_tag()

void dart::UserTag::set_tag ( uword  t) const
inline

Definition at line 13155 of file object.h.

13155 {
13158 StoreNonPointer(&untag()->tag_, t);
13159 }
static constexpr uword kUserTagIdOffset
Definition: tags.h:111

◆ streamable()

bool dart::UserTag::streamable ( ) const
inline

Definition at line 13161 of file object.h.

13161{ return untag()->streamable(); }

◆ tag()

uword dart::UserTag::tag ( ) const
inline

Definition at line 13154 of file object.h.

13154{ return untag()->tag(); }

◆ tag_offset()

static intptr_t dart::UserTag::tag_offset ( )
inlinestatic

Definition at line 13166 of file object.h.

13166{ return OFFSET_OF(UntaggedUserTag, tag_); }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ TagTableIsFull()

bool dart::UserTag::TagTableIsFull ( Thread thread)
static

Definition at line 27044 of file object.cc.

27044 {
27045 Isolate* isolate = thread->isolate();
27046 ASSERT(isolate->tag_table() != GrowableObjectArray::null());
27047 const GrowableObjectArray& tag_table =
27048 GrowableObjectArray::Handle(thread->zone(), isolate->tag_table());
27049 ASSERT(tag_table.Length() <= UserTags::kMaxUserTags);
27050 return tag_table.Length() == UserTags::kMaxUserTags;
27051}

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 13194 of file object.h.


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