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

VisitForEachStatement() public method

public VisitForEachStatement ( System.Management.Automation.Language.ForEachStatementAst forEachStatementAst ) : AstVisitAction
forEachStatementAst System.Management.Automation.Language.ForEachStatementAst
return AstVisitAction
        public override AstVisitAction VisitForEachStatement(ForEachStatementAst forEachStatementAst)
        {
            object enumerable = EvaluateAst(forEachStatementAst.Condition);

            // if the enumerable object is null, the loop is not executed at all
            if (enumerable == null)
            {
                return AstVisitAction.SkipChildren;
            }

            IEnumerator enumerator = LanguagePrimitives.GetEnumerator(enumerable);

            if (enumerator == null)
            {
                enumerator = new [] { enumerable }.GetEnumerator();
            }

            while (enumerator.MoveNext())
            {
                this.ExecutionContext.SessionState.PSVariable.Set(forEachStatementAst.Variable.VariablePath.UserPath,
                                                                  enumerator.Current);
                // TODO: pass the loop label
                if (!EvaluateLoopBodyAst(forEachStatementAst.Body, null))
                {
                    break;
                }
            }

            return AstVisitAction.SkipChildren;
        }
ExecutionVisitor