You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 08:49:51 +08:00
Handle 3.3 MAKE_FUNCTION annotation args properly
This commit is contained in:
@@ -35,22 +35,19 @@ Finally we save token information.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import sys
|
||||
from typing import Optional, Tuple
|
||||
|
||||
from xdis import iscode, instruction_size, Instruction
|
||||
from xdis.bytecode import _get_const_info
|
||||
|
||||
from uncompyle6.scanners.tok import Token
|
||||
from uncompyle6.scanner import parse_fn_counts_30_35
|
||||
from uncompyle6.util import get_code_name
|
||||
import xdis
|
||||
|
||||
# Get all the opcodes into globals
|
||||
import xdis.opcodes.opcode_33 as op3
|
||||
from xdis import Instruction, instruction_size, iscode
|
||||
from xdis.bytecode import _get_const_info
|
||||
|
||||
from uncompyle6.scanner import Scanner, CONST_COLLECTIONS
|
||||
|
||||
import sys
|
||||
from uncompyle6.scanner import CONST_COLLECTIONS, Scanner, parse_fn_counts_30_35
|
||||
from uncompyle6.scanners.tok import Token
|
||||
from uncompyle6.util import get_code_name
|
||||
|
||||
intern = sys.intern
|
||||
|
||||
@@ -485,6 +482,7 @@ class Scanner3(Scanner):
|
||||
|
||||
last_op_was_break = False
|
||||
new_tokens = []
|
||||
operand_value = 0
|
||||
|
||||
for i, inst in enumerate(self.insts):
|
||||
opname = inst.opname
|
||||
@@ -536,10 +534,11 @@ class Scanner3(Scanner):
|
||||
op = inst.opcode
|
||||
|
||||
if opname == "EXTENDED_ARG":
|
||||
# FIXME: The EXTENDED_ARG is used to signal annotation
|
||||
# parameters
|
||||
if i + 1 < n and self.insts[i + 1].opcode != self.opc.MAKE_FUNCTION:
|
||||
if i + 1 < n:
|
||||
operand_value = argval << 16
|
||||
continue
|
||||
else:
|
||||
operand_value = 0
|
||||
|
||||
if inst.offset in jump_targets:
|
||||
jump_idx = 0
|
||||
@@ -646,7 +645,7 @@ class Scanner3(Scanner):
|
||||
attr = attr[:4] # remove last value: attr[5] == False
|
||||
else:
|
||||
pos_args, name_pair_args, annotate_args = parse_fn_counts_30_35(
|
||||
inst.argval
|
||||
inst.argval + operand_value
|
||||
)
|
||||
|
||||
pattr = f"{pos_args} positional, {name_pair_args} keyword only, {annotate_args} annotated"
|
||||
|
Reference in New Issue
Block a user