| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_OBJECTS_VISITING_INL_H_ | 5 #ifndef V8_OBJECTS_VISITING_INL_H_ |
| 6 #define V8_OBJECTS_VISITING_INL_H_ | 6 #define V8_OBJECTS_VISITING_INL_H_ |
| 7 | 7 |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 table_.Register(kVisitJSDataView, &VisitJSDataView); | 184 table_.Register(kVisitJSDataView, &VisitJSDataView); |
| 185 | 185 |
| 186 // Registration for kVisitJSRegExp is done by StaticVisitor. | 186 // Registration for kVisitJSRegExp is done by StaticVisitor. |
| 187 | 187 |
| 188 table_.Register( | 188 table_.Register( |
| 189 kVisitCell, | 189 kVisitCell, |
| 190 &FixedBodyVisitor<StaticVisitor, Cell::BodyDescriptor, void>::Visit); | 190 &FixedBodyVisitor<StaticVisitor, Cell::BodyDescriptor, void>::Visit); |
| 191 | 191 |
| 192 table_.Register(kVisitPropertyCell, &VisitPropertyCell); | 192 table_.Register(kVisitPropertyCell, &VisitPropertyCell); |
| 193 | 193 |
| 194 table_.Register(kVisitWeakCell, &VisitWeakCell); |
| 195 |
| 194 table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject, | 196 table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject, |
| 195 kVisitDataObjectGeneric>(); | 197 kVisitDataObjectGeneric>(); |
| 196 | 198 |
| 197 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject, | 199 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject, |
| 198 kVisitJSObjectGeneric>(); | 200 kVisitJSObjectGeneric>(); |
| 199 | 201 |
| 200 table_.template RegisterSpecializations<StructObjectVisitor, kVisitStruct, | 202 table_.template RegisterSpecializations<StructObjectVisitor, kVisitStruct, |
| 201 kVisitStructGeneric>(); | 203 kVisitStructGeneric>(); |
| 202 } | 204 } |
| 203 | 205 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 } | 345 } |
| 344 | 346 |
| 345 StaticVisitor::VisitPointers( | 347 StaticVisitor::VisitPointers( |
| 346 heap, | 348 heap, |
| 347 HeapObject::RawField(object, PropertyCell::kPointerFieldsBeginOffset), | 349 HeapObject::RawField(object, PropertyCell::kPointerFieldsBeginOffset), |
| 348 HeapObject::RawField(object, PropertyCell::kPointerFieldsEndOffset)); | 350 HeapObject::RawField(object, PropertyCell::kPointerFieldsEndOffset)); |
| 349 } | 351 } |
| 350 | 352 |
| 351 | 353 |
| 352 template <typename StaticVisitor> | 354 template <typename StaticVisitor> |
| 355 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCell(Map* map, |
| 356 HeapObject* object) { |
| 357 Heap* heap = map->GetHeap(); |
| 358 WeakCell* weak_cell = reinterpret_cast<WeakCell*>(object); |
| 359 Object* undefined = heap->undefined_value(); |
| 360 // Enqueue weak cell in linked list of encountered weak collections. |
| 361 // We can ignore weak cells with cleared values because they will always point |
| 362 // to the undefined_value. |
| 363 if (weak_cell->next() == undefined && weak_cell->value() != undefined) { |
| 364 weak_cell->set_next(heap->encountered_weak_cells()); |
| 365 heap->set_encountered_weak_cells(weak_cell); |
| 366 } |
| 367 } |
| 368 |
| 369 |
| 370 template <typename StaticVisitor> |
| 353 void StaticMarkingVisitor<StaticVisitor>::VisitAllocationSite( | 371 void StaticMarkingVisitor<StaticVisitor>::VisitAllocationSite( |
| 354 Map* map, HeapObject* object) { | 372 Map* map, HeapObject* object) { |
| 355 Heap* heap = map->GetHeap(); | 373 Heap* heap = map->GetHeap(); |
| 356 | 374 |
| 357 Object** slot = | 375 Object** slot = |
| 358 HeapObject::RawField(object, AllocationSite::kDependentCodeOffset); | 376 HeapObject::RawField(object, AllocationSite::kDependentCodeOffset); |
| 359 if (FLAG_collect_maps) { | 377 if (FLAG_collect_maps) { |
| 360 // Mark allocation site dependent codes array but do not push it onto | 378 // Mark allocation site dependent codes array but do not push it onto |
| 361 // marking stack, this will make references from it weak. We will clean | 379 // marking stack, this will make references from it weak. We will clean |
| 362 // dead codes when we iterate over allocation sites in | 380 // dead codes when we iterate over allocation sites in |
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 | 943 |
| 926 RelocIterator it(this, mode_mask); | 944 RelocIterator it(this, mode_mask); |
| 927 for (; !it.done(); it.next()) { | 945 for (; !it.done(); it.next()) { |
| 928 it.rinfo()->template Visit<StaticVisitor>(heap); | 946 it.rinfo()->template Visit<StaticVisitor>(heap); |
| 929 } | 947 } |
| 930 } | 948 } |
| 931 } | 949 } |
| 932 } // namespace v8::internal | 950 } // namespace v8::internal |
| 933 | 951 |
| 934 #endif // V8_OBJECTS_VISITING_INL_H_ | 952 #endif // V8_OBJECTS_VISITING_INL_H_ |
| OLD | NEW |