private void CheckHandler(AssignmentFlowNode handlerEntry, AssignmentAnalyzer analyzer, ref AssignmentType result) { V_0 = analyzer.CheckAssignmentType(handlerEntry); switch (V_0 - 1) { case 0: case 2: { result = V_0; break; } case 1: { if ((int)result == 3) { break; } result = V_0; return; } default: { return; } } return; }
protected AssignmentType AnalyzeAssignmentType(BaseUsageFinder usageFinder) { PrepareNodes(); AssignmentAnalyzer analyzer = new AssignmentAnalyzer(usageFinder, this.context.MethodContext.Expressions); AssignmentType regularControlFlowResult = analyzer.CheckAssignmentType(mappedNodes[0]); if (regularControlFlowResult == AssignmentType.NotAssigned) { return(AssignmentType.NotAssigned); } AssignmentType result = regularControlFlowResult; List <ExceptionHandler> exceptionHandlers = new List <ExceptionHandler>(this.context.MethodContext.ControlFlowGraph.RawExceptionHandlers); int initialCount; do { initialCount = exceptionHandlers.Count; for (int i = 0; i < exceptionHandlers.Count; i++) { ExceptionHandler handler = exceptionHandlers[i]; AssignmentFlowNode tryEntryNode = GetNodeFromBlockOffset(handler.TryStart.Offset); if (tryEntryNode.NodeState == AssignmentNodeState.Unknown) { continue; } exceptionHandlers.RemoveAt(i--); CheckHandler(GetNodeFromBlockOffset(handler.HandlerStart.Offset), analyzer, ref result); if (result == AssignmentType.NotAssigned) { return(AssignmentType.NotAssigned); } if (handler.HandlerType != ExceptionHandlerType.Filter) { continue; } CheckHandler(GetNodeFromBlockOffset(handler.FilterStart.Offset), analyzer, ref result); if (result == AssignmentType.NotAssigned) { return(AssignmentType.NotAssigned); } } } while (initialCount != exceptionHandlers.Count); return(result); }
protected AssignmentType AnalyzeAssignmentType(BaseUsageFinder usageFinder) { PrepareNodes(); AssignmentAnalyzer analyzer = new AssignmentAnalyzer(usageFinder, this.context.MethodContext.Expressions); AssignmentType regularControlFlowResult = analyzer.CheckAssignmentType(mappedNodes[0]); if (regularControlFlowResult == AssignmentType.NotAssigned) { return AssignmentType.NotAssigned; } AssignmentType result = regularControlFlowResult; List<ExceptionHandler> exceptionHandlers = new List<ExceptionHandler>(this.context.MethodContext.ControlFlowGraph.RawExceptionHandlers); int initialCount; do { initialCount = exceptionHandlers.Count; for (int i = 0; i < exceptionHandlers.Count; i++) { ExceptionHandler handler = exceptionHandlers[i]; AssignmentFlowNode tryEntryNode = GetNodeFromBlockOffset(handler.TryStart.Offset); if (tryEntryNode.NodeState == AssignmentNodeState.Unknown) { continue; } exceptionHandlers.RemoveAt(i--); CheckHandler(GetNodeFromBlockOffset(handler.HandlerStart.Offset), analyzer, ref result); if (result == AssignmentType.NotAssigned) { return AssignmentType.NotAssigned; } if (handler.HandlerType != ExceptionHandlerType.Filter) { continue; } CheckHandler(GetNodeFromBlockOffset(handler.FilterStart.Offset), analyzer, ref result); if (result == AssignmentType.NotAssigned) { return AssignmentType.NotAssigned; } } } while (initialCount != exceptionHandlers.Count); return result; }
private void CheckHandler(AssignmentFlowNode handlerEntry, AssignmentAnalyzer analyzer, ref AssignmentType result) { AssignmentType handlerResult = analyzer.CheckAssignmentType(handlerEntry); switch (handlerResult) { case AssignmentType.SingleAssignment: if (result != AssignmentType.MultipleAssignments) { result = handlerResult; } break; case AssignmentType.NotAssigned: case AssignmentType.MultipleAssignments: result = handlerResult; break; } }
protected AssignmentType AnalyzeAssignmentType(BaseUsageFinder usageFinder) { this.PrepareNodes(); V_0 = new AssignmentAnalyzer(usageFinder, this.context.get_MethodContext().get_Expressions()); V_1 = V_0.CheckAssignmentType(this.mappedNodes[0]); if (V_1 == 1) { return(1); } V_2 = V_1; V_3 = new List <ExceptionHandler>(this.context.get_MethodContext().get_ControlFlowGraph().get_RawExceptionHandlers()); do { V_4 = V_3.get_Count(); V_5 = 0; while (V_5 < V_3.get_Count()) { V_6 = V_3.get_Item(V_5); if (this.GetNodeFromBlockOffset(V_6.get_TryStart().get_Offset()).get_NodeState() != AssignmentNodeState.Unknown) { stackVariable41 = V_5; V_5 = stackVariable41 - 1; V_3.RemoveAt(stackVariable41); this.CheckHandler(this.GetNodeFromBlockOffset(V_6.get_HandlerStart().get_Offset()), V_0, ref V_2); if (V_2 == 1) { return(1); } if (V_6.get_HandlerType() == 1) { this.CheckHandler(this.GetNodeFromBlockOffset(V_6.get_FilterStart().get_Offset()), V_0, ref V_2); if (V_2 == 1) { return(1); } } } V_5 = V_5 + 1; } }while (V_4 != V_3.get_Count()); return(V_2); }