diff --git a/test/test_pyenvlib.py b/test/test_pyenvlib.py index 7b76e5ed..861b82ed 100755 --- a/test/test_pyenvlib.py +++ b/test/test_pyenvlib.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # emacs-mode: -*-python-*- """ -test_pyenvlib -- uncompyle and verify Python libraries +test_pyenvlib -- decompile and verify Python libraries Usage-Examples: @@ -22,12 +22,17 @@ Step 2: Run the test: from __future__ import print_function -import os, time, re, shutil, sys +import os +import re +import shutil +import sys +import time from fnmatch import fnmatch -from uncompyle6 import main import xdis.magics as magics +from uncompyle6 import main + # ----- configure this for your needs python_versions = [v for v in magics.python_versions if re.match("^[0-9.]+$", v)] @@ -82,6 +87,7 @@ for vers in TEST_VERSIONS: if vers == "native": short_vers = os.path.basename(sys.path[-1]) from xdis.version_info import PYTHON_VERSION_TRIPLE, version_tuple_to_str + if PYTHON_VERSION_TRIPLE > (3, 0): version = version_tuple_to_str(end=2) PYC = f"*.cpython-{version}.pyc" @@ -133,8 +139,17 @@ def do_tests( pass if len(files) > max_files: - files = [file for file in files if not "site-packages" in file and (file.endswith(".pyo") or file.endswith(".pyc"))] - files = [file for file in files if not "test" in file and (file.endswith(".pyo") or file.endswith(".pyc"))] + files = [ + file + for file in files + if not "site-packages" in file + and (file.endswith(".pyo") or file.endswith(".pyc")) + ] + files = [ + file + for file in files + if not "test" in file and (file.endswith(".pyo") or file.endswith(".pyc")) + ] if len(files) > max_files: # print("Number of files %d - truncating to last 200" % len(files)) print( @@ -151,7 +166,8 @@ def do_tests( if __name__ == "__main__": - import getopt, sys + import getopt + import sys do_coverage = do_verify = False test_dirs = [] diff --git a/uncompyle6/parsers/parse26.py b/uncompyle6/parsers/parse26.py index 53907904..71b3b877 100644 --- a/uncompyle6/parsers/parse26.py +++ b/uncompyle6/parsers/parse26.py @@ -493,51 +493,6 @@ class Python26Parser(Python2Parser): return tokens[last - 3].kind not in frozenset( ("JUMP_FORWARD", "RETURN_VALUE") ) or (tokens[last - 3] == "JUMP_FORWARD" and tokens[last - 3].attr != 2) - elif lhs == "tryelsestmt": - # We need to distinguish "try_except" from "tryelsestmt"; we do that - # by making sure that the jump before the except handler jumps to - # code somewhere before the end of the construct. - # This AST method is slower, but the token-only based approach - # didn't work as it failed with a "try" embedded inside a "try/else" - # since we can't detect COME_FROM boundaries. - - if ast[3] == "except_handler": - except_handler = ast[3] - if except_handler[0] == "JUMP_FORWARD": - else_start = int(except_handler[0].pattr) - if last == len(tokens): - last -= 1 - if tokens[last] == "COME_FROM" and isinstance: - last_offset = int(tokens[last].offset.split("_")[0]) - return else_start >= last_offset - - # The above test apparently isn't good enough, so we have additional - # checks distinguish "try_except" from "tryelsestmt". we do that - # by checking the jump before the "END_FINALLY". - # If we have: - # insn - # POP_TOP - # END_FINALLY - # COME_FROM - # then insn is neither a JUMP_FORWARD nor RETURN_VALUE, - # or if it is JUMP_FORWARD, then it can't be a JUMP_FORWARD to right after - # COME_FROM - if last == len(tokens): - last -= 1 - while tokens[last - 1] == "COME_FROM" and tokens[last - 2] == "COME_FROM": - last -= 1 - if tokens[last] == "COME_FROM" and tokens[last - 1] == "COME_FROM": - last -= 1 - if ( - tokens[last] == "COME_FROM" - and tokens[last - 1] == "END_FINALLY" - and tokens[last - 2] == "POP_TOP" - ): - # A jump of 2 is a jump around POP_TOP, END_FINALLY which - # would indicate try/else rather than try - return tokens[last - 3].kind in frozenset( - ("JUMP_FORWARD", "RETURN_VALUE") - ) and (tokens[last - 3] != "JUMP_FORWARD" or tokens[last - 3].attr == 2) return False