anchor.diff:        hasReturnType = looksLikeType;
   
         while (optional("Function", token)) {
  -        Token typeVariableStart = token.next;
  +        Token typeVariableStart = token;
           if (optional("<", token.next)) {
             Token close = closeBraceTokenFor(token.next);
             if (close != null && optional(">", close)) {
  
positive.code:       if (isValidMethodTypeArguments(token)) {
          // For example a(b)..<T>(c), where token is '<'.
          typeArguments = token;
          token = parseTypeArgumentsOpt(token);
          assert(optional('(', token));
        }
        token = parseArgumentOrIndexStar(token, typeArguments);
  
negative.code:           reportRecoverableError(nameToken, fasta.messagePrivateNamedParameter);
          }
  
          // TODO(brianwilkerson): Remove the invocation of `previous` when
          // `injectGenericCommentTypeList` returns the last consumed token.
          Token previous = listener.injectGenericCommentTypeList(token).previous;
          token = previous.next;
  
          Token inlineFunctionTypeStart;
          if (optional("<", token)) {
            Token closer = closeBraceTokenFor(token);
            if (closer != null) {
              if (optional("(", closer.next)) {
                inlineFunctionTypeStart = previous;
                token = token.next;
              }
            }
          } else if (optional("(", token)) {
            inlineFunctionTypeStart = previous;
            token = closeBraceTokenFor(token).next;
          }
  
          if (inlineFunctionTypeStart != null) {
            token = parseTypeVariablesOpt(inlineFunctionTypeStart.next);
            listener
                .beginFunctionTypedFormalParameter(inlineFunctionTypeStart.next);
            if (!untyped) {
              if (voidToken != null) {
                listener.handleVoidKeyword(voidToken);
  