anchor.diff:    }
   
     Token parseRecoverExpression(Token token, Message message) {
  -    // TODO(brianwilkerson) Accept the last consumed token.
  -    // TODO(brianwilkerson) Return the last consumed token.
  -    return parseExpression(token);
  +    // TODO(brianwilkerson) Return the last consumed token.
  +    return parseExpression(token.next);
     }
   
     int expressionDepth = 0;
  
positive.code:     assert(optional('part', token));
      Token partKeyword = token;
      listener.beginPart(token);
      token = parseLiteralStringOrRecoverExpression(token.next);
      token = ensureSemicolon(token);
      listener.endPart(partKeyword, token);
      return token;
  
negative.code:     listener.beginPartOf(token);
      Token partKeyword = token;
      Token ofKeyword = token.next;
      bool hasName = ofKeyword.next.isIdentifier;
      if (hasName) {
        token = parseQualified(ofKeyword.next, IdentifierContext.partName,
                IdentifierContext.partNameContinuation)
            .next;
      } else {
        token = parseLiteralStringOrRecoverExpression(ofKeyword);
      }
      token = ensureSemicolon(token);
      listener.endPartOf(partKeyword, ofKeyword, token, hasName);
  