Index: src/ic.h |
diff --git a/src/ic.h b/src/ic.h |
index 3f5a25658b79dc29d82c96235dd37d749c29ab8c..7113b0b5121918a6b3d04694b422e67c0a63fe79 100644 |
--- a/src/ic.h |
+++ b/src/ic.h |
@@ -148,11 +148,24 @@ class IC { |
Object* object, |
InlineCacheHolderFlag holder); |
+ static inline InlineCacheHolderFlag GetCodeCacheFlag(Type* type); |
+ static inline Handle<Map> GetCodeCacheHolder(InlineCacheHolderFlag flag, |
+ Type* type, |
+ Isolate* isolate); |
+ |
static bool IsCleared(Code* code) { |
InlineCacheState state = code->ic_state(); |
return state == UNINITIALIZED || state == PREMONOMORPHIC; |
} |
+ // Utility functions to convert maps to types and back. There are two special |
+ // cases: |
+ // - The heap_number_map is used as a marker which includes heap numbers as |
+ // well as smis. |
+ // - The oddball map is only used for booleans. |
+ static Handle<Map> TypeToMap(Type* type, Isolate* isolate); |
+ static Type* MapToType(Handle<Map> type); |
+ |
protected: |
// Get the call-site target; used for determining the state. |
Handle<Code> target() const { return target_; } |
@@ -204,20 +217,22 @@ class IC { |
UNREACHABLE(); |
return Handle<Code>::null(); |
} |
- void UpdateMonomorphicIC(Handle<Object> receiver, |
+ |
+ void UpdateMonomorphicIC(Handle<Type> type, |
Handle<Code> handler, |
Handle<String> name); |
- bool UpdatePolymorphicIC(Handle<Object> receiver, |
+ bool UpdatePolymorphicIC(Handle<Type> type, |
Handle<String> name, |
Handle<Code> code); |
+ virtual void UpdateMegamorphicCache(Type* type, Name* name, Code* code); |
+ |
void CopyICToMegamorphicCache(Handle<String> name); |
- bool IsTransitionedMapOfMonomorphicTarget(Map* receiver_map); |
- void PatchCache(Handle<Object> object, |
+ bool IsTransitionOfMonomorphicTarget(Type* type); |
+ void PatchCache(Handle<Type> type, |
Handle<String> name, |
Handle<Code> code); |
- virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code); |
virtual Code::Kind kind() const { |
UNREACHABLE(); |
return Code::STUB; |
@@ -512,7 +527,7 @@ class KeyedLoadIC: public LoadIC { |
return isolate()->builtins()->KeyedLoadIC_Slow(); |
} |
- virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code) { } |
+ virtual void UpdateMegamorphicCache(Type* type, Name* name, Code* code) { } |
private: |
// Stub accessors. |
@@ -693,7 +708,7 @@ class KeyedStoreIC: public StoreIC { |
protected: |
virtual Code::Kind kind() const { return Code::KEYED_STORE_IC; } |
- virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code) { } |
+ virtual void UpdateMegamorphicCache(Type* type, Name* name, Code* code) { } |
virtual Handle<Code> pre_monomorphic_stub() { |
return pre_monomorphic_stub(isolate(), strict_mode()); |