You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
3.2 WhileTrue grammar bug
This commit is contained in:
BIN
test/bytecode_3.2/09_if_whiletrue_bug.pyc
Normal file
BIN
test/bytecode_3.2/09_if_whiletrue_bug.pyc
Normal file
Binary file not shown.
19
test/simple_source/looping/09_if_whiletrue_bug.py
Normal file
19
test/simple_source/looping/09_if_whiletrue_bug.py
Normal 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
|
@@ -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):
|
||||||
|
Reference in New Issue
Block a user