Exemplo n.º 1
0
 private bool SubtreeEndsInInstructionCode(InstructionBlock entryBlock, IEnumerable <Code> operationCodes)
 {
     V_0 = true;
     V_1 = new Queue <InstructionBlock>();
     V_2 = new HashSet <int>();
     V_1.Enqueue(entryBlock);
     while (V_1.get_Count() > 0 & V_0)
     {
         V_3 = V_1.Dequeue();
         if (V_2.Contains(V_3.get_First().get_Offset()))
         {
             continue;
         }
         dummyVar0 = V_2.Add(V_3.get_First().get_Offset());
         if (V_3.get_Successors().Length != 0)
         {
             V_8 = V_3.get_Successors();
             V_9 = 0;
             while (V_9 < (int)V_8.Length)
             {
                 V_1.Enqueue(V_8[V_9]);
                 V_9 = V_9 + 1;
             }
         }
         else
         {
             V_4 = false;
             V_5 = operationCodes.GetEnumerator();
             try
             {
                 while (V_5.MoveNext())
                 {
                     V_6 = V_5.get_Current();
                     V_7 = V_3.get_Last().get_OpCode();
                     V_4 = V_4 | V_7.get_Code() == V_6;
                 }
             }
             finally
             {
                 if (V_5 != null)
                 {
                     V_5.Dispose();
                 }
             }
             V_0 = V_0 & V_4;
         }
     }
     return(V_0);
 }
 private InstructionBlock GetEntryBlockInRange(BlockRange blockRange)
 {
     V_0 = blockRange.Start.get_First().get_Offset();
     V_1 = blockRange.End.get_First().get_Offset();
     V_2 = 0;
     while (V_2 < (int)this.context.get_CFG().get_Blocks().Length)
     {
         V_3 = this.context.get_CFG().get_Blocks()[V_2];
         if (V_3.get_First().get_Offset() >= V_0 && V_3.get_First().get_Offset() <= V_1)
         {
             return(V_3);
         }
         V_2 = V_2 + 1;
     }
     throw new Exception("Invalid range");
 }