| 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 #include "src/heap/array-buffer-tracker.h" | 8 #include "src/heap/array-buffer-tracker.h" |
| 9 #include "src/heap/objects-visiting.h" | 9 #include "src/heap/objects-visiting.h" |
| 10 #include "src/ic/ic-state.h" | 10 #include "src/ic/ic-state.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject, | 87 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject, |
| 88 kVisitJSObjectGeneric>(); | 88 kVisitJSObjectGeneric>(); |
| 89 table_.template RegisterSpecializations<StructVisitor, kVisitStruct, | 89 table_.template RegisterSpecializations<StructVisitor, kVisitStruct, |
| 90 kVisitStructGeneric>(); | 90 kVisitStructGeneric>(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 | 93 |
| 94 template <typename StaticVisitor> | 94 template <typename StaticVisitor> |
| 95 int StaticNewSpaceVisitor<StaticVisitor>::VisitJSArrayBuffer( | 95 int StaticNewSpaceVisitor<StaticVisitor>::VisitJSArrayBuffer( |
| 96 Map* map, HeapObject* object) { | 96 Map* map, HeapObject* object) { |
| 97 Heap* heap = map->GetHeap(); | 97 typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, int> |
| 98 JSArrayBufferBodyVisitor; |
| 98 | 99 |
| 99 JSArrayBuffer::JSArrayBufferIterateBody< | |
| 100 StaticNewSpaceVisitor<StaticVisitor> >(heap, object); | |
| 101 if (!JSArrayBuffer::cast(object)->is_external()) { | 100 if (!JSArrayBuffer::cast(object)->is_external()) { |
| 101 Heap* heap = map->GetHeap(); |
| 102 heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); | 102 heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); |
| 103 } | 103 } |
| 104 return JSArrayBuffer::kSizeWithInternalFields; | 104 return JSArrayBufferBodyVisitor::Visit(map, object); |
| 105 } | 105 } |
| 106 | 106 |
| 107 | 107 |
| 108 template <typename StaticVisitor> | 108 template <typename StaticVisitor> |
| 109 int StaticNewSpaceVisitor<StaticVisitor>::VisitJSTypedArray( | 109 int StaticNewSpaceVisitor<StaticVisitor>::VisitJSTypedArray( |
| 110 Map* map, HeapObject* object) { | 110 Map* map, HeapObject* object) { |
| 111 VisitPointers( | 111 VisitPointers( |
| 112 map->GetHeap(), object, | 112 map->GetHeap(), object, |
| 113 HeapObject::RawField(object, JSTypedArray::BodyDescriptor::kStartOffset), | 113 HeapObject::RawField(object, JSTypedArray::BodyDescriptor::kStartOffset), |
| 114 HeapObject::RawField(object, JSTypedArray::kSizeWithInternalFields)); | 114 HeapObject::RawField(object, JSTypedArray::kSizeWithInternalFields)); |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 StaticVisitor::MarkObject(heap, function->shared()->code()); | 518 StaticVisitor::MarkObject(heap, function->shared()->code()); |
| 519 } | 519 } |
| 520 } | 520 } |
| 521 VisitJSFunctionStrongCode(map, object); | 521 VisitJSFunctionStrongCode(map, object); |
| 522 } | 522 } |
| 523 | 523 |
| 524 | 524 |
| 525 template <typename StaticVisitor> | 525 template <typename StaticVisitor> |
| 526 void StaticMarkingVisitor<StaticVisitor>::VisitJSRegExp(Map* map, | 526 void StaticMarkingVisitor<StaticVisitor>::VisitJSRegExp(Map* map, |
| 527 HeapObject* object) { | 527 HeapObject* object) { |
| 528 int last_property_offset = | 528 typedef FlexibleBodyVisitor<StaticVisitor, JSRegExp::BodyDescriptor, void> |
| 529 JSRegExp::kSize + kPointerSize * map->GetInObjectProperties(); | 529 JSRegExpBodyVisitor; |
| 530 StaticVisitor::VisitPointers( | 530 JSRegExpBodyVisitor::Visit(map, object); |
| 531 map->GetHeap(), object, | |
| 532 HeapObject::RawField(object, JSRegExp::kPropertiesOffset), | |
| 533 HeapObject::RawField(object, last_property_offset)); | |
| 534 } | 531 } |
| 535 | 532 |
| 536 | 533 |
| 537 template <typename StaticVisitor> | 534 template <typename StaticVisitor> |
| 538 void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer( | 535 void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer( |
| 539 Map* map, HeapObject* object) { | 536 Map* map, HeapObject* object) { |
| 540 Heap* heap = map->GetHeap(); | 537 Heap* heap = map->GetHeap(); |
| 541 | 538 |
| 542 JSArrayBuffer::JSArrayBufferIterateBody<StaticVisitor>(heap, object); | 539 typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, |
| 540 void> JSArrayBufferBodyVisitor; |
| 541 |
| 542 JSArrayBufferBodyVisitor::Visit(map, object); |
| 543 |
| 543 if (!JSArrayBuffer::cast(object)->is_external() && | 544 if (!JSArrayBuffer::cast(object)->is_external() && |
| 544 !heap->InNewSpace(object)) { | 545 !heap->InNewSpace(object)) { |
| 545 heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); | 546 heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); |
| 546 } | 547 } |
| 547 } | 548 } |
| 548 | 549 |
| 549 | 550 |
| 550 template <typename StaticVisitor> | 551 template <typename StaticVisitor> |
| 551 void StaticMarkingVisitor<StaticVisitor>::VisitJSTypedArray( | 552 void StaticMarkingVisitor<StaticVisitor>::VisitJSTypedArray( |
| 552 Map* map, HeapObject* object) { | 553 Map* map, HeapObject* object) { |
| 553 StaticVisitor::VisitPointers( | 554 typedef FlexibleBodyVisitor<StaticVisitor, JSTypedArray::BodyDescriptor, void> |
| 554 map->GetHeap(), object, | 555 JSTypedArrayBodyVisitor; |
| 555 HeapObject::RawField(object, JSTypedArray::BodyDescriptor::kStartOffset), | 556 JSTypedArrayBodyVisitor::Visit(map, object); |
| 556 HeapObject::RawField(object, JSTypedArray::kSizeWithInternalFields)); | |
| 557 } | 557 } |
| 558 | 558 |
| 559 | 559 |
| 560 template <typename StaticVisitor> | 560 template <typename StaticVisitor> |
| 561 void StaticMarkingVisitor<StaticVisitor>::VisitJSDataView(Map* map, | 561 void StaticMarkingVisitor<StaticVisitor>::VisitJSDataView(Map* map, |
| 562 HeapObject* object) { | 562 HeapObject* object) { |
| 563 StaticVisitor::VisitPointers( | 563 typedef FlexibleBodyVisitor<StaticVisitor, JSDataView::BodyDescriptor, void> |
| 564 map->GetHeap(), object, | 564 JSDataViewBodyVisitor; |
| 565 HeapObject::RawField(object, JSDataView::BodyDescriptor::kStartOffset), | 565 JSDataViewBodyVisitor::Visit(map, object); |
| 566 HeapObject::RawField(object, JSDataView::kSizeWithInternalFields)); | |
| 567 } | 566 } |
| 568 | 567 |
| 569 | 568 |
| 570 template <typename StaticVisitor> | 569 template <typename StaticVisitor> |
| 571 void StaticMarkingVisitor<StaticVisitor>::VisitBytecodeArray( | 570 void StaticMarkingVisitor<StaticVisitor>::VisitBytecodeArray( |
| 572 Map* map, HeapObject* object) { | 571 Map* map, HeapObject* object) { |
| 573 StaticVisitor::VisitPointers( | 572 StaticVisitor::VisitPointers( |
| 574 map->GetHeap(), object, | 573 map->GetHeap(), object, |
| 575 HeapObject::RawField(object, BytecodeArray::kConstantPoolOffset), | 574 HeapObject::RawField(object, BytecodeArray::kConstantPoolOffset), |
| 576 HeapObject::RawField(object, BytecodeArray::kHeaderSize)); | 575 HeapObject::RawField(object, BytecodeArray::kHeaderSize)); |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 | 878 |
| 880 RelocIterator it(this, mode_mask); | 879 RelocIterator it(this, mode_mask); |
| 881 for (; !it.done(); it.next()) { | 880 for (; !it.done(); it.next()) { |
| 882 it.rinfo()->template Visit<StaticVisitor>(heap); | 881 it.rinfo()->template Visit<StaticVisitor>(heap); |
| 883 } | 882 } |
| 884 } | 883 } |
| 885 } // namespace internal | 884 } // namespace internal |
| 886 } // namespace v8 | 885 } // namespace v8 |
| 887 | 886 |
| 888 #endif // V8_OBJECTS_VISITING_INL_H_ | 887 #endif // V8_OBJECTS_VISITING_INL_H_ |
| OLD | NEW |