diff --git a/meta/asttools/visitors/pysourcegen.py b/meta/asttools/visitors/pysourcegen.py index c0f0f74..d9bbdc6 100644 --- a/meta/asttools/visitors/pysourcegen.py +++ b/meta/asttools/visitors/pysourcegen.py @@ -709,6 +709,32 @@ def visitReturn(self, node): if node.value is not None: self.print('return {:node}\n', node.value) + def visitTry(self, node): + # From Python 3.3, TryExcept and TryFinally are unified as Try + self.print('try:') + + with self.indenter: + if node.body: + for stmnt in node.body: + self.visit(stmnt) + else: + self.print('pass') + + for hndlr in node.handlers: + self.visit(hndlr) + + if node.orelse: + self.print('else:') + with self.indenter: + for stmnt in node.orelse: + self.visit(smnt) + + if node.finalbody: + self.print('finally:') + with self.indenter: + for stmnt in node.finalbody: + self.visit(stmnt) + def visitTryExcept(self, node): self.print('try:') diff --git a/meta/decompiler/control_flow_instructions.py b/meta/decompiler/control_flow_instructions.py index c8777db..331d3c5 100644 --- a/meta/decompiler/control_flow_instructions.py +++ b/meta/decompiler/control_flow_instructions.py @@ -376,7 +376,8 @@ def SETUP_EXCEPT(self, instr): else: else_ = [] - try_except = _ast.TryExcept(body=body, handlers=handlers, orelse=else_, lineno=instr.lineno, col_offset=0) + try_except = _ast.Try(body=body, handlers=handlers, orelse=else_, + finalbody=[], lineno=instr.lineno, col_offset=0) self.push_ast_item(try_except) diff --git a/meta/decompiler/instructions.py b/meta/decompiler/instructions.py index dab4171..9b110bc 100644 --- a/meta/decompiler/instructions.py +++ b/meta/decompiler/instructions.py @@ -351,6 +351,7 @@ def make_block(self, to, inclusive=True, raise_=True): @py3op def MAKE_FUNCTION(self, instr): + name = self.pop_ast_item() code = self.pop_ast_item() ndefaults = bitrange(instr.oparg, 0, 8) diff --git a/meta/decompiler/recompile.py b/meta/decompiler/recompile.py index 08e88b9..ee4c916 100644 --- a/meta/decompiler/recompile.py +++ b/meta/decompiler/recompile.py @@ -17,7 +17,6 @@ import marshal import imp -from py_compile import PyCompileError, wr_long MAGIC = imp.get_magic()