   addDecorationForMarker: (marker, decoration) ->
     startRow = marker.getStartBufferPosition().row
     endRow = marker.getEndBufferPosition().row
-    while startRow <= endRow
-      @addDecorationToBufferRow(startRow++, decoration)
+    @addDecorationToBufferRowRange(startRow, endRow, decoration)
 
     changedSubscription = @subscribe marker, 'changed', (e) =>
       oldStartRow = e.oldHeadBufferPosition.row

    for decoration in removed
      @emit 'decoration-changed', {bufferRow, decoration, action: 'remove'}

  findDecorationsForBufferRow: (bufferRow, decorationPattern) ->
    return unless @decorations[bufferRow]
    decoration for decoration in @decorations[bufferRow] when @decorationMatchesPattern(decoration, decorationPattern)

      # all decorations, then when markers becoming valid, some of the
      # overlap was not visible.

      @removeDecorationFromBufferRowRange(oldStartRow, oldEndRow, decoration)
      @addDecorationToBufferRowRange(newStartRow, newEndRow, decoration) if e.isValid

    destroyedSubscription = @subscribe marker, 'destroyed', (e) =>
      @removeDecorationForMarker(marker, decoration)
