private ScriptCaptureStatement ParseCaptureStatement() { ScriptCaptureStatement captureStatement = Open <ScriptCaptureStatement>(); NextToken(); // Skip capture keyword // unit test: 231-capture-error1.txt captureStatement.Target = ExpectAndParseExpression(captureStatement); ExpectEndOfStatement(captureStatement); captureStatement.Body = ParseBlockStatement(captureStatement); return(Close(captureStatement)); }
/// <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)); } }