Example #1
0
            public static void AddVariables(
                ExpressionAst expression,
                List <Tuple <ITypeName, VariableExpressionAst> > variables)
            {
                var visitor = new DelegateParameterVisitor();

                visitor._variables = variables;
                expression.Visit(visitor);
            }
Example #2
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));
        }