]> granicus.if.org Git - python/commitdiff
Fix a bug in the handling of the stacklevel argument in warnings.warn() where
authorBrett Cannon <bcannon@gmail.com>
Tue, 6 May 2008 04:37:31 +0000 (04:37 +0000)
committerBrett Cannon <bcannon@gmail.com>
Tue, 6 May 2008 04:37:31 +0000 (04:37 +0000)
the stack was being unwound by two levels instead of one each time.

Lib/test/test_warnings.py
Python/_warnings.c

index c854d7ade42f04f17faf219719232cfd16471e95..1b5ee3291cfca4f3ac428bff35f556a1af3c55b3 100644 (file)
@@ -225,6 +225,8 @@ class WarnTests(unittest.TestCase):
                 self.assertEqual(os.path.basename(w.filename), "test_warnings.py")
                 warning_tests.outer("spam6", stacklevel=2)
                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py")
+                warning_tests.outer("spam6.5", stacklevel=3)
+                self.assertEqual(os.path.basename(w.filename), "test_warnings.py")
 
                 warning_tests.inner("spam7", stacklevel=9999)
                 self.assertEqual(os.path.basename(w.filename), "sys")
index 3e7dda7db8f80ac729c1b74dd191c2e9ea24beba..0e48675d81c7f179d6530afbbd87231a226f41ff 100644 (file)
@@ -445,10 +445,8 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
 
     /* Setup globals and lineno. */
     PyFrameObject *f = PyThreadState_GET()->frame;
-    while (--stack_level > 0 && f != NULL) {
+    while (--stack_level > 0 && f != NULL)
         f = f->f_back;
-        --stack_level;
-    }
 
     if (f == NULL) {
         globals = PyThreadState_Get()->interp->sysdict;