anchor.diff:      token = token.next;
       listener.beginTopLevelMember(token);
   
  -    Link<Token> identifiers = findMemberName(token);
  +    Link<Token> identifiers = findMemberName(beforeStart);
       if (identifiers.isEmpty) {
         return reportUnrecoverableErrorWithToken(
             token, fasta.templateExpectedDeclaration);
       }
  -    Token afterName = identifiers.head;
  +    Token afterName = identifiers.head.next;
       identifiers = identifiers.tail;
   
       if (identifiers.isEmpty) {
         return reportUnrecoverableErrorWithToken(
             token, fasta.templateExpectedDeclaration);
       }
  -    Token name = identifiers.head;
  +    Token name = identifiers.head.next;
       identifiers = identifiers.tail;
       Token getOrSet;
       if (!identifiers.isEmpty) {
  -      String value = identifiers.head.stringValue;
  +      String value = identifiers.head.next.stringValue;
         if ((identical(value, 'get')) || (identical(value, 'set'))) {
  -        getOrSet = identifiers.head;
  +        getOrSet = identifiers.head.next;
           identifiers = identifiers.tail;
         }
       }
       Token type;
       if (!identifiers.isEmpty) {
  -      if (isValidTypeReference(identifiers.head)) {
  -        type = identifiers.head;
  +      if (isValidTypeReference(identifiers.head.next)) {
  +        type = identifiers.head.next;
           identifiers = identifiers.tail;
         }
       }
  
positive.code:         hasName = true;
        }
        token = listener.injectGenericCommentTypeAssign(token);
        identifiers = identifiers.prepend(token);
  
        if (!isGeneralizedFunctionType(token)) {
          // Read a potential return type.
  
negative.code:           if (optional(';', token)) {
              reportRecoverableError(token, fasta.messageExpectedOpenParens);
            }
            previous = token;
            token = expect("(", token);
          }
          if (token is BeginToken) {
            Token closeBrace = closeBraceTokenFor(token);
            if (closeBrace == null) {
              previous = reportUnmatchedToken(token);
              token = previous.next;
            } else {
              previous = closeBrace;
              token = previous.next;
            }
          }
        }
  