Commit c58260cd authored by danno@chromium.org's avatar danno@chromium.org

Ensure all maps gathered from the ICs are updated if deprecated.

Add ASSERT to SmallMapList::Add to ensure no deprecated maps are ever added.

BUG=
R=danno@chromium.org

Review URL: https://codereview.chromium.org/15179004

Patch from Toon Verwaest <verwaest@chromium.org>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14675 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent b1bd6410
...@@ -286,6 +286,7 @@ class SmallMapList { ...@@ -286,6 +286,7 @@ class SmallMapList {
} }
void Add(Handle<Map> handle, Zone* zone) { void Add(Handle<Map> handle, Zone* zone) {
ASSERT(!handle->is_deprecated());
list_.Add(handle.location(), zone); list_.Add(handle.location(), zone);
} }
......
...@@ -192,13 +192,14 @@ Handle<Map> TypeFeedbackOracle::LoadMonomorphicReceiverType(Property* expr) { ...@@ -192,13 +192,14 @@ Handle<Map> TypeFeedbackOracle::LoadMonomorphicReceiverType(Property* expr) {
Handle<Object> map_or_code = GetInfo(expr->PropertyFeedbackId()); Handle<Object> map_or_code = GetInfo(expr->PropertyFeedbackId());
if (map_or_code->IsCode()) { if (map_or_code->IsCode()) {
Handle<Code> code = Handle<Code>::cast(map_or_code); Handle<Code> code = Handle<Code>::cast(map_or_code);
Map* first_map = code->FindFirstMap(); Handle<Map> first_map(code->FindFirstMap());
ASSERT(first_map != NULL); ASSERT(!first_map.is_null());
return CanRetainOtherContext(first_map, *native_context_) first_map = Map::CurrentMapForDeprecated(first_map);
return CanRetainOtherContext(*first_map, *native_context_)
? Handle<Map>::null() ? Handle<Map>::null()
: Handle<Map>(first_map); : first_map;
} }
return Handle<Map>::cast(map_or_code); return Map::CurrentMapForDeprecated(Handle<Map>::cast(map_or_code));
} }
...@@ -208,13 +209,14 @@ Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType( ...@@ -208,13 +209,14 @@ Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType(
Handle<Object> map_or_code = GetInfo(ast_id); Handle<Object> map_or_code = GetInfo(ast_id);
if (map_or_code->IsCode()) { if (map_or_code->IsCode()) {
Handle<Code> code = Handle<Code>::cast(map_or_code); Handle<Code> code = Handle<Code>::cast(map_or_code);
Map* first_map = code->FindFirstMap(); Handle<Map> first_map(code->FindFirstMap());
ASSERT(first_map != NULL); ASSERT(!first_map.is_null());
return CanRetainOtherContext(first_map, *native_context_) first_map = Map::CurrentMapForDeprecated(first_map);
return CanRetainOtherContext(*first_map, *native_context_)
? Handle<Map>::null() ? Handle<Map>::null()
: Handle<Map>(first_map); : first_map;
} }
return Handle<Map>::cast(map_or_code); return Map::CurrentMapForDeprecated(Handle<Map>::cast(map_or_code));
} }
...@@ -223,7 +225,9 @@ Handle<Map> TypeFeedbackOracle::CompareNilMonomorphicReceiverType( ...@@ -223,7 +225,9 @@ Handle<Map> TypeFeedbackOracle::CompareNilMonomorphicReceiverType(
Handle<Object> maybe_code = GetInfo(id); Handle<Object> maybe_code = GetInfo(id);
if (maybe_code->IsCode()) { if (maybe_code->IsCode()) {
Map* first_map = Handle<Code>::cast(maybe_code)->FindFirstMap(); Map* first_map = Handle<Code>::cast(maybe_code)->FindFirstMap();
if (first_map != NULL) return Handle<Map>(first_map); if (first_map != NULL) {
return Map::CurrentMapForDeprecated(Handle<Map>(first_map));
}
} }
return Handle<Map>(); return Handle<Map>();
} }
...@@ -347,7 +351,8 @@ ElementsKind TypeFeedbackOracle::GetCallNewElementsKind(CallNew* expr) { ...@@ -347,7 +351,8 @@ ElementsKind TypeFeedbackOracle::GetCallNewElementsKind(CallNew* expr) {
Handle<Map> TypeFeedbackOracle::GetObjectLiteralStoreMap( Handle<Map> TypeFeedbackOracle::GetObjectLiteralStoreMap(
ObjectLiteral::Property* prop) { ObjectLiteral::Property* prop) {
ASSERT(ObjectLiteralStoreIsMonomorphic(prop)); ASSERT(ObjectLiteralStoreIsMonomorphic(prop));
return Handle<Map>::cast(GetInfo(prop->key()->LiteralFeedbackId())); return Map::CurrentMapForDeprecated(
Handle<Map>::cast(GetInfo(prop->key()->LiteralFeedbackId())));
} }
...@@ -426,11 +431,12 @@ Handle<Map> TypeFeedbackOracle::GetCompareMap(CompareOperation* expr) { ...@@ -426,11 +431,12 @@ Handle<Map> TypeFeedbackOracle::GetCompareMap(CompareOperation* expr) {
if (state != CompareIC::KNOWN_OBJECT) { if (state != CompareIC::KNOWN_OBJECT) {
return Handle<Map>::null(); return Handle<Map>::null();
} }
Map* first_map = code->FindFirstMap(); Handle<Map> first_map(code->FindFirstMap());
ASSERT(first_map != NULL); ASSERT(!first_map.is_null());
return CanRetainOtherContext(first_map, *native_context_) first_map = Map::CurrentMapForDeprecated(first_map);
return CanRetainOtherContext(*first_map, *native_context_)
? Handle<Map>::null() ? Handle<Map>::null()
: Handle<Map>(first_map); : first_map;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment