| Index: src/typing.cc
|
| diff --git a/src/typing.cc b/src/typing.cc
|
| index 1cb7577775622c59880638d2d2bf5067cf5c6d7f..b2b60bde2c7a39dcf2ac56f54fedee8edf2e0237 100644
|
| --- a/src/typing.cc
|
| +++ b/src/typing.cc
|
| @@ -427,18 +427,31 @@ void AstTyper::VisitAssignment(Assignment* expr) {
|
| Property* prop = expr->target()->AsProperty();
|
| if (prop != NULL) {
|
| TypeFeedbackId id = expr->AssignmentFeedbackId();
|
| - expr->set_is_uninitialized(oracle()->StoreIsUninitialized(id));
|
| + FeedbackVectorICSlot slot = expr->AssignmentSlot();
|
| + expr->set_is_uninitialized(FLAG_vector_stores
|
| + ? oracle()->StoreIsUninitialized(slot)
|
| + : oracle()->StoreIsUninitialized(id));
|
| if (!expr->IsUninitialized()) {
|
| + SmallMapList* receiver_types = expr->GetReceiverTypes();
|
| if (prop->key()->IsPropertyName()) {
|
| Literal* lit_key = prop->key()->AsLiteral();
|
| DCHECK(lit_key != NULL && lit_key->value()->IsString());
|
| Handle<String> name = Handle<String>::cast(lit_key->value());
|
| - oracle()->AssignmentReceiverTypes(id, name, expr->GetReceiverTypes());
|
| + if (FLAG_vector_stores) {
|
| + oracle()->AssignmentReceiverTypes(slot, name, receiver_types);
|
| + } else {
|
| + oracle()->AssignmentReceiverTypes(id, name, receiver_types);
|
| + }
|
| } else {
|
| KeyedAccessStoreMode store_mode;
|
| IcCheckType key_type;
|
| - oracle()->KeyedAssignmentReceiverTypes(id, expr->GetReceiverTypes(),
|
| - &store_mode, &key_type);
|
| + if (FLAG_vector_stores) {
|
| + oracle()->KeyedAssignmentReceiverTypes(slot, receiver_types,
|
| + &store_mode, &key_type);
|
| + } else {
|
| + oracle()->KeyedAssignmentReceiverTypes(id, receiver_types,
|
| + &store_mode, &key_type);
|
| + }
|
| expr->set_store_mode(store_mode);
|
| expr->set_key_type(key_type);
|
| }
|
|
|