Пример #1
0
        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));
            }
        }