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
This commit is contained in:
parent
b1bd641078
commit
c58260cd50
@ -286,6 +286,7 @@ class SmallMapList {
|
||||
}
|
||||
|
||||
void Add(Handle<Map> handle, Zone* zone) {
|
||||
ASSERT(!handle->is_deprecated());
|
||||
list_.Add(handle.location(), zone);
|
||||
}
|
||||
|
||||
|
@ -192,13 +192,14 @@ Handle<Map> TypeFeedbackOracle::LoadMonomorphicReceiverType(Property* expr) {
|
||||
Handle<Object> map_or_code = GetInfo(expr->PropertyFeedbackId());
|
||||
if (map_or_code->IsCode()) {
|
||||
Handle<Code> code = Handle<Code>::cast(map_or_code);
|
||||
Map* first_map = code->FindFirstMap();
|
||||
ASSERT(first_map != NULL);
|
||||
return CanRetainOtherContext(first_map, *native_context_)
|
||||
Handle<Map> first_map(code->FindFirstMap());
|
||||
ASSERT(!first_map.is_null());
|
||||
first_map = Map::CurrentMapForDeprecated(first_map);
|
||||
return CanRetainOtherContext(*first_map, *native_context_)
|
||||
? 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(
|
||||
Handle<Object> map_or_code = GetInfo(ast_id);
|
||||
if (map_or_code->IsCode()) {
|
||||
Handle<Code> code = Handle<Code>::cast(map_or_code);
|
||||
Map* first_map = code->FindFirstMap();
|
||||
ASSERT(first_map != NULL);
|
||||
return CanRetainOtherContext(first_map, *native_context_)
|
||||
Handle<Map> first_map(code->FindFirstMap());
|
||||
ASSERT(!first_map.is_null());
|
||||
first_map = Map::CurrentMapForDeprecated(first_map);
|
||||
return CanRetainOtherContext(*first_map, *native_context_)
|
||||
? 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(
|
||||
Handle<Object> maybe_code = GetInfo(id);
|
||||
if (maybe_code->IsCode()) {
|
||||
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>();
|
||||
}
|
||||
@ -347,7 +351,8 @@ ElementsKind TypeFeedbackOracle::GetCallNewElementsKind(CallNew* expr) {
|
||||
Handle<Map> TypeFeedbackOracle::GetObjectLiteralStoreMap(
|
||||
ObjectLiteral::Property* 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) {
|
||||
if (state != CompareIC::KNOWN_OBJECT) {
|
||||
return Handle<Map>::null();
|
||||
}
|
||||
Map* first_map = code->FindFirstMap();
|
||||
ASSERT(first_map != NULL);
|
||||
return CanRetainOtherContext(first_map, *native_context_)
|
||||
Handle<Map> first_map(code->FindFirstMap());
|
||||
ASSERT(!first_map.is_null());
|
||||
first_map = Map::CurrentMapForDeprecated(first_map);
|
||||
return CanRetainOtherContext(*first_map, *native_context_)
|
||||
? Handle<Map>::null()
|
||||
: Handle<Map>(first_map);
|
||||
: first_map;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user