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);