Index: src/type-info.cc |
diff --git a/src/type-info.cc b/src/type-info.cc |
index 2c033b020061bb8479d638d59aea41674075dc9f..51a31c9faea715e33338649dd9fcf1f2f89bae96 100644 |
--- a/src/type-info.cc |
+++ b/src/type-info.cc |
@@ -130,6 +130,21 @@ void TypeFeedbackOracle::GetStoreModeAndKeyType( |
} |
+void TypeFeedbackOracle::GetLoadKeyType( |
+ TypeFeedbackId ast_id, IcCheckType* key_type) { |
+ Handle<Object> maybe_code = GetInfo(ast_id); |
+ if (maybe_code->IsCode()) { |
+ Handle<Code> code = Handle<Code>::cast(maybe_code); |
+ if (code->kind() == Code::KEYED_LOAD_IC) { |
+ ExtraICState extra_ic_state = code->extra_ic_state(); |
+ *key_type = KeyedLoadIC::GetKeyType(extra_ic_state); |
+ return; |
+ } |
+ } |
+ *key_type = ELEMENT; |
+} |
+ |
+ |
Handle<JSFunction> TypeFeedbackOracle::GetCallTarget( |
FeedbackVectorICSlot slot) { |
Handle<Object> info = GetInfo(slot); |
@@ -270,7 +285,10 @@ void TypeFeedbackOracle::PropertyReceiverTypes(TypeFeedbackId id, |
void TypeFeedbackOracle::KeyedPropertyReceiverTypes( |
- TypeFeedbackId id, SmallMapList* receiver_types, bool* is_string) { |
+ TypeFeedbackId id, |
+ SmallMapList* receiver_types, |
+ bool* is_string, |
+ IcCheckType* key_type) { |
receiver_types->Clear(); |
CollectReceiverTypes(id, receiver_types); |
@@ -280,6 +298,8 @@ void TypeFeedbackOracle::KeyedPropertyReceiverTypes( |
all_strings &= receiver_types->at(i)->IsStringMap(); |
} |
*is_string = all_strings; |
+ |
+ GetLoadKeyType(id, key_type); |
} |