Chromium Code Reviews| Index: src/type-info.cc |
| diff --git a/src/type-info.cc b/src/type-info.cc |
| index 1acd8c63b1f09594ae03c9bcdc866715802cfadd..12f8de69b109f5925c6444f24f6478181930780e 100644 |
| --- a/src/type-info.cc |
| +++ b/src/type-info.cc |
| @@ -308,6 +308,7 @@ bool TypeFeedbackOracle::LoadIsStub(Property* expr, ICStub* stub) { |
| if (!object->IsCode()) return false; |
| Handle<Code> code = Handle<Code>::cast(object); |
| if (!code->is_load_stub()) return false; |
| + if (code->ic_state() != MONOMORPHIC) return false; |
| return stub->Describes(*code); |
| } |
| @@ -497,6 +498,13 @@ void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id, |
| ASSERT(Handle<Code>::cast(object)->ic_state() == GENERIC); |
| } else if (object->IsMap()) { |
| types->Add(Handle<Map>::cast(object), zone()); |
| + } else if (Handle<Code>::cast(object)->ic_state() == POLYMORPHIC) { |
| + MapHandleList maps; |
| + Handle<Code>::cast(object)->FindAllMaps(&maps); |
| + types->Reserve(maps.length(), zone()); |
| + for (int i = 0; i < maps.length(); i++) { |
| + types->Add(maps.at(i), zone()); |
|
Jakob Kummerow
2013/03/01 22:21:04
Please compare this with CollectKeyedReceiverTypes
Toon Verwaest
2013/03/04 10:54:08
Done.
|
| + } |
| } else if (FLAG_collect_megamorphic_maps_from_stub_cache && |
| Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC) { |
| types->Reserve(4, zone()); |