anchor.diff:    /// ```
     Token parseYieldStatement(Token token) {
       // TODO(brianwilkerson) Accept the last consumed token.
  -    assert(identical('yield', token.stringValue));
  +    assert(optional('yield', token));
       Token begin = token;
       listener.beginYieldStatement(begin);
  -    token = token.next;
       Token starToken;
  -    if (optional('*', token)) {
  -      starToken = token;
  -      token = token.next;
  -    }
  -    token = parseExpression(token);
  +    if (optional('*', token.next)) {
  +      starToken = token = token.next;
  +    }
  +    token = parseExpression(token.next);
       token = ensureSemicolon(token);
       listener.endYieldStatement(begin, starToken, token);
       return token;
  
positive.code:         token = firstExtra;
        } else {
          while (optional(',', token)) {
            token = token.next;
            Token begin = token;
            token = parseExpression(token);
            listener.handleExtraneousExpression(
                begin, fasta.messageAssertExtraneousArgument);
          }
  
negative.code:     Token commaToken = null;
      token = expect('assert', token);
      Token leftParenthesis = token;
      expect('(', token);
      bool old = mayParseFunctionExpressions;
      mayParseFunctionExpressions = true;
      token = parseExpression(token.next);
      if (optional(',', token)) {
        if (optional(')', token.next)) {
          token = token.next;
        } else {
          commaToken = token;
          token = parseExpression(token.next);
        }
      }
      if (optional(',', token)) {
  