mirror of https://github.com/python/cpython
bpo-25130: Make unit-test about restricting the maximum number of nested blocks cpython-only (GH-28002)
PyPy and potentially other implementations have different or no contraints on the number of blocks that can be statically nested. move the test that checks for this behaviour into a unit test and mark it as CPython-only.
This commit is contained in:
parent
206b21ed9f
commit
eb263f9a35
|
@ -629,38 +629,6 @@ isn't, there should be a syntax error.
|
|||
...
|
||||
SyntaxError: 'break' outside loop
|
||||
|
||||
This raises a SyntaxError, it used to raise a SystemError.
|
||||
Context for this change can be found on issue #27514
|
||||
|
||||
In 2.5 there was a missing exception and an assert was triggered in a debug
|
||||
build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514
|
||||
|
||||
>>> while 1:
|
||||
... while 2:
|
||||
... while 3:
|
||||
... while 4:
|
||||
... while 5:
|
||||
... while 6:
|
||||
... while 8:
|
||||
... while 9:
|
||||
... while 10:
|
||||
... while 11:
|
||||
... while 12:
|
||||
... while 13:
|
||||
... while 14:
|
||||
... while 15:
|
||||
... while 16:
|
||||
... while 17:
|
||||
... while 18:
|
||||
... while 19:
|
||||
... while 20:
|
||||
... while 21:
|
||||
... while 22:
|
||||
... break
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: too many statically nested blocks
|
||||
|
||||
Misuse of the nonlocal and global statement can lead to a few unique syntax errors.
|
||||
|
||||
>>> def f():
|
||||
|
@ -1550,6 +1518,41 @@ case(34)
|
|||
lineno=3
|
||||
)
|
||||
|
||||
@support.cpython_only
|
||||
def test_syntax_error_on_deeply_nested_blocks(self):
|
||||
# This raises a SyntaxError, it used to raise a SystemError. Context
|
||||
# for this change can be found on issue #27514
|
||||
|
||||
# In 2.5 there was a missing exception and an assert was triggered in a
|
||||
# debug build. The number of blocks must be greater than CO_MAXBLOCKS.
|
||||
# SF #1565514
|
||||
|
||||
source = """
|
||||
while 1:
|
||||
while 2:
|
||||
while 3:
|
||||
while 4:
|
||||
while 5:
|
||||
while 6:
|
||||
while 8:
|
||||
while 9:
|
||||
while 10:
|
||||
while 11:
|
||||
while 12:
|
||||
while 13:
|
||||
while 14:
|
||||
while 15:
|
||||
while 16:
|
||||
while 17:
|
||||
while 18:
|
||||
while 19:
|
||||
while 20:
|
||||
while 21:
|
||||
while 22:
|
||||
break
|
||||
"""
|
||||
self._check_error(source, "too many statically nested blocks")
|
||||
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(SyntaxTestCase)
|
||||
|
|
Loading…
Reference in New Issue