Chromium Code Reviews| Index: src/mark-compact.cc |
| diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
| index 0e6c59e0767cd2d8fd1f5b47625ad7045ce6b94a..6245785ab995b7be54f3d0d2d1dff8b0068ad011 100644 |
| --- a/src/mark-compact.cc |
| +++ b/src/mark-compact.cc |
| @@ -1829,20 +1829,22 @@ void Marker<T>::MarkMapContents(Map* map) { |
| base_marker()->MarkObjectAndPush(HeapObject::cast(map->GetBackPointer())); |
| Object** descriptor_array_slot = |
| - HeapObject::RawField(map, Map::kInstanceDescriptorsOrBitField3Offset); |
| + HeapObject::RawField(map, Map::kInstanceDescriptorsOrBackPointerOffset); |
| Object* descriptor_array = *descriptor_array_slot; |
| - if (!descriptor_array->IsSmi()) { |
| + if (descriptor_array->IsDescriptorArray()) { |
| MarkDescriptorArray(reinterpret_cast<DescriptorArray*>(descriptor_array)); |
| + } else { |
| + ASSERT(descriptor_array->IsMap() || descriptor_array->IsUndefined()); |
|
Jakob Kummerow
2012/07/10 12:26:25
When descriptor_array->IsMap(), then it's the back
Toon Verwaest
2012/07/10 13:28:28
It's already marked above, by accessing map->GetBa
|
| } |
| // Mark the Object* fields of the Map. Since the descriptor array has been |
| // marked already, it is fine that one of these fields contains a pointer |
| // to it. But make sure to skip back pointer. |
| STATIC_ASSERT(Map::kPointerFieldsEndOffset == |
| - Map::kBackPointerOffset + kPointerSize); |
| + Map::kBitField3Offset + kPointerSize); |
| Object** start_slot = |
| HeapObject::RawField(map, Map::kPointerFieldsBeginOffset); |
| - Object** end_slot = HeapObject::RawField(map, Map::kBackPointerOffset); |
| + Object** end_slot = HeapObject::RawField(map, Map::kBitField3Offset); |
| for (Object** slot = start_slot; slot < end_slot; slot++) { |
| Object* obj = *slot; |
| if (!obj->NonFailureIsHeapObject()) continue; |