| Index: src/type-info.cc
|
| diff --git a/src/type-info.cc b/src/type-info.cc
|
| index 21dcf74cabd944c1082b3c3c291c10b638ae3201..53866c16cb5941a0f39408ae2ddeead023b3837b 100644
|
| --- a/src/type-info.cc
|
| +++ b/src/type-info.cc
|
| @@ -105,6 +105,8 @@ bool TypeFeedbackOracle::LoadIsMonomorphicNormal(Property* expr) {
|
| Code::ExtractTypeFromFlags(code->flags()) == Code::NORMAL;
|
| if (!preliminary_checks) return false;
|
| Map* map = code->FindFirstMap();
|
| + if (map == NULL) return false;
|
| + map = map->CurrentMapForDeprecated();
|
| return map != NULL && !CanRetainOtherContext(map, *native_context_);
|
| }
|
| return false;
|
| @@ -136,6 +138,8 @@ bool TypeFeedbackOracle::StoreIsMonomorphicNormal(TypeFeedbackId ast_id) {
|
| Code::ExtractTypeFromFlags(code->flags()) == Code::NORMAL;
|
| if (!preliminary_checks) return false;
|
| Map* map = code->FindFirstMap();
|
| + if (map == NULL) return false;
|
| + map = map->CurrentMapForDeprecated();
|
| return map != NULL && !CanRetainOtherContext(map, *native_context_);
|
| }
|
| return false;
|
| @@ -192,14 +196,12 @@ 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);
|
| - Handle<Map> first_map(code->FindFirstMap());
|
| - ASSERT(!first_map.is_null());
|
| - first_map = Map::CurrentMapForDeprecated(first_map);
|
| - return CanRetainOtherContext(*first_map, *native_context_)
|
| + Map* map = code->FindFirstMap()->CurrentMapForDeprecated();
|
| + return map == NULL || CanRetainOtherContext(map, *native_context_)
|
| ? Handle<Map>::null()
|
| - : first_map;
|
| + : Handle<Map>(map);
|
| }
|
| - return Map::CurrentMapForDeprecated(Handle<Map>::cast(map_or_code));
|
| + return Handle<Map>::cast(map_or_code);
|
| }
|
|
|
|
|
| @@ -209,14 +211,12 @@ 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);
|
| - Handle<Map> first_map(code->FindFirstMap());
|
| - ASSERT(!first_map.is_null());
|
| - first_map = Map::CurrentMapForDeprecated(first_map);
|
| - return CanRetainOtherContext(*first_map, *native_context_)
|
| + Map* map = code->FindFirstMap()->CurrentMapForDeprecated();
|
| + return map == NULL || CanRetainOtherContext(map, *native_context_)
|
| ? Handle<Map>::null()
|
| - : first_map;
|
| + : Handle<Map>(map);
|
| }
|
| - return Map::CurrentMapForDeprecated(Handle<Map>::cast(map_or_code));
|
| + return Handle<Map>::cast(map_or_code);
|
| }
|
|
|
|
|
| @@ -224,10 +224,15 @@ Handle<Map> TypeFeedbackOracle::CompareNilMonomorphicReceiverType(
|
| TypeFeedbackId id) {
|
| Handle<Object> maybe_code = GetInfo(id);
|
| if (maybe_code->IsCode()) {
|
| - Map* first_map = Handle<Code>::cast(maybe_code)->FindFirstMap();
|
| - if (first_map != NULL) {
|
| - return Map::CurrentMapForDeprecated(Handle<Map>(first_map));
|
| - }
|
| + Map* map = Handle<Code>::cast(maybe_code)->FindFirstMap();
|
| + if (map == NULL) return Handle<Map>();
|
| + map = map->CurrentMapForDeprecated();
|
| + return map == NULL || CanRetainOtherContext(map, *native_context_)
|
| + ? Handle<Map>()
|
| + : Handle<Map>(map);
|
| + } else if (maybe_code->IsMap()) {
|
| + ASSERT(!Handle<Map>::cast(maybe_code)->is_deprecated());
|
| + return Handle<Map>::cast(maybe_code);
|
| }
|
| return Handle<Map>();
|
| }
|
| @@ -351,8 +356,7 @@ ElementsKind TypeFeedbackOracle::GetCallNewElementsKind(CallNew* expr) {
|
| Handle<Map> TypeFeedbackOracle::GetObjectLiteralStoreMap(
|
| ObjectLiteral::Property* prop) {
|
| ASSERT(ObjectLiteralStoreIsMonomorphic(prop));
|
| - return Map::CurrentMapForDeprecated(
|
| - Handle<Map>::cast(GetInfo(prop->key()->LiteralFeedbackId())));
|
| + return Handle<Map>::cast(GetInfo(prop->key()->LiteralFeedbackId()));
|
| }
|
|
|
|
|
| @@ -431,12 +435,10 @@ Handle<Map> TypeFeedbackOracle::GetCompareMap(CompareOperation* expr) {
|
| if (state != CompareIC::KNOWN_OBJECT) {
|
| return Handle<Map>::null();
|
| }
|
| - Handle<Map> first_map(code->FindFirstMap());
|
| - ASSERT(!first_map.is_null());
|
| - first_map = Map::CurrentMapForDeprecated(first_map);
|
| - return CanRetainOtherContext(*first_map, *native_context_)
|
| + Map* map = code->FindFirstMap()->CurrentMapForDeprecated();
|
| + return map == NULL || CanRetainOtherContext(map, *native_context_)
|
| ? Handle<Map>::null()
|
| - : first_map;
|
| + : Handle<Map>(map);
|
| }
|
|
|
|
|
| @@ -723,7 +725,8 @@ void TypeFeedbackOracle::ProcessRelocInfos(ZoneList<RelocInfo>* infos) {
|
| SetInfo(ast_id, static_cast<Object*>(target));
|
| } else if (!CanRetainOtherContext(Map::cast(map),
|
| *native_context_)) {
|
| - SetInfo(ast_id, map);
|
| + Map* feedback = Map::cast(map)->CurrentMapForDeprecated();
|
| + if (feedback != NULL) SetInfo(ast_id, feedback);
|
| }
|
| }
|
| } else {
|
|
|