   }
 
   typealias _Base = _HeapBuffer<_ArrayBody, T>
-  var _base: _Base
+  var _base: _Base {
+    return _HeapBuffer(__bufferPointer.buffer)
+  }
+
+  var __bufferPointer: ManagedBufferPointer<_ArrayBody, T>
 }
 
 /// Append the elements of rhs to lhs


  /// create an empty buffer
  public init() {
    _base = unsafeBitCast(_emptyArrayStorage, _HeapBuffer<_ArrayBody, T>.self)
  }

  /// Adopt the storage of x

      self = _ContiguousArrayBuffer<T>()
    }
    else {
      __bufferPointer = ManagedBufferPointer(
        bufferClass: _ContiguousArrayStorage<T>.self,
        minimumCapacity: realMinimumCapacity
      ) {_,_ in _ArrayBody() }
      
      let verbatim = _isBridgedVerbatimToObjectiveC(T.self)
      
      __bufferPointer.value = _ArrayBody(
        count: count, capacity: _base._capacity(),
        elementTypeIsBridgedVerbatim: verbatim)
    }
  }

  init(_ storage: _ContiguousArrayStorageBase?) {
    __bufferPointer = ManagedBufferPointer(
      unsafeBufferObject: storage ?? _emptyArrayStorage)
  }

  public var hasStorage: Bool {
