public override void VisitMethodInvocationExpression(Ast.Expressions.MethodInvocationExpression node)
        {
            MethodDefinition methodDef = node.MethodExpression.MethodDefinition;

            if (methodDef == null)
            {
                base.VisitMethodInvocationExpression(node);
                return;
            }

            Visit(node.MethodExpression);

            for (int i = 0; i < node.Arguments.Count; i++)
            {
                UnaryExpression unaryArgument = node.Arguments[i] as UnaryExpression;
                if (methodDef.Parameters[i].IsOutParameter() && (unaryArgument != null && unaryArgument.Operator == UnaryOperator.AddressReference &&
                                                                 CheckExpression(unaryArgument.Operand) || CheckExpression(node.Arguments[i])))
                {
                    this.searchResult = UsageFinderSearchResult.Assigned;
                    return;
                }
                else
                {
                    Visit(node.Arguments[i]);
                    if (this.searchResult != UsageFinderSearchResult.NotFound)
                    {
                        return;
                    }
                }
            }
        }
        public override void VisitMethodInvocationExpression(Ast.Expressions.MethodInvocationExpression node)
        {
            MethodDefinition methodDef = node.MethodExpression.MethodDefinition;
            if (methodDef == null)
            {
                base.VisitMethodInvocationExpression(node);
                return;
            }

            Visit(node.MethodExpression);

            for (int i = 0; i < node.Arguments.Count; i++)
            {
                UnaryExpression unaryArgument = node.Arguments[i] as UnaryExpression;
                if (methodDef.Parameters[i].IsOutParameter() && (unaryArgument != null && unaryArgument.Operator == UnaryOperator.AddressReference &&
                     CheckExpression(unaryArgument.Operand) || CheckExpression(node.Arguments[i])))
                {
                    this.searchResult = UsageFinderSearchResult.Assigned;
                    return;
                }
                else
                {
                    Visit(node.Arguments[i]);
                    if (this.searchResult != UsageFinderSearchResult.NotFound)
                    {
                        return;
                    }
                }
            }
        }
 public override void VisitMethodInvocationExpression(MethodInvocationExpression node)
 {
     V_0 = node.get_MethodExpression().get_MethodDefinition();
     if (V_0 == null)
     {
         this.VisitMethodInvocationExpression(node);
         return;
     }
     this.Visit(node.get_MethodExpression());
     V_1 = 0;
     while (V_1 < node.get_Arguments().get_Count())
     {
         V_2 = node.get_Arguments().get_Item(V_1) as UnaryExpression;
         if (V_0.get_Parameters().get_Item(V_1).IsOutParameter() && V_2 != null && V_2.get_Operator() == 7 && this.CheckExpression(V_2.get_Operand()) || this.CheckExpression(node.get_Arguments().get_Item(V_1)))
         {
             this.searchResult = 1;
             return;
         }
         this.Visit(node.get_Arguments().get_Item(V_1));
         if (this.searchResult != UsageFinderSearchResult.NotFound)
         {
             return;
         }
         V_1 = V_1 + 1;
     }
     return;
 }
        private void CheckForAssignment(AssignmentFlowNode node)
        {
            if (node.NodeState != AssignmentNodeState.Unknown)
            {
                return;
            }

            IList <Expression> expressions = expressionsData.BlockExpressions[node.CFGBlock.First.Offset];

            foreach (Expression expression in expressions)
            {
                UsageFinderSearchResult searchResult = visitor.SearchForUsage(expression);
                if (searchResult == UsageFinderSearchResult.Assigned)
                {
                    node.NodeState = AssignmentNodeState.ContainsAssignment;
                    return;
                }
                else if (searchResult == UsageFinderSearchResult.Used)
                {
                    node.NodeState = AssignmentNodeState.ContainsUsage;
                    return;
                }
            }

            node.NodeState = AssignmentNodeState.NotAssigned;
        }
 public override void VisitBinaryExpression(BinaryExpression node)
 {
     if (!node.get_IsAssignmentExpression())
     {
         this.VisitBinaryExpression(node);
         return;
     }
     this.Visit(node.get_Right());
     if (this.searchResult != UsageFinderSearchResult.NotFound)
     {
         return;
     }
     if (this.CheckExpression(node.get_Left()))
     {
         this.searchResult = 1;
         return;
     }
     this.Visit(node.get_Left());
     return;
 }
        public override void VisitBinaryExpression(BinaryExpression node)
        {
            if (!node.IsAssignmentExpression)
            {
                base.VisitBinaryExpression(node);
                return;
            }

            Visit(node.Right);
            if (this.searchResult != UsageFinderSearchResult.NotFound)
            {
                return;
            }

            if (CheckExpression(node.Left))
            {
                this.searchResult = UsageFinderSearchResult.Assigned;
            }
            else
            {
                base.Visit(node.Left);
            }
        }
        public override void VisitBinaryExpression(BinaryExpression node)
        {
            if (!node.IsAssignmentExpression)
            {
                base.VisitBinaryExpression(node);
                return;
            }

            Visit(node.Right);
            if (this.searchResult != UsageFinderSearchResult.NotFound)
            {
                return;
            }

            if (CheckExpression(node.Left))
            {
                this.searchResult = UsageFinderSearchResult.Assigned;
            }
            else
            {
                base.Visit(node.Left);
            }
        }
 public UsageFinderSearchResult SearchForUsage(Expression expression)
 {
     this.searchResult = UsageFinderSearchResult.NotFound;
     Visit(expression);
     return this.searchResult;
 }
 public UsageFinderSearchResult SearchForUsage(Expression expression)
 {
     this.searchResult = 0;
     this.Visit(expression);
     return(this.searchResult);
 }
 public UsageFinderSearchResult SearchForUsage(Expression expression)
 {
     this.searchResult = UsageFinderSearchResult.NotFound;
     Visit(expression);
     return(this.searchResult);
 }