private TypeAliasSyntax ParseTypeAlias()
{
var name = Match(SyntaxKind.IdentifierToken);
var arrayRankSpecifiers = new List<ArrayRankSpecifierSyntax>();
if (Current.Kind == SyntaxKind.OpenBracketToken)
ParseArrayRankSpecifiers(arrayRankSpecifiers, false);
var qualifiers = new List<VariableDeclaratorQualifierSyntax>();
while (Current.Kind == SyntaxKind.ColonToken)
{
if (IsPossibleVariableDeclaratorQualifier(Lookahead))
{
qualifiers.Add(ParseVariableDeclaratorQualifier());
}
else
{
var action = SkipBadTokens(
p => !p.IsPossibleVariableDeclaratorQualifier(Current),
p => p.Current.Kind == SyntaxKind.EqualsToken || p.Current.Kind == SyntaxKind.OpenBraceToken || p.IsTerminator(),
SyntaxKind.RegisterKeyword);
if (action == PostSkipAction.Abort)
break;
}
}
AnnotationsSyntax annotations = null;
if (Current.Kind == SyntaxKind.LessThanToken)
annotations = ParseAnnotations();
return new TypeAliasSyntax(name, arrayRankSpecifiers, qualifiers, annotations);
}