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); }