| 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(
 | 
| 
 |