Mercurial > cpython-lru_cache-weakref
diff Python/getargs.c @ 58072:78ca69cfc897
Merged revisions 77218 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r77218 | mark.dickinson | 2010-01-01 17:27:30 +0000 (Fri, 01 Jan 2010) | 5 lines
Issue #5080: turn the DeprecationWarning from float arguments passed
to integer PyArg_Parse* format codes into a TypeError. Add a
DeprecationWarning for floats passed with the 'L' format code, which
didn't previously have a warning.
........
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Fri, 01 Jan 2010 19:27:32 +0000 |
| parents | 5c681ecc9967 |
| children | c67339e371a9 |
line wrap: on
line diff
--- a/Python/getargs.c Fri Jan 01 16:04:23 2010 +0000 +++ b/Python/getargs.c Fri Jan 01 19:27:32 2010 +0000 @@ -582,6 +582,19 @@ #define CONV_UNICODE "(unicode conversion error)" +/* explicitly check for float arguments when integers are expected. For now + * signal a warning. Returns true if an exception was raised. */ +static int +float_argument_warning(PyObject *arg) +{ + if (PyFloat_Check(arg) && + PyErr_Warn(PyExc_DeprecationWarning, + "integer argument expected, got float" )) + return 1; + else + return 0; +} + /* Explicitly check for float arguments when integers are expected. Return 1 for error, 0 if ok. */ static int @@ -777,7 +790,10 @@ #ifdef HAVE_LONG_LONG case 'L': {/* PY_LONG_LONG */ PY_LONG_LONG *p = va_arg( *p_va, PY_LONG_LONG * ); - PY_LONG_LONG ival = PyLong_AsLongLong( arg ); + PY_LONG_LONG ival; + if (float_argument_warning(arg)) + return converterr("long<L>", arg, msgbuf, bufsize); + ival = PyLong_AsLongLong(arg); if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred() ) { return converterr("long<L>", arg, msgbuf, bufsize); } else {
