anchor.diff:              // TODO(brianwilkerson): Remove the invocation of `previous` when
               // `replaceToken` returns the last consumed token.
               token = rewriter.replaceToken(next, replacement).previous;
  -            // TODO(brianwilkerson): Remove the invocation of `previous` when
  -            // `parseArgumentOrIndexStar` returns the last consumed token.
  -            token = parseArgumentOrIndexStar(token.next, null).previous;
  +            token = parseArgumentOrIndexStar(token, null);
             } else {
               token = reportUnexpectedToken(token.next);
             }
  
positive.code:             listener.endBinaryExpression(operator);
            } else if ((identical(type, TokenType.OPEN_PAREN)) ||
                (identical(type, TokenType.OPEN_SQUARE_BRACKET))) {
              // TODO(brianwilkerson): Remove the invocation of `previous` when
              // `parseArgumentOrIndexStar` returns the last consumed token.
              token =
                  parseArgumentOrIndexStar(token.next, typeArguments).previous;
              next = token.next;
            } else if ((identical(type, TokenType.PLUS_PLUS)) ||
                (identical(type, TokenType.MINUS_MINUS))) {
  
negative.code:         listener.handleNativeFunctionBodySkipped(nativeToken, next);
          return token.next;
        }
        listener.handleNativeFunctionBodyIgnored(nativeToken, next);
        // Fall through to recover and skip function body
      }
      token = next;
      String value = token.stringValue;
      if (identical(value, ';')) {
        if (!allowAbstract) {
  