private ScriptConditionStatement ParseElseStatement(bool isElseIf) { // Case of elsif if (isElseIf) { return(ParseIfStatement(false, true)); } // unit test: 200-if-else-statement.txt /* * Token nextToken = PeekToken(); * if (!_isLiquid && * nextToken.Type == TokenType.Identifier && * GetAsText(nextToken) == "if") * { * NextToken(); * * if (_isKeepTrivia) * { * // We don't store the trivias here * _trivias.Clear(); * } * return ParseIfStatement(false, true); * } */ ScriptElseStatement elseStatement = Open <ScriptElseStatement>(); NextToken(); // skip else // unit test: 201-if-else-error4.txt if (ExpectEndOfStatement(elseStatement)) { elseStatement.Body = ParseBlockStatement(elseStatement); } return(Close(elseStatement)); }
/// <summary> /// Extracts a statement /// </summary> /// <param name="scriptStatements">Statement list to fill</param> /// <param name="statement">Statement to check</param> private static void ExtractStatement(List <ScriptStatement> scriptStatements, ScriptStatement statement) { if (!(statement is ScriptRawStatement)) { scriptStatements.Add(statement); } if (statement is ScriptLoopStatementBase) { ScriptLoopStatementBase loopStatement = (ScriptLoopStatementBase)statement; foreach (ScriptNode curChild in loopStatement.Children) { ScriptStatement curStatement = curChild as ScriptStatement; if (curStatement != null) { ExtractStatement(scriptStatements, curStatement); } } } else if (statement is ScriptIfStatement) { ScriptIfStatement ifStatement = (ScriptIfStatement)statement; if (ifStatement.Then != null) { scriptStatements.AddRange(ExtractStatementsFromList(ifStatement.Then.Statements)); } if (ifStatement.Else != null) { ExtractStatement(scriptStatements, ifStatement.Else); } } else if (statement is ScriptElseStatement) { ScriptElseStatement elseStatement = (ScriptElseStatement)statement; if (elseStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(elseStatement.Body.Statements)); } } else if (statement is ScriptCaptureStatement) { ScriptCaptureStatement captureStatement = (ScriptCaptureStatement)statement; if (captureStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(captureStatement.Body.Statements)); } } else if (statement is ScriptCaseStatement) { ScriptCaseStatement caseStatement = (ScriptCaseStatement)statement; if (caseStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(caseStatement.Body.Statements)); } } else if (statement is ScriptFunction) { ScriptFunction functionStatement = (ScriptFunction)statement; if (functionStatement.Body != null) { ExtractStatement(scriptStatements, functionStatement.Body); } } else if (statement is ScriptWhenStatement) { ScriptWhenStatement whenStatement = (ScriptWhenStatement)statement; if (whenStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(whenStatement.Body.Statements)); } } else if (statement is ScriptWithStatement) { ScriptWithStatement withStatement = (ScriptWithStatement)statement; if (withStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(withStatement.Body.Statements)); } } else if (statement is ScriptWrapStatement) { ScriptWrapStatement wrapStatement = (ScriptWrapStatement)statement; if (wrapStatement.Body != null) { scriptStatements.AddRange(ExtractStatementsFromList(wrapStatement.Body.Statements)); } } else if (statement is ScriptBlockStatement) { ScriptBlockStatement blockStatement = (ScriptBlockStatement)statement; scriptStatements.AddRange(ExtractStatementsFromList(blockStatement.Statements)); } }