Use tuples not floats in Python release comparison

This commit is contained in:
rocky
2021-10-18 11:59:02 -04:00
parent 15efaffe8d
commit 8ac7a75372
26 changed files with 73 additions and 73 deletions

View File

@@ -642,7 +642,7 @@ def get_python_parser(
# If version is a string, turn that into the corresponding float. # If version is a string, turn that into the corresponding float.
if isinstance(version, str): if isinstance(version, str):
version = tuple([int(v) for v in version.split(".")[:3]]) version = tuple([int(v) for v in version.split(".")[:2]])
# FIXME: there has to be a better way... # FIXME: there has to be a better way...
# We could do this as a table lookup, but that would force us # We could do this as a table lookup, but that would force us
@@ -651,98 +651,98 @@ def get_python_parser(
if version < (3, 0): if version < (3, 0):
if version < (2, 2): if version < (2, 2):
if version[:2] == (1, 0): if version == (1, 0):
import uncompyle6.parsers.parse10 as parse10 import uncompyle6.parsers.parse10 as parse10
if compile_mode == "exec": if compile_mode == "exec":
p = parse10.Python10Parser(debug_parser) p = parse10.Python10Parser(debug_parser)
else: else:
p = parse10.Python01ParserSingle(debug_parser) p = parse10.Python01ParserSingle(debug_parser)
elif version[:2] == (1, 1): elif version == (1, 1):
import uncompyle6.parsers.parse11 as parse11 import uncompyle6.parsers.parse11 as parse11
if compile_mode == "exec": if compile_mode == "exec":
p = parse11.Python11Parser(debug_parser) p = parse11.Python11Parser(debug_parser)
else: else:
p = parse11.Python11ParserSingle(debug_parser) p = parse11.Python11ParserSingle(debug_parser)
if version[:2] == (1, 2): if version == (1, 2):
import uncompyle6.parsers.parse12 as parse12 import uncompyle6.parsers.parse12 as parse12
if compile_mode == "exec": if compile_mode == "exec":
p = parse12.Python12Parser(debug_parser) p = parse12.Python12Parser(debug_parser)
else: else:
p = parse12.Python12ParserSingle(debug_parser) p = parse12.Python12ParserSingle(debug_parser)
if version[:2] == (1, 3): if version == (1, 3):
import uncompyle6.parsers.parse13 as parse13 import uncompyle6.parsers.parse13 as parse13
if compile_mode == "exec": if compile_mode == "exec":
p = parse13.Python13Parser(debug_parser) p = parse13.Python13Parser(debug_parser)
else: else:
p = parse13.Python13ParserSingle(debug_parser) p = parse13.Python13ParserSingle(debug_parser)
elif version == 1.4: elif version == (1, 4):
import uncompyle6.parsers.parse14 as parse14 import uncompyle6.parsers.parse14 as parse14
if compile_mode == "exec": if compile_mode == "exec":
p = parse14.Python14Parser(debug_parser) p = parse14.Python14Parser(debug_parser)
else: else:
p = parse14.Python14ParserSingle(debug_parser) p = parse14.Python14ParserSingle(debug_parser)
elif version == 1.5: elif version == (1, 5):
import uncompyle6.parsers.parse15 as parse15 import uncompyle6.parsers.parse15 as parse15
if compile_mode == "exec": if compile_mode == "exec":
p = parse15.Python15Parser(debug_parser) p = parse15.Python15Parser(debug_parser)
else: else:
p = parse15.Python15ParserSingle(debug_parser) p = parse15.Python15ParserSingle(debug_parser)
elif version == 1.6: elif version == (1, 6):
import uncompyle6.parsers.parse16 as parse16 import uncompyle6.parsers.parse16 as parse16
if compile_mode == "exec": if compile_mode == "exec":
p = parse16.Python16Parser(debug_parser) p = parse16.Python16Parser(debug_parser)
else: else:
p = parse16.Python16ParserSingle(debug_parser) p = parse16.Python16ParserSingle(debug_parser)
elif version == 2.1: elif version == (2, 1):
import uncompyle6.parsers.parse21 as parse21 import uncompyle6.parsers.parse21 as parse21
if compile_mode == "exec": if compile_mode == "exec":
p = parse21.Python21Parser(debug_parser) p = parse21.Python21Parser(debug_parser)
else: else:
p = parse21.Python21ParserSingle(debug_parser) p = parse21.Python21ParserSingle(debug_parser)
elif version == 2.2: elif version == (2, 2):
import uncompyle6.parsers.parse22 as parse22 import uncompyle6.parsers.parse22 as parse22
if compile_mode == "exec": if compile_mode == "exec":
p = parse22.Python22Parser(debug_parser) p = parse22.Python22Parser(debug_parser)
else: else:
p = parse22.Python22ParserSingle(debug_parser) p = parse22.Python22ParserSingle(debug_parser)
elif version == 2.3: elif version == (2, 3):
import uncompyle6.parsers.parse23 as parse23 import uncompyle6.parsers.parse23 as parse23
if compile_mode == "exec": if compile_mode == "exec":
p = parse23.Python23Parser(debug_parser) p = parse23.Python23Parser(debug_parser)
else: else:
p = parse23.Python23ParserSingle(debug_parser) p = parse23.Python23ParserSingle(debug_parser)
elif version == 2.4: elif version == (2, 4):
import uncompyle6.parsers.parse24 as parse24 import uncompyle6.parsers.parse24 as parse24
if compile_mode == "exec": if compile_mode == "exec":
p = parse24.Python24Parser(debug_parser) p = parse24.Python24Parser(debug_parser)
else: else:
p = parse24.Python24ParserSingle(debug_parser) p = parse24.Python24ParserSingle(debug_parser)
elif version == 2.5: elif version == (2, 5):
import uncompyle6.parsers.parse25 as parse25 import uncompyle6.parsers.parse25 as parse25
if compile_mode == "exec": if compile_mode == "exec":
p = parse25.Python25Parser(debug_parser) p = parse25.Python25Parser(debug_parser)
else: else:
p = parse25.Python25ParserSingle(debug_parser) p = parse25.Python25ParserSingle(debug_parser)
elif version == 2.6: elif version == (2, 6):
import uncompyle6.parsers.parse26 as parse26 import uncompyle6.parsers.parse26 as parse26
if compile_mode == "exec": if compile_mode == "exec":
p = parse26.Python26Parser(debug_parser) p = parse26.Python26Parser(debug_parser)
else: else:
p = parse26.Python26ParserSingle(debug_parser) p = parse26.Python26ParserSingle(debug_parser)
elif version == 2.7: elif version == (2, 7):
import uncompyle6.parsers.parse27 as parse27 import uncompyle6.parsers.parse27 as parse27
if compile_mode == "exec": if compile_mode == "exec":
@@ -762,63 +762,63 @@ def get_python_parser(
else: else:
import uncompyle6.parsers.parse3 as parse3 import uncompyle6.parsers.parse3 as parse3
if version == 3.0: if version == (3, 0):
import uncompyle6.parsers.parse30 as parse30 import uncompyle6.parsers.parse30 as parse30
if compile_mode == "exec": if compile_mode == "exec":
p = parse30.Python30Parser(debug_parser) p = parse30.Python30Parser(debug_parser)
else: else:
p = parse30.Python30ParserSingle(debug_parser) p = parse30.Python30ParserSingle(debug_parser)
elif version == 3.1: elif version == (3, 1):
import uncompyle6.parsers.parse31 as parse31 import uncompyle6.parsers.parse31 as parse31
if compile_mode == "exec": if compile_mode == "exec":
p = parse31.Python31Parser(debug_parser) p = parse31.Python31Parser(debug_parser)
else: else:
p = parse31.Python31ParserSingle(debug_parser) p = parse31.Python31ParserSingle(debug_parser)
elif version == 3.2: elif version == (3, 2):
import uncompyle6.parsers.parse32 as parse32 import uncompyle6.parsers.parse32 as parse32
if compile_mode == "exec": if compile_mode == "exec":
p = parse32.Python32Parser(debug_parser) p = parse32.Python32Parser(debug_parser)
else: else:
p = parse32.Python32ParserSingle(debug_parser) p = parse32.Python32ParserSingle(debug_parser)
elif version == 3.3: elif version == (3, 3):
import uncompyle6.parsers.parse33 as parse33 import uncompyle6.parsers.parse33 as parse33
if compile_mode == "exec": if compile_mode == "exec":
p = parse33.Python33Parser(debug_parser) p = parse33.Python33Parser(debug_parser)
else: else:
p = parse33.Python33ParserSingle(debug_parser) p = parse33.Python33ParserSingle(debug_parser)
elif version == 3.4: elif version == (3, 4):
import uncompyle6.parsers.parse34 as parse34 import uncompyle6.parsers.parse34 as parse34
if compile_mode == "exec": if compile_mode == "exec":
p = parse34.Python34Parser(debug_parser) p = parse34.Python34Parser(debug_parser)
else: else:
p = parse34.Python34ParserSingle(debug_parser) p = parse34.Python34ParserSingle(debug_parser)
elif version == 3.5: elif version == (3, 5):
import uncompyle6.parsers.parse35 as parse35 import uncompyle6.parsers.parse35 as parse35
if compile_mode == "exec": if compile_mode == "exec":
p = parse35.Python35Parser(debug_parser) p = parse35.Python35Parser(debug_parser)
else: else:
p = parse35.Python35ParserSingle(debug_parser) p = parse35.Python35ParserSingle(debug_parser)
elif version == 3.6: elif version == (3, 6):
import uncompyle6.parsers.parse36 as parse36 import uncompyle6.parsers.parse36 as parse36
if compile_mode == "exec": if compile_mode == "exec":
p = parse36.Python36Parser(debug_parser) p = parse36.Python36Parser(debug_parser)
else: else:
p = parse36.Python36ParserSingle(debug_parser) p = parse36.Python36ParserSingle(debug_parser)
elif version == 3.7: elif version == (3, 7):
import uncompyle6.parsers.parse37 as parse37 import uncompyle6.parsers.parse37 as parse37
if compile_mode == "exec": if compile_mode == "exec":
p = parse37.Python37Parser(debug_parser) p = parse37.Python37Parser(debug_parser)
else: else:
p = parse37.Python37ParserSingle(debug_parser) p = parse37.Python37ParserSingle(debug_parser)
elif version == 3.8: elif version == (3, 8):
import uncompyle6.parsers.parse38 as parse38 import uncompyle6.parsers.parse38 as parse38
if compile_mode == "exec": if compile_mode == "exec":

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2017 by Rocky Bernstein # Copyright (c) 2016-2017, 2021 by Rocky Bernstein
""" """
Python PyPy 2.7 bytecode scanner/deparser Python PyPy 2.7 bytecode scanner/deparser
@@ -22,5 +22,5 @@ class ScannerPyPy27(scan.Scanner27):
# There are no differences in initialization between # There are no differences in initialization between
# pypy 2.7 and 2.7 # pypy 2.7 and 2.7
scan.Scanner27.__init__(self, show_asm, is_pypy=True) scan.Scanner27.__init__(self, show_asm, is_pypy=True)
self.version = 2.7 self.version = (2, 7)
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2017 by Rocky Bernstein # Copyright (c) 2017, 2021 by Rocky Bernstein
""" """
Python PyPy 3.2 decompiler scanner. Python PyPy 3.2 decompiler scanner.
@@ -18,6 +18,6 @@ class ScannerPyPy32(scan.Scanner32):
# There are no differences in initialization between # There are no differences in initialization between
# pypy 3.2 and 3.2 # pypy 3.2 and 3.2
scan.Scanner32.__init__(self, show_asm, is_pypy=True) scan.Scanner32.__init__(self, show_asm, is_pypy=True)
self.version = 3.2 self.version = (3, 2)
self.opc = opc self.opc = opc
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019-2020 by Rocky Bernstein # Copyright (c) 2019-2021 by Rocky Bernstein
""" """
Python PyPy 3.3 decompiler scanner. Python PyPy 3.3 decompiler scanner.
@@ -19,6 +19,6 @@ class ScannerPyPy33(scan.Scanner33):
# There are no differences in initialization between # There are no differences in initialization between
# pypy 3.3 and 3.3 # pypy 3.3 and 3.3
scan.Scanner33.__init__(self, show_asm, is_pypy=True) scan.Scanner33.__init__(self, show_asm, is_pypy=True)
self.version = 3.3 self.version = (3, 3)
self.opc = opc self.opc = opc
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2017, 2019 by Rocky Bernstein # Copyright (c) 2017, 2019, 2021 by Rocky Bernstein
""" """
Python PyPy 3.5 decompiler scanner. Python PyPy 3.5 decompiler scanner.
@@ -18,5 +18,5 @@ class ScannerPyPy35(scan.Scanner35):
# There are no differences in initialization between # There are no differences in initialization between
# pypy 3.5 and 3.5 # pypy 3.5 and 3.5
scan.Scanner35.__init__(self, show_asm, is_pypy=True) scan.Scanner35.__init__(self, show_asm, is_pypy=True)
self.version = 3.5 self.version = (3, 5)
return return

View File

@@ -18,5 +18,5 @@ class ScannerPyPy36(scan.Scanner36):
# There are no differences in initialization between # There are no differences in initialization between
# pypy 3.6 and 3.6 # pypy 3.6 and 3.6
scan.Scanner36.__init__(self, show_asm, is_pypy=True) scan.Scanner36.__init__(self, show_asm, is_pypy=True)
self.version = 3.6 self.version = (3, 6)
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019 by Rocky Bernstein # Copyright (c) 2019, 2021 by Rocky Bernstein
""" """
Python 1.0 bytecode decompiler massaging. Python 1.0 bytecode decompiler massaging.
@@ -22,7 +22,7 @@ class Scanner10(scan.Scanner11):
scan.Scanner11.__init__(self, show_asm) scan.Scanner11.__init__(self, show_asm)
self.opc = opcode_10 self.opc = opcode_10
self.opname = opcode_10.opname self.opname = opcode_10.opname
self.version = 1.0 self.version = (1, 0)
return return
# def ingest(self, co, classname=None, code_objects={}, show_asm=None): # def ingest(self, co, classname=None, code_objects={}, show_asm=None):

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019 by Rocky Bernstein # Copyright (c) 2019, 2021 by Rocky Bernstein
""" """
Python 1.1 bytecode decompiler massaging. Python 1.1 bytecode decompiler massaging.
@@ -22,7 +22,7 @@ class Scanner11(scan.Scanner13): # no scanner 1.2
scan.Scanner13.__init__(self, show_asm) scan.Scanner13.__init__(self, show_asm)
self.opc = opcode_11 self.opc = opcode_11
self.opname = opcode_11.opname self.opname = opcode_11.opname
self.version = 1.1 self.version = (1, 1)
return return
# def ingest(self, co, classname=None, code_objects={}, show_asm=None): # def ingest(self, co, classname=None, code_objects={}, show_asm=None):

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019 by Rocky Bernstein # Copyright (c) 2019, 2021 by Rocky Bernstein
""" """
Python 1.2 bytecode decompiler massaging. Python 1.2 bytecode decompiler massaging.
@@ -23,7 +23,7 @@ class Scanner12(scan.Scanner13):
scan.Scanner14.__init__(self, show_asm) scan.Scanner14.__init__(self, show_asm)
self.opc = opcode_11 self.opc = opcode_11
self.opname = opcode_11.opname self.opname = opcode_11.opname
self.version = 1.2 # Note: is the same as 1.1 bytecode self.version = (1, 2) # Note: is the same as 1.1 bytecode
return return
# def ingest(self, co, classname=None, code_objects={}, show_asm=None): # def ingest(self, co, classname=None, code_objects={}, show_asm=None):

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2018-2019 by Rocky Bernstein # Copyright (c) 2018-2019, 2021 by Rocky Bernstein
""" """
Python 1.3 bytecode decompiler massaging. Python 1.3 bytecode decompiler massaging.
@@ -24,7 +24,7 @@ class Scanner13(scan.Scanner14):
scan.Scanner14.__init__(self, show_asm) scan.Scanner14.__init__(self, show_asm)
self.opc = opcode_13 self.opc = opcode_13
self.opname = opcode_13.opname self.opname = opcode_13.opname
self.version = 1.3 self.version = (1, 3)
return return
# def ingest(self, co, classname=None, code_objects={}, show_asm=None): # def ingest(self, co, classname=None, code_objects={}, show_asm=None):

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2018-2019 by Rocky Bernstein # Copyright (c) 2018-2019, 2021 by Rocky Bernstein
""" """
Python 1.4 bytecode decompiler massaging. Python 1.4 bytecode decompiler massaging.
@@ -22,7 +22,7 @@ class Scanner14(scan.Scanner15):
scan.Scanner15.__init__(self, show_asm) scan.Scanner15.__init__(self, show_asm)
self.opc = opcode_14 self.opc = opcode_14
self.opname = opcode_14.opname self.opname = opcode_14.opname
self.version = 1.4 self.version = (1, 4)
self.genexpr_name = '<generator expression>' self.genexpr_name = '<generator expression>'
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2018 by Rocky Bernstein # Copyright (c) 2016-2018, 2021 by Rocky Bernstein
""" """
Python 1.5 bytecode decompiler massaging. Python 1.5 bytecode decompiler massaging.
@@ -22,7 +22,7 @@ class Scanner15(scan.Scanner21):
scan.Scanner21.__init__(self, show_asm) scan.Scanner21.__init__(self, show_asm)
self.opc = opcode_15 self.opc = opcode_15
self.opname = opcode_15.opname self.opname = opcode_15.opname
self.version = 1.5 self.version = (1, 5)
self.genexpr_name = '<generator expression>' self.genexpr_name = '<generator expression>'
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019 by Rocky Bernstein # Copyright (c) 2019, 2021 by Rocky Bernstein
""" """
Python 1.6 bytecode decompiler massaging. Python 1.6 bytecode decompiler massaging.
@@ -22,7 +22,7 @@ class Scanner16(scan.Scanner21):
scan.Scanner21.__init__(self, show_asm) scan.Scanner21.__init__(self, show_asm)
self.opc = opcode_16 self.opc = opcode_16
self.opname = opcode_16.opname self.opname = opcode_16.opname
self.version = 1.6 self.version = (1, 6)
self.genexpr_name = '<generator expression>' self.genexpr_name = '<generator expression>'
return return

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2018 by Rocky Bernstein # Copyright (c) 2016-2018, 2021 by Rocky Bernstein
""" """
Python 2.1 bytecode massaging. Python 2.1 bytecode massaging.
@@ -22,6 +22,6 @@ class Scanner21(scan.Scanner22):
scan.Scanner22.__init__(self, show_asm) scan.Scanner22.__init__(self, show_asm)
self.opc = opcode_21 self.opc = opcode_21
self.opname = opcode_21.opname self.opname = opcode_21.opname
self.version = 2.1 self.version = (2, 1)
self.genexpr_name = '<generator expression>' self.genexpr_name = '<generator expression>'
return return

View File

@@ -22,7 +22,7 @@ class Scanner22(scan.Scanner23):
scan.Scanner23.__init__(self, show_asm) scan.Scanner23.__init__(self, show_asm)
self.opc = opcode_22 self.opc = opcode_22
self.opname = opcode_22.opname self.opname = opcode_22.opname
self.version = 2.2 self.version = (2, 2)
self.genexpr_name = '<generator expression>' self.genexpr_name = '<generator expression>'
self.parent_ingest = self.ingest self.parent_ingest = self.ingest
self.ingest = self.ingest22 self.ingest = self.ingest22

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2015-2018 by Rocky Bernstein # Copyright (c) 2015-2018, 2021 by Rocky Bernstein
""" """
Python 2.5 bytecode massaging. Python 2.5 bytecode massaging.
@@ -24,5 +24,5 @@ class Scanner25(scan.Scanner26):
self.opc = opcode_25 self.opc = opcode_25
self.opname = opcode_25.opname self.opname = opcode_25.opname
scan.Scanner26.__init__(self, show_asm) scan.Scanner26.__init__(self, show_asm)
self.version = 2.5 self.version = (2, 5)
return return

View File

@@ -213,13 +213,13 @@ class Scanner26(scan.Scanner2):
# CE - Hack for >= 2.5 # CE - Hack for >= 2.5
# Now all values loaded via LOAD_CLOSURE are packed into # Now all values loaded via LOAD_CLOSURE are packed into
# a tuple before calling MAKE_CLOSURE. # a tuple before calling MAKE_CLOSURE.
if (self.version >= 2.5 and op == self.opc.BUILD_TUPLE and if (self.version >= (2, 5) and op == self.opc.BUILD_TUPLE and
self.code[self.prev[offset]] == self.opc.LOAD_CLOSURE): self.code[self.prev[offset]] == self.opc.LOAD_CLOSURE):
continue continue
else: else:
op_name = '%s_%d' % (op_name, oparg) op_name = '%s_%d' % (op_name, oparg)
customize[op_name] = oparg customize[op_name] = oparg
elif self.version > 2.0 and op == self.opc.CONTINUE_LOOP: elif self.version > (2, 0) and op == self.opc.CONTINUE_LOOP:
customize[op_name] = 0 customize[op_name] = 0
elif op_name in """ elif op_name in """
CONTINUE_LOOP EXEC_STMT LOAD_LISTCOMP LOAD_SETCOMP CONTINUE_LOOP EXEC_STMT LOAD_LISTCOMP LOAD_SETCOMP

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2017, 2020 by Rocky Bernstein # Copyright (c) 2016-2017, 2020-2021 by Rocky Bernstein
""" """
Python 3.0 bytecode scanner/deparser Python 3.0 bytecode scanner/deparser
@@ -20,7 +20,7 @@ from uncompyle6.scanners.scanner3 import Scanner3
class Scanner30(Scanner3): class Scanner30(Scanner3):
def __init__(self, show_asm=None, is_pypy=False): def __init__(self, show_asm=None, is_pypy=False):
Scanner3.__init__(self, 3.0, show_asm, is_pypy) Scanner3.__init__(self, (3, 0), show_asm, is_pypy)
return return
pass pass
@@ -473,7 +473,7 @@ class Scanner30(Scanner3):
if __name__ == "__main__": if __name__ == "__main__":
from uncompyle6 import PYTHON_VERSION from uncompyle6 import PYTHON_VERSION
if PYTHON_VERSION == 3.0: if PYTHON_VERSION == (3, 0):
import inspect import inspect
co = inspect.currentframe().f_code co = inspect.currentframe().f_code

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2017 by Rocky Bernstein # Copyright (c) 2016-2017, 2021 by Rocky Bernstein
""" """
Python 3.1 bytecode scanner/deparser Python 3.1 bytecode scanner/deparser
@@ -16,13 +16,13 @@ from uncompyle6.scanners.scanner3 import Scanner3
class Scanner31(Scanner3): class Scanner31(Scanner3):
def __init__(self, show_asm=None, is_pypy=False): def __init__(self, show_asm=None, is_pypy=False):
Scanner3.__init__(self, 3.1, show_asm, is_pypy) Scanner3.__init__(self, (3, 1), show_asm, is_pypy)
return return
pass pass
if __name__ == "__main__": if __name__ == "__main__":
from uncompyle6 import PYTHON_VERSION from uncompyle6 import PYTHON_VERSION
if PYTHON_VERSION == 3.1: if PYTHON_VERSION == (3, 1):
import inspect import inspect
co = inspect.currentframe().f_code co = inspect.currentframe().f_code
tokens, customize = Scanner31().ingest(co) tokens, customize = Scanner31().ingest(co)

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2015-2017 by Rocky Bernstein # Copyright (c) 2015-2017, 2021 by Rocky Bernstein
""" """
Python 3.2 bytecode decompiler scanner. Python 3.2 bytecode decompiler scanner.
@@ -19,7 +19,7 @@ from uncompyle6.scanners.scanner3 import Scanner3
class Scanner32(Scanner3): class Scanner32(Scanner3):
def __init__(self, show_asm=None, is_pypy=False): def __init__(self, show_asm=None, is_pypy=False):
Scanner3.__init__(self, 3.2, show_asm, is_pypy) Scanner3.__init__(self, (3, 2), show_asm, is_pypy)
return return
pass pass

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2015-2019 by Rocky Bernstein # Copyright (c) 2015-2019, 2021 by Rocky Bernstein
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@ from uncompyle6.scanners.scanner3 import Scanner3
class Scanner33(Scanner3): class Scanner33(Scanner3):
def __init__(self, show_asm=False, is_pypy=False): def __init__(self, show_asm=False, is_pypy=False):
Scanner3.__init__(self, 3.3, show_asm) Scanner3.__init__(self, (3, 3), show_asm)
return return
pass pass

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2017 by Rocky Bernstein # Copyright (c) 2017, 2021 by Rocky Bernstein
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ JUMP_OPS = opc.JUMP_OPS
class Scanner35(Scanner3): class Scanner35(Scanner3):
def __init__(self, show_asm=None, is_pypy=False): def __init__(self, show_asm=None, is_pypy=False):
Scanner3.__init__(self, 3.5, show_asm, is_pypy) Scanner3.__init__(self, (3, 5), show_asm, is_pypy)
return return
pass pass

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2018 by Rocky Bernstein # Copyright (c) 2016-2018, 2021 by Rocky Bernstein
""" """
Python 3.6 bytecode decompiler scanner Python 3.6 bytecode decompiler scanner
@@ -20,7 +20,7 @@ JUMP_OPS = opc.JUMP_OPS
class Scanner36(Scanner3): class Scanner36(Scanner3):
def __init__(self, show_asm=None, is_pypy=False): def __init__(self, show_asm=None, is_pypy=False):
Scanner3.__init__(self, 3.6, show_asm, is_pypy) Scanner3.__init__(self, (3, 6), show_asm, is_pypy)
return return
def ingest(self, co, classname=None, code_objects={}, show_asm=None): def ingest(self, co, classname=None, code_objects={}, show_asm=None):

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2019 by Rocky Bernstein # Copyright (c) 2019, 2021 by Rocky Bernstein
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ JUMP_OPs = opc.JUMP_OPS
class Scanner39(Scanner38): class Scanner39(Scanner38):
def __init__(self, show_asm=None): def __init__(self, show_asm=None):
Scanner37Base.__init__(self, 3.9, show_asm) Scanner37Base.__init__(self, (3, 9), show_asm)
return return
pass pass

View File

@@ -149,7 +149,7 @@ def print_docstring(self, indent, docstring):
# Must be unicode in Python2 # Must be unicode in Python2
self.write('u') self.write('u')
docstring = repr(docstring.expandtabs())[2:-1] docstring = repr(docstring.expandtabs())[2:-1]
elif PYTHON3 and 2.4 <= self.version <= 2.7: elif PYTHON3 and (2, 4) <= self.version[:2] <= (2, 7):
try: try:
repr(docstring.expandtabs())[1:-1].encode("ascii") repr(docstring.expandtabs())[1:-1].encode("ascii")
except UnicodeEncodeError: except UnicodeEncodeError:

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2015-2020 by Rocky Bernstein # Copyright (c) 2015-2021 by Rocky Bernstein
# Copyright (c) 2000-2002 by hartmut Goebel <h.goebel@crazy-compilers.com> # Copyright (c) 2000-2002 by hartmut Goebel <h.goebel@crazy-compilers.com>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@@ -192,7 +192,7 @@ def make_function2(self, node, is_lambda, nested=1, code_node=None):
) )
# Python 2 doesn't support the "nonlocal" statement # Python 2 doesn't support the "nonlocal" statement
assert self.version >= 3.0 or not nonlocals assert self.version >= (3, 0) or not nonlocals
for g in sorted((all_globals & self.mod_globs) | globals): for g in sorted((all_globals & self.mod_globs) | globals):
self.println(self.indent, "global ", g) self.println(self.indent, "global ", g)