Refactor null checks

This commit is contained in:
Alexander Luzgarev 2018-04-07 13:37:53 +02:00
parent 1bd8c0bb05
commit e748f89fdf
2 changed files with 43 additions and 99 deletions

View File

@ -711,10 +711,6 @@ namespace Parser
{ {
commas.Add(Factory.Token(EatToken())); commas.Add(Factory.Token(EatToken()));
} }
if (commas.Count == 0)
{
commas = null;
}
var statementList = ParseStatements(); var statementList = ParseStatements();
return Factory.SwitchCase(Factory.Token(caseKeyword), caseId, statementList, commas); return Factory.SwitchCase(Factory.Token(caseKeyword), caseId, statementList, commas);
} }
@ -728,10 +724,6 @@ namespace Parser
{ {
commas.Add(Factory.Token(EatToken())); commas.Add(Factory.Token(EatToken()));
} }
if (commas.Count == 0)
{
commas = null;
}
var casesList = new List<SwitchCaseNode>(); var casesList = new List<SwitchCaseNode>();
while (CurrentToken.Kind == TokenKind.Identifier while (CurrentToken.Kind == TokenKind.Identifier
&& CurrentToken.PureToken.LiteralText == "case") && CurrentToken.PureToken.LiteralText == "case")
@ -769,11 +761,6 @@ namespace Parser
{ {
commas.Add(Factory.Token(EatToken())); commas.Add(Factory.Token(EatToken()));
} }
if (commas.Count == 0)
{
commas = null;
}
var body = ParseStatements(); var body = ParseStatements();
var endKeyword = EatIdentifier("end"); var endKeyword = EatIdentifier("end");
return Factory.WhileStatement( return Factory.WhileStatement(
@ -809,10 +796,6 @@ namespace Parser
{ {
commas.Add(Factory.Token(EatToken())); commas.Add(Factory.Token(EatToken()));
} }
if (commas.Count == 0)
{
commas = null;
}
var body = ParseStatements(); var body = ParseStatements();
TokenNode elseKeyword = null; TokenNode elseKeyword = null;
StatementListNode elseBody = null; StatementListNode elseBody = null;
@ -865,10 +848,6 @@ namespace Parser
{ {
commas.Add(Factory.Token(EatToken())); commas.Add(Factory.Token(EatToken()));
} }
if (commas.Count == 0)
{
commas = null;
}
var body = ParseStatements(); var body = ParseStatements();
var endKeyword = Factory.Token(EatIdentifier("end")); var endKeyword = Factory.Token(EatIdentifier("end"));

View File

@ -16,6 +16,11 @@ namespace Parser
return parent; return parent;
} }
private static List<SyntaxNode> RemoveNulls(List<SyntaxNode> children)
{
return children.Where(x => x != null).ToList();
}
public FunctionDeclarationNode FunctionDeclaration( public FunctionDeclarationNode FunctionDeclaration(
TokenNode functionKeyword, TokenNode functionKeyword,
@ -26,29 +31,19 @@ namespace Parser
TokenNode end, TokenNode end,
TokenNode semicolonOrComma = null) TokenNode semicolonOrComma = null)
{ {
var children = new List<SyntaxNode> {functionKeyword}; var children = new List<SyntaxNode>
if (outputDescription != null)
{ {
children.Add(outputDescription); functionKeyword,
} outputDescription,
children.Add(name); name,
if (inputDescription != null) inputDescription,
{ body,
children.Add(inputDescription); end,
} semicolonOrComma
};
children.Add(body);
if (end != null)
{
children.Add(end);
}
if (semicolonOrComma != null)
{
children.Add(semicolonOrComma);
}
var result = var result =
new FunctionDeclarationNode( new FunctionDeclarationNode(
children, RemoveNulls(children),
functionKeyword, functionKeyword,
outputDescription, outputDescription,
name, name,
@ -65,12 +60,12 @@ namespace Parser
TokenNode equalitySign) TokenNode equalitySign)
{ {
var children = new List<SyntaxNode>(nodes); var children = new List<SyntaxNode>(nodes);
nodes.Add(equalitySign); children.Add(equalitySign);
var result = new FunctionOutputDescriptionNode( var result = new FunctionOutputDescriptionNode(
nodes, children,
nodes children
.Where(node => node is TokenNode && ((TokenNode) node).Token.Kind == TokenKind.Identifier) .Where(node => node is TokenNode tokenNode && tokenNode.Token.Kind == TokenKind.Identifier)
.Select(node => node as TokenNode) .Select(node => (TokenNode)node)
.ToList(), .ToList(),
equalitySign equalitySign
); );
@ -84,8 +79,9 @@ namespace Parser
nodes, nodes,
nodes nodes
.Where( .Where(
node => node is TokenNode && ((TokenNode) node).Token.Kind != TokenKind.Comma node => node is TokenNode tokenNode && tokenNode.Token.Kind != TokenKind.Comma
).ToList()); )
.ToList());
SetParent(result); SetParent(result);
return result; return result;
} }
@ -127,20 +123,13 @@ namespace Parser
TokenNode semicolonOrComma = null) TokenNode semicolonOrComma = null)
{ {
var children = new List<SyntaxNode> { switchKeyword, switchExpression }; var children = new List<SyntaxNode> { switchKeyword, switchExpression };
if (optionalCommasAfterExpression != null) children.AddRange(optionalCommasAfterExpression);
{
children.AddRange(optionalCommasAfterExpression);
}
children.AddRange(cases); children.AddRange(cases);
children.Add(endKeyword); children.Add(endKeyword);
if (semicolonOrComma != null) children.Add(semicolonOrComma);
{
children.Add(semicolonOrComma);
}
var result = new SwitchStatementNode( var result = new SwitchStatementNode(
children, RemoveNulls(children),
switchKeyword, switchKeyword,
switchExpression, switchExpression,
cases, cases,
@ -162,12 +151,14 @@ namespace Parser
caseKeyword, caseKeyword,
caseIdentifier caseIdentifier
}; };
if (optionalCommasAfterIdentifier != null) children.AddRange(optionalCommasAfterIdentifier);
{
children.AddRange(optionalCommasAfterIdentifier);
}
children.Add(statementList); children.Add(statementList);
var result = new SwitchCaseNode(children, caseKeyword, caseIdentifier, statementList, optionalCommasAfterIdentifier); var result = new SwitchCaseNode(
RemoveNulls(children),
caseKeyword,
caseIdentifier,
statementList,
optionalCommasAfterIdentifier);
SetParent(result); SetParent(result);
return result; return result;
} }
@ -429,19 +420,12 @@ namespace Parser
whileKeyword, whileKeyword,
condition, condition,
}; };
if (optionalCommasAfterCondition != null) children.AddRange(optionalCommasAfterCondition);
{
children.AddRange(optionalCommasAfterCondition);
}
children.Add(body); children.Add(body);
children.Add(end); children.Add(end);
if (semicolonOrComma != null) children.Add(semicolonOrComma);
{
children.Add(semicolonOrComma);
}
var result = new WhileStatementNode( var result = new WhileStatementNode(
children, RemoveNulls(children),
whileKeyword, whileKeyword,
condition, condition,
optionalCommasAfterCondition, optionalCommasAfterCondition,
@ -474,29 +458,14 @@ namespace Parser
ifKeyword, ifKeyword,
condition condition
}; };
if (optionalCommasAfterCondition != null) children.AddRange(optionalCommasAfterCondition);
{
children.AddRange(optionalCommasAfterCondition);
}
children.Add(body); children.Add(body);
if (elseKeyword != null) children.Add(elseKeyword);
{ children.Add(elseBody);
children.Add(elseKeyword); children.Add(endKeyword);
}
if (elseBody != null)
{
children.Add(elseBody);
}
if (endKeyword != null)
{
children.Add(endKeyword);
}
var result = new IfStatementNode( var result = new IfStatementNode(
children, RemoveNulls(children),
ifKeyword, ifKeyword,
condition, condition,
optionalCommasAfterCondition, optionalCommasAfterCondition,
@ -540,15 +509,11 @@ namespace Parser
forKeyword, forKeyword,
forAssignment, forAssignment,
}; };
if (optionalCommasAfterAssignment != null) children.AddRange(optionalCommasAfterAssignment);
{
children.AddRange(optionalCommasAfterAssignment);
}
children.Add(body); children.Add(body);
children.Add(endKeyword); children.Add(endKeyword);
var result = new ForStatementNode( var result = new ForStatementNode(
children, RemoveNulls(children),
forKeyword, forKeyword,
forAssignment, forAssignment,
body, body,