def get_cfa_and_namedblocks(self, fn): fid = FunctionIdentity.from_function(fn) bc = ByteCode(func_id=fid) cfa = self.cfa(bc) namedblocks = self._scan_namedblocks(bc, cfa) #### To debug, uncomment below # print(bc.dump()) # print("IDOMS") # for k, v in sorted(cfa.graph.immediate_dominators().items()): # print('{} -> {}'.format(k, v)) # print("DOMFRONT") # for k, vs in sorted(cfa.graph.dominance_frontier().items()): # print('{} -> {}'.format(k, vs)) # print(namedblocks) # cfa.graph.render_dot().view() return cfa, namedblocks
def get_func_ir(func): func_id = FunctionIdentity.from_function(func) bc = ByteCode(func_id=func_id) interp = Interpreter(func_id) func_ir = interp.interpret(bc) return func_ir