diff --git a/Makefile b/Makefile index a431800e..5e8d471e 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ check-3.0 check-3.1 check-3.2 check-3.5 check-3.6: $(MAKE) -C test $@ #:Tests for Python 2.6 (doesn't have pytest) -check-2.5 check-2.6: +check-2.4 check-2.5 check-2.6: $(MAKE) -C test $@ #:PyPy 2.6.1 or PyPy 5.0.1 diff --git a/test/Makefile b/test/Makefile index f837216c..cadd8a03 100644 --- a/test/Makefile +++ b/test/Makefile @@ -20,7 +20,7 @@ check: $(MAKE) check-$$PYTHON_VERSION #: Run working tests from Python 2.6 or 2.7 -check-2.5 check-2.6 check-2.7: check-bytecode-2 check-bytecode-3 check-bytecode-1 check-2.7-ok +check-2.4 check-2.5 check-2.6 check-2.7: check-bytecode-2 check-bytecode-3 check-bytecode-1 check-2.7-ok #: Run working tests from Python 3.1 check-3.0: check-bytecode diff --git a/uncompyle6/main.py b/uncompyle6/main.py index c1fc4840..ab7a0552 100644 --- a/uncompyle6/main.py +++ b/uncompyle6/main.py @@ -21,13 +21,25 @@ def uncompyle( # store final output stream for case of error real_out = out or sys.stdout - co_pypy_str = 'PyPy ' if is_pypy else '' - run_pypy_str = 'PyPy ' if IS_PYPY else '' + if is_pypy: + co_pypy_str = 'PyPy ' + else: + co_pypy_str = '' + + if IS_PYPY: + run_pypy_str = 'PyPy ' + else: + run_pypy_str = '' + + if magic_int: + m = str(magic_int) + else: + m = "" real_out.write('# uncompyle6 version %s\n' '# %sPython bytecode %s%s\n# Decompiled from: %sPython %s\n' % (VERSION, co_pypy_str, bytecode_version, - " (%d)" % magic_int if magic_int else "", - run_pypy_str, '\n# '.join(sys.version.split('\n')))) + " (%s)" % m, run_pypy_str, + '\n# '.join(sys.version.split('\n')))) if co.co_filename: real_out.write('# Embedded file name: %s\n' % co.co_filename) if timestamp: diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index 5f402065..babbaea8 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -78,7 +78,10 @@ class PythonParser(GenericASTBuilder): err_token = instructions[index] print("Instruction context:") for i in range(start, finish): - indent = ' ' if i != index else '-> ' + if i != index: + indent = ' ' + else: + indent = '-> ' print("%s%s" % (indent, instructions[i])) raise ParserError(err_token, err_token.offset) diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index 7ff048d0..dea78bd5 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -453,7 +453,10 @@ class Python3Parser(PythonParser): """Python 3.3 added a an addtional LOAD_CONST before MAKE_FUNCTION and this has an effect on many rules. """ - new_rule = rule % (('LOAD_CONST ') * (1 if self.version >= 3.3 else 0)) + if self.version >= 3.3: + new_rule = rule % (('LOAD_CONST ') * 1) + else: + new_rule = rule % (('LOAD_CONST ') * 0) self.add_unique_rule(new_rule, opname, attr, customize) def add_custom_rules(self, tokens, customize): diff --git a/uncompyle6/scanners/scanner2.py b/uncompyle6/scanners/scanner2.py index 62b5d176..e2592868 100644 --- a/uncompyle6/scanners/scanner2.py +++ b/uncompyle6/scanners/scanner2.py @@ -83,7 +83,9 @@ class Scanner2(scan.Scanner): cause specific rules for the specific number of arguments they take. """ - show_asm = self.show_asm if not show_asm else show_asm + if not show_asm: + show_asm = self.show_asm + # show_asm = 'after' if show_asm in ('both', 'before'): from xdis.bytecode import Bytecode @@ -908,8 +910,10 @@ class Scanner2(scan.Scanner): # FIXME: rocky: I think we need something like this... if offset not in set(self.ignore_if) or self.version == 2.7: - source = (self.setup_loops[label] - if label in self.setup_loops else offset) + if label in self.setup_loops: + source = self.setup_loops[label] + else: + source = offset targets[label] = targets.get(label, []) + [source] pass diff --git a/uncompyle6/scanners/scanner26.py b/uncompyle6/scanners/scanner26.py index 4f65d9f1..6476e883 100755 --- a/uncompyle6/scanners/scanner26.py +++ b/uncompyle6/scanners/scanner26.py @@ -86,7 +86,9 @@ class Scanner26(scan.Scanner2): cause specific rules for the specific number of arguments they take. """ - show_asm = self.show_asm if not show_asm else show_asm + if not show_asm: + show_asm = self.show_asm + # show_asm = 'after' if show_asm in ('both', 'before'): from xdis.bytecode import Bytecode diff --git a/uncompyle6/scanners/scanner3.py b/uncompyle6/scanners/scanner3.py index d3750ca6..564ea9be 100644 --- a/uncompyle6/scanners/scanner3.py +++ b/uncompyle6/scanners/scanner3.py @@ -146,7 +146,9 @@ class Scanner3(Scanner): cause specific rules for the specific number of arguments they take. """ - show_asm = self.show_asm if not show_asm else show_asm + if not show_asm: + show_asm = self.show_asm + # show_asm = 'after' if show_asm in ('both', 'before'): bytecode = Bytecode(co, self.opc) diff --git a/uncompyle6/scanners/tok.py b/uncompyle6/scanners/tok.py index a260a24c..def37ff1 100644 --- a/uncompyle6/scanners/tok.py +++ b/uncompyle6/scanners/tok.py @@ -56,12 +56,18 @@ class Token: return self.format(line_prefix='') def format(self, line_prefix=''): - prefix = ('\n%s%4d ' % (line_prefix, self.linestart) - if self.linestart else (' ' * (6 + len(line_prefix)))) + if self.linestart: + prefix = '\n%s%4d ' % (line_prefix, self.linestart) + else: + prefix = ' ' * (6 + len(line_prefix)) offset_opname = '%6s %-17s' % (self.offset, self.type) if not self.has_arg: return "%s%s" % (prefix, offset_opname) - argstr = "%6d " % self.attr if isinstance(self.attr, int) else (' '*7) + + if isinstance(self.attr, int): + argstr = "%6d " % self.attr + else: + argstr = ' '*7 if self.pattr: pattr = self.pattr if self.opc: diff --git a/uncompyle6/semantics/fragments.py b/uncompyle6/semantics/fragments.py index 52f87c44..36fc13e8 100644 --- a/uncompyle6/semantics/fragments.py +++ b/uncompyle6/semantics/fragments.py @@ -732,7 +732,10 @@ class FragmentsWalker(pysource.SourceWalker, object): def n_genexpr(self, node): start = len(self.f.getvalue()) self.write('(') - code_index = -6 if self.version > 3.2 else -5 + if self.version > 3.2: + code_index = -6 + else: + code_index = -5 self.comprehension_walk(node, iter_index=3, code_index=code_index) self.write(')') self.set_pos_info(node, start, len(self.f.getvalue())) @@ -886,7 +889,10 @@ class FragmentsWalker(pysource.SourceWalker, object): subclass = n.attr break pass - subclass_info = node if node == 'classdefdeco2' else node[0] + if node == 'classdefdeco2': + subclass_info = node + else: + subclass_info = node[0] elif buildclass[1][0] == 'load_closure': # Python 3 with closures not functions load_closure = buildclass[1] @@ -910,7 +916,10 @@ class FragmentsWalker(pysource.SourceWalker, object): subclass = buildclass[1][0].attr subclass_info = node[0] else: - buildclass = node if (node == 'classdefdeco2') else node[0] + if node == 'classdefdeco2': + buildclass = node + else: + buildclass = node[0] build_list = buildclass[1][0] if hasattr(buildclass[-3][0], 'attr'): subclass = buildclass[-3][0].attr diff --git a/uncompyle6/semantics/make_function.py b/uncompyle6/semantics/make_function.py index e1a6f934..b388e49b 100644 --- a/uncompyle6/semantics/make_function.py +++ b/uncompyle6/semantics/make_function.py @@ -151,7 +151,10 @@ def make_function3_annotate(self, node, isLambda, nested=1, self.write(': %s' % value) suffix = ', ' - suffix = ', ' if i > 0 else '' + if i > 0: + suffix = ', ' + else: + suffix = '' for n in node: if n == 'pos_arg': self.write(suffix) @@ -301,7 +304,10 @@ def make_function2(self, node, isLambda, nested=1, codeNode=None): self.ERROR = p return - kw_pairs = args_node.attr[1] if self.version >= 3.0 else 0 + if self.version >= 3.0: + kw_pairs = args_node.attr[1] + else: + kw_pairs = 0 indent = self.indent # build parameters @@ -438,7 +444,10 @@ def make_function3(self, node, isLambda, nested=1, codeNode=None): self.ERROR = p return - kw_pairs = args_node.attr[1] if self.version >= 3.0 else 0 + if self.version >= 3.0: + kw_pairs = args_node.attr[1] + else: + kw_pairs = 0 indent = self.indent # build parameters @@ -480,7 +489,10 @@ def make_function3(self, node, isLambda, nested=1, codeNode=None): i = len(paramnames) - len(defparams) self.write(", ".join(paramnames[:i])) - suffix = ', ' if i > 0 else '' + if i > 0: + suffix = ', ' + else: + suffix = '' for n in node: if n == 'pos_arg': self.write(suffix) diff --git a/uncompyle6/semantics/pysource.py b/uncompyle6/semantics/pysource.py index 2109e25b..c148986f 100644 --- a/uncompyle6/semantics/pysource.py +++ b/uncompyle6/semantics/pysource.py @@ -600,7 +600,10 @@ class SourceWalker(GenericASTTraversal, object): code = node[-3] self.indentMore() - annotate_last = -4 if self.version == 3.1 else -5 + if self.version == 3.1: + annotate_last = -4 + else: + annotate_last = -5 # FIXME: handle and pass full annotate args make_function3_annotate(self, node, isLambda=False, @@ -1114,7 +1117,10 @@ class SourceWalker(GenericASTTraversal, object): return n = node[-1] elif node[-1] == 'del_stmt': - n = node[-3] if node[-2] == 'JUMP_BACK' else node[-2] + if node[-2] == 'JUMP_BACK': + n = node[-3] + else: + n = node[-2] assert n == 'list_iter' @@ -1132,7 +1138,10 @@ class SourceWalker(GenericASTTraversal, object): list_iter = node[-1] else: expr = n[1] - list_iter = node[-3] if node[-2] == 'JUMP_BACK' else node[-2] + if node[-2] == 'JUMP_BACK': + list_iter = node[-3] + else: + list_iter = node[-2] assert expr == 'expr' assert list_iter == 'list_iter' @@ -1174,7 +1183,10 @@ class SourceWalker(GenericASTTraversal, object): self.write( '[ ') expr = n[0] - list_iter = node[-2] if self.is_pypy and node[-1] == 'JUMP_BACK' else node[-1] + if self.is_pypy and node[-1] == 'JUMP_BACK': + list_iter = node[-2] + else: + list_iter = node[-1] assert expr == 'expr' assert list_iter == 'list_iter' @@ -1248,7 +1260,10 @@ class SourceWalker(GenericASTTraversal, object): self.write(' for ') self.preorder(ast[iter_index-1]) self.write(' in ') - iter_expr = node[2] if node[2] == 'expr' else node[-3] + if node[2] == 'expr': + iter_expr = node[2] + else: + iter_expr = node[-3] assert iter_expr == 'expr' self.preorder(iter_expr) self.preorder(ast[iter_index]) @@ -1256,7 +1271,10 @@ class SourceWalker(GenericASTTraversal, object): def n_genexpr(self, node): self.write('(') - code_index = -6 if self.version > 3.2 else -5 + if self.version > 3.2: + code_index = -6 + else: + code_index = -5 self.comprehension_walk(node, iter_index=3, code_index=code_index) self.write(')') self.prune() @@ -1490,7 +1508,10 @@ class SourceWalker(GenericASTTraversal, object): break pass pass - subclass_info = node if node == 'classdefdeco2' else node[0] + if node == 'classdefdeco2': + subclass_info = node + else: + subclass_info = node[0] elif buildclass[1][0] == 'load_closure': # Python 3 with closures not functions load_closure = buildclass[1] @@ -1514,7 +1535,10 @@ class SourceWalker(GenericASTTraversal, object): subclass = buildclass[1][0].attr subclass_info = node[0] else: - buildclass = node if (node == 'classdefdeco2') else node[0] + if node == 'classdefdeco2': + buildclass = node + else: + buildclass = node[0] build_list = buildclass[1][0] if hasattr(buildclass[-3][0], 'attr'): subclass = buildclass[-3][0].attr diff --git a/uncompyle6/show.py b/uncompyle6/show.py index 8a886f58..dea00a47 100644 --- a/uncompyle6/show.py +++ b/uncompyle6/show.py @@ -12,7 +12,10 @@ def maybe_show_asm(showasm, tokens): :param tokens: The asm tokens to show. """ if showasm: - stream = showasm if hasattr(showasm, 'write') else sys.stdout + if hasattr(showasm, 'write'): + stream = showasm + else: + stream = sys.stdout for t in tokens: stream.write(str(t)) stream.write('\n') @@ -29,7 +32,10 @@ def maybe_show_ast(showast, ast): :param ast: The ast to show. """ if showast: - stream = showast if hasattr(showast, 'write') else sys.stdout + if hasattr(showast, 'write'): + stream = showast + else: + stream = sys.stdout stream.write(str(ast)) stream.write('\n') @@ -48,7 +54,10 @@ def maybe_show_ast_param_default(showast, name, default): :param default: The function parameter default. """ if showast: - stream = showast if hasattr(showast, 'write') else sys.stdout + if hasattr(showast, 'write'): + stream = showast + else: + stream = sys.stdout stream.write('\n') stream.write('--' + name) stream.write('\n')