You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 09:22:40 +08:00
Correct kw+pos args semantics on 3.3
Sync fragment make_function code
This commit is contained in:
BIN
test/bytecode_3.3/10_kw+pos_args-bug.pyc
Normal file
BIN
test/bytecode_3.3/10_kw+pos_args-bug.pyc
Normal file
Binary file not shown.
@@ -1429,17 +1429,26 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
else:
|
else:
|
||||||
return name
|
return name
|
||||||
|
|
||||||
# node[-1] == MAKE_FUNCTION_n
|
# MAKE_FUNCTION_... or MAKE_CLOSURE_...
|
||||||
|
assert node[-1].type.startswith('MAKE_')
|
||||||
|
|
||||||
args_node = node[-1]
|
args_node = node[-1]
|
||||||
if isinstance(args_node.attr, tuple):
|
if isinstance(args_node.attr, tuple):
|
||||||
|
if self.version == 3.3:
|
||||||
|
# positional args are after kwargs
|
||||||
|
defparams = node[1:args_node.attr[0]+1]
|
||||||
|
else:
|
||||||
|
# positional args are before kwargs
|
||||||
defparams = node[:args_node.attr[0]]
|
defparams = node[:args_node.attr[0]]
|
||||||
kw_args, annotate_args = args_node.attr
|
pos_aargs, kw_args, annotate_args = args_node.attr
|
||||||
else:
|
else:
|
||||||
defparams = node[:args_node.attr]
|
defparams = node[:args_node.attr]
|
||||||
kw_args = (0, 0)
|
kw_args, annotate_args = (0, 0)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
if self.version > 3.0 and isLambda and iscode(node[-3].attr):
|
||||||
|
code = node[-3].attr
|
||||||
|
else:
|
||||||
code = node[code_index].attr
|
code = node[code_index].attr
|
||||||
|
|
||||||
assert iscode(code)
|
assert iscode(code)
|
||||||
|
@@ -1697,10 +1697,16 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
else:
|
else:
|
||||||
return name
|
return name
|
||||||
|
|
||||||
# node[-1] == MAKE_FUNCTION_n
|
# MAKE_FUNCTION_... or MAKE_CLOSURE_...
|
||||||
|
assert node[-1].type.startswith('MAKE_')
|
||||||
|
|
||||||
args_node = node[-1]
|
args_node = node[-1]
|
||||||
if isinstance(args_node.attr, tuple):
|
if isinstance(args_node.attr, tuple):
|
||||||
|
if self.version == 3.3:
|
||||||
|
# positional args are after kwargs
|
||||||
|
defparams = node[1:args_node.attr[0]+1]
|
||||||
|
else:
|
||||||
|
# positional args are before kwargs
|
||||||
defparams = node[:args_node.attr[0]]
|
defparams = node[:args_node.attr[0]]
|
||||||
pos_args, kw_args, annotate_args = args_node.attr
|
pos_args, kw_args, annotate_args = args_node.attr
|
||||||
else:
|
else:
|
||||||
|
Reference in New Issue
Block a user