Refactor array element list parsing

This commit is contained in:
Alexander Luzgarev 2018-04-07 13:49:40 +02:00
parent 0ba85620a6
commit fa3d137fbe

View File

@ -301,7 +301,7 @@ namespace Parser
return expression; return expression;
} }
var openingBrace = EatToken(); var openingBrace = EatToken();
var indices = ParseCellArrayElementList(); var indices = ParseArrayElementList(TokenKind.ClosingBrace);
var closingBrace = EatToken(TokenKind.ClosingBrace); var closingBrace = EatToken(TokenKind.ClosingBrace);
expression = Factory.CellArrayElementAccessExpression( expression = Factory.CellArrayElementAccessExpression(
expression, expression,
@ -379,11 +379,11 @@ namespace Parser
} }
} }
private ArrayElementListNode ParseArrayElementList() private ArrayElementListNode ParseArrayElementList(TokenKind closing)
{ {
var nodes = new List<SyntaxNode> {}; var nodes = new List<SyntaxNode> {};
while (CurrentToken.Kind != TokenKind.ClosingSquareBracket) while (CurrentToken.Kind != closing)
{ {
if (nodes.Count > 0) if (nodes.Count > 0)
{ {
@ -400,40 +400,14 @@ namespace Parser
nodes.Add(expression); nodes.Add(expression);
} }
} }
return Factory.ArrayElementList(nodes); return Factory.ArrayElementList(nodes);
}
private ArrayElementListNode ParseCellArrayElementList()
{
var nodes = new List<SyntaxNode> {};
while (CurrentToken.Kind != TokenKind.ClosingBrace)
{
if (nodes.Count > 0)
{
if (CurrentToken.Kind == TokenKind.Comma
|| CurrentToken.Kind == TokenKind.Semicolon)
{
nodes.Add(Factory.Token(EatToken()));
}
}
var expression = ParseExpression(new ParseOptions {ParsingArrayElements = true});
if (expression != null)
{
nodes.Add(expression);
}
}
return Factory.ArrayElementList(nodes);
} }
private ArrayLiteralExpressionNode ParseArrayLiteral() private ArrayLiteralExpressionNode ParseArrayLiteral()
{ {
var openingSquareBracket = EatToken(TokenKind.OpeningSquareBracket); var openingSquareBracket = EatToken(TokenKind.OpeningSquareBracket);
var elements = ParseArrayElementList(); var elements = ParseArrayElementList(TokenKind.ClosingSquareBracket);
var closingSquareBracket = EatToken(TokenKind.ClosingSquareBracket); var closingSquareBracket = EatToken(TokenKind.ClosingSquareBracket);
return Factory.ArrayLiteralExpression( return Factory.ArrayLiteralExpression(
Factory.Token(openingSquareBracket), Factory.Token(openingSquareBracket),
@ -444,7 +418,7 @@ namespace Parser
private CellArrayLiteralExpressionNode ParseCellArrayLiteral() private CellArrayLiteralExpressionNode ParseCellArrayLiteral()
{ {
var openingBrace = EatToken(TokenKind.OpeningBrace); var openingBrace = EatToken(TokenKind.OpeningBrace);
var elements = ParseCellArrayElementList(); var elements = ParseArrayElementList(TokenKind.ClosingBrace);
var closingBrace = EatToken(TokenKind.ClosingBrace); var closingBrace = EatToken(TokenKind.ClosingBrace);
return Factory.CellArrayLiteralExpression( return Factory.CellArrayLiteralExpression(
Factory.Token(openingBrace), Factory.Token(openingBrace),