From e748f89fdfe4ce2ab7a6a68d2600b2dadf816cb4 Mon Sep 17 00:00:00 2001 From: Alexander Luzgarev Date: Sat, 7 Apr 2018 13:37:53 +0200 Subject: [PATCH] Refactor null checks --- Parser/MParser.cs | 21 ------- Parser/SyntaxFactory.cs | 121 ++++++++++++++-------------------------- 2 files changed, 43 insertions(+), 99 deletions(-) diff --git a/Parser/MParser.cs b/Parser/MParser.cs index 30a7195..ddd3cad 100644 --- a/Parser/MParser.cs +++ b/Parser/MParser.cs @@ -711,10 +711,6 @@ namespace Parser { commas.Add(Factory.Token(EatToken())); } - if (commas.Count == 0) - { - commas = null; - } var statementList = ParseStatements(); return Factory.SwitchCase(Factory.Token(caseKeyword), caseId, statementList, commas); } @@ -728,10 +724,6 @@ namespace Parser { commas.Add(Factory.Token(EatToken())); } - if (commas.Count == 0) - { - commas = null; - } var casesList = new List(); while (CurrentToken.Kind == TokenKind.Identifier && CurrentToken.PureToken.LiteralText == "case") @@ -769,11 +761,6 @@ namespace Parser { commas.Add(Factory.Token(EatToken())); } - if (commas.Count == 0) - { - commas = null; - } - var body = ParseStatements(); var endKeyword = EatIdentifier("end"); return Factory.WhileStatement( @@ -809,10 +796,6 @@ namespace Parser { commas.Add(Factory.Token(EatToken())); } - if (commas.Count == 0) - { - commas = null; - } var body = ParseStatements(); TokenNode elseKeyword = null; StatementListNode elseBody = null; @@ -865,10 +848,6 @@ namespace Parser { commas.Add(Factory.Token(EatToken())); } - if (commas.Count == 0) - { - commas = null; - } var body = ParseStatements(); var endKeyword = Factory.Token(EatIdentifier("end")); diff --git a/Parser/SyntaxFactory.cs b/Parser/SyntaxFactory.cs index 1957dd1..c1617bd 100644 --- a/Parser/SyntaxFactory.cs +++ b/Parser/SyntaxFactory.cs @@ -16,6 +16,11 @@ namespace Parser return parent; } + + private static List RemoveNulls(List children) + { + return children.Where(x => x != null).ToList(); + } public FunctionDeclarationNode FunctionDeclaration( TokenNode functionKeyword, @@ -26,29 +31,19 @@ namespace Parser TokenNode end, TokenNode semicolonOrComma = null) { - var children = new List {functionKeyword}; - if (outputDescription != null) + var children = new List { - children.Add(outputDescription); - } - children.Add(name); - if (inputDescription != null) - { - children.Add(inputDescription); - } - - children.Add(body); - if (end != null) - { - children.Add(end); - } - if (semicolonOrComma != null) - { - children.Add(semicolonOrComma); - } + functionKeyword, + outputDescription, + name, + inputDescription, + body, + end, + semicolonOrComma + }; var result = new FunctionDeclarationNode( - children, + RemoveNulls(children), functionKeyword, outputDescription, name, @@ -65,12 +60,12 @@ namespace Parser TokenNode equalitySign) { var children = new List(nodes); - nodes.Add(equalitySign); + children.Add(equalitySign); var result = new FunctionOutputDescriptionNode( - nodes, - nodes - .Where(node => node is TokenNode && ((TokenNode) node).Token.Kind == TokenKind.Identifier) - .Select(node => node as TokenNode) + children, + children + .Where(node => node is TokenNode tokenNode && tokenNode.Token.Kind == TokenKind.Identifier) + .Select(node => (TokenNode)node) .ToList(), equalitySign ); @@ -84,8 +79,9 @@ namespace Parser nodes, nodes .Where( - node => node is TokenNode && ((TokenNode) node).Token.Kind != TokenKind.Comma - ).ToList()); + node => node is TokenNode tokenNode && tokenNode.Token.Kind != TokenKind.Comma + ) + .ToList()); SetParent(result); return result; } @@ -127,20 +123,13 @@ namespace Parser TokenNode semicolonOrComma = null) { var children = new List { switchKeyword, switchExpression }; - if (optionalCommasAfterExpression != null) - { - children.AddRange(optionalCommasAfterExpression); - } - + children.AddRange(optionalCommasAfterExpression); children.AddRange(cases); children.Add(endKeyword); - if (semicolonOrComma != null) - { - children.Add(semicolonOrComma); - } + children.Add(semicolonOrComma); var result = new SwitchStatementNode( - children, + RemoveNulls(children), switchKeyword, switchExpression, cases, @@ -162,12 +151,14 @@ namespace Parser caseKeyword, caseIdentifier }; - if (optionalCommasAfterIdentifier != null) - { - children.AddRange(optionalCommasAfterIdentifier); - } + children.AddRange(optionalCommasAfterIdentifier); children.Add(statementList); - var result = new SwitchCaseNode(children, caseKeyword, caseIdentifier, statementList, optionalCommasAfterIdentifier); + var result = new SwitchCaseNode( + RemoveNulls(children), + caseKeyword, + caseIdentifier, + statementList, + optionalCommasAfterIdentifier); SetParent(result); return result; } @@ -429,19 +420,12 @@ namespace Parser whileKeyword, condition, }; - if (optionalCommasAfterCondition != null) - { - children.AddRange(optionalCommasAfterCondition); - } - + children.AddRange(optionalCommasAfterCondition); children.Add(body); children.Add(end); - if (semicolonOrComma != null) - { - children.Add(semicolonOrComma); - } + children.Add(semicolonOrComma); var result = new WhileStatementNode( - children, + RemoveNulls(children), whileKeyword, condition, optionalCommasAfterCondition, @@ -474,29 +458,14 @@ namespace Parser ifKeyword, condition }; - if (optionalCommasAfterCondition != null) - { - children.AddRange(optionalCommasAfterCondition); - } - + children.AddRange(optionalCommasAfterCondition); children.Add(body); - if (elseKeyword != null) - { - children.Add(elseKeyword); - } - - if (elseBody != null) - { - children.Add(elseBody); - } - - if (endKeyword != null) - { - children.Add(endKeyword); - } + children.Add(elseKeyword); + children.Add(elseBody); + children.Add(endKeyword); var result = new IfStatementNode( - children, + RemoveNulls(children), ifKeyword, condition, optionalCommasAfterCondition, @@ -540,15 +509,11 @@ namespace Parser forKeyword, forAssignment, }; - if (optionalCommasAfterAssignment != null) - { - children.AddRange(optionalCommasAfterAssignment); - } - + children.AddRange(optionalCommasAfterAssignment); children.Add(body); children.Add(endKeyword); var result = new ForStatementNode( - children, + RemoveNulls(children), forKeyword, forAssignment, body,