Example #1
0
        public object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            _paramBlockExtent = assignmentStatementAst.Left.Extent;
            DelegateParameterVisitor.AddVariables(
                assignmentStatementAst.Left,
                _variables);

            var pipeline = assignmentStatementAst.Right as PipelineAst;

            if (pipeline == null)
            {
                return(null);
            }

            var commandAst = pipeline.PipelineElements[0] as CommandAst;

            if (commandAst == null ||
                commandAst.GetCommandName() != Strings.DelegateSyntaxCommandName ||
                commandAst.CommandElements.Count != 2)
            {
                return(null);
            }

            if (commandAst.CommandElements[1] is ScriptBlockExpressionAst sbAst)
            {
                return(sbAst.ScriptBlock.EndBlock);
            }

            var expression = commandAst.CommandElements[1] as ExpressionAst;

            var statements =
                new StatementAst[]
            {
                new CommandExpressionAst(
                    expression.Extent,
                    (ExpressionAst)expression.Copy(),
                    s_emptyRedirections)
            };

            var statementBlockAst = new StatementBlockAst(
                commandAst.CommandElements[1].Extent,
                statements,
                s_emptyTraps);

            return(new NamedBlockAst(
                       commandAst.CommandElements[1].Extent,
                       TokenKind.End,
                       statementBlockAst,
                       unnamed: true));
        }