36 virtual ~IC() =
default;
188 :
IC(isolate, vector, slot,
kind) {
239 bool* is_found =
nullptr);
266 :
IC(isolate, vector, slot,
kind) {
313 return nexus()->GetKeyedAccessStoreMode();
void push_back(const_reference x)
bool empty() const noexcept
bool UpdatePolymorphicIC(DirectHandle< Name > name, const MaybeObjectDirectHandle &handler)
void TraceIC(const char *type, DirectHandle< Object > name)
bool IsDefineNamedOwnIC() const
void set_slow_stub_reason(const char *reason)
bool IsSetNamedIC() const
bool IsStoreInArrayLiteralIC() const
bool IsDefineKeyedOwnIC() const
Handle< Map > lookup_start_object_map()
void update_lookup_start_object_map(DirectHandle< Object > object)
bool vector_needs_update()
bool IsStoreGlobalIC() const
const char * slow_stub_reason_
static bool IsHandler(Tagged< MaybeObject > object)
Handle< Map > lookup_start_object_map_
void set_accessor(Handle< Object > accessor)
bool IsKeyedHasIC() const
MaybeDirectHandle< Object > ReferenceError(Handle< Name > name)
bool ShouldRecomputeHandler(DirectHandle< String > name)
void MarkRecomputeHandler(DirectHandle< Object > name)
bool IsLoadGlobalIC() const
bool IsTransitionOfMonomorphicTarget(Tagged< Map > source_map, Tagged< Map > target_map)
DISALLOW_IMPLICIT_CONSTRUCTORS(IC)
Isolate * isolate() const
Tagged< Map > FirstTargetMap()
MaybeHandle< Object > accessor() const
FeedbackSlotKind kind() const
MaybeDirectHandle< Object > TypeError(MessageTemplate, Handle< Object > object, Handle< Object > key)
void UpdateState(DirectHandle< Object > lookup_start_object, DirectHandle< Object > name)
void TargetMaps(MapHandles *list)
bool ConfigureVectorState(IC::State new_state, DirectHandle< Object > key)
void CopyICToMegamorphicCache(DirectHandle< Name > name)
bool IsKeyedLoadIC() const
bool RecomputeHandlerForName(DirectHandle< Object > name)
MaybeHandle< Object > accessor_
char TransitionMarkFromState(IC::State state)
void UpdateMegamorphicCache(DirectHandle< Map > map, DirectHandle< Name > name, const MaybeObjectDirectHandle &handler)
bool IsAnyDefineOwn() const
bool UpdateMegaDOMIC(const MaybeObjectDirectHandle &handler, DirectHandle< Name > name)
void UpdateMonomorphicIC(const MaybeObjectDirectHandle &handler, DirectHandle< Name > name)
IC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
bool IsKeyedStoreIC() const
const FeedbackNexus * nexus() const
static void OnFeedbackChanged(Isolate *isolate, Tagged< FeedbackVector > vector, FeedbackSlot slot, const char *reason)
void SetCache(DirectHandle< Name > name, Handle< Object > handler)
Handle< Object > LoadElementHandler(DirectHandle< Map > receiver_map, KeyedAccessLoadMode new_load_mode)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > RuntimeLoad(DirectHandle< JSAny > object, DirectHandle< Object > key, bool *is_found=nullptr)
KeyedLoadIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
void LoadElementPolymorphicHandlers(MapHandles *receiver_maps, MaybeObjectHandles *handlers, KeyedAccessLoadMode new_load_mode)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Load(Handle< JSAny > object, Handle< Object > key)
KeyedAccessLoadMode GetKeyedAccessLoadModeFor(DirectHandle< Map > receiver_map) const
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > LoadName(Handle< JSAny > object, DirectHandle< Object > key, Handle< Name > name)
void UpdateLoadElement(DirectHandle< HeapObject > receiver, KeyedAccessLoadMode new_load_mode)
KeyedAccessStoreMode GetKeyedAccessStoreMode()
DirectHandle< Map > ComputeTransitionedMap(Handle< Map > map, TransitionMode transition_mode)
Handle< Object > StoreElementHandler(DirectHandle< Map > receiver_map, KeyedAccessStoreMode store_mode, MaybeDirectHandle< UnionOf< Smi, Cell > > prev_validity_cell=kNullMaybeHandle)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Store(Handle< JSAny > object, Handle< Object > name, DirectHandle< Object > value)
void UpdateStoreElement(Handle< Map > receiver_map, KeyedAccessStoreMode store_mode, Handle< Map > new_receiver_map)
KeyedStoreIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
void StoreElementPolymorphicHandlers(MapsAndHandlers *receiver_maps_and_handlers, KeyedAccessStoreMode store_mode)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Load(Handle< Name > name, bool update_feedback=true)
LoadGlobalIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
static bool ShouldThrowReferenceError(FeedbackSlotKind kind)
void UpdateCaches(LookupIterator *lookup)
MaybeObjectHandle ComputeHandler(LookupIterator *lookup)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Load(Handle< JSAny > object, Handle< Name > name, bool update_feedback=true, DirectHandle< JSAny > receiver=DirectHandle< JSAny >())
friend class NamedLoadHandlerCompiler
bool ShouldThrowReferenceError() const
LoadIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Store(Handle< Name > name, DirectHandle< Object > value)
StoreGlobalIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
bool LookupForWrite(LookupIterator *it, DirectHandle< Object > value, StoreOrigin store_origin)
MaybeObjectHandle ComputeHandler(LookupIterator *lookup)
void UpdateCaches(LookupIterator *lookup, DirectHandle< Object > value, StoreOrigin store_origin)
StoreIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot, FeedbackSlotKind kind)
V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > Store(Handle< JSAny > object, Handle< Name > name, DirectHandle< Object > value, StoreOrigin store_origin=StoreOrigin::kNamed)
MaybeDirectHandle< Object > Store(DirectHandle< JSArray > array, Handle< Object > index, DirectHandle< Object > value)
StoreInArrayLiteralIC(Isolate *isolate, Handle< FeedbackVector > vector, FeedbackSlot slot)
bool IsStoreGlobalICKind(FeedbackSlotKind kind)
bool IsKeyedHasICKind(FeedbackSlotKind kind)
constexpr NullMaybeHandleType kNullMaybeHandle
bool IsDefineNamedOwnICKind(FeedbackSlotKind kind)
bool IsSetNamedICKind(FeedbackSlotKind kind)
@ kLoadGlobalNotInsideTypeof
bool IsLoadICKind(FeedbackSlotKind kind)
bool IsStoreInArrayLiteralICKind(FeedbackSlotKind kind)
typename detail::FlattenUnionHelper< Union<>, Ts... >::type UnionOf
bool IsKeyedLoadICKind(FeedbackSlotKind kind)
bool IsDefineKeyedOwnICKind(FeedbackSlotKind kind)
bool IsLoadGlobalICKind(FeedbackSlotKind kind)
std::vector< MaybeObjectHandle > MaybeObjectHandles
bool IsKeyedStoreICKind(FeedbackSlotKind kind)
KeyedStoreIncrementLength
#define DCHECK(condition)
#define V8_WARN_UNUSED_RESULT