anchor.diff:    /// Provide token for [constKeyword] if preceded by 'const', null if not.
     Token parseLiteralListOrMapOrFunction(Token token, Token constKeyword) {
       // TODO(brianwilkerson) Return the last consumed token.
  -    token = token.next;
  -    assert(optional('<', token));
  -    Token closeBrace = closeBraceTokenFor(token);
  +    Token next = token.next;
  +    assert(optional('<', next));
  +    Token closeBrace = closeBraceTokenFor(next);
       if (constKeyword == null &&
           closeBrace != null &&
           identical(closeBrace.next.kind, OPEN_PAREN_TOKEN)) {
  -      token = parseTypeVariablesOpt(token);
  +      token = parseTypeVariablesOpt(token.next);
         return parseLiteralFunctionSuffix(token);
       } else {
  -      token = parseTypeArgumentsOpt(token);
  +      token = parseTypeArgumentsOpt(token.next);
         if (optional('{', token)) {
           return parseLiteralMapSuffix(token, constKeyword).next;
         } else if ((optional('[', token)) || (optional('[]', token))) {
  
positive.code:           // The following isn't allowed:
            //    int Function(int bar(String x)).
            if (memberKind == MemberKind.GeneralizedFunctionType) {
              reportRecoverableError(inlineFunctionTypeStart,
                  fasta.messageInvalidInlineFunctionType);
            }
          } else if (untyped) {
  
negative.code:     /// The number of function types seen during analysis.
      int functionTypes = 0;
  
      /// The tokens before the start of type variables of function types seen
      /// during analysis. Notice that the tokens in this list might precede
      /// either `'<'` or `'('` as not all function types have type parameters.
      /// Also, it is safe to assume that [closeBraceTokenFor] will return
      /// non-null for all of the tokens following these tokens.
      Link<Token> typeVariableStarters = const Link<Token>();
  
      {
  