Browse Source
Mark instructions at end of class scope as artificial. (GH-24222)
pull/24224/head
Mark Shannon
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
20 additions and
0 deletions
-
Lib/test/test_sys_settrace.py
-
Python/compile.c
|
|
|
@ -956,6 +956,24 @@ class TraceTestCase(unittest.TestCase): |
|
|
|
(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""" |
|
|
|
|
|
|
|
@ -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 */ |
|
|
|
|