3.2 WhileTrue grammar bug

This commit is contained in:
rocky
2016-05-09 19:38:38 -04:00
parent d823dfb5d3
commit b287a305ea
3 changed files with 25 additions and 1 deletions

Binary file not shown.

View File

@@ -0,0 +1,19 @@
# Test Bug in handling whileTrue jumping around an else
# Python 3.2 has
# whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK _come_from
# where Python 3.5 has
# whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK POP_BLOCK _come_from
import sys
rv = 0
if sys.argv == ['-']:
while True:
filename = sys.argv[0]
try:
compile(filename, doraise=True)
except IOError:
rv = 1
else:
rv = 1

View File

@@ -333,8 +333,13 @@ class Python3Parser(PythonParser):
def p_stmt3(self, args): def p_stmt3(self, args):
""" """
stmt ::= whileTruestmt stmt ::= whileTruestmt
whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK POP_BLOCK _come_from
ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite _come_from ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite _come_from
# Python 3.5 may have POP_BLOCK
whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK POP_BLOCK _come_from
# Python < 3.5 no POP BLOCK
whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK \e__come_from
""" """
def p_genexpr3(self, args): def p_genexpr3(self, args):