Index: src/type-feedback-vector.h |
diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h |
index d993b245d8b0c37e0f3fb69edaada36be6095540..61463b0394fc8a5ed631ab8d76430755f9def6cc 100644 |
--- a/src/type-feedback-vector.h |
+++ b/src/type-feedback-vector.h |
@@ -173,105 +173,6 @@ class TypeFeedbackVector : public FixedArray { |
DISALLOW_IMPLICIT_CONSTRUCTORS(TypeFeedbackVector); |
}; |
- |
- |
-// A FeedbackNexus is the combination of a TypeFeedbackVector and a slot. |
-// Derived classes customize the update and retrieval of feedback. |
-class FeedbackNexus { |
- public: |
- FeedbackNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorICSlot slot) |
- : vector_handle_(vector), use_handle_(true), slot_(slot) {} |
- FeedbackNexus(TypeFeedbackVector* vector, FeedbackVectorICSlot slot) |
- : vector_(vector), use_handle_(false), slot_(slot) {} |
- virtual ~FeedbackNexus() {} |
- |
- Handle<TypeFeedbackVector> vector_handle() const { |
- DCHECK(use_handle_); |
- return vector_handle_; |
- } |
- TypeFeedbackVector* vector() const { |
- return use_handle_ ? *vector_handle_ : vector_; |
- } |
- FeedbackVectorICSlot slot() const { return slot_; } |
- |
- InlineCacheState ic_state() const { return StateFromFeedback(); } |
- Map* FindFirstMap() const { |
- MapHandleList maps; |
- ExtractMaps(&maps); |
- if (maps.length() > 0) return *maps.at(0); |
- return NULL; |
- } |
- |
- virtual InlineCacheState StateFromFeedback() const = 0; |
- virtual int ExtractMaps(MapHandleList* maps) const = 0; |
- virtual MaybeHandle<Code> FindHandlerForMap(Handle<Map> map) const = 0; |
- virtual bool FindHandlers(CodeHandleList* code_list, int length = -1) const { |
- return length == 0; |
- } |
- virtual Name* FindFirstName() const { return NULL; } |
- |
- Object* GetFeedback() const { return vector()->Get(slot()); } |
- |
- protected: |
- Isolate* GetIsolate() const { return vector()->GetIsolate(); } |
- |
- void SetFeedback(Object* feedback, |
- WriteBarrierMode mode = UPDATE_WRITE_BARRIER) { |
- vector()->Set(slot(), feedback, mode); |
- } |
- |
- Handle<FixedArray> EnsureArrayOfSize(int length); |
- void InstallHandlers(int start_index, TypeHandleList* types, |
- CodeHandleList* handlers); |
- int ExtractMaps(int start_index, MapHandleList* maps) const; |
- MaybeHandle<Code> FindHandlerForMap(int start_index, Handle<Map> map) const; |
- bool FindHandlers(int start_index, CodeHandleList* code_list, |
- int length) const; |
- |
- private: |
- // The reason for the union is that we can use handles during IC miss, |
- // but not during GC when we clear ICs. If you have a handle to the |
- // vector that is better because more operations can be done, like |
- // allocation. |
- union { |
- Handle<TypeFeedbackVector> vector_handle_; |
- TypeFeedbackVector* vector_; |
- }; |
- bool use_handle_; |
- FeedbackVectorICSlot slot_; |
-}; |
- |
- |
-class CallICNexus : public FeedbackNexus { |
- public: |
- CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorICSlot slot) |
- : FeedbackNexus(vector, slot) { |
- DCHECK(vector->GetKind(slot) == Code::CALL_IC); |
- } |
- CallICNexus(TypeFeedbackVector* vector, FeedbackVectorICSlot slot) |
- : FeedbackNexus(vector, slot) { |
- DCHECK(vector->GetKind(slot) == Code::CALL_IC); |
- } |
- |
- void ConfigureUninitialized(); |
- void ConfigureGeneric(); |
- void ConfigureMonomorphicArray(); |
- void ConfigureMonomorphic(Handle<JSFunction> function); |
- |
- virtual InlineCacheState StateFromFeedback() const OVERRIDE; |
- |
- virtual int ExtractMaps(MapHandleList* maps) const OVERRIDE { |
- // CallICs don't record map feedback. |
- return 0; |
- } |
- virtual MaybeHandle<Code> FindHandlerForMap(Handle<Map> map) const OVERRIDE { |
- return MaybeHandle<Code>(); |
- } |
- virtual bool FindHandlers(CodeHandleList* code_list, |
- int length = -1) const OVERRIDE { |
- return length == 0; |
- } |
-}; |
} |
} // namespace v8::internal |