Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 5
0
 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);
 }
 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;
     }
 }