Fix missing write-barrier for prototype transitions.
R=vegorov@chromium.org Review URL: https://chromiumcodereview.appspot.com/9150041 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10451 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
8e7194e62e
commit
dffb78e312
@ -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++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user