anchor.diff:  import '../fasta_codes.dart' as fasta;
   
   import '../scanner.dart' show ErrorToken, Token;
  -
  -import '../scanner/recover.dart' show skipToEof;
   
   import '../../scanner/token.dart'
       show
  
positive.code:     }
    }
  
    Token reportErrorToken(ErrorToken token, bool isRecoverable) {
      Message message = token.assertionMessage;
      // TODO(brianwilkerson): Error recovery belongs in the parser, not the
      // listeners. As a result, the following code needs to be re-worked. While
      // listeners still need to handle errors, there should not be a distinction
      // between recoverable and non-recoverable errors.
      if (isRecoverable) {
        listener.handleRecoverableError(message, token, token);
        return null;
      } else {
        Token next = listener.handleUnrecoverableError(token, message);
        return next ?? skipToEof(token);
      }
    }
  
    /// Report the given error [token] as an unrecoverable error and return the
    /// next token to be processed.
    Token reportErrorTokenAndAdvance(ErrorToken token) {
      Token nextToken = reportErrorToken(token, false);
      if (nextToken == token) {
        return token.next;
      }
      return nextToken;
    }
  
    Token parseInvalidTopLevelDeclaration(Token token) {
  
negative.code:       bool errorReported = false;
        while (next is ErrorToken) {
          errorReported = true;
          reportErrorToken(next);
          token = next;
          next = token.next;
        }
  