From d3faec4a7debf779fe55a42ec02ef2b0b1ef9eb4 Mon Sep 17 00:00:00 2001 From: Damien Garaud Date: Tue, 25 Sep 2012 22:28:24 +0200 Subject: [PATCH 1/9] DOC: Fix Sphinx build directory in the Makefile. --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index 267db01..6e5e36f 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -5,7 +5,7 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = -BUILDDIR = /Users/sean/indigo_workspace/Meta_Doc +BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 From 4f59827646d7a339d8fc7a009ee40954debf8381 Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 14:21:07 -0500 Subject: [PATCH 2/9] ENH: support Python 2.6 (removed dict comprehension) --- meta/decompiler/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta/decompiler/__init__.py b/meta/decompiler/__init__.py index e358a11..8ab6558 100644 --- a/meta/decompiler/__init__.py +++ b/meta/decompiler/__init__.py @@ -52,7 +52,9 @@ def compile_func(ast_node, filename, globals, **defaults): funcion_name = ast_node.name module = _ast.Module(body=[ast_node]) - ctx = {'%s_default' % key : arg for key, arg in defaults.items()} + ctx = {} + for key, arg in defaults.iteritems(): + ctx['%s_default' % key] = arg code = compile(module, filename, 'exec') From 9a742770a9bfdfa663875beefc197b23fdf1716d Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 14:33:31 -0500 Subject: [PATCH 3/9] ENH: minor fix for Python 2.6 --- meta/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/utils.py b/meta/utils.py index 349cf51..34f1e67 100644 --- a/meta/utils.py +++ b/meta/utils.py @@ -5,7 +5,7 @@ ''' import sys -py3 = sys.version_info.major >= 3 +py3 = sys.version_info[0] >= 3 class Python2(object): @staticmethod From 2272ba2d5ee009c250b32095bfdbc092a45e967a Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 14:36:58 -0500 Subject: [PATCH 4/9] ENH: minor fix for Python 2.6 --- meta/asttools/visitors/print_visitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/asttools/visitors/print_visitor.py b/meta/asttools/visitors/print_visitor.py index 6acdd38..edaa1f7 100644 --- a/meta/asttools/visitors/print_visitor.py +++ b/meta/asttools/visitors/print_visitor.py @@ -10,7 +10,7 @@ import _ast from warnings import warn -if sys.version_info.major < 3: +if sys.version_info[0] < 3: from StringIO import StringIO else: from io import StringIO From c9697b51e8e4671fc7851876b57820a4b836e529 Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 14:38:29 -0500 Subject: [PATCH 5/9] ENH: minor fix for Python 2.6 --- meta/asttools/visitors/pysourcegen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/asttools/visitors/pysourcegen.py b/meta/asttools/visitors/pysourcegen.py index c6ca347..a364e84 100644 --- a/meta/asttools/visitors/pysourcegen.py +++ b/meta/asttools/visitors/pysourcegen.py @@ -10,7 +10,7 @@ import sys from meta.utils import py3op, py2op -if sys.version_info.major < 3: +if sys.version_info[0] < 3: from StringIO import StringIO else: from io import StringIO From 5e278cf7361eaae13faca3eec0da1cdc39571726 Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 14:41:26 -0500 Subject: [PATCH 6/9] ENH: minor fix to support Python 2.6 --- meta/asttools/visitors/cond_symbol_visitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/asttools/visitors/cond_symbol_visitor.py b/meta/asttools/visitors/cond_symbol_visitor.py index 46f3a69..7011176 100644 --- a/meta/asttools/visitors/cond_symbol_visitor.py +++ b/meta/asttools/visitors/cond_symbol_visitor.py @@ -296,7 +296,7 @@ def visitExceptHandler(self, node): self.update_stable_rhs(get_symbols(node.type, ast.Load)) if node.name: - self.update_stable_lhs({node.name}) + self.update_stable_lhs(set([node.name])) self.visit_list(node.body) From 38ed485929b9d3ac38c9a4c6dae54fbc1657d9bb Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 15:12:19 -0500 Subject: [PATCH 7/9] ENH: more fixes to support Python 2.6 --- meta/asttools/visitors/cond_symbol_visitor.py | 6 +++--- meta/asttools/visitors/graph_visitor.py | 4 ++-- meta/asttools/visitors/symbol_visitor.py | 4 ++-- meta/bytecodetools/disassembler_.py | 2 +- meta/bytecodetools/instruction.py | 2 +- meta/decompiler/control_flow_instructions.py | 6 ++++-- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/meta/asttools/visitors/cond_symbol_visitor.py b/meta/asttools/visitors/cond_symbol_visitor.py index 7011176..e4860ab 100644 --- a/meta/asttools/visitors/cond_symbol_visitor.py +++ b/meta/asttools/visitors/cond_symbol_visitor.py @@ -315,7 +315,7 @@ def visitImport(self, node): def visitLambda(self, node): gen = ConditionalSymbolVisitor() - gen.update_stable_lhs(symbols={arg for arg in node.args.args}) + gen.update_stable_lhs(symbols=set(arg for arg in node.args.args)) gen.visit_list(node.body) self.update_stable_rhs(gen.undefined) @@ -325,10 +325,10 @@ def visitFunctionDef(self, node): for decorator in node.decorator_list: self.update_stable_rhs(get_symbols(decorator, ast.Load)) - self.update_stable_lhs({node.name}) + self.update_stable_lhs(set([node.name])) gen = ConditionalSymbolVisitor() - gen.update_stable_lhs(symbols={arg for arg in node.args.args}) + gen.update_stable_lhs(symbols=set(arg for arg in node.args.args)) gen.visit_list(node.body) self.update_stable_rhs(gen.undefined) diff --git a/meta/asttools/visitors/graph_visitor.py b/meta/asttools/visitors/graph_visitor.py index c52de11..c12f563 100644 --- a/meta/asttools/visitors/graph_visitor.py +++ b/meta/asttools/visitors/graph_visitor.py @@ -57,7 +57,7 @@ def visitName(self, node): if not self.graph.has_edge(node.id, ctx_var): self.graph.add_edge(node.id, ctx_var) - return {node.id} + return set([node.id]) def visitalias(self, node): name = node.asname if node.asname else node.name @@ -68,7 +68,7 @@ def visitalias(self, node): if not self.graph.has_node(name): self.graph.add_node(name) - return {name} + return set([name]) def visitCall(self, node): left = self.visit(node.func) diff --git a/meta/asttools/visitors/symbol_visitor.py b/meta/asttools/visitors/symbol_visitor.py index f847de6..804d309 100644 --- a/meta/asttools/visitors/symbol_visitor.py +++ b/meta/asttools/visitors/symbol_visitor.py @@ -29,7 +29,7 @@ def visitDefault(self, node): def visitName(self, node): if isinstance(node.ctx, self.ctx_types): - return {node.id} + return set([node.id]) else: return set() @@ -41,7 +41,7 @@ def visitalias(self, node): name = name.split('.', 1)[0] if ast.Store in self.ctx_types: - return {name} + return set([name]) else: return set() diff --git a/meta/bytecodetools/disassembler_.py b/meta/bytecodetools/disassembler_.py index 36dede4..82f7926 100644 --- a/meta/bytecodetools/disassembler_.py +++ b/meta/bytecodetools/disassembler_.py @@ -11,7 +11,7 @@ import sys from meta.bytecodetools.instruction import Instruction -py3 = sys.version_info.major >= 3 +py3 = sys.version_info[0] >= 3 co_ord = (lambda c:c) if py3 else ord def disassembler(co, lasti= -1): diff --git a/meta/bytecodetools/instruction.py b/meta/bytecodetools/instruction.py index 159abaa..948c519 100644 --- a/meta/bytecodetools/instruction.py +++ b/meta/bytecodetools/instruction.py @@ -8,7 +8,7 @@ import opcode import sys -py3 = sys.version_info.major >= 3 +py3 = sys.version_info[0] >= 3 co_ord = (lambda c:c) if py3 else ord diff --git a/meta/decompiler/control_flow_instructions.py b/meta/decompiler/control_flow_instructions.py index 83a6bfb..43ae76d 100644 --- a/meta/decompiler/control_flow_instructions.py +++ b/meta/decompiler/control_flow_instructions.py @@ -559,7 +559,9 @@ def while_loop(self, instr, loop_block): kw = dict(lineno=instr.lineno, col_offset=0) - loop_block_map = {instr.i:instr.op for instr in loop_block} + loop_block_map = {} + for instr in loop_block: + loop_block_map[instr.i] = instr.op first_i = loop_block[0].i @@ -619,7 +621,7 @@ def gather_jumps(self, jump_instr): and_block = self.make_block(to=to, inclusive=False, raise_=False) - jump_tos = {to} + jump_tos = set([to]) last_len = 0 old_max = to From 4b114c638f123a9a5553c9dc180648d17a5c708a Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Wed, 26 Sep 2012 16:11:15 -0500 Subject: [PATCH 8/9] ENH: don't use opcodes not present in Python 2.6 --- meta/decompiler/control_flow_instructions.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/meta/decompiler/control_flow_instructions.py b/meta/decompiler/control_flow_instructions.py index 43ae76d..c0647b8 100644 --- a/meta/decompiler/control_flow_instructions.py +++ b/meta/decompiler/control_flow_instructions.py @@ -6,13 +6,21 @@ from __future__ import print_function import opcode import _ast +import sys from meta.bytecodetools.instruction import Instruction from meta.asttools.visitors.print_visitor import print_ast from meta.utils import py3op, py2op, py3 -AND_JUMPS = ['JUMP_IF_FALSE_OR_POP', 'POP_JUMP_IF_FALSE'] -OR_JUMPS = ['JUMP_IF_TRUE_OR_POP', 'POP_JUMP_IF_TRUE'] -JUMPS = AND_JUMPS + OR_JUMPS -JUMP_OPS = [opcode.opmap[name] for name in JUMPS] + +if sys.version_info >= (2, 7): + AND_JUMPS = ['JUMP_IF_FALSE_OR_POP', 'POP_JUMP_IF_FALSE'] + OR_JUMPS = ['JUMP_IF_TRUE_OR_POP', 'POP_JUMP_IF_TRUE'] + JUMPS = AND_JUMPS + OR_JUMPS + JUMP_OPS = [opcode.opmap[name] for name in JUMPS] +else: + AND_JUMPS = [] + OR_JUMPS = [] + JUMPS = [] + JUMP_OPS = [] def split(block, name): From 45ba73451146e74c2d32b85a5f6b1f90f738636a Mon Sep 17 00:00:00 2001 From: Jon Riehl Date: Fri, 15 Feb 2013 15:01:16 -0600 Subject: [PATCH 9/9] Update for Python 3 compatibility. --- meta/bytecodetools/print_code.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta/bytecodetools/print_code.py b/meta/bytecodetools/print_code.py index 3115b27..7aad6b2 100644 --- a/meta/bytecodetools/print_code.py +++ b/meta/bytecodetools/print_code.py @@ -9,11 +9,11 @@ class ByteCodePrinter(ByteCodeConsumer): def generic_consume(self, instr): - print instr + print(instr) def main(): parser = ArgumentParser() parser.add_argument() if __name__ == '__main__': - main() \ No newline at end of file + main()