Index: src/ic.h |
diff --git a/src/ic.h b/src/ic.h |
index 81aa6b7c2f0bb27fa8f9a4095b003e42e6640424..65cade4242b156f8b52d0c47e04cf9fc21c87c0b 100644 |
--- a/src/ic.h |
+++ b/src/ic.h |
@@ -91,10 +91,13 @@ class IC { |
// Construct the IC structure with the given number of extra |
// JavaScript frames on the stack. |
IC(FrameDepth depth, Isolate* isolate); |
+ virtual ~IC() {} |
// Get the call-site target; used for determining the state. |
- Code* target() { return GetTargetAtAddress(address()); } |
- inline Address address(); |
+ Code* target() const { return GetTargetAtAddress(address()); } |
+ inline Address address() const; |
+ |
+ virtual bool IsGeneric() const { return false; } |
// Compute the current IC state based on the target stub, receiver and name. |
static State StateFrom(Code* target, Object* receiver, Object* name); |
@@ -139,13 +142,15 @@ class IC { |
#ifdef ENABLE_DEBUGGER_SUPPORT |
// Computes the address in the original code when the code running is |
// containing break points (calls to DebugBreakXXX builtins). |
- Address OriginalCodeAddress(); |
+ Address OriginalCodeAddress() const; |
#endif |
// Set the call-site target. |
void set_target(Code* code) { SetTargetAtAddress(address(), code); } |
#ifdef DEBUG |
+ char TransitionMarkFromState(IC::State state); |
+ |
void TraceIC(const char* type, |
Handle<Object> name, |
State old_state, |
@@ -452,6 +457,10 @@ class KeyedLoadIC: public KeyedIC { |
bool is_js_array, |
ElementsKind elements_kind); |
+ virtual bool IsGeneric() const { |
+ return target() == *generic_stub(); |
+ } |
+ |
protected: |
virtual Code::Kind kind() const { return Code::KEYED_LOAD_IC; } |
@@ -477,7 +486,7 @@ class KeyedLoadIC: public KeyedIC { |
Handle<Code> megamorphic_stub() { |
return isolate()->builtins()->KeyedLoadIC_Generic(); |
} |
- Handle<Code> generic_stub() { |
+ Handle<Code> generic_stub() const { |
return isolate()->builtins()->KeyedLoadIC_Generic(); |
} |
Handle<Code> pre_monomorphic_stub() { |
@@ -595,6 +604,11 @@ class KeyedStoreIC: public KeyedIC { |
bool is_js_array, |
ElementsKind elements_kind); |
+ virtual bool IsGeneric() const { |
+ return target() == *generic_stub() || |
+ target() == *generic_stub_strict(); |
+ } |
+ |
protected: |
virtual Code::Kind kind() const { return Code::KEYED_STORE_IC; } |
@@ -632,10 +646,10 @@ class KeyedStoreIC: public KeyedIC { |
Handle<Code> megamorphic_stub_strict() { |
return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); |
} |
- Handle<Code> generic_stub() { |
+ Handle<Code> generic_stub() const { |
return isolate()->builtins()->KeyedStoreIC_Generic(); |
} |
- Handle<Code> generic_stub_strict() { |
+ Handle<Code> generic_stub_strict() const { |
return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); |
} |
Handle<Code> non_strict_arguments_stub() { |