also wondering if we should store `end.lineIndex` for faster access — `for (var i = start.lineIndex, len = end.lineIndex; i <= len; i++)`