anchor.diff:      return token;
     }
   
  +  /// This method parses the portion of the forLoopParts that starts with the
  +  /// keyword 'in'. For the sake of recovery, we accept a colon in place of the
  +  /// keyword.
  +  ///
  +  /// forLoopParts:
  +  ///   forInitializerStatement expression? ';' expressionList? |
  +  ///   declaredIdentifier 'in' expression |
  +  ///   identifier 'in' expression
  +  /// ;
     Token parseForInRest(
         Token awaitToken, Token forKeyword, Token leftParenthesis, Token token) {
       assert(optional('in', token) || optional(':', token));
  
positive.code:     return token;
    }
  
    Token parseDoWhileStatement(Token token) {
      Token doToken = token;
      listener.beginDoWhileStatement(doToken);
      token = expect('do', token);
      listener.beginDoWhileStatementBody(token);
      token = parseStatementOpt(token);
      listener.endDoWhileStatementBody(token);
  
negative.code:     return token;
    }
  
    /// ifStatement:
    ///   'if' '(' expression ')' statement ('else' statement)?
    /// ;
    Token parseIfStatement(Token token) {
      assert(optional('if', token));
      Token ifToken = token;
      listener.beginIfStatement(ifToken);
      token = parseParenthesizedExpression(token.next);
      listener.beginThenStatement(token);
      token = parseStatementOpt(token);
      listener.endThenStatement(token);
  