public virtual ExpressionAst VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     return(new UnaryExpressionAst(
                unaryExpressionAst.Extent,
                unaryExpressionAst.TokenKind,
                unaryExpressionAst.Child.Rewrite(this, SyntaxKind.Expression)));
 }
Beispiel #2
0
        public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
        {
            var childVariableExpressionAst = unaryExpressionAst.Child as VariableExpressionAst;
            var childVariable      = childVariableExpressionAst == null ? null : GetVariable(childVariableExpressionAst);
            var childVariableValue = childVariable == null ? null : childVariable.Value;

            switch (unaryExpressionAst.TokenKind)
            {
            case TokenKind.PostfixPlusPlus:

                if (childVariable == null)
                {
                    throw new NotImplementedException(unaryExpressionAst.ToString());
                }
                if (childVariableValue is PSObject)
                {
                    if (this._writeSideEffectsToPipeline)
                    {
                        this._pipelineCommandRuntime.WriteObject(childVariable.Value);
                    }
                    childVariable.Value = PSObject.AsPSObject(((int)((PSObject)childVariableValue).BaseObject) + 1);
                }
                else
                {
                    throw new NotImplementedException(childVariableValue.ToString());
                }

                break;

            case TokenKind.PlusPlus:

                if (childVariable == null)
                {
                    throw new NotImplementedException(unaryExpressionAst.ToString());
                }
                if (childVariableValue is PSObject)
                {
                    childVariable.Value = PSObject.AsPSObject(((int)((PSObject)childVariableValue).BaseObject) + 1);
                    if (this._writeSideEffectsToPipeline)
                    {
                        this._pipelineCommandRuntime.WriteObject(childVariable.Value);
                    }
                }
                else
                {
                    throw new NotImplementedException(childVariableValue.ToString());
                }

                break;

            default:
                throw new NotImplementedException(unaryExpressionAst.ToString());
            }

            return(AstVisitAction.SkipChildren);
        }
 public static UnaryExpressionAst Update(
     this UnaryExpressionAst ast,
     TokenKind?tokenKind = null,
     ExpressionAst child = null)
 {
     return(new UnaryExpressionAst(
                ast.Extent,
                tokenKind ?? ast.TokenKind,
                child?.Clone() ?? ast.Child?.Clone()));
 }
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     if (s_context != null)
     {
         return(Compiler.GetExpressionValue(unaryExpressionAst, true, s_context, null));
     }
     else
     {
         throw PSTraceSource.NewArgumentException("ast");
     }
 }
Beispiel #5
0
        public void PostIncrementExpression()
        {
            UnaryExpressionAst unaryExpressionAst = ParseStatement("$x++")
                                                    .PipelineElements[0]
                                                    .Expression;

            Assert.AreEqual(TokenKind.PostfixPlusPlus, unaryExpressionAst.TokenKind);

            VariableExpressionAst variableExpressionAst = (VariableExpressionAst)unaryExpressionAst.Child;

            Assert.AreEqual("x", variableExpressionAst.VariablePath.UserPath);
        }
        public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
        {
            bool unaryExpressionIsSafe = unaryExpressionAst.TokenKind.HasTrait(TokenFlags.CanConstantFold) &&
                                         !unaryExpressionAst.TokenKind.HasTrait(TokenFlags.DisallowedInRestrictedMode) &&
                                         (bool)unaryExpressionAst.Child.Accept(this);

            if (unaryExpressionIsSafe)
            {
                _visitCount++;
            }

            return(unaryExpressionIsSafe);
        }
        public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
        {
            var(description, helpQuery) = Helpers.TokenExplainer(unaryExpressionAst.TokenKind);
            helpQuery ??= "about_operators";

            explanations.Add(new Explanation()
            {
                Description     = description,
                CommandName     = "Unary operator",
                HelpResult      = HelpTableQuery(helpQuery),
                TextToHighlight = unaryExpressionAst.TokenKind.Text()
            }.AddDefaults(unaryExpressionAst, explanations));

            return(AstVisitAction.Continue);
        }
        public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
        {
            var child = VisitSyntaxNode(unaryExpressionAst.Child);

            if (unaryExpressionAst.TokenKind == TokenKind.PostfixPlusPlus)
            {
                _currentNode = new PostfixUnaryExpression(child, "++");
            }
            else if (unaryExpressionAst.TokenKind == TokenKind.PlusPlus)
            {
                _currentNode = new PrefixUnaryExpression(child, "++");
            }
            else if (unaryExpressionAst.TokenKind == TokenKind.PostfixMinusMinus)
            {
                _currentNode = new PostfixUnaryExpression(child, "--");
            }
            else if (unaryExpressionAst.TokenKind == TokenKind.MinusMinus)
            {
                _currentNode = new PrefixUnaryExpression(child, "--");
            }

            return(AstVisitAction.SkipChildren);
        }
 public virtual TResult VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => default(TResult);
 object ICustomAstVisitor.VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => VisitUnaryExpression(unaryExpressionAst);
Beispiel #11
0
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast)
 {
     return(DoNextAction(ast));
 }
Beispiel #12
0
 public override ExpressionAst VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 => VisitExpression(base.VisitUnaryExpression(unaryExpressionAst));
        public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
        {
            var newChild = VisitElement(unaryExpressionAst.Child);

            return(new UnaryExpressionAst(unaryExpressionAst.Extent, unaryExpressionAst.TokenKind, newChild));
        }
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     return(Visit(unaryExpressionAst));
 }
Beispiel #15
0
            public override object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
            {
                // from https://en.wikipedia.org/wiki/Unary_operation#Windows_PowerShell

                // ++x, --x, +x, -x, .x, -not x, &x
                switch (unaryExpressionAst.TokenKind)
                {
                case TokenKind.PlusPlus:
                    script_.Write("++");
                    break;

                case TokenKind.Plus:
                    script_.Write("+");
                    break;

                case TokenKind.MinusMinus:
                    script_.Write("--");
                    break;

                case TokenKind.Minus:
                    script_.Write("-");
                    break;

                case TokenKind.Exclaim:
                    script_.Write("!");
                    break;

                case TokenKind.Dot:
                    script_.Write(".");
                    break;

                case TokenKind.Not:
                    script_.Write("-not ");
                    break;

                case TokenKind.Ampersand:
                    script_.Write("&");
                    break;

                case TokenKind.PostfixPlusPlus:
                case TokenKind.PostfixMinusMinus:
                    break;

                default:
                    throw new Exception("Unary token not supported");
                }

                VisitElement(unaryExpressionAst.Child);

                // x++, x--
                switch (unaryExpressionAst.TokenKind)
                {
                case TokenKind.PostfixPlusPlus:
                    script_.Write("++");
                    break;

                case TokenKind.PostfixMinusMinus:
                    script_.Write("--");
                    break;
                }

                return(unaryExpressionAst);
            }
Beispiel #16
0
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     Console.WriteLine("Visited an UnaryExpressionAst.");
     return(unaryExpressionAst);
 }
Beispiel #17
0
 /// <summary/>
 public virtual AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
 object ICustomAstVisitor.VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 => ProcessRewriter(VisitUnaryExpression, unaryExpressionAst);
Beispiel #19
0
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     throw new UnexpectedElementException();
 }
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => null;
Beispiel #21
0
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     throw new NotImplementedException();
 }
Beispiel #22
0
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     Console.WriteLine("Visited an UnaryExpressionAst.");
     Console.WriteLine("    " + unaryExpressionAst.ToString().Replace(Environment.NewLine, Environment.NewLine + "    "));
     return(AstVisitAction.Continue);
 }
Beispiel #23
0
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast)
 {
     return(AstVisitAction.Continue);
 }
Beispiel #24
0
 public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     VisitElement(unaryExpressionAst.Child);
     return(unaryExpressionAst);
 }
Beispiel #25
0
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     throw new NotImplementedException(); //VisitUnaryExpression(unaryExpressionAst);
 }
Beispiel #26
0
 public object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
 {
     return((bool)unaryExpressionAst.Child.Accept(this));
 }
Beispiel #27
0
 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => VisitAst(unaryExpressionAst);