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

View File

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