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)
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))
def get_block(self, block_to_find): for block in self.__iter__(): if common.is_blocks_same(block, block_to_find): return block
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
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)