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. |