[Python-checkins] python/dist/src/Python compile.c,2.291,2.292
jhylton at users.sourceforge.net
jhylton at users.sourceforge.net
Thu Aug 28 08:42:16 EDT 2003
Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1:/tmp/cvs-serv11600
Modified Files:
compile.c
Log Message:
Fix for SF bug [ 784075 ] Fatal Python error: unknown scope
Make sure the inner function is not compiled when there is a syntax
error in the default arguments.
Index: compile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
retrieving revision 2.291
retrieving revision 2.292
diff -C2 -d -r2.291 -r2.292
*** compile.c 15 Jul 2003 20:23:26 -0000 2.291
--- compile.c 28 Aug 2003 14:42:14 -0000 2.292
***************
*** 3667,3674 ****
}
static int
com_argdefs(struct compiling *c, node *n)
{
! int i, nch, nargs, ndefs;
if (TYPE(n) == lambdef) {
/* lambdef: 'lambda' [varargslist] ':' test */
--- 3667,3680 ----
}
+ /* Return the number of default values in the argument list.
+
+ If a non-default argument follows a default argument, set an
+ exception and return -1.
+ */
+
static int
com_argdefs(struct compiling *c, node *n)
{
! int i, nch, ndefs;
if (TYPE(n) == lambdef) {
/* lambdef: 'lambda' [varargslist] ':' test */
***************
*** 3687,3691 ****
fpdef ['=' test] (',' fpdef ['=' test])* [','] */
nch = NCH(n);
- nargs = 0;
ndefs = 0;
for (i = 0; i < nch; i++) {
--- 3693,3696 ----
***************
*** 3694,3698 ****
TYPE(CHILD(n, i)) == DOUBLESTAR)
break;
- nargs++;
i++;
if (i >= nch)
--- 3699,3702 ----
***************
*** 3711,3717 ****
else {
/* Treat "(a=1, b)" as an error */
! if (ndefs)
com_error(c, PyExc_SyntaxError,
"non-default argument follows default argument");
}
if (t != COMMA)
--- 3715,3723 ----
else {
/* Treat "(a=1, b)" as an error */
! if (ndefs) {
com_error(c, PyExc_SyntaxError,
"non-default argument follows default argument");
+ return -1;
+ }
}
if (t != COMMA)
***************
*** 3728,3731 ****
--- 3734,3739 ----
REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */
ndefs = com_argdefs(c, n);
+ if (ndefs < 0)
+ return;
symtable_enter_scope(c->c_symtable, STR(CHILD(n, 1)), TYPE(n),
n->n_lineno);
More information about the Python-checkins
mailing list