You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-02 16:44:46 +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
|
||||
|
||||
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:
|
||||
#
|
||||
|
@@ -280,9 +280,17 @@ class Python2Parser(PythonParser):
|
||||
opname_base, v, customize)
|
||||
continue
|
||||
elif opname_base == 'BUILD_MAP':
|
||||
kvlist_n = "kvlist_%s" % v
|
||||
rule = kvlist_n + ' ::= ' + ' kv3' * v
|
||||
self.add_unique_rule(rule, opname_base, v, customize)
|
||||
if v == 0: # and self.is_pypy:
|
||||
# PyPy sometimes has no count. Sigh.
|
||||
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)
|
||||
self.add_unique_rule(rule, opname_base, v, customize)
|
||||
elif opname_base in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'):
|
||||
|
Reference in New Issue
Block a user