From fd1f1be98dfe66cd16d2e404e046ec462699dded Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Fri, 8 Sep 2000 16:31:24 +0000 Subject: com_continue_stmt(): Improve error message when continue is found in a try statement in a loop. This is related to SourceForge bug #110830. --- Python/compile.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Python/compile.c b/Python/compile.c index 155761f..0409f2d 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -258,7 +258,7 @@ PyCode_New(int argcount, int nlocals, int stacksize, int flags, /* Data structure used internally */ struct compiling { - PyObject *c_code; /* string */ + PyObject *c_code; /* string */ PyObject *c_consts; /* list of objects */ PyObject *c_const_dict; /* inverse of c_consts */ PyObject *c_names; /* list of strings (names) */ @@ -2933,7 +2933,28 @@ com_continue_stmt(struct compiling *c, node *n) if (i-- > 0 && c->c_block[i] == SETUP_LOOP) { com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); } + else if (i <= 0) { + /* at the outer level */ + com_error(c, PyExc_SyntaxError, + "'continue' not properly in loop"); + } else { + int j; + for (j = 0; j <= i; ++j) { + if (c->c_block[j] == SETUP_LOOP) + break; + } + if (j < i+1) { + /* there is a loop, but something interferes */ + for (++j; j <= i; ++j) { + if (c->c_block[i] == SETUP_EXCEPT + || c->c_block[i] == SETUP_FINALLY) { + com_error(c, PyExc_SyntaxError, + "'continue' not supported inside 'try' clause"); + return; + } + } + } com_error(c, PyExc_SyntaxError, "'continue' not properly in loop"); } -- cgit v0.12