diff options
author | Brett Cannon <bcannon@gmail.com> | 2008-09-02 02:46:59 +0000 |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2008-09-02 02:46:59 +0000 |
commit | fbb23fa8779b8f633bef54b151867dcdae77b5de (patch) | |
tree | 8d46c377c4f647f599f98d4d16b8c803955c0a93 /Python | |
parent | 74d7d995616f54997362c34e8a283c25df0c90b7 (diff) | |
download | cpython-fbb23fa8779b8f633bef54b151867dcdae77b5de.tar.gz |
Merge in r66135. Doing also required removing a stale DeprecationWarning along
with moving warnings.catch_warnings() over to keyword-only parameters for its
constructor (as documented in the 2.6 docs).
Diffstat (limited to 'Python')
-rw-r--r-- | Python/_warnings.c | 54 |
1 files changed, 14 insertions, 40 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index fd3f629e85..a08219e435 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -386,49 +386,23 @@ warn_explicit(PyObject *category, PyObject *message, show_warning(filename, lineno, text, category, sourceline); } else { - const char *msg = "functions overriding warnings.showwarning() " - "must support the 'line' argument"; - const char *text_char = _PyUnicode_AsString(text); - - if (strcmp(msg, text_char) == 0) { - /* Prevent infinite recursion by using built-in implementation - of showwarning(). */ - show_warning(filename, lineno, text, category, sourceline); - } - else { - PyObject *check_fxn; - PyObject *defaults; - PyObject *res; - - if (PyMethod_Check(show_fxn)) - check_fxn = PyMethod_Function(show_fxn); - else if (PyFunction_Check(show_fxn)) - check_fxn = show_fxn; - else { - PyErr_SetString(PyExc_TypeError, - "warnings.showwarning() must be set to a " - "function or method"); - Py_DECREF(show_fxn); - goto cleanup; - } + PyObject *res; - defaults = PyFunction_GetDefaults(check_fxn); - /* 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; - } - } - res = PyObject_CallFunctionObjArgs(show_fxn, message, category, - filename, lineno_obj, - NULL); + if (!PyMethod_Check(show_fxn) && !PyFunction_Check(show_fxn)) { + PyErr_SetString(PyExc_TypeError, + "warnings.showwarning() must be set to a " + "function or method"); Py_DECREF(show_fxn); - Py_XDECREF(res); - if (res == NULL) - goto cleanup; + goto cleanup; } + + res = PyObject_CallFunctionObjArgs(show_fxn, message, category, + filename, lineno_obj, + NULL); + Py_DECREF(show_fxn); + Py_XDECREF(res); + if (res == NULL) + goto cleanup; } } else /* if (rc == -1) */ |