| Index: src/typing.cc
|
| diff --git a/src/typing.cc b/src/typing.cc
|
| index e297ff2617f601464328b3f54adef58be974810b..3f63237596ae116a6882fab950dbc6a214a73cbc 100644
|
| --- a/src/typing.cc
|
| +++ b/src/typing.cc
|
| @@ -484,18 +484,35 @@ void AstTyper::VisitThrow(Throw* expr) {
|
|
|
| void AstTyper::VisitProperty(Property* expr) {
|
| // Collect type feedback.
|
| - TypeFeedbackId id = expr->PropertyFeedbackId();
|
| - expr->set_is_uninitialized(oracle()->LoadIsUninitialized(id));
|
| + FeedbackVectorICSlot slot(FeedbackVectorICSlot::Invalid());
|
| + TypeFeedbackId id(TypeFeedbackId::None());
|
| + if (FLAG_vector_ics) {
|
| + slot = expr->PropertyFeedbackSlot();
|
| + expr->set_is_uninitialized(oracle()->LoadIsUninitialized(slot));
|
| + } else {
|
| + id = expr->PropertyFeedbackId();
|
| + expr->set_is_uninitialized(oracle()->LoadIsUninitialized(id));
|
| + }
|
| +
|
| if (!expr->IsUninitialized()) {
|
| if (expr->key()->IsPropertyName()) {
|
| Literal* lit_key = expr->key()->AsLiteral();
|
| DCHECK(lit_key != NULL && lit_key->value()->IsString());
|
| Handle<String> name = Handle<String>::cast(lit_key->value());
|
| - oracle()->PropertyReceiverTypes(id, name, expr->GetReceiverTypes());
|
| + if (FLAG_vector_ics) {
|
| + oracle()->PropertyReceiverTypes(slot, name, expr->GetReceiverTypes());
|
| + } else {
|
| + oracle()->PropertyReceiverTypes(id, name, expr->GetReceiverTypes());
|
| + }
|
| } else {
|
| bool is_string;
|
| - oracle()->KeyedPropertyReceiverTypes(
|
| - id, expr->GetReceiverTypes(), &is_string);
|
| + if (FLAG_vector_ics) {
|
| + oracle()->KeyedPropertyReceiverTypes(slot, expr->GetReceiverTypes(),
|
| + &is_string);
|
| + } else {
|
| + oracle()->KeyedPropertyReceiverTypes(id, expr->GetReceiverTypes(),
|
| + &is_string);
|
| + }
|
| expr->set_is_string_access(is_string);
|
| }
|
| }
|
|
|