public AssignmentAnalyzer(BaseUsageFinder visitor, ExpressionDecompilerData expressionsData)
 {
     base();
     this.visitor         = visitor;
     this.expressionsData = expressionsData;
     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;
        }
Example #4
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);
 }
 public AssignmentAnalyzer(BaseUsageFinder visitor, ExpressionDecompilerData expressionsData)
 {
     this.visitor = visitor;
     this.expressionsData = expressionsData;
 }