| Index: src/type-info.cc
|
| diff --git a/src/type-info.cc b/src/type-info.cc
|
| index 317b4e38896b13ca9dc43b8d91a93671e199ed4c..f6ad3529230441d25b657b8b42d9d5c0e1171651 100644
|
| --- a/src/type-info.cc
|
| +++ b/src/type-info.cc
|
| @@ -198,7 +198,8 @@ void TypeFeedbackOracle::GetStoreModeAndKeyType(
|
| void TypeFeedbackOracle::GetStoreModeAndKeyType(
|
| FeedbackVectorICSlot slot, KeyedAccessStoreMode* store_mode,
|
| IcCheckType* key_type) {
|
| - if (!slot.IsInvalid()) {
|
| + if (!slot.IsInvalid() &&
|
| + feedback_vector_->GetKind(slot) == Code::KEYED_STORE_IC) {
|
| KeyedStoreICNexus nexus(feedback_vector_, slot);
|
| *store_mode = nexus.GetKeyedAccessStoreMode();
|
| *key_type = nexus.GetKeyType();
|
| @@ -414,6 +415,13 @@ void TypeFeedbackOracle::CountReceiverTypes(TypeFeedbackId id,
|
| }
|
|
|
|
|
| +void TypeFeedbackOracle::CountReceiverTypes(FeedbackVectorICSlot slot,
|
| + SmallMapList* receiver_types) {
|
| + receiver_types->Clear();
|
| + if (!slot.IsInvalid()) CollectReceiverTypes(slot, receiver_types);
|
| +}
|
| +
|
| +
|
| void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot,
|
| Handle<Name> name,
|
| Code::Flags flags,
|
| @@ -462,8 +470,15 @@ void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id,
|
|
|
| void TypeFeedbackOracle::CollectReceiverTypes(FeedbackVectorICSlot slot,
|
| SmallMapList* types) {
|
| - KeyedStoreICNexus nexus(feedback_vector_, slot);
|
| - CollectReceiverTypes<FeedbackNexus>(&nexus, types);
|
| + Code::Kind kind = feedback_vector_->GetKind(slot);
|
| + if (kind == Code::STORE_IC) {
|
| + StoreICNexus nexus(feedback_vector_, slot);
|
| + CollectReceiverTypes<FeedbackNexus>(&nexus, types);
|
| + } else {
|
| + DCHECK(kind == Code::KEYED_STORE_IC);
|
| + KeyedStoreICNexus nexus(feedback_vector_, slot);
|
| + CollectReceiverTypes<FeedbackNexus>(&nexus, types);
|
| + }
|
| }
|
|
|
|
|
|
|