Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-96636: Remove all uses of NOTRACE_DISPATCH #96643

Merged
44 changes: 44 additions & 0 deletions Lib/test/test_dynamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,5 +149,49 @@ def __missing__(self, key):
for _ in range(30):
self.assertEqual(sum_func(), expected)

class TestTracing(unittest.TestCase):

def setUp(self):
self.addCleanup(sys.settrace, sys.gettrace())
sys.settrace(None)

def test_after_specialization(self):

def trace(frame, event, arg):
return trace

turn_on_trace = False

class C:
def __init__(self, x):
self.x = x
def __del__(self):
if turn_on_trace:
sys.settrace(trace)

def f():
# LOAD_GLOBAL[_BUILTIN] immediately follows the call to C.__del__
C(0).x, len

def g():
# BINARY_SUSCR[_LIST_INT] immediately follows the call to C.__del__
[0][C(0).x]

def h():
# BINARY_OP[_ADD_INT] immediately follows the call to C.__del__
0 + C(0).x

for func in (f, g, h):
with self.subTest(func.__name__):
for _ in range(58):
markshannon marked this conversation as resolved.
Show resolved Hide resolved
markshannon marked this conversation as resolved.
Show resolved Hide resolved
func()
turn_on_trace = True
func()
markshannon marked this conversation as resolved.
Show resolved Hide resolved
sys.settrace(None)
turn_on_trace = False




markshannon marked this conversation as resolved.
Show resolved Hide resolved
if __name__ == "__main__":
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Ensure that tracing, ``sys.setrace()``, is turned on immediately. In
pre-release versions of 3.11, some tracing events might have been lost when
turning on tracing in a ``__del__`` method or interrupt.
Loading