DRY and limit STORE_LOCALS

This commit is contained in:
rocky
2018-02-19 08:03:09 -05:00
parent f4b7e54313
commit deb9903a97
4 changed files with 10 additions and 9 deletions

View File

@@ -186,8 +186,9 @@ class Python27Parser(Python2Parser):
return not (jmp_target == tokens[last].offset or
tokens[last].pattr == jmp_false.pattr)
elif rule[0] == ('conditional_true'):
# FIXME: the below is a hack. script is probably never used in a boolean
# What we really need is to look for precence of dead code.
# FIXME: the below is a hack: "subscript" was probably never used
# in a boolean which got eliminated. What we really need is to
# look for precence of dead code.
if ast[0] == 'expr':
a = ast[0]
else:

View File

@@ -1103,10 +1103,6 @@ class Python30Parser(Python3Parser):
def p_30(self, args):
"""
# Store locals is only in Python 3.0 to 3.3
stmt ::= store_locals
store_locals ::= LOAD_FAST STORE_LOCALS
jmp_true ::= JUMP_IF_TRUE_OR_POP POP_TOP
_ifstmts_jump ::= c_stmts_opt JUMP_FORWARD POP_TOP COME_FROM
"""

View File

@@ -11,9 +11,6 @@ class Python30Parser(Python31Parser):
def p_30(self, args):
"""
# Store locals is only in Python 3.0 to 3.3
stmt ::= store_locals
store_locals ::= LOAD_FAST STORE_LOCALS
# FIXME: combine with parse3.2
whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK

View File

@@ -26,6 +26,13 @@ class Python33Parser(Python32Parser):
jump_excepts come_from_except_clauses
"""
def p_30to33(self, args):
"""
# Store locals is only in Python 3.0 to 3.3
stmt ::= store_locals
store_locals ::= LOAD_FAST STORE_LOCALS
"""
def customize_grammar_rules(self, tokens, customize):
self.remove_rules("""
# 3.3+ adds POP_BLOCKS