System.Management.Pash.Implementation.ExecutionVisitor.VisitSimpleLoopStatement C# (CSharp) Method

VisitSimpleLoopStatement() private method

private VisitSimpleLoopStatement ( System.Management.Automation.Language.StatementBlockAst body, System.Management.Automation.Language.PipelineBaseAst condition, bool preExecuteBody, bool invertCond ) : AstVisitAction
body System.Management.Automation.Language.StatementBlockAst
condition System.Management.Automation.Language.PipelineBaseAst
preExecuteBody bool
invertCond bool
return AstVisitAction
        private AstVisitAction VisitSimpleLoopStatement(StatementBlockAst body, PipelineBaseAst condition,
                                                    bool preExecuteBody, bool invertCond)
        {
            // TODO: pass loop label
            // preExecuteBody is for do while/until loops
            if (preExecuteBody && !EvaluateLoopBodyAst(body, null))
            {
                return AstVisitAction.SkipChildren;
            }

            // the condition is XORed with invertCond and menas: (true && !invertCond) || (false && invertCond)
            while (LanguagePrimitives.ConvertTo<bool>(EvaluateAst(condition)) ^ invertCond)
            {
                if (!EvaluateLoopBodyAst(body, null))
                {
                    break;
                }
            }
            return AstVisitAction.SkipChildren;
        }
ExecutionVisitor