示例#1
0
        public void AssignmentTest()
        {
            AssignmentStatementAst assignmentStatementAst = ParseInput("$x = 'y'").
                                                            EndBlock.
                                                            Statements[0];

            Assert.AreEqual(TokenKind.Equals, assignmentStatementAst.Operator);
        }
示例#2
0
        public override StatementAst VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            // Don't rewrite the LHS of an assignment.
            var newAssignment = assignmentStatementAst.Update(
                right: assignmentStatementAst.Right.Rewrite(this));

            return(Assignment(Variables.Null, CreateLoggingExpression(newAssignment)));
        }
示例#3
0
 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     if (string.Equals("$env:PATH", assignmentStatementAst.Left.ToString(), StringComparison.OrdinalIgnoreCase) && Regex.IsMatch(assignmentStatementAst.Right.ToString(), @"\$psScriptRoot", RegexOptions.IgnoreCase))
     {
         ModuleIntrinsics.Tracer.WriteLine("Module adds itself to the path.", new object[0]);
         this.AddsSelfToPath = true;
     }
     return(AstVisitAction.Continue);
 }
 public virtual StatementAst VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     return(new AssignmentStatementAst(
                assignmentStatementAst.Extent,
                assignmentStatementAst.Left.Rewrite(this, SyntaxKind.Expression),
                assignmentStatementAst.Operator,
                assignmentStatementAst.Right.Rewrite(this, SyntaxKind.Statement),
                assignmentStatementAst.ErrorPosition));
 }
示例#5
0
 // Capture modules that add themselves to the path (so they generally package their functionality
 // as loose PS1 files)
 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     // $env:PATH += "";$psScriptRoot""
     if (String.Equals("$env:PATH", assignmentStatementAst.Left.ToString(), StringComparison.OrdinalIgnoreCase) &&
         Regex.IsMatch(assignmentStatementAst.Right.ToString(), "\\$psScriptRoot", RegexOptions.IgnoreCase))
     {
         ModuleIntrinsics.Tracer.WriteLine("Module adds itself to the path.");
         AddsSelfToPath = true;
     }
     return AstVisitAction.SkipChildren;
 }
 public static AssignmentStatementAst Update(
     this AssignmentStatementAst ast,
     ExpressionAst left   = null,
     TokenKind? @operator = null,
     StatementAst right   = null)
 {
     return(new AssignmentStatementAst(
                ast.Extent,
                left?.Clone() ?? ast.Left.Clone(),
                @operator ?? ast.Operator,
                right?.Clone() ?? ast.Right.Clone(),
                ast.ErrorPosition));
 }
示例#7
0
            public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
            {
                if (!TargetsNonPS7())
                {
                    return(AstVisitAction.Continue);
                }

                if (assignmentStatementAst.Operator == TokenKind.QuestionQuestionEquals)
                {
                    AddDiagnostic(assignmentStatementAst, "null-conditional assignment", "$x ??= $y", "3,4,5,6");
                }

                return(AstVisitAction.Continue);
            }
示例#8
0
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            var(operatorExplanation, tokenHelpQuery) = Helpers.TokenExplainer(assignmentStatementAst.Operator);
            explanations.Add(
                new Explanation()
            {
                CommandName     = $"Assignment operator '{assignmentStatementAst.Operator.Text()}'",
                HelpResult      = HelpTableQuery(tokenHelpQuery),
                Description     = $"{operatorExplanation} Assigns a value to '{assignmentStatementAst.Left.Extent.Text}'.",
                TextToHighlight = assignmentStatementAst.Operator.Text()
            }.AddDefaults(assignmentStatementAst, explanations));

            return(AstVisitAction.Continue);
        }
示例#9
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));
        }
示例#10
0
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            var variableExpressionAst = assignmentStatementAst.Left as VariableExpressionAst;

            if (variableExpressionAst == null)
            {
                throw new NotImplementedException(assignmentStatementAst.ToString());
            }

            var variable = this._context.SessionState.SessionStateGlobal.SetVariable(variableExpressionAst.VariablePath.UserPath, EvaluateAst(assignmentStatementAst.Right));

            this._pipelineCommandRuntime.WriteObject(variable);

            return(AstVisitAction.SkipChildren);
        }
        /// <summary>
        /// Check if the left hand side of an assignmentStatementAst is a VariableExpressionAst
        /// with the same name as that of symbolRef.
        /// </summary>
        /// <param name="assignmentStatementAst">An AssignmentStatementAst</param>
        /// <returns>A decision to stop searching if the right VariableExpressionAst was found,
        /// or a decision to continue if it wasn't found</returns>
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            var variableExprAst = assignmentStatementAst.Left as VariableExpressionAst;

            if (variableExprAst == null ||
                variableName == null ||
                !variableExprAst.VariablePath.UserPath.Equals(
                    variableName,
                    StringComparison.OrdinalIgnoreCase))
            {
                return(AstVisitAction.Continue);
            }

            // TODO also find instances of set-variable
            FoundDeclaration = new SymbolReference(SymbolType.Variable, variableExprAst.Extent);
            return(AstVisitAction.StopVisit);
        }
        /// <summary>
        /// Check if the left hand side of an assignmentStatementAst is a VariableExpressionAst
        /// with the same name as that of symbolRef.
        /// </summary>
        /// <param name="assignmentStatementAst">An AssignmentStatementAst</param>
        /// <returns>A decision to stop searching if the right VariableExpressionAst was found,
        /// or a decision to continue if it wasn't found</returns>
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            if (variableName == null)
            {
                return(AstVisitAction.Continue);
            }

            // We want to check VariableExpressionAsts from within this AssignmentStatementAst so we visit it.
            FindDeclarationVariableExpressionVisitor visitor = new FindDeclarationVariableExpressionVisitor(symbolRef);

            assignmentStatementAst.Left.Visit(visitor);

            if (visitor.FoundDeclaration != null)
            {
                FoundDeclaration = visitor.FoundDeclaration;
                return(AstVisitAction.StopVisit);
            }
            return(AstVisitAction.Continue);
        }
示例#13
0
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            var rightValue = EvaluateAst(assignmentStatementAst.Right);

            ExpressionAst expressionAst         = assignmentStatementAst.Left;
            var           variableExpressionAst = expressionAst as VariableExpressionAst;

            if (variableExpressionAst == null)
            {
                throw new NotImplementedException(expressionAst.ToString());
            }

            this._context.SessionState.SessionStateGlobal.SetVariable(variableExpressionAst.VariablePath.UserPath, rightValue);

            if (this._writeSideEffectsToPipeline)
            {
                this._pipelineCommandRuntime.WriteObject(rightValue);
            }

            return(AstVisitAction.SkipChildren);
        }
示例#14
0
        public object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            if (_currentClass == null && assignmentStatementAst.Left is VariableExpressionAst)
            {
                var variableName = (assignmentStatementAst.Left as VariableExpressionAst).VariablePath.ToString();

                if (variableName.Equals("MainForm", StringComparison.OrdinalIgnoreCase))
                {
                    _currentClass = new CodeTypeDeclaration(variableName);
                    var codeNamespace = unit.Namespaces.Cast <CodeNamespace>().FirstOrDefault();
                    if (codeNamespace == null)
                    {
                        codeNamespace = new CodeNamespace("ns");
                        unit.Namespaces.Add(codeNamespace);
                    }

                    _currentConstructor            = new CodeConstructor();
                    _currentConstructor.Attributes = MemberAttributes.Public;
                    _currentClass.Members.Add(_currentConstructor);
                    _currentClass.BaseTypes.Add("System.Windows.Forms.Form");

                    codeNamespace.Types.Add(_currentClass);
                    return(new CodeExpression());
                }
            }

            var left = Visit(assignmentStatementAst.Left) as CodeExpression;

            if (_currentClass != null && _currentMethod == null && left is CodeVariableReferenceExpression)
            {
                var variableName = (left as CodeVariableReferenceExpression).VariableName;
                _currentClass.Members.Add(new CodeMemberField("System.Object", variableName));
                return(new CodeExpression());
            }

            var rightEx = Visit(assignmentStatementAst.Right) as CodeExpression;

            return(new CodeAssignStatement(left, rightEx));
        }
        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
        {
            if (assignmentStatementAst.Left is ConvertExpressionAst)
            {
                var varExpression = assignmentStatementAst.Left as ConvertExpressionAst;
                if (varExpression.Attribute != null && varExpression.Child is VariableExpressionAst)
                {
                    var typeName    = varExpression.Attribute.TypeName.Name;
                    var name        = (varExpression.Child as VariableExpressionAst).VariablePath.ToString();
                    var initializer = VisitSyntaxNode(assignmentStatementAst.Right);
                    _currentNode = new VariableDeclaration(typeName, new VariableDeclarator(name, initializer));

                    return(AstVisitAction.SkipChildren);
                }
            }

            var left  = VisitSyntaxNode(assignmentStatementAst.Left);
            var right = VisitSyntaxNode(assignmentStatementAst.Right);

            _currentNode = new Assignment(left, right);

            return(AstVisitAction.SkipChildren);
        }
示例#16
0
 /// <summary/>
 public virtual AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
 public object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     throw PSTraceSource.NewArgumentException("ast");
 }
 object ICustomAstVisitor.VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 => ProcessRewriter(VisitAssignmentStatement, assignmentStatementAst);
示例#19
0
 public object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     throw new UnexpectedElementException();
 }
示例#20
0
 public override StatementAst VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 => VisitStatement(base.VisitAssignmentStatement(assignmentStatementAst));
示例#21
0
 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast)
 {
     return(DoNextAction(ast));
 }
 object ICustomAstVisitor.VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => VisitAssignmentStatement(assignmentStatementAst);
示例#23
0
 public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     VisitElement(assignmentStatementAst.Left);
     VisitElement(assignmentStatementAst.Right);
     return(assignmentStatementAst);
 }
示例#24
0
 public object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
 {
     Console.WriteLine("Visited an AssignmentStatementAst.");
     return(assignmentStatementAst);
 }
示例#25
0
 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast)
 {
     return(AstVisitAction.Continue);
 }