private InterfaceTypeSyntax ParseInterfaceType()
{
var @interface = Match(SyntaxKind.InterfaceKeyword);
var name = Match(SyntaxKind.IdentifierToken);
var openBrace = Match(SyntaxKind.OpenBraceToken);
var methods = new List<FunctionDeclarationSyntax>();
while (Current.Kind != SyntaxKind.CloseBraceToken)
{
if (IsPossibleFunctionDeclaration())
{
methods.Add(ParseFunctionDeclaration());
}
else
{
var action = SkipBadTokens(
p => !p.IsPossibleFunctionDeclaration(),
p => p.IsTerminator(),
SyntaxKind.CloseBraceToken);
if (action == PostSkipAction.Abort)
break;
}
}
var closeBrace = Match(SyntaxKind.CloseBraceToken);
return new InterfaceTypeSyntax(@interface, name, openBrace, methods, closeBrace);
}