You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 08:49:51 +08:00
Python 3.0-3.2 *args processing
This commit is contained in:
@@ -619,7 +619,7 @@ class Python3Parser(PythonParser):
|
|||||||
# FIXME: kwarg processing is missing here.
|
# FIXME: kwarg processing is missing here.
|
||||||
# Note order of kwargs and pos args changed between 3.3-3.4
|
# Note order of kwargs and pos args changed between 3.3-3.4
|
||||||
if self.version <= 3.2:
|
if self.version <= 3.2:
|
||||||
rule = ('mkfunc ::= %sload_closure LOAD_CONST kwargs %s'
|
rule = ('mkfunc ::= kwargs %sload_closure LOAD_CONST kwargs %s'
|
||||||
% ('expr ' * args_pos, opname))
|
% ('expr ' * args_pos, opname))
|
||||||
elif self.version == 3.3:
|
elif self.version == 3.3:
|
||||||
rule = ('mkfunc ::= kwargs %sload_closure LOAD_CONST LOAD_CONST %s'
|
rule = ('mkfunc ::= kwargs %sload_closure LOAD_CONST LOAD_CONST %s'
|
||||||
|
@@ -2002,7 +2002,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
|
|
||||||
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:
|
if self.version <= 3.3:
|
||||||
# positional args are after kwargs
|
# positional args are after kwargs
|
||||||
defparams = node[1:args_node.attr[0]+1]
|
defparams = node[1:args_node.attr[0]+1]
|
||||||
else:
|
else:
|
||||||
@@ -2049,6 +2049,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
kw_pairs = args_node.attr[1] if self.version >= 3.0 else 0
|
kw_pairs = args_node.attr[1] if self.version >= 3.0 else 0
|
||||||
|
indent = self.indent
|
||||||
|
|
||||||
# build parameters
|
# build parameters
|
||||||
if not 3.0 <= self.version <= 3.2:
|
if not 3.0 <= self.version <= 3.2:
|
||||||
@@ -2064,8 +2065,6 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
argc += 1
|
argc += 1
|
||||||
|
|
||||||
# dump parameter list (with default values)
|
# dump parameter list (with default values)
|
||||||
indent = self.indent
|
|
||||||
|
|
||||||
if isLambda:
|
if isLambda:
|
||||||
self.write("lambda ", ", ".join(params))
|
self.write("lambda ", ", ".join(params))
|
||||||
else:
|
else:
|
||||||
@@ -2077,6 +2076,11 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.write("lambda ")
|
self.write("lambda ")
|
||||||
else:
|
else:
|
||||||
self.write("(")
|
self.write("(")
|
||||||
|
|
||||||
|
if 4 & code.co_flags: # flag 2 -> variable number of args
|
||||||
|
self.write('*%s' % code.co_varnames[argc + kw_pairs])
|
||||||
|
argc += 1
|
||||||
|
|
||||||
i = len(paramnames) - len(defparams)
|
i = len(paramnames) - len(defparams)
|
||||||
self.write(",".join(paramnames[:i]))
|
self.write(",".join(paramnames[:i]))
|
||||||
suffix = ', ' if i > 0 else ''
|
suffix = ', ' if i > 0 else ''
|
||||||
|
Reference in New Issue
Block a user