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

#include <object.h>

Inheritance diagram for dart::Field:
dart::Object

Public Types

enum  { kUnknownLengthOffset = -1 , kUnknownFixedLength = -1 , kNoFixedLength = -2 }
 
- Public Types inherited from dart::Object
enum  NameVisibility { kInternalName = 0 , kScrubbedName , kUserVisibleName }
 
enum class  NameDisambiguation { kYes , kNo }
 
using UntaggedObjectType = UntaggedObject
 
using ObjectPtrType = ObjectPtr
 

Public Member Functions

FieldPtr Original () const
 
void SetOriginal (const Field &value) const
 
bool IsOriginal () const
 
FieldPtr CloneFromOriginal () const
 
StringPtr name () const
 
StringPtr UserVisibleName () const
 
const char * UserVisibleNameCString () const
 
virtual StringPtr DictionaryName () const
 
uint16_t kind_bits () const
 
bool is_static () const
 
bool is_instance () const
 
bool is_final () const
 
bool is_const () const
 
bool is_late () const
 
bool is_extension_member () const
 
bool is_extension_type_member () const
 
bool needs_load_guard () const
 
bool is_reflectable () const
 
void set_is_reflectable (bool value) const
 
bool initializer_changed_after_initialization () const
 
void set_initializer_changed_after_initialization (bool value) const
 
bool has_pragma () const
 
void set_has_pragma (bool value) const
 
bool is_covariant () const
 
void set_is_covariant (bool value) const
 
bool is_generic_covariant_impl () const
 
void set_is_generic_covariant_impl (bool value) const
 
intptr_t kernel_offset () const
 
void set_kernel_offset (intptr_t value) const
 
void InheritKernelOffsetFrom (const Field &src) const
 
TypedDataViewPtr KernelLibrary () const
 
intptr_t KernelLibraryOffset () const
 
intptr_t KernelLibraryIndex () const
 
void SetOffset (intptr_t host_offset_in_bytes, intptr_t target_offset_in_bytes) const
 
intptr_t HostOffset () const
 
intptr_t TargetOffset () const
 
ObjectPtr StaticConstFieldValue () const
 
void SetStaticConstFieldValue (const Instance &value, bool assert_initializing_store=true) const
 
ObjectPtr StaticValue () const
 
void SetStaticValue (const Object &value) const
 
intptr_t field_id () const
 
void set_field_id (intptr_t field_id) const
 
void set_field_id_unsafe (intptr_t field_id) const
 
ClassPtr Owner () const
 
ScriptPtr Script () const
 
KernelProgramInfoPtr KernelProgramInfo () const
 
ObjectPtr RawOwner () const
 
uint32_t Hash () const
 
AbstractTypePtr type () const
 
void SetFieldType (const AbstractType &value) const
 
void SetFieldTypeSafe (const AbstractType &value) const
 
DART_WARN_UNUSED_RESULT ErrorPtr VerifyEntryPoint (EntryPointPragma kind) const
 
FieldPtr Clone (const Field &original) const
 
TokenPosition token_pos () const
 
TokenPosition end_token_pos () const
 
int32_t SourceFingerprint () const
 
StringPtr InitializingExpression () const
 
bool has_nontrivial_initializer () const
 
void set_has_nontrivial_initializer_unsafe (bool has_nontrivial_initializer) const
 
void set_has_nontrivial_initializer (bool has_nontrivial_initializer) const
 
bool has_initializer () const
 
void set_has_initializer_unsafe (bool has_initializer) const
 
void set_has_initializer (bool has_initializer) const
 
bool has_trivial_initializer () const
 
StaticTypeExactnessState static_type_exactness_state () const
 
void set_static_type_exactness_state (StaticTypeExactnessState state) const
 
void set_static_type_exactness_state_unsafe (StaticTypeExactnessState state) const
 
intptr_t guarded_cid () const
 
void set_guarded_cid (intptr_t cid) const
 
void set_guarded_cid_unsafe (intptr_t cid) const
 
intptr_t guarded_list_length () const
 
void set_guarded_list_length_unsafe (intptr_t list_length) const
 
void set_guarded_list_length (intptr_t list_length) const
 
intptr_t guarded_list_length_in_object_offset () const
 
void set_guarded_list_length_in_object_offset_unsafe (intptr_t offset) const
 
void set_guarded_list_length_in_object_offset (intptr_t offset) const
 
bool needs_length_check () const
 
bool NeedsSetter () const
 
bool NeedsGetter () const
 
bool NeedsInitializationCheckOnLoad () const
 
const char * GuardedPropertiesAsCString () const
 
bool is_unboxed () const
 
void set_is_unboxed_unsafe (bool b) const
 
void set_is_unboxed (bool b) const
 
void set_is_late (bool value) const
 
void set_is_extension_member (bool value) const
 
void set_is_extension_type_member (bool value) const
 
void set_needs_load_guard (bool value) const
 
bool is_nullable () const
 
void set_is_nullable (bool val) const
 
bool is_nullable_unsafe () const
 
void set_is_nullable_unsafe (bool val) const
 
void RecordStore (const Object &value) const
 
void InitializeGuardedListLengthInObjectOffset (bool unsafe=false) const
 
WeakArrayPtr dependent_code () const
 
void set_dependent_code (const WeakArray &array) const
 
void RegisterDependentCode (const Code &code) const
 
void DeoptimizeDependentCode (bool are_mutators_stopped=false) const
 
bool IsConsistentWith (const Field &field) const
 
bool IsUninitialized () const
 
DART_WARN_UNUSED_RESULT ErrorPtr InitializeInstance (const Instance &instance) const
 
DART_WARN_UNUSED_RESULT ErrorPtr InitializeStatic () const
 
DART_WARN_UNUSED_RESULT ObjectPtr EvaluateInitializer () const
 
FunctionPtr EnsureInitializerFunction () const
 
FunctionPtr InitializerFunction () const
 
void SetInitializerFunction (const Function &initializer) const
 
bool HasInitializerFunction () const
 
InstancePtr GetterClosure () const
 
InstancePtr SetterClosure () const
 
InstancePtr AccessorClosure (bool make_setter) 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
 
bool IsNew () const
 
bool IsOld () const
 
bool InVMIsolateHeap () const
 
void Print () const
 

Static Public Member Functions

static intptr_t host_offset_or_field_id_offset ()
 
static intptr_t TargetOffsetOf (FieldPtr field)
 
static intptr_t InstanceSize ()
 
static FieldPtr New (const String &name, bool is_static, bool is_final, bool is_const, bool is_reflectable, bool is_late, const Object &owner, const AbstractType &type, TokenPosition token_pos, TokenPosition end_token_pos)
 
static FieldPtr NewTopLevel (const String &name, bool is_final, bool is_const, bool is_late, const Object &owner, TokenPosition token_pos, TokenPosition end_token_pos)
 
static intptr_t kind_bits_offset ()
 
static intptr_t static_type_exactness_state_offset ()
 
static intptr_t guarded_cid_offset ()
 
static intptr_t guarded_list_length_offset ()
 
static intptr_t guarded_list_length_in_object_offset_offset ()
 
static intptr_t is_nullable_offset ()
 
static intptr_t initializer_function_offset ()
 
static StringPtr GetterName (const String &field_name)
 
static StringPtr GetterSymbol (const String &field_name)
 
static StringPtr LookupGetterSymbol (const String &field_name)
 
static StringPtr SetterName (const String &field_name)
 
static StringPtr SetterSymbol (const String &field_name)
 
static StringPtr LookupSetterSymbol (const String &field_name)
 
static StringPtr NameFromGetter (const String &getter_name)
 
static StringPtr NameFromSetter (const String &setter_name)
 
static StringPtr NameFromInit (const String &init_name)
 
static bool IsGetterName (const String &function_name)
 
static bool IsSetterName (const String &function_name)
 
static bool IsInitName (const String &function_name)
 
- 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 StoreFieldInstr
 
class Class
 
class UntaggedField
 
class FieldSerializationCluster
 
class FieldDeserializationCluster
 

Additional Inherited Members

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

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
kUnknownLengthOffset 
kUnknownFixedLength 
kNoFixedLength 

Definition at line 4699 of file object.h.

4699 {
4702 kNoFixedLength = -2,
4703 };
@ kUnknownFixedLength
Definition object.h:4701
@ kUnknownLengthOffset
Definition object.h:4700
@ kNoFixedLength
Definition object.h:4702

Member Function Documentation

◆ AccessorClosure()

InstancePtr dart::Field::AccessorClosure ( bool  make_setter) const

Definition at line 12228 of file object.cc.

12228 {
12229 Thread* thread = Thread::Current();
12230 Zone* zone = thread->zone();
12231 ASSERT(is_static());
12232 const Class& field_owner = Class::Handle(zone, Owner());
12233
12234 String& closure_name = String::Handle(zone, this->name());
12235 closure_name = Symbols::FromConcat(thread, Symbols::HashMark(), closure_name);
12236 if (make_setter) {
12237 closure_name =
12238 Symbols::FromConcat(thread, Symbols::HashMark(), closure_name);
12239 }
12240
12241 Field& closure_field = Field::Handle(zone);
12242 closure_field = field_owner.LookupStaticField(closure_name);
12243 if (!closure_field.IsNull()) {
12244 ASSERT(closure_field.is_static());
12245 const Instance& closure =
12246 Instance::Handle(zone, Instance::RawCast(closure_field.StaticValue()));
12247 ASSERT(!closure.IsNull());
12248 ASSERT(closure.IsClosure());
12249 return closure.ptr();
12250 }
12251
12252 UNREACHABLE();
12253 return Instance::null();
12254}
#define UNREACHABLE()
Definition assert.h:248
ClassPtr Owner() const
Definition object.cc:11911
bool is_static() const
Definition object.h:4418
StringPtr name() const
Definition object.h:4408
friend class Class
Definition object.h:4895
static ObjectPtr null()
Definition object.h:433
static Object & Handle()
Definition object.h:407
static ObjectPtr RawCast(ObjectPtr obj)
Definition object.h:325
friend class Thread
Definition object.h:1025
static const String & HashMark()
Definition symbols.h:671
static StringPtr FromConcat(Thread *thread, const String &str1, const String &str2)
Definition symbols.cc:235
static Thread * Current()
Definition thread.h:361
#define ASSERT(E)
std::function< void()> closure
Definition closure.h:14

◆ Clone()

FieldPtr dart::Field::Clone ( const Field original) const

Definition at line 12105 of file object.cc.

12105 {
12106 if (original.IsNull()) {
12107 return Field::null();
12108 }
12109 ASSERT(original.IsOriginal());
12110 Field& clone = Field::Handle();
12111 // Using relaxed loading is fine because concurrent fields changes are all
12112 // guarded, will be reconciled during optimized code installation.
12113 clone ^= Object::Clone(*this, Heap::kOld, /*load_with_relaxed_atomics=*/true);
12114 clone.SetOriginal(original);
12115 clone.InheritKernelOffsetFrom(original);
12116 return clone.ptr();
12117}
@ kOld
Definition heap.h:39
static ObjectPtr Clone(const Object &orig, Heap::Space space, bool load_with_relaxed_atomics=false)
Definition object.cc:2960

◆ CloneFromOriginal()

FieldPtr dart::Field::CloneFromOriginal ( ) const

Definition at line 11786 of file object.cc.

11786 {
11787 return this->Clone(*this);
11788}
FieldPtr Clone(const Field &original) const
Definition object.cc:12105

◆ DeoptimizeDependentCode()

void dart::Field::DeoptimizeDependentCode ( bool  are_mutators_stopped = false) const

Definition at line 12318 of file object.cc.

12318 {
12320 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
12321 ASSERT(IsOriginal());
12322 FieldDependentArray a(*this);
12323 if (FLAG_trace_deoptimization && a.HasCodes()) {
12324 THR_Print("Deopt for field guard (field %s)\n", ToCString());
12325 }
12326 a.DisableCode(are_mutators_stopped);
12327}
#define DEBUG_ASSERT(cond)
Definition assert.h:321
bool IsOriginal() const
Definition object.h:4396
static IsolateGroup * Current()
Definition isolate.h:534
virtual const char * ToCString() const
Definition object.h:366
#define THR_Print(format,...)
Definition log.h:20
struct MyStruct a[10]

◆ dependent_code()

WeakArrayPtr dart::Field::dependent_code ( ) const

Definition at line 12264 of file object.cc.

12264 {
12266 IsolateGroup::Current()->program_lock()->IsCurrentThreadReader());
12267 return untag()->dependent_code();
12268}
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)

◆ DictionaryName()

virtual StringPtr dart::Field::DictionaryName ( ) const
inlinevirtual

Reimplemented from dart::Object.

Definition at line 4411 of file object.h.

4411{ return name(); }

◆ end_token_pos()

TokenPosition dart::Field::end_token_pos ( ) const
inline

Definition at line 4563 of file object.h.

4563{ return untag()->end_token_pos_; }

◆ EnsureInitializerFunction()

FunctionPtr dart::Field::EnsureInitializerFunction ( ) const

Definition at line 12347 of file object.cc.

12347 {
12349 ASSERT(IsOriginal());
12350 Thread* thread = Thread::Current();
12351 Zone* zone = thread->zone();
12353 if (initializer.IsNull()) {
12354#if defined(DART_PRECOMPILED_RUNTIME)
12355 UNREACHABLE();
12356#else
12357 SafepointMutexLocker ml(
12358 thread->isolate_group()->initializer_functions_mutex());
12359 // Double check after grabbing the lock.
12361 if (initializer.IsNull()) {
12363 }
12364#endif
12365 }
12366 return initializer.ptr();
12367}
static struct Initializer initializer
FunctionPtr InitializerFunction() const
Definition object.h:4777
bool has_nontrivial_initializer() const
Definition object.h:4569
FunctionPtr CreateFieldInitializerFunction(Thread *thread, Zone *zone, const Field &field)

◆ EvaluateInitializer()

ObjectPtr dart::Field::EvaluateInitializer ( ) const

Definition at line 12513 of file object.cc.

12513 {
12514 ASSERT(Thread::Current()->IsDartMutatorThread());
12515
12516#if !defined(DART_PRECOMPILED_RUNTIME)
12517 if (is_static() && is_const()) {
12518 return kernel::EvaluateStaticConstFieldInitializer(*this);
12519 }
12520#endif // !defined(DART_PRECOMPILED_RUNTIME)
12521
12523 return DartEntry::InvokeFunction(initializer, Object::empty_array());
12524}
static ObjectPtr InvokeFunction(const Function &function, const Array &arguments)
Definition dart_entry.cc:31
FunctionPtr EnsureInitializerFunction() const
Definition object.cc:12347
bool is_const() const
Definition object.h:4421

◆ field_id()

intptr_t dart::Field::field_id ( ) const
inline

Definition at line 13258 of file object.h.

13258 {
13259 return Smi::Value(untag()->host_offset_or_field_id());
13260}
intptr_t Value() const
Definition object.h:9969

◆ GetterClosure()

InstancePtr dart::Field::GetterClosure ( ) const

Definition at line 12256 of file object.cc.

12256 {
12257 return AccessorClosure(false);
12258}
InstancePtr AccessorClosure(bool make_setter) const
Definition object.cc:12228

◆ GetterName()

StringPtr dart::Field::GetterName ( const String field_name)
static

Definition at line 11843 of file object.cc.

11843 {
11844 return String::Concat(Symbols::GetterPrefix(), field_name);
11845}
static StringPtr Concat(const String &str1, const String &str2, Heap::Space space=Heap::kNew)
Definition object.cc:24116

◆ GetterSymbol()

StringPtr dart::Field::GetterSymbol ( const String field_name)
static

Definition at line 11847 of file object.cc.

11847 {
11848 return Symbols::FromGet(Thread::Current(), field_name);
11849}
static StringPtr FromGet(Thread *thread, const String &str)
Definition symbols.cc:247

◆ guarded_cid()

intptr_t dart::Field::guarded_cid ( ) const

Definition at line 11800 of file object.cc.

11800 {
11801#if defined(DEBUG)
11802 // This assertion ensures that the cid seen by the background compiler is
11803 // consistent. So the assertion passes if the field is a clone. It also
11804 // passes if the field is static, because we don't use field guards on
11805 // static fields. It also passes if we're compiling unoptimized
11806 // code (in which case the caller might get different answers if it obtains
11807 // the guarded cid multiple times).
11808 Thread* thread = Thread::Current();
11809#if defined(DART_PRECOMPILED_RUNTIME)
11810 ASSERT(!thread->IsInsideCompiler() || is_static());
11811#else
11812 ASSERT(!thread->IsInsideCompiler() ||
11814 is_static());
11815#endif
11816#endif
11817 return LoadNonPointer<ClassIdTagType, std::memory_order_relaxed>(
11818 &untag()->guarded_cid_);
11819}
static CompilerState & Current()

◆ guarded_cid_offset()

static intptr_t dart::Field::guarded_cid_offset ( )
inlinestatic

Definition at line 4642 of file object.h.

4642 {
4643 return OFFSET_OF(UntaggedField, guarded_cid_);
4644 }
friend class UntaggedField
Definition object.h:4896
#define OFFSET_OF(type, field)
Definition globals.h:138

◆ guarded_list_length()

intptr_t dart::Field::guarded_list_length ( ) const

Definition at line 12152 of file object.cc.

12152 {
12154}
intptr_t guarded_list_length() const
Definition object.cc:12152

◆ guarded_list_length_in_object_offset()

intptr_t dart::Field::guarded_list_length_in_object_offset ( ) const

Definition at line 12161 of file object.cc.

12161 {
12162 return untag()->guarded_list_length_in_object_offset_ + kHeapObjectTag;
12163}
@ kHeapObjectTag

◆ guarded_list_length_in_object_offset_offset()

static intptr_t dart::Field::guarded_list_length_in_object_offset_offset ( )
inlinestatic

Definition at line 4666 of file object.h.

4666 {
4667 return OFFSET_OF(UntaggedField, guarded_list_length_in_object_offset_);
4668 }

◆ guarded_list_length_offset()

static intptr_t dart::Field::guarded_list_length_offset ( )
inlinestatic

Definition at line 4656 of file object.h.

4656 {
4657 return OFFSET_OF(UntaggedField, guarded_list_length_);
4658 }

◆ GuardedPropertiesAsCString()

const char * dart::Field::GuardedPropertiesAsCString ( ) const

Definition at line 12552 of file object.cc.

12552 {
12553 if (guarded_cid() == kIllegalCid) {
12554 return "<?>";
12555 } else if (guarded_cid() == kDynamicCid) {
12556 ASSERT(!static_type_exactness_state().IsExactOrUninitialized());
12557 return "<*>";
12558 }
12559
12560 Zone* zone = Thread::Current()->zone();
12561
12562 const char* exactness = "";
12563 if (static_type_exactness_state().IsTracking()) {
12564 exactness =
12566 }
12567
12568 const Class& cls =
12569 Class::Handle(IsolateGroup::Current()->class_table()->At(guarded_cid()));
12570 const char* class_name = String::Handle(cls.Name()).ToCString();
12571
12575 return zone->PrintToString("<%s [*]%s>", class_name, exactness);
12576 } else {
12577 return zone->PrintToString(
12578 "<%s [%" Pd " @%" Pd "]%s>", class_name, guarded_list_length(),
12580 }
12581 }
12582
12583 return zone->PrintToString("<%s %s%s>",
12584 is_nullable() ? "nullable" : "not-nullable",
12585 class_name, exactness);
12586}
bool is_final() const
Definition object.h:4420
bool is_nullable() const
Definition object.cc:11821
StaticTypeExactnessState static_type_exactness_state() const
Definition object.h:4606
intptr_t guarded_list_length_in_object_offset() const
Definition object.cc:12161
intptr_t guarded_cid() const
Definition object.cc:11800
Zone * zone() const
char * PrintToString(const char *format,...) PRINTF_ATTRIBUTE(2
Definition zone.cc:313
const char *const class_name
@ kIllegalCid
Definition class_id.h:214
@ kDynamicCid
Definition class_id.h:253
bool IsBuiltinListClassId(intptr_t index)
Definition class_id.h:364
#define Pd
Definition globals.h:408

◆ has_initializer()

bool dart::Field::has_initializer ( ) const
inline

Definition at line 4586 of file object.h.

4586 {
4588 }
static constexpr bool decode(uint16_t value)
Definition bitfield.h:173
uint16_t kind_bits() const
Definition object.h:4413

◆ has_nontrivial_initializer()

bool dart::Field::has_nontrivial_initializer ( ) const
inline

Definition at line 4569 of file object.h.

4569 {
4571 }

◆ has_pragma()

bool dart::Field::has_pragma ( ) const
inline

Definition at line 4448 of file object.h.

4448{ return HasPragmaBit::decode(kind_bits()); }

◆ has_trivial_initializer()

bool dart::Field::has_trivial_initializer ( ) const
inline

Definition at line 4602 of file object.h.

4602 {
4604 }
bool has_initializer() const
Definition object.h:4586

◆ Hash()

uint32_t dart::Field::Hash ( ) const

Definition at line 11945 of file object.cc.

11945 {
11946 return String::HashRawSymbol(name());
11947}
static uword HashRawSymbol(const StringPtr symbol)
Definition object.h:10226

◆ HasInitializerFunction()

bool dart::Field::HasInitializerFunction ( ) const

Definition at line 12385 of file object.cc.

12385 {
12386 return untag()->initializer_function() != Function::null();
12387}

◆ host_offset_or_field_id_offset()

static intptr_t dart::Field::host_offset_or_field_id_offset ( )
inlinestatic

Definition at line 4496 of file object.h.

4496 {
4497 return OFFSET_OF(UntaggedField, host_offset_or_field_id_);
4498 }

◆ HostOffset()

intptr_t dart::Field::HostOffset ( ) const
inline

Definition at line 13215 of file object.h.

13215 {
13216 ASSERT(is_instance()); // Valid only for dart instance fields.
13217 return (Smi::Value(untag()->host_offset_or_field_id()) * kCompressedWordSize);
13218}
bool is_instance() const
Definition object.h:4419
static constexpr intptr_t kCompressedWordSize
Definition globals.h:42

◆ InheritKernelOffsetFrom()

void dart::Field::InheritKernelOffsetFrom ( const Field src) const

Definition at line 11949 of file object.cc.

11949 {
11950#if defined(DART_PRECOMPILED_RUNTIME)
11951 UNREACHABLE();
11952#else
11953 StoreNonPointer(&untag()->kernel_offset_, src.untag()->kernel_offset_);
11954#endif
11955}
void StoreNonPointer(const FieldType *addr, ValueType value) const
Definition object.h:819

◆ InitializeGuardedListLengthInObjectOffset()

void dart::Field::InitializeGuardedListLengthInObjectOffset ( bool  unsafe = false) const

Definition at line 12588 of file object.cc.

12588 {
12591 ASSERT(IsOriginal());
12592 if (needs_length_check() &&
12594 const intptr_t offset = GetListLengthOffset(guarded_cid());
12595 (this->*setter)(offset);
12597 } else {
12598 (this->*setter)(Field::kUnknownLengthOffset);
12599 }
12600}
bool needs_length_check() const
Definition object.h:4670
void set_guarded_list_length_in_object_offset_unsafe(intptr_t offset) const
Definition object.cc:12165
void set_guarded_list_length_in_object_offset(intptr_t offset) const
Definition object.h:4661
static intptr_t GetListLengthOffset(intptr_t cid)
Definition object.cc:12538
Point offset

◆ InitializeInstance()

ErrorPtr dart::Field::InitializeInstance ( const Instance instance) const

Definition at line 12389 of file object.cc.

12389 {
12390 ASSERT(IsOriginal());
12392 ASSERT(instance.GetField(*this) == Object::sentinel().ptr());
12394
12397 const Array& args = Array::Handle(Array::New(1));
12398 args.SetAt(0, instance);
12400 if (!value.IsNull() && value.IsError()) {
12401 return Error::Cast(value).ptr();
12402 }
12403 } else {
12404 if (is_late() && !has_initializer()) {
12406 UNREACHABLE();
12407 }
12408#if defined(DART_PRECOMPILED_RUNTIME)
12409 UNREACHABLE();
12410#else
12411 // Our trivial initializer is `null`. Any non-`null` initializer is
12412 // non-trivial (see `KernelLoader::CheckForInitializer()`).
12413 value = Object::null();
12414#endif
12415 }
12416 ASSERT(value.IsNull() || value.IsInstance());
12417 if (is_late() && is_final() &&
12418 (instance.GetField(*this) != Object::sentinel().ptr())) {
12420 String::Handle(name()));
12421 UNREACHABLE();
12422 }
12423 instance.SetField(*this, value);
12424 return Error::null();
12425}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition object.h:10933
static DART_NORETURN void ThrowLateFieldAssignedDuringInitialization(const String &name)
static DART_NORETURN void ThrowLateFieldNotInitialized(const String &name)
bool is_late() const
Definition object.h:4422
VkInstance instance
Definition main.cc:48
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
uint8_t value

◆ initializer_changed_after_initialization()

bool dart::Field::initializer_changed_after_initialization ( ) const
inline

Definition at line 4439 of file object.h.

◆ initializer_function_offset()

static intptr_t dart::Field::initializer_function_offset ( )
inlinestatic

Definition at line 4782 of file object.h.

4782 {
4783 return OFFSET_OF(UntaggedField, initializer_function_);
4784 }

◆ InitializerFunction()

FunctionPtr dart::Field::InitializerFunction ( ) const
inline

Definition at line 4777 of file object.h.

4777 {
4778 return untag()->initializer_function<std::memory_order_acquire>();
4779 }

◆ InitializeStatic()

ErrorPtr dart::Field::InitializeStatic ( ) const

Definition at line 12427 of file object.cc.

12427 {
12428 ASSERT(IsOriginal());
12429 ASSERT(is_static());
12430 if (StaticValue() == Object::sentinel().ptr()) {
12431 auto& value = Object::Handle();
12432 if (is_late()) {
12433 if (!has_initializer()) {
12435 UNREACHABLE();
12436 }
12438 if (value.IsError()) {
12439 return Error::Cast(value).ptr();
12440 }
12441 if (is_final() && (StaticValue() != Object::sentinel().ptr())) {
12443 String::Handle(name()));
12444 UNREACHABLE();
12445 }
12446 } else {
12447 SetStaticValue(Object::transition_sentinel());
12449 if (value.IsError()) {
12450 SetStaticValue(Object::null_instance());
12451 return Error::Cast(value).ptr();
12452 }
12453 }
12454 ASSERT(value.IsNull() || value.IsInstance());
12455 SetStaticValue(value.IsNull() ? Instance::null_instance()
12456 : Instance::Cast(value));
12457 return Error::null();
12458 } else if (StaticValue() == Object::transition_sentinel().ptr()) {
12459 ASSERT(!is_late());
12460 const Array& ctor_args = Array::Handle(Array::New(1));
12461 const String& field_name = String::Handle(name());
12462 ctor_args.SetAt(0, field_name);
12464 UNREACHABLE();
12465 }
12466 return Error::null();
12467}
static DART_NORETURN void ThrowByType(ExceptionType type, const Array &arguments)
DART_WARN_UNUSED_RESULT ObjectPtr EvaluateInitializer() const
Definition object.cc:12513
ObjectPtr StaticValue() const
Definition object.h:13253
void SetStaticValue(const Object &value) const
Definition object.cc:12818
ObjectPtr ptr() const
Definition object.h:332

◆ InitializingExpression()

StringPtr dart::Field::InitializingExpression ( ) const

Definition at line 12128 of file object.cc.

12128 {
12129 UNREACHABLE();
12130 return String::null();
12131}

◆ InstanceSize()

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

Definition at line 4531 of file object.h.

4531 {
4532 return RoundedAllocationSize(sizeof(UntaggedField));
4533 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition object.h:758

◆ is_const()

bool dart::Field::is_const ( ) const
inline

Definition at line 4421 of file object.h.

4421{ return ConstBit::decode(kind_bits()); }

◆ is_covariant()

bool dart::Field::is_covariant ( ) const
inline

Definition at line 4454 of file object.h.

4454{ return CovariantBit::decode(kind_bits()); }

◆ is_extension_member()

bool dart::Field::is_extension_member ( ) const
inline

Definition at line 4423 of file object.h.

4423 {
4425 }

◆ is_extension_type_member()

bool dart::Field::is_extension_type_member ( ) const
inline

Definition at line 4426 of file object.h.

4426 {
4428 }

◆ is_final()

bool dart::Field::is_final ( ) const
inline

Definition at line 4420 of file object.h.

4420{ return FinalBit::decode(kind_bits()); }

◆ is_generic_covariant_impl()

bool dart::Field::is_generic_covariant_impl ( ) const
inline

Definition at line 4460 of file object.h.

4460 {
4462 }

◆ is_instance()

bool dart::Field::is_instance ( ) const
inline

Definition at line 4419 of file object.h.

4419{ return !is_static(); }

◆ is_late()

bool dart::Field::is_late ( ) const
inline

Definition at line 4422 of file object.h.

4422{ return IsLateBit::decode(kind_bits()); }

◆ is_nullable()

bool dart::Field::is_nullable ( ) const

Definition at line 11821 of file object.cc.

11821 {
11822#if defined(DEBUG)
11823 // Same assert as guarded_cid(), because is_nullable() also needs to be
11824 // consistent for the background compiler.
11825 Thread* thread = Thread::Current();
11826#if defined(DART_PRECOMPILED_RUNTIME)
11827 ASSERT(!thread->IsInsideCompiler() || is_static());
11828#else
11829 ASSERT(!thread->IsInsideCompiler() ||
11831 is_static());
11832#endif
11833#endif
11834 return is_nullable_unsafe();
11835}
bool is_nullable_unsafe() const
Definition object.h:4731

◆ is_nullable_offset()

static intptr_t dart::Field::is_nullable_offset ( )
inlinestatic

Definition at line 4739 of file object.h.

4739 {
4740 return OFFSET_OF(UntaggedField, is_nullable_);
4741 }

◆ is_nullable_unsafe()

bool dart::Field::is_nullable_unsafe ( ) const
inline

Definition at line 4731 of file object.h.

4731 {
4732 return LoadNonPointer<ClassIdTagType, std::memory_order_relaxed>(
4733 &untag()->is_nullable_) == kNullCid;
4734 }
@ kNullCid
Definition class_id.h:252

◆ is_reflectable()

bool dart::Field::is_reflectable ( ) const
inline

Definition at line 4432 of file object.h.

4432{ return ReflectableBit::decode(kind_bits()); }

◆ is_static()

bool dart::Field::is_static ( ) const
inline

Definition at line 4418 of file object.h.

4418{ return StaticBit::decode(kind_bits()); }

◆ is_unboxed()

bool dart::Field::is_unboxed ( ) const
inline

Definition at line 4685 of file object.h.

4685{ return UnboxedBit::decode(kind_bits()); }

◆ IsConsistentWith()

bool dart::Field::IsConsistentWith ( const Field field) const

Definition at line 12329 of file object.cc.

12329 {
12330 return (untag()->guarded_cid_ == other.untag()->guarded_cid_) &&
12331 (untag()->is_nullable_ == other.untag()->is_nullable_) &&
12332 (untag()->guarded_list_length() ==
12333 other.untag()->guarded_list_length()) &&
12334 (is_unboxed() == other.is_unboxed()) &&
12336 other.static_type_exactness_state().Encode());
12337}
bool is_unboxed() const
Definition object.h:4685

◆ IsGetterName()

bool dart::Field::IsGetterName ( const String function_name)
static

Definition at line 11882 of file object.cc.

11882 {
11883 return function_name.StartsWith(Symbols::GetterPrefix());
11884}
const char *const function_name

◆ IsInitName()

bool dart::Field::IsInitName ( const String function_name)
static

Definition at line 11890 of file object.cc.

11890 {
11891 return function_name.StartsWith(Symbols::InitPrefix());
11892}

◆ IsOriginal()

bool dart::Field::IsOriginal ( ) const
inline

Definition at line 4396 of file object.h.

4396 {
4397 if (IsNull()) {
4398 return true;
4399 }
4400 NoSafepointScope no_safepoint;
4401 return !untag()->owner()->IsField();
4402 }
bool IsNull() const
Definition object.h:363

◆ IsSetterName()

bool dart::Field::IsSetterName ( const String function_name)
static

Definition at line 11886 of file object.cc.

11886 {
11887 return function_name.StartsWith(Symbols::SetterPrefix());
11888}

◆ IsUninitialized()

bool dart::Field::IsUninitialized ( ) const

Definition at line 12339 of file object.cc.

12339 {
12340 Thread* thread = Thread::Current();
12341 const FieldTable* field_table = thread->isolate()->field_table();
12342 const ObjectPtr raw_value = field_table->At(field_id());
12343 ASSERT(raw_value != Object::transition_sentinel().ptr());
12344 return raw_value == Object::sentinel().ptr();
12345}
intptr_t field_id() const
Definition object.h:13258
uword raw_value() const
Definition object.h:670

◆ kernel_offset()

intptr_t dart::Field::kernel_offset ( ) const
inline

Definition at line 4468 of file object.h.

4468 {
4469#if defined(DART_PRECOMPILED_RUNTIME)
4470 return 0;
4471#else
4472 return untag()->kernel_offset_;
4473#endif
4474 }

◆ KernelLibrary()

TypedDataViewPtr dart::Field::KernelLibrary ( ) const

Definition at line 11958 of file object.cc.

11958 {
11960 return info.KernelLibrary(KernelLibraryIndex());
11961}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
intptr_t KernelLibraryIndex() const
Definition object.cc:11970
KernelProgramInfoPtr KernelProgramInfo() const
Definition object.cc:11936

◆ KernelLibraryIndex()

intptr_t dart::Field::KernelLibraryIndex ( ) const

Definition at line 11970 of file object.cc.

11970 {
11971 const Object& obj = Object::Handle(untag()->owner());
11972 // During background JIT compilation field objects are copied
11973 // and copy points to the original field via the owner field.
11974 if (obj.IsField()) {
11975 return Field::Cast(obj).KernelLibraryIndex();
11976 } else if (obj.IsClass()) {
11977 const auto& lib = Library::Handle(Class::Cast(obj).library());
11978 return lib.kernel_library_index();
11979 }
11980 ASSERT(obj.IsPatchClass());
11981 return PatchClass::Cast(obj).kernel_library_index();
11982}

◆ KernelLibraryOffset()

intptr_t dart::Field::KernelLibraryOffset ( ) const

Definition at line 11963 of file object.cc.

11963 {
11964 const intptr_t kernel_library_index = KernelLibraryIndex();
11965 if (kernel_library_index == -1) return 0;
11967 return info.KernelLibraryStartOffset(kernel_library_index);
11968}

◆ KernelProgramInfo()

KernelProgramInfoPtr dart::Field::KernelProgramInfo ( ) const

Definition at line 11936 of file object.cc.

11936 {
11937 const auto& owner = Object::Handle(RawOwner());
11938 if (owner.IsClass()) {
11939 return Class::Cast(owner).KernelProgramInfo();
11940 }
11941 return PatchClass::Cast(owner).kernel_program_info();
11942}
ObjectPtr RawOwner() const
Definition object.cc:11900

◆ kind_bits()

uint16_t dart::Field::kind_bits ( ) const
inline

Definition at line 4413 of file object.h.

4413 {
4414 return LoadNonPointer<uint16_t, std::memory_order_acquire>(
4415 &untag()->kind_bits_);
4416 }

◆ kind_bits_offset()

static intptr_t dart::Field::kind_bits_offset ( )
inlinestatic

Definition at line 4558 of file object.h.

4558 {
4559 return OFFSET_OF(UntaggedField, kind_bits_);
4560 }

◆ LookupGetterSymbol()

StringPtr dart::Field::LookupGetterSymbol ( const String field_name)
static

Definition at line 11851 of file object.cc.

11851 {
11852 return Symbols::LookupFromGet(Thread::Current(), field_name);
11853}
static StringPtr LookupFromGet(Thread *thread, const String &str)
Definition symbols.cc:424

◆ LookupSetterSymbol()

StringPtr dart::Field::LookupSetterSymbol ( const String field_name)
static

Definition at line 11863 of file object.cc.

11863 {
11864 return Symbols::LookupFromSet(Thread::Current(), field_name);
11865}
static StringPtr LookupFromSet(Thread *thread, const String &str)
Definition symbols.cc:428

◆ name()

StringPtr dart::Field::name ( ) const
inline

Definition at line 4408 of file object.h.

4408{ return untag()->name(); }

◆ NameFromGetter()

StringPtr dart::Field::NameFromGetter ( const String getter_name)
static

Definition at line 11867 of file object.cc.

11867 {
11868 return Symbols::New(Thread::Current(), getter_name, kGetterPrefixLength,
11869 getter_name.Length() - kGetterPrefixLength);
11870}
static StringPtr New(Thread *thread, const char *cstr)
Definition symbols.h:722
static const intptr_t kGetterPrefixLength
Definition object.cc:116

◆ NameFromInit()

StringPtr dart::Field::NameFromInit ( const String init_name)
static

Definition at line 11877 of file object.cc.

11877 {
11878 return Symbols::New(Thread::Current(), init_name, kInitPrefixLength,
11879 init_name.Length() - kInitPrefixLength);
11880}
static const intptr_t kInitPrefixLength
Definition object.cc:120

◆ NameFromSetter()

StringPtr dart::Field::NameFromSetter ( const String setter_name)
static

Definition at line 11872 of file object.cc.

11872 {
11873 return Symbols::New(Thread::Current(), setter_name, kSetterPrefixLength,
11874 setter_name.Length() - kSetterPrefixLength);
11875}
static const intptr_t kSetterPrefixLength
Definition object.cc:118

◆ needs_length_check()

bool dart::Field::needs_length_check ( ) const
inline

Definition at line 4670 of file object.h.

4670 {
4672 ASSERT(!r || is_final());
4673 return r;
4674 }

◆ needs_load_guard()

bool dart::Field::needs_load_guard ( ) const
inline

Definition at line 4429 of file object.h.

4429 {
4431 }

◆ NeedsGetter()

bool dart::Field::NeedsGetter ( ) const

Definition at line 12196 of file object.cc.

12196 {
12197 // All instance fields need a getter.
12198 if (!is_static()) return true;
12199
12200 // Static fields also need a getter if they have a non-trivial initializer,
12201 // because it needs to be initialized lazily.
12202 if (has_nontrivial_initializer()) return true;
12203
12204 // Static late fields with no initializer also need a getter, to check if it's
12205 // been initialized.
12206 return is_late() && !has_initializer();
12207}

◆ NeedsInitializationCheckOnLoad()

bool dart::Field::NeedsInitializationCheckOnLoad ( ) const
inline

Definition at line 4679 of file object.h.

4679 {
4680 return needs_load_guard() || (is_late() && !has_trivial_initializer());
4681 }
bool needs_load_guard() const
Definition object.h:4429
bool has_trivial_initializer() const
Definition object.h:4602

◆ NeedsSetter()

bool dart::Field::NeedsSetter ( ) const

Definition at line 12174 of file object.cc.

12174 {
12175 // According to the Dart language specification, final fields don't have
12176 // a setter, except late final fields without initializer.
12177 if (is_final()) {
12178 // Late final fields without initializer always need a setter to check
12179 // if they are already initialized.
12180 if (is_late() && !has_initializer()) {
12181 return true;
12182 }
12183 return false;
12184 }
12185
12186 // Instance non-final fields always need a setter.
12187 if (!is_static()) {
12188 return true;
12189 }
12190
12191 // Otherwise, setters for static fields can be omitted
12192 // and fields can be accessed directly.
12193 return false;
12194}

◆ New()

FieldPtr dart::Field::New ( const String name,
bool  is_static,
bool  is_final,
bool  is_const,
bool  is_reflectable,
bool  is_late,
const Object owner,
const AbstractType type,
TokenPosition  token_pos,
TokenPosition  end_token_pos 
)
static

Definition at line 12069 of file object.cc.

12078 {
12079 ASSERT(!owner.IsNull());
12080 const Field& result = Field::Handle(Field::New());
12083 result.SetFieldTypeSafe(type);
12084#if !defined(DART_PRECOMPILED_RUNTIME)
12086#endif
12087 return result.ptr();
12088}
bool is_reflectable() const
Definition object.h:4432
AbstractTypePtr type() const
Definition object.h:4523
TokenPosition end_token_pos() const
Definition object.h:4563
TokenPosition token_pos() const
Definition object.h:4562
GAsyncResult * result
void UnboxFieldIfSupported(const dart::Field &field, const dart::AbstractType &type)

◆ NewTopLevel()

FieldPtr dart::Field::NewTopLevel ( const String name,
bool  is_final,
bool  is_const,
bool  is_late,
const Object owner,
TokenPosition  token_pos,
TokenPosition  end_token_pos 
)
static

Definition at line 12090 of file object.cc.

12096 {
12097 ASSERT(!owner.IsNull());
12098 const Field& result = Field::Handle(Field::New());
12099 InitializeNew(result, name, true, /* is_static */
12100 is_final, is_const, true, /* is_reflectable */
12102 return result.ptr();
12103}

◆ Original()

FieldPtr dart::Field::Original ( ) const

Definition at line 11790 of file object.cc.

11790 {
11791 if (IsNull()) {
11792 return Field::null();
11793 }
11794 if (untag()->owner()->IsField()) {
11795 return static_cast<FieldPtr>(untag()->owner());
11796 }
11797 return this->ptr();
11798}

◆ Owner()

ClassPtr dart::Field::Owner ( ) const

Definition at line 11911 of file object.cc.

11911 {
11912 const Field& field = Field::Handle(Original());
11913 ASSERT(field.IsOriginal());
11914 const Object& obj = Object::Handle(field.untag()->owner());
11915 if (obj.IsClass()) {
11916 return Class::Cast(obj).ptr();
11917 }
11918 ASSERT(obj.IsPatchClass());
11919 return PatchClass::Cast(obj).wrapped_class();
11920}
FieldPtr Original() const
Definition object.cc:11790

◆ RawOwner()

ObjectPtr dart::Field::RawOwner ( ) const

Definition at line 11900 of file object.cc.

11900 {
11901 if (IsOriginal()) {
11902 return untag()->owner();
11903 } else {
11904 const Field& field = Field::Handle(Original());
11905 ASSERT(field.IsOriginal());
11906 ASSERT(!Object::Handle(field.untag()->owner()).IsField());
11907 return field.untag()->owner();
11908 }
11909}

◆ RecordStore()

void dart::Field::RecordStore ( const Object value) const

Definition at line 13074 of file object.cc.

13074 {
13075 ASSERT(IsOriginal());
13076 Thread* const thread = Thread::Current();
13077 if (!thread->isolate_group()->use_field_guards()) {
13078 return;
13079 }
13080
13081 // We should never try to record a sentinel.
13082 ASSERT(value.ptr() != Object::sentinel().ptr());
13083
13084 SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
13085 if ((guarded_cid() == kDynamicCid) ||
13086 (is_nullable() && value.ptr() == Object::null())) {
13087 // Nothing to do: the field is not guarded or we are storing null into
13088 // a nullable field.
13089 return;
13090 }
13091
13092 if (FLAG_trace_field_guards) {
13093 THR_Print("Store %s %s <- %s\n", ToCString(), GuardedPropertiesAsCString(),
13094 value.ToCString());
13095 }
13096
13097 FieldGuardUpdater updater(this, value);
13098 if (updater.IsUpdateNeeded()) {
13099 if (FLAG_trace_field_guards) {
13101 }
13102 // Nobody else could have updated guard state since we are holding write
13103 // program lock. But we need to ensure we stop mutators as we update
13104 // guard state as we can't have optimized code running with updated fields.
13105 auto isolate_group = IsolateGroup::Current();
13106 isolate_group->RunWithStoppedMutators([&]() {
13107 updater.DoUpdate();
13108 DeoptimizeDependentCode(/*are_mutators_stopped=*/true);
13109 });
13110 }
13111}
const char * GuardedPropertiesAsCString() const
Definition object.cc:12552
void DeoptimizeDependentCode(bool are_mutators_stopped=false) const
Definition object.cc:12318

◆ RegisterDependentCode()

void dart::Field::RegisterDependentCode ( const Code code) const

Definition at line 12310 of file object.cc.

12310 {
12311 ASSERT(IsOriginal());
12312 DEBUG_ASSERT(IsMutatorOrAtDeoptSafepoint());
12313 ASSERT(code.is_optimized());
12314 FieldDependentArray a(*this);
12315 a.Register(code);
12316}

◆ Script()

ScriptPtr dart::Field::Script ( ) const

Definition at line 11922 of file object.cc.

11922 {
11923 // NOTE(turnidge): If you update this function, you probably want to
11924 // update Class::PatchFieldsAndFunctions() at the same time.
11925 const Field& field = Field::Handle(Original());
11926 ASSERT(field.IsOriginal());
11927 const Object& obj = Object::Handle(field.untag()->owner());
11928 if (obj.IsClass()) {
11929 return Class::Cast(obj).script();
11930 }
11931 ASSERT(obj.IsPatchClass());
11932 return PatchClass::Cast(obj).script();
11933}

◆ set_dependent_code()

void dart::Field::set_dependent_code ( const WeakArray array) const

Definition at line 12270 of file object.cc.

12270 {
12271 ASSERT(IsOriginal());
12273 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
12274 untag()->set_dependent_code(array.ptr());
12275}

◆ set_field_id()

void dart::Field::set_field_id ( intptr_t  field_id) const
inline

Definition at line 13262 of file object.h.

13262 {
13264 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
13266}
void set_field_id_unsafe(intptr_t field_id) const
Definition object.h:13268

◆ set_field_id_unsafe()

void dart::Field::set_field_id_unsafe ( intptr_t  field_id) const
inline

Definition at line 13268 of file object.h.

13268 {
13269 ASSERT(is_static());
13270 untag()->set_host_offset_or_field_id(Smi::New(field_id));
13271}
static SmiPtr New(intptr_t value)
Definition object.h:9985

◆ set_guarded_cid()

void dart::Field::set_guarded_cid ( intptr_t  cid) const
inline

Definition at line 4633 of file object.h.

4633 {
4635 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4637 }
void set_guarded_cid_unsafe(intptr_t cid) const
Definition object.h:4638
const intptr_t cid

◆ set_guarded_cid_unsafe()

void dart::Field::set_guarded_cid_unsafe ( intptr_t  cid) const
inline

Definition at line 4638 of file object.h.

4638 {
4639 StoreNonPointer<ClassIdTagType, ClassIdTagType, std::memory_order_relaxed>(
4640 &untag()->guarded_cid_, cid);
4641 }

◆ set_guarded_list_length()

void dart::Field::set_guarded_list_length ( intptr_t  list_length) const
inline

Definition at line 4651 of file object.h.

4651 {
4653 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4654 set_guarded_list_length_unsafe(list_length);
4655 }
void set_guarded_list_length_unsafe(intptr_t list_length) const
Definition object.cc:12156

◆ set_guarded_list_length_in_object_offset()

void dart::Field::set_guarded_list_length_in_object_offset ( intptr_t  offset) const
inline

Definition at line 4661 of file object.h.

4661 {
4663 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4665 }

◆ set_guarded_list_length_in_object_offset_unsafe()

void dart::Field::set_guarded_list_length_in_object_offset_unsafe ( intptr_t  offset) const

Definition at line 12165 of file object.cc.

12166 {
12167 ASSERT(IsOriginal());
12168 StoreNonPointer<int8_t, int8_t, std::memory_order_relaxed>(
12169 &untag()->guarded_list_length_in_object_offset_,
12170 static_cast<int8_t>(list_length_offset - kHeapObjectTag));
12171 ASSERT(guarded_list_length_in_object_offset() == list_length_offset);
12172}

◆ set_guarded_list_length_unsafe()

void dart::Field::set_guarded_list_length_unsafe ( intptr_t  list_length) const

Definition at line 12156 of file object.cc.

12156 {
12157 ASSERT(IsOriginal());
12158 untag()->set_guarded_list_length(Smi::New(list_length));
12159}

◆ set_has_initializer()

void dart::Field::set_has_initializer ( bool  has_initializer) const
inline

Definition at line 4596 of file object.h.

4596 {
4598 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4600 }
void set_has_initializer_unsafe(bool has_initializer) const
Definition object.h:4590

◆ set_has_initializer_unsafe()

void dart::Field::set_has_initializer_unsafe ( bool  has_initializer) const
inline

Definition at line 4590 of file object.h.

4590 {
4591 ASSERT(IsOriginal());
4592 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4593 set_kind_bits(
4595 }
static constexpr uint16_t update(bool value, uint16_t original)
Definition bitfield.h:190

◆ set_has_nontrivial_initializer()

void dart::Field::set_has_nontrivial_initializer ( bool  has_nontrivial_initializer) const
inline

Definition at line 4580 of file object.h.

4580 {
4582 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4584 }
void set_has_nontrivial_initializer_unsafe(bool has_nontrivial_initializer) const
Definition object.h:4573

◆ set_has_nontrivial_initializer_unsafe()

void dart::Field::set_has_nontrivial_initializer_unsafe ( bool  has_nontrivial_initializer) const
inline

Definition at line 4573 of file object.h.

4574 {
4575 ASSERT(IsOriginal());
4576 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4578 has_nontrivial_initializer, untag()->kind_bits_));
4579 }

◆ set_has_pragma()

void dart::Field::set_has_pragma ( bool  value) const
inline

Definition at line 4449 of file object.h.

4449 {
4450 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4451 set_kind_bits(HasPragmaBit::update(value, untag()->kind_bits_));
4452 }

◆ set_initializer_changed_after_initialization()

void dart::Field::set_initializer_changed_after_initialization ( bool  value) const
inline

Definition at line 4442 of file object.h.

4442 {
4443 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4445 value, untag()->kind_bits_));
4446 }

◆ set_is_covariant()

void dart::Field::set_is_covariant ( bool  value) const
inline

Definition at line 4455 of file object.h.

4455 {
4456 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4457 set_kind_bits(CovariantBit::update(value, untag()->kind_bits_));
4458 }

◆ set_is_extension_member()

void dart::Field::set_is_extension_member ( bool  value) const
inline

Definition at line 4708 of file object.h.

4708 {
4709 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4710 set_kind_bits(IsExtensionMemberBit::update(value, untag()->kind_bits_));
4711 }

◆ set_is_extension_type_member()

void dart::Field::set_is_extension_type_member ( bool  value) const
inline

Definition at line 4712 of file object.h.

4712 {
4713 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4714 set_kind_bits(IsExtensionTypeMemberBit::update(value, untag()->kind_bits_));
4715 }

◆ set_is_generic_covariant_impl()

void dart::Field::set_is_generic_covariant_impl ( bool  value) const
inline

Definition at line 4463 of file object.h.

4463 {
4464 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4465 set_kind_bits(GenericCovariantImplBit::update(value, untag()->kind_bits_));
4466 }

◆ set_is_late()

void dart::Field::set_is_late ( bool  value) const
inline

Definition at line 4704 of file object.h.

4704 {
4705 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4706 set_kind_bits(IsLateBit::update(value, untag()->kind_bits_));
4707 }

◆ set_is_nullable()

void dart::Field::set_is_nullable ( bool  val) const
inline

Definition at line 4726 of file object.h.

4726 {
4728 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4730 }
void set_is_nullable_unsafe(bool val) const
Definition object.h:4735

◆ set_is_nullable_unsafe()

void dart::Field::set_is_nullable_unsafe ( bool  val) const
inline

Definition at line 4735 of file object.h.

4735 {
4736 StoreNonPointer<ClassIdTagType, ClassIdTagType, std::memory_order_relaxed>(
4737 &untag()->is_nullable_, val ? kNullCid : kIllegalCid);
4738 }

◆ set_is_reflectable()

void dart::Field::set_is_reflectable ( bool  value) const
inline

Definition at line 4433 of file object.h.

4433 {
4434 ASSERT(IsOriginal());
4435 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4436 set_kind_bits(ReflectableBit::update(value, untag()->kind_bits_));
4437 }

◆ set_is_unboxed()

void dart::Field::set_is_unboxed ( bool  b) const
inline

Definition at line 4693 of file object.h.

4693 {
4695 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4697 }
void set_is_unboxed_unsafe(bool b) const
Definition object.h:4689
static bool b

◆ set_is_unboxed_unsafe()

void dart::Field::set_is_unboxed_unsafe ( bool  b) const
inline

Definition at line 4689 of file object.h.

4689 {
4690 set_kind_bits(UnboxedBit::update(b, untag()->kind_bits_));
4691 }

◆ set_kernel_offset()

void dart::Field::set_kernel_offset ( intptr_t  value) const
inline

Definition at line 4476 of file object.h.

4476 {
4477#if defined(DART_PRECOMPILED_RUNTIME)
4478 UNREACHABLE();
4479#else
4480 ASSERT(value >= 0);
4481 StoreNonPointer(&untag()->kernel_offset_, value);
4482#endif
4483 }

◆ set_needs_load_guard()

void dart::Field::set_needs_load_guard ( bool  value) const
inline

Definition at line 4716 of file object.h.

4716 {
4717 // TODO(36097): Once concurrent access is possible ensure updates are safe.
4718 set_kind_bits(NeedsLoadGuardBit::update(value, untag()->kind_bits_));
4719 }

◆ set_static_type_exactness_state()

void dart::Field::set_static_type_exactness_state ( StaticTypeExactnessState  state) const
inline

Definition at line 4612 of file object.h.

4612 {
4614 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
4616 }
void set_static_type_exactness_state_unsafe(StaticTypeExactnessState state) const
Definition object.h:4618
AtkStateType state

◆ set_static_type_exactness_state_unsafe()

void dart::Field::set_static_type_exactness_state_unsafe ( StaticTypeExactnessState  state) const
inline

Definition at line 4618 of file object.h.

4619 {
4620 StoreNonPointer<int8_t, int8_t, std::memory_order_relaxed>(
4621 &untag()->static_type_exactness_state_, state.Encode());
4622 }

◆ SetFieldType()

void dart::Field::SetFieldType ( const AbstractType value) const

Definition at line 11994 of file object.cc.

11994 {
11996 IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
11997 SetFieldTypeSafe(value);
11998}
void SetFieldTypeSafe(const AbstractType &value) const
Definition object.cc:11985

◆ SetFieldTypeSafe()

void dart::Field::SetFieldTypeSafe ( const AbstractType value) const

Definition at line 11985 of file object.cc.

11985 {
11986 ASSERT(IsOriginal());
11987 ASSERT(!value.IsNull());
11988 if (value.ptr() != type()) {
11989 untag()->set_type(value.ptr());
11990 }
11991}

◆ SetInitializerFunction()

void dart::Field::SetInitializerFunction ( const Function initializer) const

Definition at line 12369 of file object.cc.

12369 {
12370#if defined(DART_PRECOMPILED_RUNTIME)
12371 UNREACHABLE();
12372#else
12373 ASSERT(IsOriginal());
12375 ->initializer_functions_mutex()
12376 ->IsOwnedByCurrentThread());
12377 // We have to ensure that all stores into the initializer function object
12378 // happen before releasing the pointer to the initializer as it may be
12379 // accessed without grabbing the lock.
12380 untag()->set_initializer_function<std::memory_order_release>(
12381 initializer.ptr());
12382#endif
12383}

◆ SetOffset()

void dart::Field::SetOffset ( intptr_t  host_offset_in_bytes,
intptr_t  target_offset_in_bytes 
) const
inline

Definition at line 13237 of file object.h.

13238 {
13239 ASSERT(is_instance()); // Valid only for dart instance fields.
13241 untag()->set_host_offset_or_field_id(
13242 Smi::New(host_offset_in_bytes / kCompressedWordSize));
13243#if !defined(DART_PRECOMPILED_RUNTIME)
13244 ASSERT(compiler::target::kCompressedWordSize != 0);
13246 &untag()->target_offset_,
13247 target_offset_in_bytes / compiler::target::kCompressedWordSize);
13248#else
13249 ASSERT(host_offset_in_bytes == target_offset_in_bytes);
13250#endif // !defined(DART_PRECOMPILED_RUNTIME)
13251}

◆ SetOriginal()

void dart::Field::SetOriginal ( const Field value) const

Definition at line 11837 of file object.cc.

11837 {
11838 ASSERT(value.IsOriginal());
11839 ASSERT(!value.IsNull());
11840 untag()->set_owner(static_cast<ObjectPtr>(value.ptr()));
11841}

◆ SetStaticConstFieldValue()

void dart::Field::SetStaticConstFieldValue ( const Instance value,
bool  assert_initializing_store = true 
) const

Definition at line 12497 of file object.cc.

12498 {
12499 ASSERT(is_static());
12500 auto thread = Thread::Current();
12501 auto initial_field_table = thread->isolate_group()->initial_field_table();
12502
12503 SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
12504 ASSERT(initial_field_table->At(field_id()) == Object::sentinel().ptr() ||
12505 initial_field_table->At(field_id()) == value.ptr() ||
12506 !assert_initializing_store);
12507 initial_field_table->SetAt(field_id(),
12508 value.IsNull() ? Instance::null_instance().ptr()
12509 : Instance::Cast(value).ptr(),
12510 /*concurrent_use=*/true);
12511}

◆ SetStaticValue()

void dart::Field::SetStaticValue ( const Object value) const

Definition at line 12818 of file object.cc.

12818 {
12819 auto thread = Thread::Current();
12820 ASSERT(thread->IsDartMutatorThread());
12821 ASSERT(value.IsNull() || value.IsSentinel() || value.IsInstance());
12822
12823 ASSERT(is_static()); // Valid only for static dart fields.
12824 const intptr_t id = field_id();
12825 ASSERT(id >= 0);
12826
12827 SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
12828 thread->isolate()->field_table()->SetAt(id, value.ptr());
12829}

◆ SetterClosure()

InstancePtr dart::Field::SetterClosure ( ) const

Definition at line 12260 of file object.cc.

12260 {
12261 return AccessorClosure(true);
12262}

◆ SetterName()

StringPtr dart::Field::SetterName ( const String field_name)
static

Definition at line 11855 of file object.cc.

11855 {
11856 return String::Concat(Symbols::SetterPrefix(), field_name);
11857}

◆ SetterSymbol()

StringPtr dart::Field::SetterSymbol ( const String field_name)
static

Definition at line 11859 of file object.cc.

11859 {
11860 return Symbols::FromSet(Thread::Current(), field_name);
11861}
static StringPtr FromSet(Thread *thread, const String &str)
Definition symbols.cc:251

◆ SourceFingerprint()

int32_t dart::Field::SourceFingerprint ( ) const

Definition at line 12119 of file object.cc.

12119 {
12120#if !defined(DART_PRECOMPILED_RUNTIME)
12122 *this);
12123#else
12124 return 0;
12125#endif // !defined(DART_PRECOMPILED_RUNTIME)
12126}
static uint32_t CalculateFieldFingerprint(const Field &field)

◆ static_type_exactness_state()

StaticTypeExactnessState dart::Field::static_type_exactness_state ( ) const
inline

Definition at line 4606 of file object.h.

4606 {
4608 LoadNonPointer<int8_t, std::memory_order_relaxed>(
4609 &untag()->static_type_exactness_state_));
4610 }
static StaticTypeExactnessState Decode(int8_t value)

◆ static_type_exactness_state_offset()

static intptr_t dart::Field::static_type_exactness_state_offset ( )
inlinestatic

Definition at line 4624 of file object.h.

4624 {
4625 return OFFSET_OF(UntaggedField, static_type_exactness_state_);
4626 }

◆ StaticConstFieldValue()

ObjectPtr dart::Field::StaticConstFieldValue ( ) const

Definition at line 12469 of file object.cc.

12469 {
12470 ASSERT(is_static() &&
12471 (is_const() || (is_final() && has_trivial_initializer())));
12472
12473 auto thread = Thread::Current();
12474 auto zone = thread->zone();
12475 auto initial_field_table = thread->isolate_group()->initial_field_table();
12476
12477 // We can safely cache the value of the static const field in the initial
12478 // field table.
12479 auto& value = Object::Handle(
12480 zone, initial_field_table->At(field_id(), /*concurrent_use=*/true));
12481 if (value.ptr() == Object::sentinel().ptr()) {
12482 // Fields with trivial initializers get their initial value
12483 // eagerly when they are registered.
12484 ASSERT(is_const());
12488 if (!value.IsError()) {
12489 ASSERT(value.IsNull() || value.IsInstance());
12490 SetStaticConstFieldValue(value.IsNull() ? Instance::null_instance()
12491 : Instance::Cast(value));
12492 }
12493 }
12494 return value.ptr();
12495}
void SetStaticConstFieldValue(const Instance &value, bool assert_initializing_store=true) const
Definition object.cc:12497

◆ StaticValue()

ObjectPtr dart::Field::StaticValue ( ) const
inline

Definition at line 13253 of file object.h.

13253 {
13254 ASSERT(is_static()); // Valid only for static dart fields.
13255 return Isolate::Current()->field_table()->At(field_id());
13256}
ObjectPtr At(intptr_t index, bool concurrent_use=false) const
Definition field_table.h:61
FieldTable * field_table() const
Definition isolate.h:953
static Isolate * Current()
Definition isolate.h:939

◆ TargetOffset()

intptr_t dart::Field::TargetOffset ( ) const
inline

Definition at line 13220 of file object.h.

13220 {
13221 ASSERT(is_instance()); // Valid only for dart instance fields.
13222#if !defined(DART_PRECOMPILED_RUNTIME)
13223 return (untag()->target_offset_ * compiler::target::kCompressedWordSize);
13224#else
13225 return HostOffset();
13226#endif // !defined(DART_PRECOMPILED_RUNTIME)
13227}
intptr_t HostOffset() const
Definition object.h:13215

◆ TargetOffsetOf()

intptr_t dart::Field::TargetOffsetOf ( FieldPtr  field)
inlinestatic

Definition at line 13229 of file object.h.

13229 {
13230#if !defined(DART_PRECOMPILED_RUNTIME)
13231 return field->untag()->target_offset_;
13232#else
13233 return Smi::Value(field->untag()->host_offset_or_field_id());
13234#endif // !defined(DART_PRECOMPILED_RUNTIME)
13235}

◆ token_pos()

TokenPosition dart::Field::token_pos ( ) const
inline

Definition at line 4562 of file object.h.

4562{ return untag()->token_pos_; }

◆ type()

AbstractTypePtr dart::Field::type ( ) const
inline

Definition at line 4523 of file object.h.

4523{ return untag()->type(); }

◆ UserVisibleName()

StringPtr dart::Field::UserVisibleName ( ) const

Definition at line 12142 of file object.cc.

12142 {
12143 if (FLAG_show_internal_names) {
12144 return name();
12145 }
12146 return Symbols::New(
12150}
bool is_extension_member() const
Definition object.h:4423
bool is_extension_type_member() const
Definition object.h:4426
static const char * ScrubName(const String &name, bool is_extension=false)
Definition object.cc:287

◆ UserVisibleNameCString()

const char * dart::Field::UserVisibleNameCString ( ) const

Definition at line 12133 of file object.cc.

12133 {
12134 NoSafepointScope no_safepoint;
12135 if (FLAG_show_internal_names) {
12136 return String::Handle(name()).ToCString();
12137 }
12140}

◆ VerifyEntryPoint()

ErrorPtr dart::Field::VerifyEntryPoint ( EntryPointPragma  kind) const

Definition at line 27439 of file object.cc.

27439 {
27440 if (!FLAG_verify_entry_points) return Error::null();
27441 const Class& cls = Class::Handle(Owner());
27442 const Library& lib = Library::Handle(cls.library());
27443 return dart::VerifyEntryPoint(lib, *this, *this, {pragma});
27444}
DART_WARN_UNUSED_RESULT ErrorPtr VerifyEntryPoint(const Library &lib, const Object &member, const Object &annotated, std::initializer_list< EntryPointPragma > allowed_kinds)
Definition object.cc:27227

Friends And Related Symbol Documentation

◆ Class

friend class Class
friend

Definition at line 4895 of file object.h.

◆ FieldDeserializationCluster

friend class FieldDeserializationCluster
friend

Definition at line 4898 of file object.h.

◆ FieldSerializationCluster

friend class FieldSerializationCluster
friend

Definition at line 4897 of file object.h.

◆ StoreFieldInstr

friend class StoreFieldInstr
friend

Definition at line 4819 of file object.h.

◆ UntaggedField

friend class UntaggedField
friend

Definition at line 4896 of file object.h.


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