| Index: src/typing.cc
|
| diff --git a/src/typing.cc b/src/typing.cc
|
| index fb758828b076524a47c6be702050437507d4be95..db5ca61a8e71b217dcbb8bce2d2894def51b20bd 100644
|
| --- a/src/typing.cc
|
| +++ b/src/typing.cc
|
| @@ -396,8 +396,13 @@ void AstTyper::VisitObjectLiteral(ObjectLiteral* expr) {
|
| prop->emit_store()) {
|
| // Record type feed back for the property.
|
| TypeFeedbackId id = prop->key()->AsLiteral()->LiteralFeedbackId();
|
| + FeedbackVectorICSlot slot = prop->GetSlot();
|
| SmallMapList maps;
|
| - oracle()->CollectReceiverTypes(id, &maps);
|
| + if (FLAG_vector_stores) {
|
| + oracle()->CollectReceiverTypes(slot, &maps);
|
| + } else {
|
| + oracle()->CollectReceiverTypes(id, &maps);
|
| + }
|
| prop->set_receiver_type(maps.length() == 1 ? maps.at(0)
|
| : Handle<Map>::null());
|
| }
|
| @@ -612,12 +617,18 @@ void AstTyper::VisitUnaryOperation(UnaryOperation* expr) {
|
| void AstTyper::VisitCountOperation(CountOperation* expr) {
|
| // Collect type feedback.
|
| TypeFeedbackId store_id = expr->CountStoreFeedbackId();
|
| + FeedbackVectorICSlot slot = expr->CountSlot();
|
| KeyedAccessStoreMode store_mode;
|
| IcCheckType key_type;
|
| - oracle()->GetStoreModeAndKeyType(store_id, &store_mode, &key_type);
|
| + if (FLAG_vector_stores) {
|
| + oracle()->GetStoreModeAndKeyType(slot, &store_mode, &key_type);
|
| + oracle()->CountReceiverTypes(slot, expr->GetReceiverTypes());
|
| + } else {
|
| + oracle()->GetStoreModeAndKeyType(store_id, &store_mode, &key_type);
|
| + oracle()->CountReceiverTypes(store_id, expr->GetReceiverTypes());
|
| + }
|
| expr->set_store_mode(store_mode);
|
| expr->set_key_type(key_type);
|
| - oracle()->CountReceiverTypes(store_id, expr->GetReceiverTypes());
|
| expr->set_type(oracle()->CountType(expr->CountBinOpFeedbackId()));
|
| // TODO(rossberg): merge the count type with the generic expression type.
|
|
|
|
|