def disassemble(self, code, mname, trace=False, ssa=True): argnames, vargs, kargs = getargs(code) inst, targets = disassemble(code) name = code.co_name.replace('<', '').replace('>', '') if trace: print "CODE", name print code.co_argcount print code.co_varnames self.dump(inst, targets) root = BlockBuilder().process(code, inst) pre = True post = True if trace and pre: FlowBlockDump().process(name + "_pre", root) try: StructuralAnalyzer().process(root.entry(), trace) finally: if trace and post: FlowBlockDump().process(name + "_post", root) root = destack(code, mname, name, root, argnames, vargs, kargs, self.compiler, decompileCode, trace) if ssa: root = ssatransform.evaluateCode(self.compiler, root) #root = ssitransform.ssiTransform(root) return root
def disassemble(self, code, mname, trace=False, ssa=True): argnames, vargs, kargs = getargs(code) inst, targets = disassemble(code) name = code.co_name.replace("<", "").replace(">", "") if trace: print "CODE", name print code.co_argcount print code.co_varnames self.dump(inst, targets) root = BlockBuilder().process(code, inst) pre = True post = True if trace and pre: FlowBlockDump().process(name + "_pre", root) try: StructuralAnalyzer().process(root.entry(), trace) finally: if trace and post: FlowBlockDump().process(name + "_post", root) root = destack(code, mname, name, root, argnames, vargs, kargs, self.compiler, decompileCode, trace) if ssa: root = ssatransform.evaluateCode(self.compiler, root) # root = ssitransform.ssiTransform(root) return root
def postProcessCode(self, code): self.rewrites = {} self.remap = {} self.fields = {} self.header = [] self.processParameters(code) for name, group in self.groups.iteritems(): self.processGroup(code, name, group) rewrite.rewrite(self.compiler, code, self.rewrites) code.ast = ast.Suite([ast.InputBlock(self.header), code.ast]) if self.ssaBroken: ssatransform.evaluateCode(self.compiler, code) simplify.evaluateCode(self.compiler, self.prgm, code)