mirror of https://github.com/python/cpython.git
[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:
parent
166ad70606
commit
1046cd06b0
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue