Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 4412e76527210855e43665765198fca82cad6d0f..5898747de94082f1b0b1410876dee6c63837784c 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -4473,14 +4473,14 @@ PropertyAttributes JSObject::GetElementAttributeWithoutInterceptor( |
Handle<Map> NormalizedMapCache::Get(Handle<NormalizedMapCache> cache, |
Handle<JSObject> obj, |
PropertyNormalizationMode mode) { |
- Map* fast = obj->map(); |
- int index = fast->Hash() % kEntries; |
- Object* result = cache->get(index); |
+ int index = obj->map()->Hash() % kEntries; |
+ Handle<Object> result = handle(cache->get(index), cache->GetIsolate()); |
if (result->IsMap() && |
- Map::cast(result)->EquivalentToForNormalization(fast, mode)) { |
+ Handle<Map>::cast(result)->EquivalentToForNormalization(obj->map(), |
+ mode)) { |
#ifdef VERIFY_HEAP |
if (FLAG_verify_heap) { |
- Map::cast(result)->SharedMapVerify(); |
+ Handle<Map>::cast(result)->SharedMapVerify(); |
} |
#endif |
#ifdef DEBUG |
@@ -4488,27 +4488,25 @@ 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(handle(obj->map()), mode, |
+ SHARED_NORMALIZED_MAP); |
+ |
+ ASSERT(memcmp(fresh->address(), |
+ Handle<Map>::cast(result)->address(), |
+ Map::kCodeCacheOffset) == 0); |
+ STATIC_ASSERT(Map::kDependentCodeOffset == |
+ Map::kCodeCacheOffset + kPointerSize); |
+ int offset = Map::kDependentCodeOffset + kPointerSize; |
+ ASSERT(memcmp(fresh->address() + offset, |
+ Handle<Map>::cast(result)->address() + offset, |
+ Map::kSize - offset) == 0); |
} |
#endif |
- return handle(Map::cast(result)); |
+ return Handle<Map>::cast(result); |
} |
Isolate* isolate = cache->GetIsolate(); |
- Handle<Map> map = Map::CopyNormalized(handle(fast), mode, |
+ Handle<Map> map = Map::CopyNormalized(handle(obj->map()), mode, |
SHARED_NORMALIZED_MAP); |
ASSERT(map->is_dictionary_map()); |
cache->set(index, *map); |
@@ -6649,6 +6647,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 = |
@@ -6673,25 +6679,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); |