Index: src/mark-compact.cc |
diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
index 0ca1bfd2a71b6bbc08398dbedafd165f673c15f4..93614aceba272263c529d86ed1982be323c68c74 100644 |
--- a/src/mark-compact.cc |
+++ b/src/mark-compact.cc |
@@ -2304,18 +2304,24 @@ void MarkCompactCollector::ClearNonLiveTransitions() { |
Object* prototype = prototype_transitions->get(proto_offset + i * step); |
Object* cached_map = prototype_transitions->get(map_offset + i * step); |
if (IsMarked(prototype) && IsMarked(cached_map)) { |
+ int proto_index = proto_offset + new_number_of_transitions * step; |
+ int map_index = map_offset + new_number_of_transitions * step; |
if (new_number_of_transitions != i) { |
prototype_transitions->set_unchecked( |
heap_, |
- proto_offset + new_number_of_transitions * step, |
+ proto_index, |
prototype, |
UPDATE_WRITE_BARRIER); |
prototype_transitions->set_unchecked( |
heap_, |
- map_offset + new_number_of_transitions * step, |
+ map_index, |
cached_map, |
SKIP_WRITE_BARRIER); |
} |
+ Object** slot = |
+ HeapObject::RawField(prototype_transitions, |
+ FixedArray::OffsetOfElementAt(proto_index)); |
+ RecordSlot(slot, slot, prototype); |
new_number_of_transitions++; |
} |
} |