mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
GH-134879: Fix INSTRUMENT_FOR_ITER
for list/tuple (#134897)
Fix INSTRUMENT_FOR_ITER for list/tuple
This commit is contained in:
parent
c600310663
commit
ce6a6371a2
3 changed files with 18 additions and 3 deletions
|
@ -2157,6 +2157,21 @@ class TestRegressions(MonitoringTestBase, unittest.TestCase):
|
||||||
sys.monitoring.restart_events()
|
sys.monitoring.restart_events()
|
||||||
sys.monitoring.set_events(0, 0)
|
sys.monitoring.set_events(0, 0)
|
||||||
|
|
||||||
|
def test_134879(self):
|
||||||
|
# gh-134789
|
||||||
|
# Specialized FOR_ITER not incrementing index
|
||||||
|
def foo():
|
||||||
|
t = 0
|
||||||
|
for i in [1,2,3,4]:
|
||||||
|
t += i
|
||||||
|
self.assertEqual(t, 10)
|
||||||
|
|
||||||
|
sys.monitoring.use_tool_id(0, "test")
|
||||||
|
self.addCleanup(sys.monitoring.free_tool_id, 0)
|
||||||
|
sys.monitoring.set_local_events(0, foo.__code__, E.BRANCH_LEFT | E.BRANCH_RIGHT)
|
||||||
|
foo()
|
||||||
|
sys.monitoring.set_local_events(0, foo.__code__, 0)
|
||||||
|
|
||||||
|
|
||||||
class TestOptimizer(MonitoringTestBase, unittest.TestCase):
|
class TestOptimizer(MonitoringTestBase, unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -3130,7 +3130,6 @@ dummy_func(
|
||||||
if (PyStackRef_IsTaggedInt(null_or_index)) {
|
if (PyStackRef_IsTaggedInt(null_or_index)) {
|
||||||
next = _PyForIter_NextWithIndex(iter_o, null_or_index);
|
next = _PyForIter_NextWithIndex(iter_o, null_or_index);
|
||||||
if (PyStackRef_IsNull(next)) {
|
if (PyStackRef_IsNull(next)) {
|
||||||
null_or_index = PyStackRef_TagInt(-1);
|
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 1);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
@ -3191,6 +3190,7 @@ dummy_func(
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 1);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
|
||||||
INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
|
INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
4
Python/generated_cases.c.h
generated
4
Python/generated_cases.c.h
generated
|
@ -5759,9 +5759,7 @@
|
||||||
next = _PyForIter_NextWithIndex(iter_o, null_or_index);
|
next = _PyForIter_NextWithIndex(iter_o, null_or_index);
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
if (PyStackRef_IsNull(next)) {
|
if (PyStackRef_IsNull(next)) {
|
||||||
null_or_index = PyStackRef_TagInt(-1);
|
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 1);
|
||||||
stack_pointer[-1] = null_or_index;
|
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
|
null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
|
||||||
|
@ -7070,6 +7068,7 @@
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 1);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
|
||||||
INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
|
INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -7099,6 +7098,7 @@
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stack_pointer[-1] = null_or_index;
|
||||||
stack_pointer[0] = next;
|
stack_pointer[0] = next;
|
||||||
stack_pointer += 1;
|
stack_pointer += 1;
|
||||||
assert(WITHIN_STACK_BOUNDS());
|
assert(WITHIN_STACK_BOUNDS());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue