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.

Will backport.
This commit is contained in:
Neal Norwitz 2006-10-28 21:19:07 +00:00
parent 97a57220e8
commit 21997afb0c
3 changed files with 37 additions and 1 deletions

View File

@ -336,6 +336,37 @@ isn't, there should be a syntax error.
Traceback (most recent call last): Traceback (most recent call last):
... ...
SyntaxError: 'break' outside loop (<doctest test.test_syntax[42]>, line 3) 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 import re

View File

@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Bug #1565514, SystemError not raised on too many nested blocks.
- Bug #1576174: WindowsError now displays the windows error code - Bug #1576174: WindowsError now displays the windows error code
again, no longer the posix error code. again, no longer the posix error code.

View File

@ -3131,8 +3131,11 @@ static int
compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b) compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b)
{ {
struct fblockinfo *f; 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; return 0;
}
f = &c->u->u_fblock[c->u->u_nfblocks++]; f = &c->u->u_fblock[c->u->u_nfblocks++];
f->fb_type = t; f->fb_type = t;
f->fb_block = b; f->fb_block = b;