[3.9] bpo-25130: Make unit-test about restricting the maximum number of nested blocks cpython-only (GH-28002) (GH-28017)

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..
(cherry picked from commit eb263f9a35)

Co-authored-by: Carl Friedrich Bolz-Tereick <cfbolz@gmx.de>
This commit is contained in:
Serhiy Storchaka 2021-08-28 22:24:39 +03:00 committed by GitHub
parent 166ad70606
commit 1046cd06b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 32 deletions

View File

@ -531,38 +531,6 @@
...
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():
@ -995,6 +963,42 @@ def test_invalid_line_continuation_left_recursive(self):
self._check_error("A.\u03bc\\\n",
"unexpected EOF while parsing")
@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)
from test import test_syntax