anchor.diff:    /// identifier in the given [context], create a synthetic identifier, report
     /// an error, and return the synthetic identifier.
     Token ensureIdentifier(Token token, IdentifierContext context) {
  +    // TODO(brianwilkerson) Accept the last consumed token.
       if (!token.isIdentifier) {
         if (optional("void", token)) {
           reportRecoverableError(token, fasta.messageInvalidVoid);
  
positive.code:     // TODO(brianwilkerson) Return the last consumed token.
      listener.beginMixinApplication(token);
      Token withKeyword = token;
      token = expect('with', token);
      token = parseTypeList(token);
      listener.endMixinApplication(withKeyword);
      return token;
  
negative.code:     Token begin = token;
      listener.beginBlock(begin);
      int statementCount = 0;
      expect('{', token);
      while (notEofOrValue('}', token.next)) {
        Token startToken = token.next;
        token = parseStatementOpt(token.next);
        if (identical(token.next, startToken)) {
          // No progress was made, so we report the current token as being invalid
          // and move forward.
          token = token.next;
          reportRecoverableError(
              token, fasta.templateUnexpectedToken.withArguments(token));
        }
        ++statementCount;
      }
      token = token.next;
      listener.endBlock(statementCount, begin, token);
      expect('}', token);
      return token;
  