       child = @children[i]
       childStart = childEnd
       childEnd = childStart.traverse(child.extent)
-      i++
 
       switch childEnd.compare(position)
         when -1 then childPrecedesRange = true

        i += newChildren.length - 1
      break if rangeIsEmpty

    if @children.length > BRANCHING_THRESHOLD
      splitIndex = Math.ceil(@children.length / BRANCHING_THRESHOLD)
      [new Node(@children.slice(0, splitIndex)), new Node(@children.slice(splitIndex))]
    else
      addSet(@ids, ids)
      return

        else
          relativeStart = position.traversalFrom(childStart)
          if splitNodes = child.splice(relativeStart, oldExtent, newExtent, exclusiveIds, precedingIds)
            @children.splice(i, 1, splitNodes...)
          remainderToDelete = spliceOldEnd.traversalFrom(childEnd)
          childEnd = childStart.traverse(child.extent)

      i++ unless @mergeChildrenIfNeeded(i - 1)
      precedingIds = child.ids

    @splitIfNeeded()

  getStart: (id) ->
    return unless @ids.has(id)
