Index: src/heap/objects-visiting-inl.h |
diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h |
index eeb99fc33b01e940a1462bdb2bf7a450105ef10c..c504988436f79f562eb73530db3ff4b30da489da 100644 |
--- a/src/heap/objects-visiting-inl.h |
+++ b/src/heap/objects-visiting-inl.h |
@@ -77,10 +77,7 @@ |
&FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, |
int>::Visit); |
- table_.Register( |
- kVisitJSArrayBuffer, |
- &FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, |
- int>::Visit); |
+ table_.Register(kVisitJSArrayBuffer, &VisitJSArrayBuffer); |
table_.Register(kVisitFreeSpace, &VisitFreeSpace); |
@@ -101,6 +98,21 @@ |
table_.template RegisterSpecializations<StructVisitor, kVisitStruct, |
kVisitStructGeneric>(); |
} |
+ |
+ |
+template <typename StaticVisitor> |
+int StaticNewSpaceVisitor<StaticVisitor>::VisitJSArrayBuffer( |
+ Map* map, HeapObject* object) { |
+ typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, int> |
+ JSArrayBufferBodyVisitor; |
+ |
+ if (!JSArrayBuffer::cast(object)->is_external()) { |
+ Heap* heap = map->GetHeap(); |
+ heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); |
+ } |
+ return JSArrayBufferBodyVisitor::Visit(map, object); |
+} |
+ |
template <typename StaticVisitor> |
int StaticNewSpaceVisitor<StaticVisitor>::VisitBytecodeArray( |
@@ -173,10 +185,7 @@ |
table_.Register(kVisitJSFunction, &VisitJSFunction); |
- table_.Register( |
- kVisitJSArrayBuffer, |
- &FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, |
- void>::Visit); |
+ table_.Register(kVisitJSArrayBuffer, &VisitJSArrayBuffer); |
// Registration for kVisitJSRegExp is done by StaticVisitor. |
@@ -510,6 +519,24 @@ |
HeapObject* object) { |
JSObjectVisitor::Visit(map, object); |
} |
+ |
+ |
+template <typename StaticVisitor> |
+void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer( |
+ Map* map, HeapObject* object) { |
+ Heap* heap = map->GetHeap(); |
+ |
+ typedef FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, |
+ void> JSArrayBufferBodyVisitor; |
+ |
+ JSArrayBufferBodyVisitor::Visit(map, object); |
+ |
+ if (!JSArrayBuffer::cast(object)->is_external() && |
+ !heap->InNewSpace(object)) { |
+ heap->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); |
+ } |
+} |
+ |
template <typename StaticVisitor> |
void StaticMarkingVisitor<StaticVisitor>::VisitBytecodeArray( |