You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Handle PyPy BUILD_MAP_0 where actual kw_args > 0
This commit is contained in:
BIN
test/bytecode_pypy2.7/03_map.pyc
Normal file
BIN
test/bytecode_pypy2.7/03_map.pyc
Normal file
Binary file not shown.
@@ -69,7 +69,9 @@ class PythonParser(GenericASTBuilder):
|
|||||||
return token.type
|
return token.type
|
||||||
|
|
||||||
def nonterminal(self, nt, args):
|
def nonterminal(self, nt, args):
|
||||||
collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items', 'kwargs')
|
collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items', 'kwargs',
|
||||||
|
# PYPY:
|
||||||
|
'kvlist_n')
|
||||||
|
|
||||||
if nt in collect and len(args) > 1:
|
if nt in collect and len(args) > 1:
|
||||||
#
|
#
|
||||||
|
@@ -280,9 +280,17 @@ class Python2Parser(PythonParser):
|
|||||||
opname_base, v, customize)
|
opname_base, v, customize)
|
||||||
continue
|
continue
|
||||||
elif opname_base == 'BUILD_MAP':
|
elif opname_base == 'BUILD_MAP':
|
||||||
kvlist_n = "kvlist_%s" % v
|
if v == 0: # and self.is_pypy:
|
||||||
rule = kvlist_n + ' ::= ' + ' kv3' * v
|
# PyPy sometimes has no count. Sigh.
|
||||||
self.add_unique_rule(rule, opname_base, v, customize)
|
kvlist_n = 'kvlist_n'
|
||||||
|
rule = 'kvlist_n ::= kvlist_n kv3'
|
||||||
|
self.add_unique_rule(rule, opname_base, v, customize)
|
||||||
|
rule = 'kvlist_n ::='
|
||||||
|
self.add_unique_rule(rule, opname_base, v, customize)
|
||||||
|
else:
|
||||||
|
kvlist_n = "kvlist_%s" % v
|
||||||
|
rule = kvlist_n + ' ::= ' + ' kv3' * v
|
||||||
|
self.add_unique_rule(rule, opname_base, v, customize)
|
||||||
rule = "mapexpr ::= %s %s" % (opname, kvlist_n)
|
rule = "mapexpr ::= %s %s" % (opname, kvlist_n)
|
||||||
self.add_unique_rule(rule, opname_base, v, customize)
|
self.add_unique_rule(rule, opname_base, v, customize)
|
||||||
elif opname_base in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'):
|
elif opname_base in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'):
|
||||||
|
Reference in New Issue
Block a user