anchor.diff:      Token leftParenthesis = token;
       expect('(', token);
       token = parseVariablesDeclarationOrExpressionOpt(token);
  -    if (optional('in', token)) {
  +    Token next = token.next;
  +    if (optional('in', next)) {
         if (awaitToken != null && !inAsync) {
  -        reportRecoverableError(token, fasta.messageAwaitForNotAsync);
  +        reportRecoverableError(next, fasta.messageAwaitForNotAsync);
         }
         return parseForInRest(awaitToken, forKeyword, leftParenthesis, token);
  -    } else if (optional(':', token)) {
  -      reportRecoverableError(token, fasta.messageColonInPlaceOfIn);
  +    } else if (optional(':', next)) {
  +      reportRecoverableError(next, fasta.messageColonInPlaceOfIn);
         if (awaitToken != null && !inAsync) {
  -        reportRecoverableError(token, fasta.messageAwaitForNotAsync);
  +        reportRecoverableError(next, fasta.messageAwaitForNotAsync);
         }
         return parseForInRest(awaitToken, forKeyword, leftParenthesis, token);
       } else {
  
positive.code:   /// ;
    /// ```
    Token parseForRest(Token forToken, Token leftParenthesis, Token token) {
      // TODO(brianwilkerson) Accept the last consumed token.
      Token leftSeparator = ensureSemicolon(token);
      token = leftSeparator.next;
      if (optional(';', token)) {
        token = parseEmptyStatement(token).next;
  
negative.code:   /// ```
    Token parseForInRest(
        Token awaitToken, Token forKeyword, Token leftParenthesis, Token token) {
      Token inKeyword = token.next;
      assert(optional('in', inKeyword) || optional(':', inKeyword));
      token = inKeyword.next;
      listener.beginForInExpression(token);
      token = parseExpression(token);
      listener.endForInExpression(token);
      expect(')', token);
      listener.beginForInBody(token.next);
  