예제 #1
0
 def fill_df(self):
     for nodes in self.cfg.block_list:
         if nodes.get_num_of_parents() > 1:
             for pred_node in nodes.prev_block_list:
                 runner = pred_node
                 while not common.is_blocks_same(self.dominator_nodes.get_block(runner),
                                                 self.get_idom(nodes)) \
                         and runner is not None:
                     runner.df = nodes
                     runner = self.get_idom(runner)
예제 #2
0
 def assertDfEqual(self, dom_tree_real, *expected_df):
     for df_block_num in range(len(expected_df)):
         self.assertEqual(len(dom_tree_real.cfg.block_list),
                          len(expected_df))
         if len(expected_df[df_block_num]) == 0:
             self.assertIsNone(
                 dom_tree_real.cfg.block_list[df_block_num].df)
         else:
             self.assertTrue(
                 common.is_blocks_same(
                     RawBasicBlock(expected_df[df_block_num][0],
                                   expected_df[df_block_num][1]),
                     dom_tree_real.cfg.block_list[df_block_num].df))
예제 #3
0
 def get_block(self, block_to_find):
     for block in self.__iter__():
         if common.is_blocks_same(block, block_to_find):
             return block
예제 #4
0
 def find_node(self, block_to_find):
     for block in self.block_list:
         if common.is_blocks_same(block, block_to_find):
             return block
     return None
예제 #5
0
 def remove_block_from_list(self, block_list, block_to_remove):
     for block in block_list:
         if common.is_blocks_same(block, block_to_remove):
             block_list.remove(block)