Allow Python 3.5 to decomplyle other versions. No Python 3.5

bytecode support just yet though.
This commit is contained in:
rocky 2015-12-30 23:46:29 -05:00
parent d3a32b6877
commit b82a8b90d5
8 changed files with 20 additions and 16 deletions

View File

@ -24,7 +24,7 @@ check:
$(MAKE) check-$$PYTHON_VERSION
#: Tests for Python 2.7, 3.3 and 3.4
check-2.7 check-3.3 check-3.4: pytest
check-2.7 check-3.3 check-3.4 check-3.5: pytest
$(MAKE) -C test $@
#:Tests for Python 2.6 (doesn't have pytest)

View File

@ -26,6 +26,9 @@ check-2.6 check-2.7: check-bytecode check-2.7-ok
check-3.3: check-bytecode
$(PYTHON) test_pythonlib.py --bytecode-3.3 --verify $(COMPILE)
#: Run working tests from Python 3.5
check-3.5: check-bytecode
#: Run working tests from Python 3.4
check-3.4: check-bytecode check-2.7-ok

View File

@ -42,8 +42,8 @@ PYTHON_VERSION_STR = "%s.%s" % (sys.version_info[0], sys.version_info[1])
sys.setrecursionlimit(5000)
def check_python_version(program):
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 2), (3, 3), (3, 4))):
print('Error: %s requires Python 2.6, 2.7, 3.2, 3.3, or 3.4' % program,
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 2), (3, 3), (3, 4), (3, 5))):
print('Error: %s requires Python 2.6, 2.7, 3.2, 3.3, 3.4 or 3.5' % program,
file=sys.stderr)
sys.exit(-1)
return

View File

@ -18,7 +18,7 @@ want to run on Python 2.7.
from __future__ import print_function
import inspect, os, sys
import os, sys
import uncompyle6
from uncompyle6.code import iscode

View File

@ -77,9 +77,9 @@ def load_module(filename, code_objects={}):
else:
raise ImportError("Bad magic number: '%s'" % magic)
if not (2.5 <= version <= 2.7) and not (3.2 <= version <= 3.4):
if not (2.5 <= version <= 2.7) and not (3.2 <= version <= 3.5):
raise ImportError("This is a Python %s file! Only "
"Python 2.5 to 2.7 and 3.2 to 3.4 files are supported."
"Python 2.5 to 2.7 and 3.2 to 3.5 files are supported."
% version)
# print version
@ -110,7 +110,8 @@ if __name__ == '__main__':
co = load_file(__file__)
obj_path = check_object_path(__file__)
version, timestamp, magic_int, co2 = load_module(obj_path)
print("version ", version, "magic int", magic_int)
print("version", version, "magic int", magic_int)
import datetime
print(datetime.datetime.fromtimestamp(timestamp))
assert co == co2
if version < 3.5:
assert co == co2

View File

@ -87,7 +87,7 @@ versions = {
__build_magic(3290): '3.4', # 3.4a4 3290 (changes to __qualname__ computation)
__build_magic(3300): '3.4', # 3.4a4 3300 (more changes to __qualname__ computation)
__build_magic(3310): '3.4', # 3.4rc2 3310 (alter __qualname__ computation)
__build_magic(3350): '3.5', # 3.5.0
}
magics = __by_version(versions)

View File

@ -62,7 +62,7 @@ class Scanner(object):
elif version == 3.4:
self.opc = opcode_34
else:
raise TypeError("%i is not a Python version I know about")
raise TypeError("%s is not a Python version I know about" % version)
# FIXME: This weird Python2 behavior is not Python3
self.resetTokenClass()
@ -298,13 +298,13 @@ def get_scanner(version):
scanner = scan.Scanner25()
elif version == 3.2:
import uncompyle6.scanners.scanner32 as scan
scanner = scan.Scanner32()
scanner = scan.Scanner32(version)
elif version == 3.3:
import uncompyle6.scanners.scanner33 as scan
scanner = scan.Scanner33()
scanner = scan.Scanner33(version)
elif version == 3.4:
import uncompyle6.scanners.scanner34 as scan
scanner = scan.Scanner34()
scanner = scan.Scanner34(version)
else:
raise RuntimeError("Unsupported Python version %d" % version)
return scanner

View File

@ -15,7 +15,7 @@ from array import array
from uncompyle6.code import iscode
from uncompyle6.scanner import Token
from uncompyle6 import PYTHON_VERSION, PYTHON3
from uncompyle6 import PYTHON3
# Get all the opcodes into globals
@ -27,8 +27,8 @@ import uncompyle6.scanner as scan
class Scanner3(scan.Scanner):
def __init__(self):
scan.Scanner.__init__(self, PYTHON_VERSION)
def __init__(self, version):
scan.Scanner.__init__(self, version)
def disassemble_generic(self, co, classname=None, code_objects={}):
"""