[Python-checkins] bpo-46331: Do not set line number of instruction storing doc-string. (GH-30518)
markshannon
webhook-mailer at python.org
Tue Jan 11 06:29:06 EST 2022
https://github.com/python/cpython/commit/bd04fac7eb929cd11ab6985deb61d9780447fbff
commit: bd04fac7eb929cd11ab6985deb61d9780447fbff
branch: main
author: Mark Shannon <mark at hotpy.org>
committer: markshannon <mark at hotpy.org>
date: 2022-01-11T11:28:30Z
summary:
bpo-46331: Do not set line number of instruction storing doc-string. (GH-30518)
files:
A Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst
M Lib/test/test_sys_settrace.py
M Python/compile.c
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 8e430f72f63cc..883b2842f2c77 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -1403,6 +1403,25 @@ def func():
(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 0000000000000..8bb9a995cce35
--- /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 590ca9dbfc6a3..0d821d4183f12 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;
}
More information about the Python-checkins
mailing list