예제 #1
0
 #pragma warning disable SA1600
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(scriptBlockExpressionAst.ScriptBlock.Visit(this));
 }
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     ThrowError(new ScriptBlockToPowerShellNotSupportedException("CantConvertWithScriptBlocks", null, AutomationExceptions.CantConvertWithScriptBlocks, new object[0]), scriptBlockExpressionAst);
     return(AstVisitAction.SkipChildren);
 }
예제 #3
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     ScriptBlockCount += 1;
     return(AstVisitAction.Continue);
 }
예제 #4
0
 public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     VisitElement(scriptBlockExpressionAst.ScriptBlock);
     return(scriptBlockExpressionAst);
 }
    public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
    {
        var newScriptBlock = VisitElement(scriptBlockExpressionAst.ScriptBlock);

        return(new ScriptBlockExpressionAst(scriptBlockExpressionAst.Extent, newScriptBlock));
    }
예제 #6
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast)
 {
     return(AstVisitAction.Continue);
 }
예제 #7
0
 /// <summary>
 /// Creates a Linq expression for a <see cref="CommandAst" /> representing
 /// a custom command.
 /// </summary>
 /// <param name="commandAst">The AST to convert.</param>
 /// <param name="targetAst">The AST containing the target of the keyword.</param>
 /// <param name="bodyAst">The AST containing the body of the keyword.</param>
 /// <param name="visitor">The <see cref="CompileVisitor" /> requesting the expression.</param>
 /// <returns>An expression representing the command.</returns>
 protected abstract Expression ProcessObjectAndBody(
     CommandAst commandAst,
     CommandElementAst targetAst,
     ScriptBlockExpressionAst bodyAst,
     CompileVisitor visitor);
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // Returning a ScriptBlock instance itself is OK, bad stuff only happens
     // when invoking one (which is blocked)
     return(true);
 }
예제 #9
0
        /// <summary>
        /// Returns '0' if the <paramref name="parameterValue"/> does not need delimitation, '1' if it does, and a quote character if it needs to be delimited with a quote.
        /// </summary>
        /// <param name="parameterValue">Parameter value to check.</param>
        /// <param name="requireScriptblock">True if the parameter value should be a scriptblock.</param>
        /// <returns>'0' if the parameter does not need delimitation, '1' if it needs, '\'' if it needs to be delimited with single quote and '\"' if it needs to be delimited with double quotes.</returns>
        private static char ParameterNeedsDelimitation(string parameterValue, bool requireScriptblock)
        {
            Token[]        tokens;
            ParseError[]   errors;
            ScriptBlockAst values = Parser.ParseInput("commandName -parameterName " + parameterValue, out tokens, out errors);

            if (values == null || values.EndBlock == null || values.EndBlock.Statements.Count == 0)
            {
                return('1');
            }

            PipelineAst pipeline = values.EndBlock.Statements[0] as PipelineAst;

            if (pipeline == null || pipeline.PipelineElements.Count == 0)
            {
                return('1');
            }

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

            if (commandAst == null || commandAst.CommandElements.Count == 0)
            {
                return('1');
            }

            // 3 is for CommandName, Parameter and its value
            if (commandAst.CommandElements.Count != 3)
            {
                return('1');
            }

            if (requireScriptblock)
            {
                ScriptBlockExpressionAst scriptAst = commandAst.CommandElements[2] as ScriptBlockExpressionAst;
                return(scriptAst == null ? '1' : '0');
            }

            StringConstantExpressionAst stringValue = commandAst.CommandElements[2] as StringConstantExpressionAst;

            if (stringValue != null)
            {
                if (errors.Length == 0)
                {
                    return('0');
                }

                char stringTerminationChar;

                if (stringValue.StringConstantType == StringConstantType.BareWord)
                {
                    stringTerminationChar = parameterValue[0];
                }
                else if (stringValue.StringConstantType == StringConstantType.DoubleQuoted || stringValue.StringConstantType == StringConstantType.DoubleQuotedHereString)
                {
                    stringTerminationChar = '\"';
                }
                else
                {
                    stringTerminationChar = '\'';
                }

                char oppositeTerminationChar = stringTerminationChar == '\"' ? '\'' : '\"';

                // If the string is not terminated, it should be delimited by the opposite string termination character
                return(oppositeTerminationChar);
            }

            if (errors.Length != 0)
            {
                return('1');
            }

            return('0');
        }
 object ICustomAstVisitor.VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 => ProcessRewriter(VisitScriptBlockExpression, scriptBlockExpressionAst);
예제 #11
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     throw new UnexpectedElementException();
 }
 public virtual ExpressionAst VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(new ScriptBlockExpressionAst(
                scriptBlockExpressionAst.Extent,
                scriptBlockExpressionAst.ScriptBlock.Rewrite(this, SyntaxKind.ScriptBlock)));
 }
예제 #13
0
 /// <summary>
 /// Similar to visitnamedblock
 /// </summary>
 /// <param name="sbAst"></param>
 /// <returns></returns>
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst sbAst)
 {
     return(VisitActionHelper(sbAst));
 }
 public virtual TResult VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => default(TResult);
 object ICustomAstVisitor.VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => VisitScriptBlockExpression(scriptBlockExpressionAst);
예제 #16
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => VisitAst(scriptBlockExpressionAst);