mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-104686: Fix tracing for decorated classes (#104708)
This commit is contained in:
parent
64d1b44a54
commit
cd9748409a
2 changed files with 50 additions and 0 deletions
|
@ -1524,6 +1524,52 @@ class TraceTestCase(unittest.TestCase):
|
|||
(3, 'return'),
|
||||
(1, 'return')])
|
||||
|
||||
def test_class_creation_with_decorator(self):
|
||||
def func():
|
||||
def decorator(arg):
|
||||
def _dec(c):
|
||||
return c
|
||||
return _dec
|
||||
|
||||
@decorator(6)
|
||||
@decorator(
|
||||
len([8]),
|
||||
)
|
||||
class MyObject:
|
||||
pass
|
||||
|
||||
self.run_and_compare(func, [
|
||||
(0, 'call'),
|
||||
(1, 'line'),
|
||||
(6, 'line'),
|
||||
(1, 'call'),
|
||||
(2, 'line'),
|
||||
(4, 'line'),
|
||||
(4, 'return'),
|
||||
(7, 'line'),
|
||||
(8, 'line'),
|
||||
(7, 'line'),
|
||||
(1, 'call'),
|
||||
(2, 'line'),
|
||||
(4, 'line'),
|
||||
(4, 'return'),
|
||||
(10, 'line'),
|
||||
(6, 'call'),
|
||||
(6, 'line'),
|
||||
(11, 'line'),
|
||||
(11, 'return'),
|
||||
(7, 'line'),
|
||||
(2, 'call'),
|
||||
(3, 'line'),
|
||||
(3, 'return'),
|
||||
(6, 'line'),
|
||||
(2, 'call'),
|
||||
(3, 'line'),
|
||||
(3, 'return'),
|
||||
(10, 'line'),
|
||||
(10, 'return'),
|
||||
])
|
||||
|
||||
@support.cpython_only
|
||||
def test_no_line_event_after_creating_generator(self):
|
||||
# Spurious line events before call events only show up with C tracer
|
||||
|
|
|
@ -2486,6 +2486,10 @@ compiler_class_body(struct compiler *c, stmt_ty s, int firstlineno)
|
|||
}
|
||||
|
||||
/* 2. load the 'build_class' function */
|
||||
|
||||
// these instructions should be attributed to the class line,
|
||||
// not a decorator line
|
||||
loc = LOC(s);
|
||||
ADDOP(c, loc, PUSH_NULL);
|
||||
ADDOP(c, loc, LOAD_BUILD_CLASS);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue