| Index: src/heap/objects-visiting-inl.h
|
| diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h
|
| index d22f6d268db27ded38e9d468afd739a57233e6e5..433fc6deab3e0efc7cb921501d7757d1c42a2688 100644
|
| --- a/src/heap/objects-visiting-inl.h
|
| +++ b/src/heap/objects-visiting-inl.h
|
| @@ -537,6 +537,11 @@
|
| template <typename StaticVisitor>
|
| void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap,
|
| Map* map) {
|
| + Object* raw_transitions = map->raw_transitions();
|
| + if (TransitionArray::IsFullTransitionArray(raw_transitions)) {
|
| + MarkTransitionArray(heap, TransitionArray::cast(raw_transitions));
|
| + }
|
| +
|
| // Since descriptor arrays are potentially shared, ensure that only the
|
| // descriptors that belong to this map are marked. The first time a
|
| // non-empty descriptor array is marked, its header is also visited. The slot
|
| @@ -562,6 +567,23 @@
|
| StaticVisitor::VisitPointers(
|
| heap, HeapObject::RawField(map, Map::kPointerFieldsBeginOffset),
|
| HeapObject::RawField(map, Map::kPointerFieldsEndOffset));
|
| +}
|
| +
|
| +
|
| +template <typename StaticVisitor>
|
| +void StaticMarkingVisitor<StaticVisitor>::MarkTransitionArray(
|
| + Heap* heap, TransitionArray* transitions) {
|
| + if (!StaticVisitor::MarkObjectWithoutPush(heap, transitions)) return;
|
| +
|
| + if (transitions->HasPrototypeTransitions()) {
|
| + StaticVisitor::VisitPointer(heap,
|
| + transitions->GetPrototypeTransitionsSlot());
|
| + }
|
| +
|
| + int num_transitions = TransitionArray::NumberOfTransitions(transitions);
|
| + for (int i = 0; i < num_transitions; ++i) {
|
| + StaticVisitor::VisitPointer(heap, transitions->GetKeySlot(i));
|
| + }
|
| }
|
|
|
|
|
|
|