Exemplo n.º 1
0
def build_blocks_arb(block_links, code=None):
    block_list = BlockList()
    as_tree_string = ""
    current_line_number = 1
    for i in range(len(block_links)):
        basic_block = RawBasicBlock(current_line_number, current_line_number,
                                    None)
        current_line_number += 1
        basic_block.name = chr(65 + i)
        block_list.append(basic_block)

        if code is not None:
            ast_stmts = code.get(basic_block.name)
            as_tree_string += ast_stmts
            basic_block.end_line += (ast_stmts.count("\n") - 1)
            current_line_number = basic_block.end_line + 1

    for key, value in block_links.items():
        key_block = block_list.get_block_by_name(key)
        for value_block_str in value:
            Cfg.connect_2_blocks(key_block,
                                 block_list.get_block_by_name(value_block_str))

    if code is None:
        return block_list
    else:
        return block_list, as_tree_string
Exemplo n.º 2
0
    def build_tree(self):
        # TODO: clarify the code below
        for block_in_cfg in self.cfg.walk_block(self.cfg.root):
            block_in_dom_list = RawBasicBlock(block_in_cfg.start_line,
                                              block_in_cfg.end_line)
            self.dominator_nodes.append(block_in_dom_list)
            for dom_block in block_in_cfg.dominates_list:
                dom_block_in_list = self.dominator_nodes.get_block(dom_block)
                if not dom_block_in_list.prev_block_list:
                    Cfg.connect_2_blocks(block_in_dom_list, dom_block_in_list)

        self.dominator_root = self.dominator_nodes[-1]
Exemplo n.º 3
0
    def build_blocks_arb(self, block_links):
        block_list = BlockList()
        for i in range(len(block_links)):
            basic_block = RawBasicBlock(i, i, None)
            basic_block.name = chr(65 + i)
            block_list.append(basic_block)

        for key, value in block_links.items():
            key_block = block_list.get_block_by_name(key)
            for value_block_str in value:
                Cfg.connect_2_blocks(
                    key_block, block_list.get_block_by_name(value_block_str))

        return block_list