Skip to content

Commit

Permalink
pythonGH-96636: Remove all uses of NOTRACE_DISPATCH (pythonGH-96643)
Browse files Browse the repository at this point in the history
Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
(cherry picked from commit aa3b4cf)
  • Loading branch information
markshannon committed Sep 8, 2022
1 parent 99919d4 commit c3e987b
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 59 deletions.
44 changes: 44 additions & 0 deletions Lib/test/test_dynamic.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Test the most dynamic corner cases of Python's runtime semantics.

import builtins
import sys
import unittest

from test.support import swap_item, swap_attr
Expand Down Expand Up @@ -146,5 +147,48 @@ def __missing__(self, key):
for _ in range(30):
self.assertEqual(sum_1000(), 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):
func()
turn_on_trace = True
func()
sys.settrace(None)
turn_on_trace = False


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

0 comments on commit c3e987b

Please sign in to comment.