anchor.diff:    /// ```
     Token parseForInRest(
         Token awaitToken, Token forKeyword, Token leftParenthesis, Token token) {
  -    // TODO(brianwilkerson) Accept the last consumed token.
  -    assert(optional('in', token) || optional(':', token));
  -    Token inKeyword = token;
  -    listener.beginForInExpression(token.next);
  -    token = parseExpression(token.next);
  +    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);
  
positive.code:   /// ;
    /// ```
    Token parseVariablesDeclarationOrExpressionOpt(Token token) {
      // TODO(brianwilkerson) Return the last consumed token.
      Token next = token.next;
      final String value = next.stringValue;
      if (identical(value, ';')) {
        listener.handleNoExpression(next);
        return next;
      } else if (isOneOf4(next, '@', 'var', 'final', 'const')) {
        return parseVariablesDeclarationNoSemicolon(token.next).next;
      }
      return parseType(
          token.next, TypeContinuation.VariablesDeclarationOrExpression);
    }
  
    /// This method parses the portion of the forLoopParts that starts with the
  
negative.code:   /// ;
    /// ```
    Token parseForRest(Token forToken, Token leftParenthesis, Token token) {
      Token leftSeparator = ensureSemicolon(token.next);
      token = leftSeparator.next;
      if (optional(';', token)) {
        token = parseEmptyStatement(token).next;
  