Index: src/type-info.cc |
diff --git a/src/type-info.cc b/src/type-info.cc |
index e10c5f40e45e1769a58313f8a03adfda153e1d15..bdf7bc3c865338d017b07a6469ebddd18df5c48c 100644 |
--- a/src/type-info.cc |
+++ b/src/type-info.cc |
@@ -159,23 +159,26 @@ Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType(Expression* expr) { |
} |
-ZoneMapList* TypeFeedbackOracle::LoadReceiverTypes(Property* expr, |
- Handle<String> name) { |
+void TypeFeedbackOracle::LoadReceiverTypes(Property* expr, |
+ Handle<String> name, |
+ SmallMapList* types) { |
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL); |
- return CollectReceiverTypes(expr->id(), name, flags); |
+ CollectReceiverTypes(expr->id(), name, flags, types); |
} |
-ZoneMapList* TypeFeedbackOracle::StoreReceiverTypes(Assignment* expr, |
- Handle<String> name) { |
+void TypeFeedbackOracle::StoreReceiverTypes(Assignment* expr, |
+ Handle<String> name, |
+ SmallMapList* types) { |
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, NORMAL); |
- return CollectReceiverTypes(expr->id(), name, flags); |
+ CollectReceiverTypes(expr->id(), name, flags, types); |
} |
-ZoneMapList* TypeFeedbackOracle::CallReceiverTypes(Call* expr, |
- Handle<String> name, |
- CallKind call_kind) { |
+void TypeFeedbackOracle::CallReceiverTypes(Call* expr, |
+ Handle<String> name, |
+ CallKind call_kind, |
+ SmallMapList* types) { |
int arity = expr->arguments()->length(); |
// Note: Currently we do not take string extra ic data into account |
@@ -189,7 +192,7 @@ ZoneMapList* TypeFeedbackOracle::CallReceiverTypes(Call* expr, |
OWN_MAP, |
NOT_IN_LOOP, |
arity); |
- return CollectReceiverTypes(expr->id(), name, flags); |
+ CollectReceiverTypes(expr->id(), name, flags, types); |
} |
@@ -391,36 +394,30 @@ TypeInfo TypeFeedbackOracle::IncrementType(CountOperation* expr) { |
} |
-ZoneMapList* TypeFeedbackOracle::CollectReceiverTypes(unsigned ast_id, |
- Handle<String> name, |
- Code::Flags flags) { |
+void TypeFeedbackOracle::CollectReceiverTypes(unsigned ast_id, |
+ Handle<String> name, |
+ Code::Flags flags, |
+ SmallMapList* types) { |
Isolate* isolate = Isolate::Current(); |
Handle<Object> object = GetInfo(ast_id); |
- if (object->IsUndefined() || object->IsSmi()) return NULL; |
+ if (object->IsUndefined() || object->IsSmi()) return; |
if (*object == isolate->builtins()->builtin(Builtins::kStoreIC_GlobalProxy)) { |
// TODO(fschneider): We could collect the maps and signal that |
// we need a generic store (or load) here. |
ASSERT(Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC); |
- return NULL; |
} else if (object->IsMap()) { |
- ZoneMapList* types = new ZoneMapList(1); |
types->Add(Handle<Map>::cast(object)); |
- return types; |
} else if (Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC) { |
- ZoneMapList* types = new ZoneMapList(4); |
+ types->Reserve(4); |
ASSERT(object->IsCode()); |
isolate->stub_cache()->CollectMatchingMaps(types, *name, flags); |
- return types->length() > 0 ? types : NULL; |
- } else { |
- return NULL; |
} |
} |
-void TypeFeedbackOracle::CollectKeyedReceiverTypes( |
- unsigned ast_id, |
- ZoneMapList* types) { |
+void TypeFeedbackOracle::CollectKeyedReceiverTypes(unsigned ast_id, |
+ SmallMapList* types) { |
Handle<Object> object = GetInfo(ast_id); |
if (!object->IsCode()) return; |
Handle<Code> code = Handle<Code>::cast(object); |