private ArrayInitializerExpressionSyntax ParseArrayInitializer()
{
var openBrace = Match(SyntaxKind.OpenBraceToken);
var list = new List<SyntaxNode>();
while (Current.Kind != SyntaxKind.CloseBraceToken)
{
if (IsPossibleVariableInitializer())
{
list.Add(ParseVariableInitializer());
if (Current.Kind != SyntaxKind.CloseBraceToken)
{
if (Current.Kind == SyntaxKind.CommaToken)
{
list.Add(Match(SyntaxKind.CommaToken));
}
else
{
var action = SkipBadTokens(
p => p.Current.Kind != SyntaxKind.CommaToken,
p => p.IsTerminator(),
SyntaxKind.CommaToken);
if (action == PostSkipAction.Abort)
break;
list.Add(Match(SyntaxKind.CommaToken));
}
}
}
else
{
var action = SkipBadTokens(
p => !p.IsPossibleVariableInitializer(),
p => p.IsTerminator(),
SyntaxKind.CloseBraceToken);
if (action == PostSkipAction.Abort)
break;
}
}
var closeBrace = Match(SyntaxKind.CloseBraceToken);
return new ArrayInitializerExpressionSyntax(openBrace, new SeparatedSyntaxList<ExpressionSyntax>(list), closeBrace);
}