[Python-checkins] Mark instructions at end of class scope as artificial. (GH-24222)

markshannon webhook-mailer at python.org
Fri Jan 15 08:52:05 EST 2021


https://github.com/python/cpython/commit/e56d54e447694c6ced2093d2273c3e3d60b36b6f
commit: e56d54e447694c6ced2093d2273c3e3d60b36b6f
branch: master
author: Mark Shannon <mark at hotpy.org>
committer: markshannon <mark at hotpy.org>
date: 2021-01-15T13:52:00Z
summary:

Mark instructions at end of class scope as artificial. (GH-24222)

files:
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 42989862502ac..49e8928995686 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -956,6 +956,24 @@ def func():
              (2, 'line'),
              (2, 'return')])
 
+    def test_implicit_return_in_class(self):
+
+        def func():
+            class A:
+                if 3 < 9:
+                    a = 1
+                else:
+                    a = 2
+
+        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/Python/compile.c b/Python/compile.c
index d373d8a4061a3..6aa74cc2d67e4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2371,6 +2371,8 @@ compiler_class(struct compiler *c, stmt_ty s)
             compiler_exit_scope(c);
             return 0;
         }
+        /* The following code is artificial */
+        c->u->u_lineno = -1;
         /* Return __classcell__ if it is referenced, otherwise return None */
         if (c->u->u_ste->ste_needs_class_closure) {
             /* Store __classcell__ into class namespace & return it */



More information about the Python-checkins mailing list