Chromium Code Reviews| Index: src/mark-compact.cc |
| diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
| index 8e2fe2fb0315c2e06d608697f8cf2596697f80ad..9c064b8e846c1208d67468190ad3a561108eeb7a 100644 |
| --- a/src/mark-compact.cc |
| +++ b/src/mark-compact.cc |
| @@ -1661,31 +1661,33 @@ void MarkCompactCollector::ClearNonLiveTransitions() { |
| // Clear dead prototype transitions. |
| int number_of_transitions = map->NumberOfProtoTransitions(); |
| - FixedArray* prototype_transitions = map->unchecked_prototype_transitions(); |
| - int new_number_of_transitions = 0; |
| - const int header = Map::kProtoTransitionHeaderSize; |
| - const int proto_offset = |
| - header + Map::kProtoTransitionPrototypeOffset; |
| - const int map_offset = header + Map::kProtoTransitionMapOffset; |
| - const int step = Map::kProtoTransitionElementsPerEntry; |
| - for (int i = 0; i < number_of_transitions; i++) { |
| - Object* prototype = prototype_transitions->get(proto_offset + i * step); |
| - Object* cached_map = prototype_transitions->get(map_offset + i * step); |
| - if (HeapObject::cast(prototype)->IsMarked() && |
| - HeapObject::cast(cached_map)->IsMarked()) { |
| - if (new_number_of_transitions != i) { |
| - prototype_transitions->set_unchecked( |
| - heap_, |
| - proto_offset + new_number_of_transitions * step, |
| - prototype, |
| - UPDATE_WRITE_BARRIER); |
| - prototype_transitions->set_unchecked( |
| - heap_, |
| - map_offset + new_number_of_transitions * step, |
| - cached_map, |
| - SKIP_WRITE_BARRIER); |
| + if (number_of_transitions > 0) { |
| + FixedArray* prototype_transitions = map->unchecked_prototype_transitions(); |
|
Søren Thygesen Gjesse
2011/07/13 13:13:16
Long line.
|
| + int new_number_of_transitions = 0; |
| + const int header = Map::kProtoTransitionHeaderSize; |
| + const int proto_offset = |
| + header + Map::kProtoTransitionPrototypeOffset; |
| + const int map_offset = header + Map::kProtoTransitionMapOffset; |
| + const int step = Map::kProtoTransitionElementsPerEntry; |
| + for (int i = 0; i < number_of_transitions; i++) { |
| + Object* prototype = prototype_transitions->get(proto_offset + i * step); |
| + Object* cached_map = prototype_transitions->get(map_offset + i * step); |
| + if (HeapObject::cast(prototype)->IsMarked() && |
| + HeapObject::cast(cached_map)->IsMarked()) { |
| + if (new_number_of_transitions != i) { |
| + prototype_transitions->set_unchecked( |
| + heap_, |
| + proto_offset + new_number_of_transitions * step, |
| + prototype, |
| + UPDATE_WRITE_BARRIER); |
| + prototype_transitions->set_unchecked( |
| + heap_, |
| + map_offset + new_number_of_transitions * step, |
| + cached_map, |
| + SKIP_WRITE_BARRIER); |
| + } |
| + new_number_of_transitions++; |
| } |
| - new_number_of_transitions++; |
| } |
| // Fill slots that became free with undefined value. |