From 915ff5e59c156788eb40d53447634c7cd1638a12 Mon Sep 17 00:00:00 2001 From: rocky Date: Mon, 15 Jul 2024 13:53:36 -0400 Subject: [PATCH] Remove pre 3.5 BUILD_MAP customiztion... it is not needed here. --- uncompyle6/scanners/scanner3.py | 125 +++----------------------------- 1 file changed, 12 insertions(+), 113 deletions(-) diff --git a/uncompyle6/scanners/scanner3.py b/uncompyle6/scanners/scanner3.py index 41d51efa..b7d35cad 100644 --- a/uncompyle6/scanners/scanner3.py +++ b/uncompyle6/scanners/scanner3.py @@ -298,6 +298,7 @@ class Scanner3(Scanner): ) return new_tokens + # Move to scanner35? def bound_map_from_inst_35( self, insts: list, next_tokens: list, t: Token, i: int ) -> Optional[list]: @@ -389,92 +390,6 @@ class Scanner3(Scanner): ) return new_tokens - def bound_map_from_inst_pre35( - self, insts: list, next_tokens: list, t: Token, i: int - ): - """ - Try to a sequence of instruction that ends with a BUILD_MAP into - a sequence that can be parsed much faster, but inserting the - token boundary at the beginning of the sequence. - """ - count = t.attr - assert isinstance(count, int) - - # For small lists don't bother - if count < 10: - return None - - # Older Python BUILD_MAP argument's count is a - # key and value pair and STORE_MAP. So it is multiplied by three. - collection_end = i + 1 + count * 3 - - for j in range(i + 1, collection_end, 3): - if insts[j].opname not in ("LOAD_CONST",): - return None - if insts[j + 1].opname not in ("LOAD_CONST",): - return None - if insts[j + 2].opname not in ("STORE_MAP",): - return None - - collection_enum = CONST_COLLECTIONS.index("CONST_MAP") - - new_tokens = next_tokens[:i] - start_offset = insts[i].offset - new_tokens.append( - Token( - opname="COLLECTION_START", - attr=collection_enum, - pattr="CONST_MAP", - offset=f"{start_offset}_0", - linestart=insts[i].starts_line, - has_arg=True, - has_extended_arg=False, - opc=self.opc, - optype="pseudo", - ) - ) - for j in range(i + 1, collection_end, 3): - new_tokens.append( - Token( - opname="ADD_KEY", - attr=insts[j + 1].argval, - pattr=insts[j + 1].argrepr, - offset=insts[j + 1].offset, - linestart=insts[j + 1].starts_line, - has_arg=True, - has_extended_arg=False, - opc=self.opc, - optype="pseudo", - ) - ) - new_tokens.append( - Token( - opname="ADD_VALUE", - attr=insts[j].argval, - pattr=insts[j].argrepr, - offset=insts[j].offset, - linestart=insts[j].starts_line, - has_arg=True, - has_extended_arg=False, - opc=self.opc, - optype="pseudo", - ) - ) - new_tokens.append( - Token( - opname="BUILD_DICT_OLDER", - attr=t.attr, - pattr=t.pattr, - offset=t.offset, - linestart=t.linestart, - has_arg=t.has_arg, - has_extended_arg=False, - opc=t.opc, - optype="pseudo", - ) - ) - return new_tokens - def ingest( self, co, classname=None, code_objects={}, show_asm=None ) -> Tuple[list, dict]: @@ -578,6 +493,7 @@ class Scanner3(Scanner): last_op_was_break = False new_tokens = [] + skip_end_offset = None for i, inst in enumerate(self.insts): @@ -623,35 +539,18 @@ class Scanner3(Scanner): continue elif opname in ("BUILD_MAP",): - bound_map_from_insts_fn = ( - self.bound_map_from_inst_35 - if self.version >= (3, 5) - else self.bound_map_from_inst_pre35 - ) - try_tokens = bound_map_from_insts_fn( - self.insts, - new_tokens, - t, - i, - ) - if try_tokens is not None: - if self.version < (3, 5): - assert try_tokens[-1] == "BUILD_DICT_OLDER" - prev_offset = inst.offset - for j in range(i, len(self.insts)): - if self.insts[j].opname == "STORE_NAME": - new_tokens = try_tokens - skip_end_offset = prev_offset - # Set a hacky sentinal to indicate skipping to the - # next instruction - opname = "EXTENDED_ARG" - break - prev_offset = self.insts[j].offset - pass - pass - else: + if self.version >= (3, 5): + try_tokens = self.bound_map_from_inst_35( + self.insts, + new_tokens, + t, + i, + ) + if try_tokens is not None: new_tokens = try_tokens continue + pass + pass pass argval = inst.argval