From daab1e8610f1cbe4a22a63f503723556c66c3f9e Mon Sep 17 00:00:00 2001 From: rocky Date: Mon, 9 Dec 2019 12:20:00 -0500 Subject: [PATCH] Start to tolerate 3.9 (in pydisassemble) --- setup.py | 4 +-- uncompyle6/scanner.py | 1 + uncompyle6/scanners/scanner38.py | 9 +++--- uncompyle6/scanners/scanner39.py | 55 ++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 uncompyle6/scanners/scanner39.py diff --git a/setup.py b/setup.py index 4af1f80f..060b692b 100755 --- a/setup.py +++ b/setup.py @@ -4,8 +4,8 @@ import sys """Setup script for the 'uncompyle6' distribution.""" SYS_VERSION = sys.version_info[0:2] -if not ((2, 6) <= SYS_VERSION <= (3, 8)): - mess = "Python Release 2.6 .. 3.8 are supported in this code branch." +if not ((2, 6) <= SYS_VERSION <= (3, 9)): + mess = "Python Release 2.6 .. 3.9 are supported in this code branch." if ((2, 4) <= SYS_VERSION <= (2, 7)): mess += ("\nFor your Python, version %s, use the python-2.4 code/branch." % sys.version[0:3]) diff --git a/uncompyle6/scanner.py b/uncompyle6/scanner.py index 4a88245d..bf767f9d 100755 --- a/uncompyle6/scanner.py +++ b/uncompyle6/scanner.py @@ -60,6 +60,7 @@ PYTHON_VERSIONS = frozenset( 3.6, 3.7, 3.8, + 3.9, ) ) diff --git a/uncompyle6/scanners/scanner38.py b/uncompyle6/scanners/scanner38.py index 31512fe7..7477e187 100644 --- a/uncompyle6/scanners/scanner38.py +++ b/uncompyle6/scanners/scanner38.py @@ -12,14 +12,13 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -""" -Python 3.8 bytecode decompiler scanner +"""Python 3.8 bytecode decompiler scanner -Does some additional massaging of xdis-disassembled instructions to -make things easier for decompilation. +Does some token massaging of xdis-disassembled instructions to make +things easier for decompilation. This sets up opcodes Python's 3.8 and calls a generalized -scanner routine for Python 3. +scanner routine for Python 3.7 and up. """ from uncompyle6.scanners.scanner37 import Scanner37 diff --git a/uncompyle6/scanners/scanner39.py b/uncompyle6/scanners/scanner39.py new file mode 100644 index 00000000..c62bbe3d --- /dev/null +++ b/uncompyle6/scanners/scanner39.py @@ -0,0 +1,55 @@ +# Copyright (c) 2019 by Rocky Bernstein +# +# 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 +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +"""Python 3.9 bytecode decompiler scanner. + +Does some token massaging of xdis-disassembled instructions to make +things easier for decompilation. + +This sets up opcodes Python's 3.9 and calls a generalized +scanner routine for Python 3.7 and up. +""" + +from uncompyle6.scanners.scanner38 import Scanner38 +from uncompyle6.scanners.scanner37base import Scanner37Base + +# bytecode verification, verify(), uses JUMP_OPs from here +from xdis.opcodes import opcode_38 as opc + +# bytecode verification, verify(), uses JUMP_OPS from here +JUMP_OPs = opc.JUMP_OPS + + +class Scanner39(Scanner38): + def __init__(self, show_asm=None): + Scanner37Base.__init__(self, 3.9, show_asm) + return + + pass + + +if __name__ == "__main__": + from uncompyle6 import PYTHON_VERSION + + if PYTHON_VERSION == 3.9: + import inspect + + co = inspect.currentframe().f_code + tokens, customize = Scanner39().ingest(co) + for t in tokens: + print(t.format()) + pass + else: + print("Need to be Python 3.9 to demo; I am %s." % + PYTHON_VERSION)