Towards better 3.6 parameter handling

3.6 is still a mess though.
This commit is contained in:
rocky
2018-03-01 08:09:53 -05:00
parent f7439f506a
commit a0e3759f76

View File

@@ -526,30 +526,49 @@ def customize_for_version(self, is_pypy, version):
sep = INDENT_PER_LEVEL[:-1] sep = INDENT_PER_LEVEL[:-1]
line_number = self.line_number line_number = self.line_number
assert node[0].kind.startswith('kvlist') if node[0].kind.startswith('kvlist'):
# Python 3.5+ style key/value list in dict # Python 3.5+ style key/value list in dict
kv_node = node[0] kv_node = node[0]
l = list(kv_node) l = list(kv_node)
i = 0 i = 0
# Respect line breaks from source # Respect line breaks from source
while i < len(l): while i < len(l):
self.write(sep) self.write(sep)
name = self.traverse(l[i], indent='') name = self.traverse(l[i], indent='')
# Strip off beginning and trailing quotes in name # Strip off beginning and trailing quotes in name
name = name[1:-1] name = name[1:-1]
if i > 0: if i > 0:
line_number = self.indent_if_source_nl(line_number, line_number = self.indent_if_source_nl(line_number,
self.indent + INDENT_PER_LEVEL[:-1]) self.indent + INDENT_PER_LEVEL[:-1])
line_number = self.line_number
self.write(name, '=')
value = self.traverse(l[i+1], indent=self.indent+(len(name)+2)*' ')
self.write(value)
sep = ","
if line_number != self.line_number:
sep += "\n" + self.indent + INDENT_PER_LEVEL[:-1]
line_number = self.line_number line_number = self.line_number
i += 2 self.write(name, '=')
pass value = self.traverse(l[i+1], indent=self.indent+(len(name)+2)*' ')
self.write(value)
sep = ", "
if line_number != self.line_number:
sep += "\n" + self.indent + INDENT_PER_LEVEL[:-1]
line_number = self.line_number
i += 2
pass
elif node[-1].kind.startswith('BUILD_CONST_KEY_MAP'):
keys_node = node[-2]
keys = keys_node.attr
# from trepan.api import debug; debug()
assert keys_node == 'LOAD_CONST' and isinstance(keys, tuple)
for i in range(node[-1].attr):
self.write(sep)
self.write(keys[i], '=')
value = self.traverse(node[i], indent='')
self.write(value)
sep = ", "
if line_number != self.line_number:
sep += "\n" + self.indent + INDENT_PER_LEVEL[:-1]
line_number = self.line_number
pass
pass
else:
assert False, "Don't known to to untangle dictionary"
self.prec = p self.prec = p
self.indent_less(INDENT_PER_LEVEL) self.indent_less(INDENT_PER_LEVEL)
return return
@@ -592,6 +611,11 @@ def customize_for_version(self, is_pypy, version):
n = len(node) n = len(node)
assert n >= len(keys)+1, \ assert n >= len(keys)+1, \
'not enough parameters keyword-tuple values' 'not enough parameters keyword-tuple values'
# try:
# assert n >= len(keys)+1, \
# 'not enough parameters keyword-tuple values'
# except:
# from trepan.api import debug; debug()
sep = '' sep = ''
# FIXME: adjust output for line breaks? # FIXME: adjust output for line breaks?
for i in range(num_posargs): for i in range(num_posargs):