Backport 52504:
Fix bug #1565514, SystemError not raised on too many nested blocks. It seems like this should be a different error than SystemError, but I don't have any great ideas and SystemError was raised in 2.4 and earlier.
This commit is contained in:
parent
c975b9477b
commit
2f0940b6ca
|
@ -333,6 +333,37 @@ isn't, there should be a syntax error.
|
|||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: 'break' outside loop (<doctest test.test_syntax[42]>, line 3)
|
||||
|
||||
This should probably raise a better error than a SystemError (or none at all).
|
||||
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):
|
||||
...
|
||||
SystemError: too many statically nested blocks
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
|
|
|
@ -12,6 +12,8 @@ What's New in Python 2.5.1c1?
|
|||
Core and builtins
|
||||
-----------------
|
||||
|
||||
- Bug #1565514, SystemError not raised on too many nested blocks.
|
||||
|
||||
- Bug #1576174: WindowsError now displays the windows error code
|
||||
again, no longer the posix error code.
|
||||
|
||||
|
|
|
@ -3738,8 +3738,11 @@ static int
|
|||
compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b)
|
||||
{
|
||||
struct fblockinfo *f;
|
||||
if (c->u->u_nfblocks >= CO_MAXBLOCKS)
|
||||
if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
"too many statically nested blocks");
|
||||
return 0;
|
||||
}
|
||||
f = &c->u->u_fblock[c->u->u_nfblocks++];
|
||||
f->fb_type = t;
|
||||
f->fb_block = b;
|
||||
|
|
Loading…
Reference in New Issue