Skip to content

Commit 39c06eb

Browse files
committed
Fix set_f_lineno: deferred stack unwinding, correct line events, stack analysis fixes
- Move lasti increment before line event so f_lineno returns correct line - Skip RESUME instruction from generating line events - Defer stack pops via pending_stack_pops/pending_unwind_from_stack to avoid deadlock (execution loop holds state mutex) - Fix ForIter exhaust target in mark_stacks to skip END_FOR (matching execute_for_iter runtime behavior) - Prevent exception handler paths from overwriting normal-flow stacks in mark_stacks jump handlers - Remove expectedFailure from 31 now-passing jump tests
1 parent 314c465 commit 39c06eb

3 files changed

Lines changed: 140 additions & 125 deletions

File tree

Lib/test/test_sys_settrace.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,23 +1393,17 @@ def test(self):
13931393

13941394
## The first set of 'jump' tests are for things that are allowed:
13951395

1396-
# TODO: RUSTPYTHON
1397-
@unittest.expectedFailure
13981396
@jump_test(1, 3, [3])
13991397
def test_jump_simple_forwards(output):
14001398
output.append(1)
14011399
output.append(2)
14021400
output.append(3)
14031401

1404-
# TODO: RUSTPYTHON
1405-
@unittest.expectedFailure
14061402
@jump_test(2, 1, [1, 1, 2])
14071403
def test_jump_simple_backwards(output):
14081404
output.append(1)
14091405
output.append(2)
14101406

1411-
# TODO: RUSTPYTHON
1412-
@unittest.expectedFailure
14131407
@jump_test(3, 5, [2, 5])
14141408
def test_jump_out_of_block_forwards(output):
14151409
for i in 1, 2:
@@ -1418,8 +1412,6 @@ def test_jump_out_of_block_forwards(output):
14181412
output.append(4)
14191413
output.append(5)
14201414

1421-
# TODO: RUSTPYTHON
1422-
@unittest.expectedFailure
14231415
@jump_test(6, 1, [1, 3, 5, 1, 3, 5, 6, 7])
14241416
def test_jump_out_of_block_backwards(output):
14251417
output.append(1)
@@ -1451,8 +1443,6 @@ async def test_jump_out_of_async_for_block_backwards(output):
14511443
output.append(5)
14521444
output.append(6)
14531445

1454-
# TODO: RUSTPYTHON
1455-
@unittest.expectedFailure
14561446
@jump_test(1, 2, [3])
14571447
def test_jump_to_codeless_line(output):
14581448
output.append(1)
@@ -1465,8 +1455,6 @@ def test_jump_to_same_line(output):
14651455
output.append(2)
14661456
output.append(3)
14671457

1468-
# TODO: RUSTPYTHON
1469-
@unittest.expectedFailure
14701458
# Tests jumping within a finally block, and over one.
14711459
@jump_test(4, 9, [2, 9])
14721460
def test_jump_in_nested_finally(output):
@@ -1480,8 +1468,6 @@ def test_jump_in_nested_finally(output):
14801468
output.append(8)
14811469
output.append(9)
14821470

1483-
# TODO: RUSTPYTHON
1484-
@unittest.expectedFailure
14851471
@jump_test(6, 7, [2, 7], (ZeroDivisionError, ''))
14861472
def test_jump_in_nested_finally_2(output):
14871473
try:
@@ -1493,8 +1479,6 @@ def test_jump_in_nested_finally_2(output):
14931479
output.append(7)
14941480
output.append(8)
14951481

1496-
# TODO: RUSTPYTHON
1497-
@unittest.expectedFailure
14981482
@jump_test(6, 11, [2, 11], (ZeroDivisionError, ''))
14991483
def test_jump_in_nested_finally_3(output):
15001484
try:
@@ -1535,8 +1519,6 @@ def test_no_jump_infinite_while_loop(output):
15351519
output.append(3)
15361520
output.append(4)
15371521

1538-
# TODO: RUSTPYTHON
1539-
@unittest.expectedFailure
15401522
@jump_test(2, 4, [4, 4])
15411523
def test_jump_forwards_into_while_block(output):
15421524
i = 1
@@ -1553,8 +1535,6 @@ def test_jump_backwards_into_while_block(output):
15531535
i += 1
15541536
output.append(5)
15551537

1556-
# TODO: RUSTPYTHON
1557-
@unittest.expectedFailure
15581538
@jump_test(2, 3, [1, 3])
15591539
def test_jump_forwards_out_of_with_block(output):
15601540
with tracecontext(output, 1):
@@ -1569,8 +1549,6 @@ async def test_jump_forwards_out_of_async_with_block(output):
15691549
output.append(2)
15701550
output.append(3)
15711551

1572-
# TODO: RUSTPYTHON
1573-
@unittest.expectedFailure
15741552
@jump_test(3, 1, [1, 2, 1, 2, 3, -2])
15751553
def test_jump_backwards_out_of_with_block(output):
15761554
output.append(1)
@@ -1585,8 +1563,6 @@ async def test_jump_backwards_out_of_async_with_block(output):
15851563
async with asynctracecontext(output, 2):
15861564
output.append(3)
15871565

1588-
# TODO: RUSTPYTHON
1589-
@unittest.expectedFailure
15901566
@jump_test(2, 5, [5])
15911567
def test_jump_forwards_out_of_try_finally_block(output):
15921568
try:
@@ -1595,8 +1571,6 @@ def test_jump_forwards_out_of_try_finally_block(output):
15951571
output.append(4)
15961572
output.append(5)
15971573

1598-
# TODO: RUSTPYTHON
1599-
@unittest.expectedFailure
16001574
@jump_test(3, 1, [1, 1, 3, 5])
16011575
def test_jump_backwards_out_of_try_finally_block(output):
16021576
output.append(1)
@@ -1605,8 +1579,6 @@ def test_jump_backwards_out_of_try_finally_block(output):
16051579
finally:
16061580
output.append(5)
16071581

1608-
# TODO: RUSTPYTHON
1609-
@unittest.expectedFailure
16101582
@jump_test(2, 6, [6])
16111583
def test_jump_forwards_out_of_try_except_block(output):
16121584
try:
@@ -1616,8 +1588,6 @@ def test_jump_forwards_out_of_try_except_block(output):
16161588
raise
16171589
output.append(6)
16181590

1619-
# TODO: RUSTPYTHON
1620-
@unittest.expectedFailure
16211591
@jump_test(3, 1, [1, 1, 3])
16221592
def test_jump_backwards_out_of_try_except_block(output):
16231593
output.append(1)
@@ -1627,8 +1597,6 @@ def test_jump_backwards_out_of_try_except_block(output):
16271597
output.append(5)
16281598
raise
16291599

1630-
# TODO: RUSTPYTHON
1631-
@unittest.expectedFailure
16321600
@jump_test(5, 7, [4, 7, 8])
16331601
def test_jump_between_except_blocks(output):
16341602
try:
@@ -1640,8 +1608,6 @@ def test_jump_between_except_blocks(output):
16401608
output.append(7)
16411609
output.append(8)
16421610

1643-
# TODO: RUSTPYTHON
1644-
@unittest.expectedFailure
16451611
@jump_test(5, 6, [4, 6, 7])
16461612
def test_jump_within_except_block(output):
16471613
try:
@@ -1652,8 +1618,6 @@ def test_jump_within_except_block(output):
16521618
output.append(6)
16531619
output.append(7)
16541620

1655-
# TODO: RUSTPYTHON
1656-
@unittest.expectedFailure
16571621
@jump_test(2, 4, [1, 4, 5, -4])
16581622
def test_jump_across_with(output):
16591623
output.append(1)
@@ -1672,8 +1636,6 @@ async def test_jump_across_async_with(output):
16721636
async with asynctracecontext(output, 4):
16731637
output.append(5)
16741638

1675-
# TODO: RUSTPYTHON
1676-
@unittest.expectedFailure
16771639
@jump_test(4, 5, [1, 3, 5, 6])
16781640
def test_jump_out_of_with_block_within_for_block(output):
16791641
output.append(1)
@@ -1694,8 +1656,6 @@ async def test_jump_out_of_async_with_block_within_for_block(output):
16941656
output.append(5)
16951657
output.append(6)
16961658

1697-
# TODO: RUSTPYTHON
1698-
@unittest.expectedFailure
16991659
@jump_test(4, 5, [1, 2, 3, 5, -2, 6])
17001660
def test_jump_out_of_with_block_within_with_block(output):
17011661
output.append(1)
@@ -1716,8 +1676,6 @@ async def test_jump_out_of_async_with_block_within_with_block(output):
17161676
output.append(5)
17171677
output.append(6)
17181678

1719-
# TODO: RUSTPYTHON
1720-
@unittest.expectedFailure
17211679
@jump_test(5, 6, [2, 4, 6, 7])
17221680
def test_jump_out_of_with_block_within_finally_block(output):
17231681
try:
@@ -1740,8 +1698,6 @@ async def test_jump_out_of_async_with_block_within_finally_block(output):
17401698
output.append(6)
17411699
output.append(7)
17421700

1743-
# TODO: RUSTPYTHON
1744-
@unittest.expectedFailure
17451701
@jump_test(8, 11, [1, 3, 5, 11, 12])
17461702
def test_jump_out_of_complex_nested_blocks(output):
17471703
output.append(1)
@@ -1757,8 +1713,6 @@ def test_jump_out_of_complex_nested_blocks(output):
17571713
output.append(11)
17581714
output.append(12)
17591715

1760-
# TODO: RUSTPYTHON
1761-
@unittest.expectedFailure
17621716
@jump_test(3, 5, [1, 2, 5])
17631717
def test_jump_out_of_with_assignment(output):
17641718
output.append(1)
@@ -1777,8 +1731,6 @@ async def test_jump_out_of_async_with_assignment(output):
17771731
output.append(4)
17781732
output.append(5)
17791733

1780-
# TODO: RUSTPYTHON
1781-
@unittest.expectedFailure
17821734
@jump_test(3, 6, [1, 6, 8, 9])
17831735
def test_jump_over_return_in_try_finally_block(output):
17841736
output.append(1)
@@ -1791,8 +1743,6 @@ def test_jump_over_return_in_try_finally_block(output):
17911743
output.append(8)
17921744
output.append(9)
17931745

1794-
# TODO: RUSTPYTHON
1795-
@unittest.expectedFailure
17961746
@jump_test(5, 8, [1, 3, 8, 10, 11, 13])
17971747
def test_jump_over_break_in_try_finally_block(output):
17981748
output.append(1)
@@ -1809,8 +1759,6 @@ def test_jump_over_break_in_try_finally_block(output):
18091759
break
18101760
output.append(13)
18111761

1812-
# TODO: RUSTPYTHON
1813-
@unittest.expectedFailure
18141762
@jump_test(1, 7, [7, 8])
18151763
def test_jump_over_for_block_before_else(output):
18161764
output.append(1)
@@ -2013,8 +1961,6 @@ def test_no_jump_between_except_blocks_2(output):
20131961
output.append(7)
20141962
output.append(8)
20151963

2016-
# TODO: RUSTPYTHON
2017-
@unittest.expectedFailure
20181964
@jump_test(1, 5, [5])
20191965
def test_jump_into_finally_block(output):
20201966
output.append(1)
@@ -2023,8 +1969,6 @@ def test_jump_into_finally_block(output):
20231969
finally:
20241970
output.append(5)
20251971

2026-
# TODO: RUSTPYTHON
2027-
@unittest.expectedFailure
20281972
@jump_test(3, 6, [2, 6, 7])
20291973
def test_jump_into_finally_block_from_try_block(output):
20301974
try:
@@ -2035,8 +1979,6 @@ def test_jump_into_finally_block_from_try_block(output):
20351979
output.append(6)
20361980
output.append(7)
20371981

2038-
# TODO: RUSTPYTHON
2039-
@unittest.expectedFailure
20401982
@jump_test(5, 1, [1, 3, 1, 3, 5])
20411983
def test_jump_out_of_finally_block(output):
20421984
output.append(1)
@@ -2115,8 +2057,6 @@ def test_no_jump_out_of_qualified_except_block(output):
21152057
output.append(6)
21162058
output.append(7)
21172059

2118-
# TODO: RUSTPYTHON
2119-
@unittest.expectedFailure
21202060
@jump_test(3, 5, [1, 2, 5, -2])
21212061
def test_jump_between_with_blocks(output):
21222062
output.append(1)
@@ -2185,8 +2125,6 @@ def test_no_jump_without_trace_function(self):
21852125
# triggered.
21862126
no_jump_without_trace_function()
21872127

2188-
# TODO: RUSTPYTHON
2189-
@unittest.expectedFailure
21902128
def test_large_function(self):
21912129
d = {}
21922130
exec("""def f(output): # line 0
@@ -2201,8 +2139,6 @@ def test_large_function(self):
22012139
f = d['f']
22022140
self.run_test(f, 2, 1007, [0])
22032141

2204-
# TODO: RUSTPYTHON
2205-
@unittest.expectedFailure
22062142
def test_jump_to_firstlineno(self):
22072143
# This tests that PDB can jump back to the first line in a
22082144
# file. See issue #1689458. It can only be triggered in a

0 commit comments

Comments
 (0)