5#ifndef V8_COMPILER_ACCESS_INFO_H_
6#define V8_COMPILER_ACCESS_INFO_H_
23class CompilationDependencies;
24class CompilationDependency;
25class ElementAccessFeedback;
76 OptionalJSObjectRef
holder);
91 OptionalObjectRef constant, OptionalJSObjectRef api_holder);
104 ObjectRef constant, OptionalJSObjectRef api_holder,
NameRef name);
183 return name_.value();
196 OptionalObjectRef constant, OptionalJSObjectRef api_holder,
197 OptionalNameRef name,
271 OptionalJSObjectRef holder,
275 OptionalJSObjectRef holder,
bool ComputeElementAccessInfos(ElementAccessFeedback const &feedback, ZoneVector< ElementAccessInfo > *access_infos) const
AccessInfoFactory(JSHeapBroker *broker, Zone *zone)
std::optional< ElementAccessInfo > ConsolidateElementLoad(ElementAccessFeedback const &feedback) const
PropertyAccessInfo LookupTransition(MapRef map, NameRef name, OptionalJSObjectRef holder, PropertyAttributes attrs) const
bool FinalizePropertyAccessInfos(ZoneVector< PropertyAccessInfo > infos, AccessMode access_mode, ZoneVector< PropertyAccessInfo > *result) const
JSHeapBroker *const broker_
TypeCache const *const type_cache_
JSHeapBroker * broker() const
PropertyAccessInfo ComputeDictionaryProtoAccessInfo(MapRef receiver_map, NameRef name, JSObjectRef holder, InternalIndex dict_index, AccessMode access_mode, PropertyDetails details) const
PropertyAccessInfo LookupSpecialFieldAccessor(MapRef map, NameRef name) const
bool TryLoadPropertyDetails(MapRef map, OptionalJSObjectRef maybe_holder, NameRef name, InternalIndex *index_out, PropertyDetails *details_out) const
void MergePropertyAccessInfos(ZoneVector< PropertyAccessInfo > infos, AccessMode access_mode, ZoneVector< PropertyAccessInfo > *result) const
AccessInfoFactory(const AccessInfoFactory &)=delete
PropertyAccessInfo Invalid() const
PropertyAccessInfo FinalizePropertyAccessInfosAsOne(ZoneVector< PropertyAccessInfo > infos, AccessMode access_mode) const
PropertyAccessInfo ComputePropertyAccessInfo(MapRef map, NameRef name, AccessMode access_mode) const
AccessInfoFactory & operator=(const AccessInfoFactory &)=delete
std::optional< ElementAccessInfo > ComputeElementAccessInfo(MapRef map, AccessMode access_mode) const
PropertyAccessInfo ComputeDataFieldAccessInfo(MapRef receiver_map, MapRef map, NameRef name, OptionalJSObjectRef holder, InternalIndex descriptor, AccessMode access_mode) const
Isolate * isolate() const
PropertyAccessInfo ComputeAccessorDescriptorAccessInfo(MapRef receiver_map, NameRef name, MapRef map, OptionalJSObjectRef holder, InternalIndex descriptor, AccessMode access_mode) const
CompilationDependencies * dependencies() const
ZoneVector< MapRef > lookup_start_object_maps_
ZoneVector< MapRef > const & lookup_start_object_maps() const
ElementAccessInfo(ZoneVector< MapRef > &&lookup_start_object_maps, ElementsKind elements_kind, Zone *zone)
ZoneVector< MapRef > const & transition_sources() const
ZoneVector< MapRef > transition_sources_
ElementsKind elements_kind_
ElementsKind elements_kind() const
void AddTransitionSource(MapRef map)
OptionalMapRef field_map_
Representation field_representation() const
bool IsFastAccessorConstant() const
bool IsStringLength() const
OptionalMapRef field_owner_map_
@ kDictionaryProtoAccessorConstant
@ kDictionaryProtoDataConstant
ConstFieldInfo GetConstFieldInfo() const
static PropertyAccessInfo TypedArrayLength(Zone *zone, MapRef receiver_map)
OptionalMapRef transition_map() const
PropertyAccessInfo(Zone *zone)
bool IsDictionaryProtoAccessorConstant() const
bool IsDictionaryProtoDataConstant() const
static PropertyAccessInfo FastAccessorConstant(Zone *zone, MapRef receiver_map, OptionalJSObjectRef holder, OptionalObjectRef constant, OptionalJSObjectRef api_holder)
InternalIndex dictionary_index() const
static PropertyAccessInfo NotFound(Zone *zone, MapRef receiver_map, OptionalJSObjectRef holder)
ElementsKind elements_kind() const
bool Merge(PropertyAccessInfo const *that, AccessMode access_mode, Zone *zone) V8_WARN_UNUSED_RESULT
OptionalJSObjectRef holder_
bool IsStringWrapperLength() const
bool IsTypedArrayLength() const
static PropertyAccessInfo StringWrapperLength(Zone *zone, MapRef receiver_map)
OptionalJSObjectRef holder() const
FieldIndex field_index() const
void set_elements_kind(ElementsKind elements_kind)
OptionalMapRef transition_map_
InternalIndex dictionary_index_
static PropertyAccessInfo DictionaryProtoDataConstant(Zone *zone, MapRef receiver_map, JSObjectRef holder, InternalIndex dict_index, NameRef name)
ZoneVector< CompilationDependency const * > unrecorded_dependencies_
ZoneVector< MapRef > const & lookup_start_object_maps() const
bool HasDictionaryHolder() const
static PropertyAccessInfo StringLength(Zone *zone, MapRef receiver_map)
bool IsFastDataConstant() const
static PropertyAccessInfo Invalid(Zone *zone)
OptionalJSObjectRef api_holder_
bool IsModuleExport() const
ElementsKind elements_kind_
bool HasTransitionMap() const
OptionalObjectRef constant() const
OptionalMapRef field_map() const
static PropertyAccessInfo ModuleExport(Zone *zone, MapRef receiver_map, CellRef cell)
static PropertyAccessInfo DataField(JSHeapBroker *broker, Zone *zone, MapRef receiver_map, ZoneVector< CompilationDependency const * > &&unrecorded_dependencies, FieldIndex field_index, Representation field_representation, Type field_type, MapRef field_owner_map, OptionalMapRef field_map, OptionalJSObjectRef holder, OptionalMapRef transition_map)
OptionalObjectRef constant_
void RecordDependencies(CompilationDependencies *dependencies)
ZoneVector< MapRef > lookup_start_object_maps_
static PropertyAccessInfo FastDataConstant(Zone *zone, MapRef receiver_map, ZoneVector< CompilationDependency const * > &&unrecorded_dependencies, FieldIndex field_index, Representation field_representation, Type field_type, MapRef field_owner_map, OptionalMapRef field_map, OptionalJSObjectRef holder, OptionalMapRef transition_map)
static PropertyAccessInfo DictionaryProtoAccessorConstant(Zone *zone, MapRef receiver_map, OptionalJSObjectRef holder, ObjectRef constant, OptionalJSObjectRef api_holder, NameRef name)
Representation field_representation_
ZoneVector< RpoNumber > & result
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
#define DCHECK_IMPLIES(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)
#define V8_WARN_UNUSED_RESULT