summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2022-01-11 11:28:30 (GMT)
committerGitHub <noreply@github.com>2022-01-11 11:28:30 (GMT)
commitbd04fac7eb929cd11ab6985deb61d9780447fbff (patch)
treefa1f7cd473f62ffa309b0c0b48d88a655a4a7e35
parentea1a54506b4ac38b712ba63ec884292025f16111 (diff)
downloadcpython-bd04fac7eb929cd11ab6985deb61d9780447fbff.zip
cpython-bd04fac7eb929cd11ab6985deb61d9780447fbff.tar.gz
cpython-bd04fac7eb929cd11ab6985deb61d9780447fbff.tar.bz2
bpo-46331: Do not set line number of instruction storing doc-string. (GH-30518)
-rw-r--r--Lib/test/test_sys_settrace.py19
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst2
-rw-r--r--Python/compile.c1
3 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 8e430f7..883b284 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -1403,6 +1403,25 @@ class TraceTestCase(unittest.TestCase):
(3, 'line'),
(3, 'return')])
+ def test_class_creation_with_docstrings(self):
+
+ def func():
+ class Class_1:
+ ''' the docstring. 2'''
+ def __init__(self):
+ ''' Another docstring. 4'''
+ self.a = 5
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (1, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (3, 'return'),
+ (1, 'return')])
+
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst b/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst
new file mode 100644
index 0000000..8bb9a99
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst
@@ -0,0 +1,2 @@
+Do not set line number of instruction storing doc-string. Fixes regression
+introduced in 3.11 alpha.
diff --git a/Python/compile.c b/Python/compile.c
index 590ca9d..0d821d4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2034,6 +2034,7 @@ compiler_body(struct compiler *c, asdl_stmt_seq *stmts)
st = (stmt_ty)asdl_seq_GET(stmts, 0);
assert(st->kind == Expr_kind);
VISIT(c, expr, st->v.Expr.value);
+ UNSET_LOC(c);
if (!compiler_nameop(c, __doc__, Store))
return 0;
}