Index: src/ic.h |
diff --git a/src/ic.h b/src/ic.h |
index 25ac1cfff9083edd6d3122c1c616cac61a2789b9..3a90c7c74db218b9e68336d46c80c757fe4b3cf0 100644 |
--- a/src/ic.h |
+++ b/src/ic.h |
@@ -98,10 +98,14 @@ class IC { |
Handle<Code> target() const { return target_; } |
Code* raw_target() const { return GetTargetAtAddress(address()); } |
+ State state() const { return state_; } |
inline Address address() const; |
// Compute the current IC state based on the target stub, receiver and name. |
- static State StateFrom(Code* target, Object* receiver, Object* name); |
+ void UpdateState(Object* receiver, Object* name); |
+ void MarkMonomorphicPrototypeFailure() { |
+ state_ = MONOMORPHIC_PROTOTYPE_FAILURE; |
+ } |
// Clear the inline cache to initial state. |
static void Clear(Isolate* isolate, Address address); |
@@ -160,7 +164,6 @@ class IC { |
void TraceIC(const char* type, |
Handle<Object> name, |
- State old_state, |
Code* new_target); |
#endif |
@@ -178,15 +181,13 @@ class IC { |
Handle<Code> handler, |
Handle<String> name); |
- bool UpdatePolymorphicIC(State state, |
- Handle<HeapObject> receiver, |
+ bool UpdatePolymorphicIC(Handle<HeapObject> receiver, |
Handle<String> name, |
Handle<Code> code); |
void CopyICToMegamorphicCache(Handle<String> name); |
bool IsTransitionedMapOfMonomorphicTarget(Map* receiver_map); |
- void PatchCache(State state, |
- Handle<HeapObject> receiver, |
+ void PatchCache(Handle<HeapObject> receiver, |
Handle<String> name, |
Handle<Code> code); |
virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code); |
@@ -214,6 +215,7 @@ class IC { |
// The original code target that missed. |
Handle<Code> target_; |
+ State state_; |
DISALLOW_IMPLICIT_CONSTRUCTORS(IC); |
}; |
@@ -241,8 +243,7 @@ class CallICBase: public IC { |
class StringStubState: public BitField<StringStubFeedback, 1, 1> {}; |
// Returns a JSFunction or a Failure. |
- MUST_USE_RESULT MaybeObject* LoadFunction(State state, |
- Code::ExtraICState extra_ic_state, |
+ MUST_USE_RESULT MaybeObject* LoadFunction(Code::ExtraICState extra_ic_state, |
Handle<Object> object, |
Handle<String> name); |
@@ -256,7 +257,6 @@ class CallICBase: public IC { |
// Compute a monomorphic stub if possible, otherwise return a null handle. |
Handle<Code> ComputeMonomorphicStub(LookupResult* lookup, |
- State state, |
Code::ExtraICState extra_state, |
Handle<Object> object, |
Handle<String> name); |
@@ -264,7 +264,6 @@ class CallICBase: public IC { |
// Update the inline cache and the global stub cache based on the lookup |
// result. |
void UpdateCaches(LookupResult* lookup, |
- State state, |
Code::ExtraICState extra_ic_state, |
Handle<Object> object, |
Handle<String> name); |
@@ -335,8 +334,7 @@ class KeyedCallIC: public CallICBase { |
ASSERT(target()->is_keyed_call_stub()); |
} |
- MUST_USE_RESULT MaybeObject* LoadFunction(State state, |
- Handle<Object> object, |
+ MUST_USE_RESULT MaybeObject* LoadFunction(Handle<Object> object, |
Handle<Object> key); |
// Code generator routines. |
@@ -371,8 +369,7 @@ class LoadIC: public IC { |
static void GenerateNormal(MacroAssembler* masm); |
static void GenerateRuntimeGetProperty(MacroAssembler* masm); |
- MUST_USE_RESULT MaybeObject* Load(State state, |
- Handle<Object> object, |
+ MUST_USE_RESULT MaybeObject* Load(Handle<Object> object, |
Handle<String> name); |
protected: |
@@ -389,7 +386,6 @@ class LoadIC: public IC { |
// Update the inline cache and the global stub cache based on the |
// lookup result. |
void UpdateCaches(LookupResult* lookup, |
- State state, |
Handle<Object> object, |
Handle<String> name); |
@@ -430,8 +426,7 @@ class KeyedLoadIC: public LoadIC { |
ASSERT(target()->is_keyed_load_stub()); |
} |
- MUST_USE_RESULT MaybeObject* Load(State state, |
- Handle<Object> object, |
+ MUST_USE_RESULT MaybeObject* Load(Handle<Object> object, |
Handle<Object> key, |
ICMissMode force_generic); |
@@ -528,7 +523,6 @@ class StoreIC: public IC { |
StrictModeFlag strict_mode); |
MUST_USE_RESULT MaybeObject* Store( |
- State state, |
Handle<Object> object, |
Handle<String> name, |
Handle<Object> value, |
@@ -577,7 +571,6 @@ class StoreIC: public IC { |
// Update the inline cache and the global stub cache based on the |
// lookup result. |
void UpdateCaches(LookupResult* lookup, |
- State state, |
Handle<JSObject> receiver, |
Handle<String> name, |
Handle<Object> value); |
@@ -633,8 +626,7 @@ class KeyedStoreIC: public StoreIC { |
ASSERT(target()->is_keyed_store_stub()); |
} |
- MUST_USE_RESULT MaybeObject* Store(State state, |
- Handle<Object> object, |
+ MUST_USE_RESULT MaybeObject* Store(Handle<Object> object, |
Handle<Object> name, |
Handle<Object> value, |
ICMissMode force_generic); |