Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index aec412c5d8bc846dd0218defc99a09400ae75fc0..fdfa20aaae76712d3ec4bfd10661c680e3ec760c 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -2434,6 +2434,16 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map) { |
| } |
| +Handle<TransitionArray> Map::AddTransition(Handle<Map> map, |
| + Handle<Name> key, |
| + Handle<Map> target, |
| + SimpleTransitionFlag flag) { |
| + CALL_HEAP_FUNCTION(map->GetIsolate(), |
| + map->AddTransition(*key, *target, flag), |
| + TransitionArray); |
| +} |
| + |
| + |
| void JSObject::GeneralizeFieldRepresentation(Handle<JSObject> object, |
| int modify_index, |
| Representation new_representation, |
| @@ -6915,41 +6925,34 @@ MaybeObject* Map::CopyAsElementsKind(ElementsKind kind, TransitionFlag flag) { |
| Handle<Map> Map::CopyForObserved(Handle<Map> map) { |
| - CALL_HEAP_FUNCTION(map->GetIsolate(), |
| - map->CopyForObserved(), |
| - Map); |
| -} |
| + ASSERT(!map->is_observed()); |
| - |
| -MaybeObject* Map::CopyForObserved() { |
| - ASSERT(!is_observed()); |
| + Isolate* isolate = map->GetIsolate(); |
| // In case the map owned its own descriptors, share the descriptors and |
| // transfer ownership to the new map. |
| - Map* new_map; |
| - MaybeObject* maybe_new_map; |
| - if (owns_descriptors()) { |
| - maybe_new_map = CopyDropDescriptors(); |
| + Handle<Map> new_map; |
| + if (map->owns_descriptors()) { |
| + new_map = Map::CopyDropDescriptors(map); |
| } else { |
| - maybe_new_map = Copy(); |
| + new_map = Map::Copy(map); |
| } |
| - if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
| - TransitionArray* transitions; |
| - MaybeObject* maybe_transitions = AddTransition(GetHeap()->observed_symbol(), |
| - new_map, |
| - FULL_TRANSITION); |
| - if (!maybe_transitions->To(&transitions)) return maybe_transitions; |
| - set_transitions(transitions); |
| + Handle<TransitionArray> transitions = |
| + Map::AddTransition(map, handle(isolate->heap()->observed_symbol()), |
|
Michael Starzinger
2013/10/22 09:28:22
nit: Better use isolate->factory()->observed_symbo
rafaelw
2013/10/22 17:24:08
Done.
|
| + new_map, |
| + FULL_TRANSITION); |
| + |
| + map->set_transitions(*transitions); |
| new_map->set_is_observed(true); |
| - if (owns_descriptors()) { |
| - new_map->InitializeDescriptors(instance_descriptors()); |
| - set_owns_descriptors(false); |
| + if (map->owns_descriptors()) { |
| + new_map->InitializeDescriptors(map->instance_descriptors()); |
| + map->set_owns_descriptors(false); |
| } |
| - new_map->SetBackPointer(this); |
| + new_map->SetBackPointer(*map); |
| return new_map; |
| } |