summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Schneider-Kamp <nowonder@nowonder.de>2000-07-13 06:15:04 (GMT)
committerPeter Schneider-Kamp <nowonder@nowonder.de>2000-07-13 06:15:04 (GMT)
commit11384c60f625f2f050cd51baa1333115fa95ab6c (patch)
tree8b24fb66644906200a2afc34cc76e8baf1930efc
parent91826ed2a9e6f2b6f6b01f77b6d63532bf66d6f7 (diff)
downloadcpython-11384c60f625f2f050cd51baa1333115fa95ab6c.zip
cpython-11384c60f625f2f050cd51baa1333115fa95ab6c.tar.gz
cpython-11384c60f625f2f050cd51baa1333115fa95ab6c.tar.bz2
raise error on duplicate function arguments
example: >>> def f(a,a):print a ... SyntaxError: duplicate argument in function definition
-rw-r--r--Python/compile.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 8cf85a7..068c10e 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3092,6 +3092,7 @@ com_arglist(c, n)
node *ch = CHILD(n, i);
node *fp;
char *name;
+ PyObject *nameval;
if (TYPE(ch) == STAR || TYPE(ch) == DOUBLESTAR)
break;
REQ(ch, fpdef); /* fpdef: NAME | '(' fplist ')' */
@@ -3103,7 +3104,15 @@ com_arglist(c, n)
sprintf(nbuf, ".%d", i);
complex = 1;
}
- com_newlocal(c, name);
+ nameval = PyString_InternFromString(name);
+ if (nameval == NULL) {
+ c->c_errors++;
+ }
+ if (PyDict_GetItem(c->c_locals, nameval)) {
+ com_error(c, PyExc_SyntaxError,"duplicate argument in function definition");
+ }
+ com_newlocal_o(c, nameval);
+ Py_DECREF(nameval);
c->c_argcount++;
if (++i >= nch)
break;