You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Towards better 3.6 parameter handling
3.6 is still a mess though.
This commit is contained in:
@@ -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):
|
||||||
|
Reference in New Issue
Block a user