X Tutup
Skip to content

Commit 281f429

Browse files
committed
Handle PyPy BUILD_MAP_0 where actual kw_args > 0
1 parent 8cfecff commit 281f429

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

test/bytecode_pypy2.7/03_map.pyc

738 Bytes
Binary file not shown.

uncompyle6/parser.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ def typestring(self, token):
6969
return token.type
7070

7171
def nonterminal(self, nt, args):
72-
collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items', 'kwargs')
72+
collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items', 'kwargs',
73+
# PYPY:
74+
'kvlist_n')
7375

7476
if nt in collect and len(args) > 1:
7577
#

uncompyle6/parsers/parse2.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,17 @@ def add_custom_rules(self, tokens, customize):
280280
opname_base, v, customize)
281281
continue
282282
elif opname_base == 'BUILD_MAP':
283-
kvlist_n = "kvlist_%s" % v
284-
rule = kvlist_n + ' ::= ' + ' kv3' * v
285-
self.add_unique_rule(rule, opname_base, v, customize)
283+
if v == 0: # and self.is_pypy:
284+
# PyPy sometimes has no count. Sigh.
285+
kvlist_n = 'kvlist_n'
286+
rule = 'kvlist_n ::= kvlist_n kv3'
287+
self.add_unique_rule(rule, opname_base, v, customize)
288+
rule = 'kvlist_n ::='
289+
self.add_unique_rule(rule, opname_base, v, customize)
290+
else:
291+
kvlist_n = "kvlist_%s" % v
292+
rule = kvlist_n + ' ::= ' + ' kv3' * v
293+
self.add_unique_rule(rule, opname_base, v, customize)
286294
rule = "mapexpr ::= %s %s" % (opname, kvlist_n)
287295
self.add_unique_rule(rule, opname_base, v, customize)
288296
elif opname_base in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'):

0 commit comments

Comments
 (0)
X Tutup