| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 7136c0685fe9886df37555e779048432fae9aaa7..4412e76527210855e43665765198fca82cad6d0f 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,
|
| @@ -6930,41 +6940,33 @@ 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, isolate->factory()->observed_symbol(), 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;
|
| }
|
|
|
|
|