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); |
} |
} |