code: function markSC(tokens) {
      let tokensLength = tokens.length;
      let ws = -1; // Flag for whitespaces
      let sc = -1; // Flag for whitespaces and comments
      let t; // Current token
  
      // For every token in the token list, mark spaces and line breaks
      // as spaces (set both `ws` and `sc` flags). Mark multiline comments
      // with `sc` flag.
      // If there are several spaces or tabs or line breaks or multiline
      // comments in a row, group them: take the last one's index number
      // and save it to the first token in the group as a reference:
      // e.g., `ws_last = 7` for a group of whitespaces or `sc_last = 9`
      // for a group of whitespaces and comments.
      for (var i = 0; i < tokensLength; i++) {
        t = tokens[i];
        switch (t.type) {
          case TokenType.Space:
          case TokenType.Tab:
          case TokenType.Newline:
            t.ws = true;
            t.sc = true;
  
            if (ws === -1) ws = i;
            if (sc === -1) sc = i;
  
            break;
          case TokenType.CommentML:
          case TokenType.CommentSL:
            if (ws !== -1) {
              tokens[ws].ws_last = i - 1;
              ws = -1;
            }
  
            t.sc = true;
  
            break;
          default:
            if (ws !== -1) {
              tokens[ws].ws_last = i - 1;
              ws = -1;
            }
  
            if (sc !== -1) {
              tokens[sc].sc_last = i - 1;
              sc = -1;
            }
        }
      }
  
      if (ws !== -1) tokens[ws].ws_last = i - 1;
      if (sc !== -1) tokens[sc].sc_last = i - 1;
    }
docs: Mark whitespaces and comments