Mercurial > cpython-lru_cache-weakref
diff Python/_warnings.c @ 48948:d563621d76db legacy-trunk
Move test.test_support.catch_warning() to the warnings module, rename it
catch_warnings(), and clean up the API.
While expanding the test suite, a bug was found where a warning about the
'line' argument to showwarning() was not letting functions with '*args' go
without a warning.
Closes issue 3602.
Code review by Benjamin Peterson.
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Tue, 02 Sep 2008 01:25:16 +0000 |
| parents | 4f804ee772eb |
| children | 642f20b22577 |
line wrap: on
line diff
--- a/Python/_warnings.c Tue Sep 02 01:13:42 2008 +0000 +++ b/Python/_warnings.c Tue Sep 02 01:25:16 2008 +0000 @@ -1,4 +1,5 @@ #include "Python.h" +#include "code.h" /* For DeprecationWarning about adding 'line'. */ #include "frameobject.h" #define MODULE_NAME "_warnings" @@ -416,11 +417,16 @@ /* A proper implementation of warnings.showwarning() should have at least two default arguments. */ if ((defaults == NULL) || (PyTuple_Size(defaults) < 2)) { - if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1) < 0) { - Py_DECREF(show_fxn); - goto cleanup; + PyCodeObject *code = (PyCodeObject *) + PyFunction_GetCode(check_fxn); + if (!(code->co_flags & CO_VARARGS)) { + if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1) < + 0) { + Py_DECREF(show_fxn); + goto cleanup; + } } - } + } res = PyObject_CallFunctionObjArgs(show_fxn, message, category, filename, lineno_obj, NULL);
