You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-02 16:44:46 +08:00
BIN
test/bytecode_3.6/03_fn_defaults.pyc
Normal file
BIN
test/bytecode_3.6/03_fn_defaults.pyc
Normal file
Binary file not shown.
9
test/simple_source/bug36/03_fn_defaults.py
Normal file
9
test/simple_source/bug36/03_fn_defaults.py
Normal file
@@ -0,0 +1,9 @@
|
||||
# Python 3.6 changes, yet again, the way deafult pairs are handled
|
||||
def foo1(bar, baz=1):
|
||||
return 1
|
||||
def foo2(bar, baz, qux=1):
|
||||
return 2
|
||||
def foo3(bar, baz=1, qux=2):
|
||||
return 3
|
||||
def foo4(bar, baz, qux=1, quux=2):
|
||||
return 4
|
@@ -481,7 +481,10 @@ def make_function3(self, node, is_lambda, nested=1, codeNode=None):
|
||||
- handle format tuple parameters
|
||||
"""
|
||||
if default:
|
||||
value = self.traverse(default, indent='')
|
||||
if self.version >= 3.6:
|
||||
value = default
|
||||
else:
|
||||
value = self.traverse(default, indent='')
|
||||
maybe_show_ast_param_default(self.showast, name, value)
|
||||
result = '%s=%s' % (name, value)
|
||||
if result[-2:] == '= ': # default was 'LOAD_CONST None'
|
||||
@@ -517,12 +520,17 @@ def make_function3(self, node, is_lambda, nested=1, codeNode=None):
|
||||
defparams = node[:args_node.attr]
|
||||
else:
|
||||
default, kw, annotate, closure = args_node.attr
|
||||
# FIXME: start here for Python 3.6 and above:
|
||||
defparams = []
|
||||
# if default:
|
||||
# defparams = node[-(2 + kw + annotate + closure)]
|
||||
# else:
|
||||
# defparams = []
|
||||
if default:
|
||||
assert node[0] == 'expr', "expecting mkfunc default node to be an expr"
|
||||
expr_node = node[0]
|
||||
if (expr_node[0] == 'LOAD_CONST' and
|
||||
isinstance(expr_node[0].attr, tuple)):
|
||||
defparams = list(expr_node[0].attr)
|
||||
elif expr_node[0] == 'list':
|
||||
defparams = [self.traverse(n, indent='') for n in expr_node[0][:-1]]
|
||||
else:
|
||||
defparams = []
|
||||
# FIXME: handle kw, annotate and closure
|
||||
|
||||
kw_args = 0
|
||||
pass
|
||||
@@ -542,7 +550,7 @@ def make_function3(self, node, is_lambda, nested=1, codeNode=None):
|
||||
paramnames = list(code.co_varnames[:argc])
|
||||
|
||||
# defaults are for last n parameters, thus reverse
|
||||
if not 3.0 <= self.version <= 3.1:
|
||||
if not 3.0 <= self.version <= 3.1 or self.version >= 3.6:
|
||||
paramnames.reverse(); defparams.reverse()
|
||||
|
||||
try:
|
||||
@@ -562,7 +570,7 @@ def make_function3(self, node, is_lambda, nested=1, codeNode=None):
|
||||
params = [build_param(ast, name, d) for
|
||||
name, d in zip_longest(paramnames, defparams, fillvalue=None)]
|
||||
|
||||
if not 3.0 <= self.version <= 3.1:
|
||||
if not 3.0 <= self.version <= 3.1 or self.version >= 3.6:
|
||||
params.reverse() # back to correct order
|
||||
|
||||
if code_has_star_arg(code):
|
||||
|
Reference in New Issue
Block a user