Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index c6d5266bf7803544edb32cbf246f62bdaae38428..4e14108e6e73414962d9f0e2a444f031648fa149 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -1940,6 +1940,12 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map, |
DCHECK(object->map() == *new_map); |
new_map->set_prototype_info(old_map->prototype_info()); |
old_map->set_prototype_info(Smi::FromInt(0)); |
+ if (FLAG_trace_prototype_users) { |
+ PrintF("Moving prototype_info %p from map %p to map %p.\n", |
+ reinterpret_cast<void*>(new_map->prototype_info()), |
+ reinterpret_cast<void*>(*old_map), |
+ reinterpret_cast<void*>(*new_map)); |
+ } |
} |
} |
@@ -4721,6 +4727,12 @@ void JSObject::MigrateSlowToFast(Handle<JSObject> object, |
DCHECK(new_map->is_prototype_map()); |
new_map->set_prototype_info(object->map()->prototype_info()); |
object->map()->set_prototype_info(Smi::FromInt(0)); |
+ if (FLAG_trace_prototype_users) { |
+ PrintF("Moving prototype_info %p from map %p to map %p.\n", |
+ reinterpret_cast<void*>(new_map->prototype_info()), |
+ reinterpret_cast<void*>(object->map()), |
+ reinterpret_cast<void*>(*new_map)); |
+ } |
} |
#if TRACE_MAPS |
@@ -6892,7 +6904,7 @@ Handle<Map> Map::Normalize(Handle<Map> fast_map, PropertyNormalizationMode mode, |
Isolate* isolate = fast_map->GetIsolate(); |
Handle<Object> maybe_cache(isolate->native_context()->normalized_map_cache(), |
isolate); |
- bool use_cache = !maybe_cache->IsUndefined(); |
+ bool use_cache = !fast_map->is_prototype_map() && !maybe_cache->IsUndefined(); |
Handle<NormalizedMapCache> cache; |
if (use_cache) cache = Handle<NormalizedMapCache>::cast(maybe_cache); |
@@ -10053,6 +10065,10 @@ void JSObject::RegisterPrototypeUser(Handle<JSObject> prototype, |
if (!maybe_registry.is_identical_to(new_array)) { |
proto_info->set_prototype_users(*new_array); |
} |
+ if (FLAG_trace_prototype_users) { |
+ PrintF("Registering %p as a user of prototype %p.\n", |
+ reinterpret_cast<void*>(*user), reinterpret_cast<void*>(*prototype)); |
+ } |
} |
@@ -10072,6 +10088,10 @@ void JSObject::UnregisterPrototypeUser(Handle<JSObject> prototype, |
Object* maybe_registry = proto_info->prototype_users(); |
if (!maybe_registry->IsWeakFixedArray()) return; |
WeakFixedArray::cast(maybe_registry)->Remove(user); |
+ if (FLAG_trace_prototype_users) { |
+ PrintF("Unregistering %p as a user of prototype %p.\n", |
+ reinterpret_cast<void*>(*user), reinterpret_cast<void*>(*prototype)); |
+ } |
} |
@@ -10126,7 +10146,7 @@ Handle<Cell> Map::GetOrCreatePrototypeChainValidityCell(Handle<Map> map, |
prototype = Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)); |
} |
Handle<PrototypeInfo> proto_info( |
- PrototypeInfo::cast(prototype->map()->prototype_info())); |
+ PrototypeInfo::cast(prototype->map()->prototype_info()), isolate); |
Object* maybe_cell = proto_info->validity_cell(); |
// Return existing cell if it's still valid. |
if (maybe_cell->IsCell()) { |