diff --git a/uncompyle6/scanners/scanner26.py b/uncompyle6/scanners/scanner26.py index 9c77476c..35ff5ff6 100755 --- a/uncompyle6/scanners/scanner26.py +++ b/uncompyle6/scanners/scanner26.py @@ -48,8 +48,7 @@ class Scanner26(scan.Scanner2): return def ingest(self, co, classname=None, code_objects={}, show_asm=None): - """ - Create "tokens" the bytecode of an Python code object. Largely these + """Create "tokens" the bytecode of an Python code object. Largely these are the opcode name, but in some cases that has been modified to make parsing easier. returning a list of uncompyle6 Token's. @@ -57,14 +56,17 @@ class Scanner26(scan.Scanner2): Some transformations are made to assist the deparsing grammar: - various types of LOAD_CONST's are categorized in terms of what they load - COME_FROM instructions are added to assist parsing control structures - - operands with stack argument counts or flag masks are appended to the opcode name, e.g.: + - operands with stack argument counts or flag masks are appended to the + opcode name, e.g.: * BUILD_LIST, BUILD_SET - * MAKE_FUNCTION and FUNCTION_CALLS append the number of positional arguments + * MAKE_FUNCTION and FUNCTION_CALLS append the number of positional + arguments - EXTENDED_ARGS instructions are removed - Also, when we encounter certain tokens, we add them to a set which will cause custom - grammar rules. Specifically, variable arg tokens like MAKE_FUNCTION or BUILD_LIST - cause specific rules for the specific number of arguments they take. + Also, when we encounter certain tokens, we add them to a set + which will cause custom grammar rules. Specifically, variable + arg tokens like MAKE_FUNCTION or BUILD_LIST cause specific + rules for the specific number of arguments they take. """ if not show_asm: diff --git a/uncompyle6/scanners/scanner37base.py b/uncompyle6/scanners/scanner37base.py index bc27e41a..aa3e934f 100644 --- a/uncompyle6/scanners/scanner37base.py +++ b/uncompyle6/scanners/scanner37base.py @@ -221,7 +221,7 @@ class Scanner37Base(Scanner): if show_asm in ("both", "before"): print("\n# ---- before tokenization:") - bytecode.disassemble_bytes( + self.insts = bytecode.disassemble_bytes( co.co_code, varnames=co.co_varnames, names=co.co_names, @@ -229,6 +229,9 @@ class Scanner37Base(Scanner): cells=bytecode._cell_names, linestarts=bytecode._linestarts, asm_format="extended", + filename=co.co_filename, + show_source=True, + first_line_number=co.co_firstlineno, ) # "customize" is in the process of going away here @@ -302,6 +305,8 @@ class Scanner37Base(Scanner): inst.starts_line, inst.is_jump_target, inst.has_extended_arg, + None, + None, ) # Get jump targets @@ -348,9 +353,9 @@ class Scanner37Base(Scanner): j = tokens_append( j, Token( - come_from_name, - jump_offset, - repr(jump_offset), + opname=come_from_name, + attr=jump_offset, + pattr=repr(jump_offset), offset="%s_%s" % (inst.offset, jump_idx), has_arg=True, opc=self.opc, diff --git a/uncompyle6/util.py b/uncompyle6/util.py index 79b4fbe6..129e7666 100644 --- a/uncompyle6/util.py +++ b/uncompyle6/util.py @@ -3,7 +3,7 @@ # More could be done here though. from math import copysign -from xdis.codetype import UnicodeForPython3 +from xdis.cross_types import UnicodeForPython3 from xdis.version_info import PYTHON_VERSION_TRIPLE def get_code_name(code) -> str: