| Index: src/ic/ic.h
|
| diff --git a/src/ic/ic.h b/src/ic/ic.h
|
| index 44df480f5500f7b8d10c9bdede035cd36d44d407..5177ff8e22881aa53bd119419142a96a5894a830 100644
|
| --- a/src/ic/ic.h
|
| +++ b/src/ic/ic.h
|
| @@ -86,6 +86,10 @@ class IC {
|
| static void Clear(Isolate* isolate, Address address,
|
| ConstantPoolArray* constant_pool);
|
|
|
| + // Clear the vector-based inline cache to initial state.
|
| + static void Clear(Isolate* isolate, Code::Kind kind, Code* host,
|
| + TypeFeedbackVector* vector, FeedbackVectorICSlot slot);
|
| +
|
| #ifdef DEBUG
|
| bool IsLoadStub() const {
|
| return target()->is_load_stub() || target()->is_keyed_load_stub();
|
| @@ -294,26 +298,35 @@ class CallIC : public IC {
|
| explicit CallIC(Isolate* isolate) : IC(EXTRA_CALL_FRAME, isolate) {}
|
|
|
| void PatchMegamorphic(Handle<Object> function,
|
| - Handle<TypeFeedbackVector> vector, Handle<Smi> slot);
|
| + Handle<TypeFeedbackVector> vector,
|
| + FeedbackVectorICSlot slot);
|
|
|
| void HandleMiss(Handle<Object> receiver, Handle<Object> function,
|
| - Handle<TypeFeedbackVector> vector, Handle<Smi> slot);
|
| + Handle<TypeFeedbackVector> vector, FeedbackVectorICSlot slot);
|
|
|
| // Returns true if a custom handler was installed.
|
| bool DoCustomHandler(Handle<Object> receiver, Handle<Object> function,
|
| - Handle<TypeFeedbackVector> vector, Handle<Smi> slot,
|
| - const CallICState& state);
|
| + Handle<TypeFeedbackVector> vector,
|
| + FeedbackVectorICSlot slot, const CallICState& state);
|
|
|
| // Code generator routines.
|
| static Handle<Code> initialize_stub(Isolate* isolate, int argc,
|
| CallICState::CallType call_type);
|
|
|
| - static void Clear(Isolate* isolate, Address address, Code* target,
|
| - ConstantPoolArray* constant_pool);
|
| + static void Clear(Isolate* isolate, Code* host, TypeFeedbackVector* vector,
|
| + FeedbackVectorICSlot slot);
|
|
|
| private:
|
| - inline IC::State FeedbackToState(Handle<TypeFeedbackVector> vector,
|
| - Handle<Smi> slot) const;
|
| + static inline IC::State FeedbackToState(Isolate* isolate,
|
| + TypeFeedbackVector* vector,
|
| + FeedbackVectorICSlot slot);
|
| +
|
| + inline Code* get_host();
|
| +
|
| + // As a vector-based IC, type feedback must be updated differently.
|
| + static void OnTypeFeedbackChanged(Isolate* isolate, Code* host,
|
| + TypeFeedbackVector* vector, State old_state,
|
| + State new_state);
|
| };
|
|
|
|
|
|
|