Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index aec412c5d8bc846dd0218defc99a09400ae75fc0..b13af677308db78d96804835babe94a065729378 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -4463,20 +4463,17 @@ Handle<Map> NormalizedMapCache::Get(Handle<NormalizedMapCache> cache, |
| // The cached map should match newly created normalized map bit-by-bit, |
| // except for the code cache, which can contain some ics which can be |
| // applied to the shared map. |
| - Object* fresh; |
| - MaybeObject* maybe_fresh = |
| - fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); |
| - if (maybe_fresh->ToObject(&fresh)) { |
| - ASSERT(memcmp(Map::cast(fresh)->address(), |
| - Map::cast(result)->address(), |
| - Map::kCodeCacheOffset) == 0); |
| - STATIC_ASSERT(Map::kDependentCodeOffset == |
| - Map::kCodeCacheOffset + kPointerSize); |
| - int offset = Map::kDependentCodeOffset + kPointerSize; |
| - ASSERT(memcmp(Map::cast(fresh)->address() + offset, |
| - Map::cast(result)->address() + offset, |
| - Map::kSize - offset) == 0); |
| - } |
| + Handle<Map> fresh = Map::CopyNormalized(fast, SHARED_NORMALIZED_MAP); |
|
Michael Starzinger
2013/10/22 16:29:50
This shouldn't compile in debug mode, as "fast" is
rafaelw
2013/10/22 18:59:59
DOH! Done.
On 2013/10/22 16:29:50, Michael Starzi
|
| + |
| + ASSERT(memcmp(fresh->address(), |
| + Map::cast(result)->address(), |
| + Map::kCodeCacheOffset) == 0); |
| + STATIC_ASSERT(Map::kDependentCodeOffset == |
| + Map::kCodeCacheOffset + kPointerSize); |
| + int offset = Map::kDependentCodeOffset + kPointerSize; |
| + ASSERT(memcmp(fresh->address() + offset, |
| + Map::cast(result)->address() + offset, |
| + Map::kSize - offset) == 0); |
| } |
| #endif |
| return handle(Map::cast(result)); |
|
Michael Starzinger
2013/10/22 16:29:50
At this point "result" might be stale.
rafaelw
2013/10/22 18:59:59
Right. Got it.
On 2013/10/22 16:29:50, Michael St
|
| @@ -6624,6 +6621,14 @@ Object* JSObject::SlowReverseLookup(Object* value) { |
| } |
| +Handle<Map> Map::RawCopy(Handle<Map> map, |
| + int instance_size) { |
| + CALL_HEAP_FUNCTION(map->GetIsolate(), |
| + map->RawCopy(instance_size), |
| + Map); |
| +} |
| + |
| + |
| MaybeObject* Map::RawCopy(int instance_size) { |
| Map* result; |
| MaybeObject* maybe_result = |
| @@ -6648,25 +6653,15 @@ MaybeObject* Map::RawCopy(int instance_size) { |
| Handle<Map> Map::CopyNormalized(Handle<Map> map, |
| PropertyNormalizationMode mode, |
| NormalizedMapSharingMode sharing) { |
| - CALL_HEAP_FUNCTION(map->GetIsolate(), |
| - map->CopyNormalized(mode, sharing), |
| - Map); |
| -} |
| - |
| - |
| -MaybeObject* Map::CopyNormalized(PropertyNormalizationMode mode, |
| - NormalizedMapSharingMode sharing) { |
| - int new_instance_size = instance_size(); |
| + int new_instance_size = map->instance_size(); |
| if (mode == CLEAR_INOBJECT_PROPERTIES) { |
| - new_instance_size -= inobject_properties() * kPointerSize; |
| + new_instance_size -= map->inobject_properties() * kPointerSize; |
| } |
| - Map* result; |
| - MaybeObject* maybe_result = RawCopy(new_instance_size); |
| - if (!maybe_result->To(&result)) return maybe_result; |
| + Handle<Map> result = Map::RawCopy(map, new_instance_size); |
| if (mode != CLEAR_INOBJECT_PROPERTIES) { |
| - result->set_inobject_properties(inobject_properties()); |
| + result->set_inobject_properties(map->inobject_properties()); |
| } |
| result->set_is_shared(sharing == SHARED_NORMALIZED_MAP); |