| Index: src/objects.cc | 
| diff --git a/src/objects.cc b/src/objects.cc | 
| index ca10394f3279265f07842692a9eaefdb215b60ce..253405a7cd3a52b6c0a7d5637298e3bb02b03bf5 100644 | 
| --- a/src/objects.cc | 
| +++ b/src/objects.cc | 
| @@ -4458,27 +4458,17 @@ void NormalizedMapCache::Clear() { | 
| void JSObject::UpdateMapCodeCache(Handle<JSObject> object, | 
| Handle<Name> name, | 
| Handle<Code> code) { | 
| -  Isolate* isolate = object->GetIsolate(); | 
| -  CALL_HEAP_FUNCTION_VOID(isolate, | 
| -                          object->UpdateMapCodeCache(*name, *code)); | 
| -} | 
| - | 
| - | 
| -MaybeObject* JSObject::UpdateMapCodeCache(Name* name, Code* code) { | 
| -  if (map()->is_shared()) { | 
| +  Handle<Map> map(object->map()); | 
| +  if (map->is_shared()) { | 
| // Fast case maps are never marked as shared. | 
| -    ASSERT(!HasFastProperties()); | 
| +    ASSERT(!object->HasFastProperties()); | 
| // Replace the map with an identical copy that can be safely modified. | 
| -    Object* obj; | 
| -    { MaybeObject* maybe_obj = map()->CopyNormalized(KEEP_INOBJECT_PROPERTIES, | 
| -                                                     UNIQUE_NORMALIZED_MAP); | 
| -      if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 
| -    } | 
| -    GetIsolate()->counters()->normalized_maps()->Increment(); | 
| - | 
| -    set_map(Map::cast(obj)); | 
| +    map = Map::CopyNormalized(map, KEEP_INOBJECT_PROPERTIES, | 
| +                              UNIQUE_NORMALIZED_MAP); | 
| +    object->GetIsolate()->counters()->normalized_maps()->Increment(); | 
| +    object->set_map(*map); | 
| } | 
| -  return map()->UpdateCodeCache(name, code); | 
| +  Map::UpdateCodeCache(map, name, code); | 
| } | 
|  | 
|  | 
| @@ -6510,6 +6500,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(); | 
| @@ -9523,21 +9522,13 @@ bool JSFunction::IsInlineable() { | 
|  | 
|  | 
| void JSObject::OptimizeAsPrototype(Handle<JSObject> object) { | 
| -  CALL_HEAP_FUNCTION_VOID(object->GetIsolate(), object->OptimizeAsPrototype()); | 
| -} | 
| - | 
| - | 
| -MaybeObject* JSObject::OptimizeAsPrototype() { | 
| -  if (IsGlobalObject()) return this; | 
| +  if (object->IsGlobalObject()) return; | 
|  | 
| // Make sure prototypes are fast objects and their maps have the bit set | 
| // so they remain fast. | 
| -  if (!HasFastProperties()) { | 
| -    MaybeObject* new_proto = TransformToFastProperties(0); | 
| -    if (new_proto->IsFailure()) return new_proto; | 
| -    ASSERT(new_proto == this); | 
| +  if (!object->HasFastProperties()) { | 
| +    TransformToFastProperties(object, 0); | 
| } | 
| -  return this; | 
| } | 
|  | 
|  | 
|  |