protected void processSpecialTokens() {
    int tokenStart = getBaseTokenStart();
    if (isBaseAt(PyTokenTypes.LINE_BREAK)) {
      processLineBreak(tokenStart);
      if (isBaseAt(getCommentTokenType())) {
        myLineBreakBeforeFirstCommentIndex = myTokenQueue.size() - 1;
        while (isBaseAt(getCommentTokenType())) {
          // comment at start of line; maybe we need to generate dedent before the comments
          final int commentEnd = getBaseTokenEnd();
          myTokenQueue.add(new PendingCommentToken(getBaseTokenType(), getBaseTokenStart(), commentEnd, myLastNewLineIndent));
          advanceBase();
          if (isBaseAt(PyTokenTypes.LINE_BREAK)) {
            processLineBreak(getBaseTokenStart());
          }
          // Treat EOF as an indent of size 0
          else if (getBaseTokenType() == null) {
            closeDanglingSuitesWithComments(0, commentEnd);
          }
          else {
            break;
          }
        }
        myLineBreakBeforeFirstCommentIndex = -1;
      }
    }
    else if (isBaseAt(PyTokenTypes.BACKSLASH)) {
      processBackslash(tokenStart);
    }
    else if (isBaseAt(PyTokenTypes.SPACE)) {
      processSpace();
    }
  }
protected void processSpecialTokens()