Handle PyPy BUILD_MAP_0 where actual kw_args > 0

This commit is contained in:
rocky
2016-07-25 17:50:19 -04:00
parent 8cfecff9c4
commit 281f429223
3 changed files with 14 additions and 4 deletions

Binary file not shown.

View File

@@ -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:
#

View File

@@ -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'):