You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
3.6 FUNCTION_EX_KW fixes
This commit is contained in:
BIN
test/bytecode_3.6/07_closure_bug2.pyc
Normal file
BIN
test/bytecode_3.6/07_closure_bug2.pyc
Normal file
Binary file not shown.
@@ -150,7 +150,7 @@ class Python36Parser(Python35Parser):
|
|||||||
build_map_unpack_with_call
|
build_map_unpack_with_call
|
||||||
CALL_FUNCTION_EX_KW
|
CALL_FUNCTION_EX_KW
|
||||||
call_ex_kw3 ::= expr
|
call_ex_kw3 ::= expr
|
||||||
tuple
|
expr
|
||||||
expr
|
expr
|
||||||
CALL_FUNCTION_EX_KW
|
CALL_FUNCTION_EX_KW
|
||||||
""",
|
""",
|
||||||
|
@@ -588,6 +588,9 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.n_build_map_unpack_with_call = build_unpack_map_with_call
|
self.n_build_map_unpack_with_call = build_unpack_map_with_call
|
||||||
|
|
||||||
def call_ex_kw2(node):
|
def call_ex_kw2(node):
|
||||||
|
"""Handle CALL_FUNCTION_EX 2 (have KW) but with
|
||||||
|
BUILD_{MAP,TUPLE}_UNPACK_WITH_CALL"""
|
||||||
|
|
||||||
# This is weird shit. Thanks Python!
|
# This is weird shit. Thanks Python!
|
||||||
self.preorder(node[0])
|
self.preorder(node[0])
|
||||||
self.write('(')
|
self.write('(')
|
||||||
@@ -622,17 +625,27 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.n_call_ex_kw2 = call_ex_kw2
|
self.n_call_ex_kw2 = call_ex_kw2
|
||||||
|
|
||||||
def call_ex_kw3(node):
|
def call_ex_kw3(node):
|
||||||
|
"""Handle CALL_FUNCTION_EX 2 (have KW) but without
|
||||||
|
BUILD_{MAP,TUPLE}_UNPACK_WITH_CALL"""
|
||||||
self.preorder(node[0])
|
self.preorder(node[0])
|
||||||
self.write('(')
|
self.write('(')
|
||||||
tup = node[1]
|
args = node[1][0]
|
||||||
assert tup == 'tuple'
|
if args == 'tuple':
|
||||||
self.call36_tuple(tup)
|
if self.call36_tuple(args) > 0:
|
||||||
expr = node[2]
|
self.write(', ')
|
||||||
if len(tup) > 0:
|
pass
|
||||||
# if tup[0].attr > 0:
|
pass
|
||||||
|
else:
|
||||||
|
self.write('*')
|
||||||
|
self.preorder(args)
|
||||||
self.write(', ')
|
self.write(', ')
|
||||||
|
pass
|
||||||
|
|
||||||
|
kwargs = node[2]
|
||||||
|
if kwargs == 'expr':
|
||||||
|
kwargs = kwargs[0]
|
||||||
self.write('**')
|
self.write('**')
|
||||||
self.preorder(expr)
|
self.preorder(kwargs)
|
||||||
self.write(')')
|
self.write(')')
|
||||||
self.prune()
|
self.prune()
|
||||||
self.n_call_ex_kw3 = call_ex_kw3
|
self.n_call_ex_kw3 = call_ex_kw3
|
||||||
@@ -663,7 +676,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
sep = ', '
|
sep = ', '
|
||||||
|
|
||||||
self.indent_less(INDENT_PER_LEVEL)
|
self.indent_less(INDENT_PER_LEVEL)
|
||||||
return
|
return len(flat_elems)
|
||||||
self.call36_tuple = call36_tuple
|
self.call36_tuple = call36_tuple
|
||||||
|
|
||||||
def call36_dict(node):
|
def call36_dict(node):
|
||||||
|
Reference in New Issue
Block a user