You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Fix handling py3 annotation args + defparam comma issue
This commit is contained in:
@@ -1016,26 +1016,48 @@ class Python3Parser(PythonParser):
|
||||
|
||||
# Note order of kwargs and pos args changed between 3.3-3.4
|
||||
if self.version <= 3.2:
|
||||
rule = "mkfunc ::= %s%s%sload_closure LOAD_CODE %s" % (
|
||||
kwargs_str,
|
||||
"expr " * args_pos,
|
||||
"expr " * annotate_args,
|
||||
opname,
|
||||
)
|
||||
if annotate_args > 0:
|
||||
rule = "mkfunc_annotate ::= %s%s%sannotate_tuple load_closure LOAD_CODE %s" % (
|
||||
kwargs_str,
|
||||
"pos_arg " * args_pos,
|
||||
"annotate_arg " * (annotate_args - 1),
|
||||
opname,
|
||||
)
|
||||
else:
|
||||
rule = "mkfunc ::= %s%sload_closure LOAD_CODE %s" % (
|
||||
kwargs_str,
|
||||
"pos_arg " * args_pos,
|
||||
opname,
|
||||
)
|
||||
elif self.version == 3.3:
|
||||
rule = "mkfunc ::= %s%s%sload_closure LOAD_CODE LOAD_STR %s" % (
|
||||
kwargs_str,
|
||||
"expr " * args_pos,
|
||||
"expr " * annotate_args,
|
||||
opname,
|
||||
)
|
||||
if annotate_args > 0:
|
||||
rule = "mkfunc_annotate ::= %s%s%sannotate_tuple load_closure LOAD_CODE LOAD_STR %s" % (
|
||||
kwargs_str,
|
||||
"pos_arg " * args_pos,
|
||||
"annotate_arg " * (annotate_args - 1),
|
||||
opname,
|
||||
)
|
||||
else:
|
||||
rule = "mkfunc ::= %s%sload_closure LOAD_CODE LOAD_STR %s" % (
|
||||
kwargs_str,
|
||||
"pos_arg " * args_pos,
|
||||
opname,
|
||||
)
|
||||
|
||||
elif self.version >= 3.4:
|
||||
rule = "mkfunc ::= %s%s%s load_closure LOAD_CODE LOAD_STR %s" % (
|
||||
"expr " * args_pos,
|
||||
kwargs_str,
|
||||
"expr " * annotate_args,
|
||||
opname,
|
||||
)
|
||||
if annotate_args > 0:
|
||||
rule = "mkfunc_annotate ::= %s%s%sannotate_tuple load_closure LOAD_CODE LOAD_STR %s" % (
|
||||
"pos_arg " * args_pos,
|
||||
kwargs_str,
|
||||
"annotate_arg " * (annotate_args - 1),
|
||||
opname,
|
||||
)
|
||||
else:
|
||||
rule = "mkfunc ::= %s%s load_closure LOAD_CODE LOAD_STR %s" % (
|
||||
"pos_arg " * args_pos,
|
||||
kwargs_str,
|
||||
opname,
|
||||
)
|
||||
|
||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||
|
||||
|
@@ -255,12 +255,17 @@ def customize_for_version3(self, version):
|
||||
|
||||
def n_mkfunc_annotate(node):
|
||||
|
||||
if self.version >= 3.3 or node[-2] == 'kwargs':
|
||||
# Handling EXTENDED_ARG before MAKE_FUNCTION ...
|
||||
i = -1 if node[-2] == "EXTENDED_ARG" else 0
|
||||
|
||||
if self.version <= 3.2:
|
||||
code = node[-2+i]
|
||||
elif self.version >= 3.3 or node[-2] == 'kwargs':
|
||||
# LOAD_CONST code object ..
|
||||
# LOAD_CONST 'x0' if >= 3.3
|
||||
# EXTENDED_ARG
|
||||
# MAKE_FUNCTION ..
|
||||
code = node[-4]
|
||||
code = node[-3+i]
|
||||
elif node[-3] == 'expr':
|
||||
code = node[-3][0]
|
||||
else:
|
||||
|
@@ -73,7 +73,7 @@ def make_function3_annotate(self, node, is_lambda, nested=1,
|
||||
i = -1
|
||||
j = annotate_last-1
|
||||
l = -len(node)
|
||||
while j >= l and node[j].kind in ('annotate_arg' 'annotate_tuple'):
|
||||
while j >= l and node[j].kind in ('annotate_arg', 'annotate_tuple'):
|
||||
annotate_args[annotate_tup[i]] = node[j][0]
|
||||
i -= 1
|
||||
j -= 1
|
||||
@@ -786,6 +786,7 @@ def make_function3(self, node, is_lambda, nested=1, code_node=None):
|
||||
if flag:
|
||||
kw_args[i] = "%s" % kwargs[i]
|
||||
self.write(', '.join(kw_args))
|
||||
ends_in_comma = False
|
||||
elif self.version >= 3.6:
|
||||
# argc = node[-1].attr
|
||||
# co = node[-3].attr
|
||||
|
Reference in New Issue
Block a user