3.6 FUNCTION_EX_KW fixes

This commit is contained in:
rocky
2017-12-15 19:18:27 -05:00
parent b736e0a0e2
commit 9cb99e3290
3 changed files with 22 additions and 9 deletions

Binary file not shown.

View File

@@ -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
""", """,

View File

@@ -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):