       rightNeighbor.outputExtent = rightNeighbor.outputExtent.traversalFrom(childMerge.outputExtent)
       childMerge
 
-  assign: ({@inputExtent, @outputExtent, @children}) -> this
-
   hasBoundary: (minInputPosition, maxInputPosition=Point.infinity()) ->
     inputEnd = Point.zero()
     for child in @children

      @children.splice(childIndex, 1, splitChildren...)
      childIndex += splitChildren.indexOf(spliceChild)
      rightMergeIndex += splitChildren.length - 1

    if leftNeighbor = @children[leftMergeIndex - 1]
      leftNeighbor.merge(@children[leftMergeIndex])
      if isEmpty(@children[leftMergeIndex])
        @children[leftMergeIndex].assign(leftNeighbor)
        @children.splice(leftMergeIndex - 1, 1)
        childIndex--
        rightMergeIndex--

    if rightNeighbor = @children[rightMergeIndex + 1]
      @children[rightMergeIndex].merge(rightNeighbor)

      rightNeighbor.inputExtent = rightNeighbor.outputExtent = Point.zero()
      rightNeighbor.content = null
      result

  hasBoundary: (minInputPosition) ->
    @content instanceof Boundary
