summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2008-05-06 04:37:31 (GMT)
committerBrett Cannon <bcannon@gmail.com>2008-05-06 04:37:31 (GMT)
commite3dcb01bfc6bd14da865b0f28c3c9ad8181ab212 (patch)
treea86b4bafd50bc3a309efa1b01451d64ec61c1be0
parent0b7f77847a878a84c2b928e72372b4d5b44b870c (diff)
downloadcpython-e3dcb01bfc6bd14da865b0f28c3c9ad8181ab212.zip
cpython-e3dcb01bfc6bd14da865b0f28c3c9ad8181ab212.tar.gz
cpython-e3dcb01bfc6bd14da865b0f28c3c9ad8181ab212.tar.bz2
Fix a bug in the handling of the stacklevel argument in warnings.warn() where
the stack was being unwound by two levels instead of one each time.
-rw-r--r--Lib/test/test_warnings.py2
-rw-r--r--Python/_warnings.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index c854d7a..1b5ee32 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -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")
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 3e7dda7..0e48675 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -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;