From 622f83970b48e1ff61f1c4c2fcffe2562dbff1ff Mon Sep 17 00:00:00 2001 From: rocky Date: Mon, 27 Jun 2016 17:14:30 -0400 Subject: [PATCH] JUMP_IF_{TRUE,FALSE}_OR_OP fixes --- __pkginfo__.py | 2 +- uncompyle6/parsers/parse26.py | 9 +++++++++ uncompyle6/scanners/scanner2.py | 7 ++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/__pkginfo__.py b/__pkginfo__.py index 809f4c05..6f28b449 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -37,7 +37,7 @@ entry_points={ ]} ftp_url = None install_requires = ['spark-parser >= 1.4.0', - 'xdis >= 1.1.2'] + 'xdis >= 1.1.3'] license = 'MIT' mailing_list = 'python-debugger@googlegroups.com' modname = 'uncompyle6' diff --git a/uncompyle6/parsers/parse26.py b/uncompyle6/parsers/parse26.py index 31f5023f..ba5e3f44 100644 --- a/uncompyle6/parsers/parse26.py +++ b/uncompyle6/parsers/parse26.py @@ -22,6 +22,8 @@ class Python26Parser(Python2Parser): JUMP_IF_FALSE POP_TOP POP_TOP designator POP_TOP try_middle ::= JUMP_FORWARD COME_FROM except_stmts POP_TOP END_FINALLY come_froms + try_middle ::= JUMP_FORWARD COME_FROM except_stmts + COME_FROM POP_TOP END_FINALLY come_froms try_middle ::= JUMP_FORWARD COME_FROM except_stmts END_FINALLY come_froms try_middle ::= jmp_abs COME_FROM except_stmts @@ -71,6 +73,13 @@ class Python26Parser(Python2Parser): lc_body ::= LOAD_NAME expr LIST_APPEND ''' + def p_ret26(self, args): + ''' + ret_cond ::= expr jmp_false expr RETURN_END_IF COME_FROM POP_TOP ret_expr_or_cond + ret_or ::= expr jmp_true ret_expr_or_cond COME_FROM + ''' + + class Python26ParserSingle(Python2Parser, PythonParserSingle): pass diff --git a/uncompyle6/scanners/scanner2.py b/uncompyle6/scanners/scanner2.py index 070ccffe..46ef57f9 100755 --- a/uncompyle6/scanners/scanner2.py +++ b/uncompyle6/scanners/scanner2.py @@ -701,11 +701,8 @@ class Scanner2(scan.Scanner): if op in self.opc.hasjrel and op != self.opc.FOR_ITER: label = i + 3 + oparg elif self.version == 2.7 and op in self.opc.hasjabs: - if op in (self.opc.JUMP_IF_FALSE_OR_POP, self.opc.JUMP_IF_TRUE_OR_POP): - if (oparg > i): - label = oparg - elif self.version < 2.7 and op in self.opc.hasjabs: - if op in (self.opc.JUMP_IF_FALSE, self.opc.JUMP_IF_TRUE): + if op in (self.opc.JUMP_IF_FALSE_OR_POP, + self.opc.JUMP_IF_TRUE_OR_POP): if (oparg > i): label = oparg