Skip to content

Commit 207be69

Browse files
committed
Make set_local_events handle BRANCH event
1 parent 04991a2 commit 207be69

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

Lib/test/test_monitoring.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1853,6 +1853,10 @@ def test_local(self):
18531853
code = f1.__code__
18541854
sys.monitoring.set_local_events(TEST_TOOL, code, E.PY_START)
18551855
self.assertEqual(sys.monitoring.get_local_events(TEST_TOOL, code), E.PY_START)
1856+
sys.monitoring.set_local_events(TEST_TOOL, code, 0)
1857+
sys.monitoring.set_local_events(TEST_TOOL, code, E.BRANCH)
1858+
self.assertEqual(sys.monitoring.get_local_events(TEST_TOOL, code), E.BRANCH_NOT_TAKEN | E.BRANCH_TAKEN)
1859+
sys.monitoring.set_local_events(TEST_TOOL, code, 0)
18561860
sys.monitoring.set_local_events(TEST_TOOL2, code, E.PY_START)
18571861
self.assertEqual(sys.monitoring.get_local_events(TEST_TOOL2, code), E.PY_START)
18581862
sys.monitoring.set_local_events(TEST_TOOL, code, 0)

Python/instrumentation.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,6 +2264,10 @@ monitoring_set_local_events_impl(PyObject *module, int tool_id,
22642264
return NULL;
22652265
}
22662266
event_set &= ~C_RETURN_EVENTS;
2267+
if (event_set & (1 << PY_MONITORING_EVENT_BRANCH)) {
2268+
event_set &= ~(1 << PY_MONITORING_EVENT_BRANCH);
2269+
event_set |= (1 << PY_MONITORING_EVENT_BRANCH_TAKEN) | (1 << PY_MONITORING_EVENT_BRANCH_NOT_TAKEN);
2270+
}
22672271
if (event_set < 0 || event_set >= (1 << _PY_MONITORING_LOCAL_EVENTS)) {
22682272
PyErr_Format(PyExc_ValueError, "invalid local event set 0x%x", event_set);
22692273
return NULL;

0 commit comments

Comments
 (0)