Skip to content

Commit 61bef62

Browse files
authored
gh-123142: fix too wide source location of GET_ITER/GET_AITER (#123420)
1 parent 40fff90 commit 61bef62

File tree

6 files changed

+40
-9
lines changed

6 files changed

+40
-9
lines changed

Lib/test/support/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2850,14 +2850,17 @@ def get_signal_name(exitcode):
28502850
return None
28512851

28522852
class BrokenIter:
2853-
def __init__(self, init_raises=False, next_raises=False):
2853+
def __init__(self, init_raises=False, next_raises=False, iter_raises=False):
28542854
if init_raises:
28552855
1/0
28562856
self.next_raises = next_raises
2857+
self.iter_raises = iter_raises
28572858

28582859
def __next__(self):
28592860
if self.next_raises:
28602861
1/0
28612862

28622863
def __iter__(self):
2864+
if self.iter_raises:
2865+
1/0
28632866
return self

Lib/test/test_dictcomps.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,15 @@ def next_raises():
145145
except Exception as e:
146146
return e
147147

148+
def iter_raises():
149+
try:
150+
{x:x for x in BrokenIter(iter_raises=True)}
151+
except Exception as e:
152+
return e
153+
148154
for func, expected in [(init_raises, "BrokenIter(init_raises=True)"),
149155
(next_raises, "BrokenIter(next_raises=True)"),
156+
(iter_raises, "BrokenIter(iter_raises=True)"),
150157
]:
151158
with self.subTest(func):
152159
exc = func()

Lib/test/test_iter.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,8 +1163,16 @@ def next_raises():
11631163
except Exception as e:
11641164
return e
11651165

1166+
def iter_raises():
1167+
try:
1168+
for x in BrokenIter(iter_raises=True):
1169+
pass
1170+
except Exception as e:
1171+
return e
1172+
11661173
for func, expected in [(init_raises, "BrokenIter(init_raises=True)"),
11671174
(next_raises, "BrokenIter(next_raises=True)"),
1175+
(iter_raises, "BrokenIter(iter_raises=True)"),
11681176
]:
11691177
with self.subTest(func):
11701178
exc = func()

Lib/test/test_listcomps.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,8 +730,15 @@ def next_raises():
730730
except Exception as e:
731731
return e
732732

733+
def iter_raises():
734+
try:
735+
[x for x in BrokenIter(iter_raises=True)]
736+
except Exception as e:
737+
return e
738+
733739
for func, expected in [(init_raises, "BrokenIter(init_raises=True)"),
734740
(next_raises, "BrokenIter(next_raises=True)"),
741+
(iter_raises, "BrokenIter(iter_raises=True)"),
735742
]:
736743
with self.subTest(func):
737744
exc = func()

Lib/test/test_setcomps.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,15 @@ def next_raises():
168168
except Exception as e:
169169
return e
170170

171+
def iter_raises():
172+
try:
173+
{x for x in BrokenIter(iter_raises=True)}
174+
except Exception as e:
175+
return e
176+
171177
for func, expected in [(init_raises, "BrokenIter(init_raises=True)"),
172178
(next_raises, "BrokenIter(next_raises=True)"),
179+
(iter_raises, "BrokenIter(iter_raises=True)"),
173180
]:
174181
with self.subTest(func):
175182
exc = func()

Python/compile.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2990,7 +2990,7 @@ codegen_async_for(struct compiler *c, stmt_ty s)
29902990
NEW_JUMP_TARGET_LABEL(c, end);
29912991

29922992
VISIT(c, expr, s->v.AsyncFor.iter);
2993-
ADDOP(c, loc, GET_AITER);
2993+
ADDOP(c, LOC(s->v.AsyncFor.iter), GET_AITER);
29942994

29952995
USE_LABEL(c, start);
29962996
RETURN_IF_ERROR(compiler_push_fblock(c, loc, FOR_LOOP, start, end, NULL));
@@ -5284,7 +5284,7 @@ codegen_async_comprehension_generator(struct compiler *c, location loc,
52845284
else {
52855285
/* Sub-iter - calculate on the fly */
52865286
VISIT(c, expr, gen->iter);
5287-
ADDOP(c, loc, GET_AITER);
5287+
ADDOP(c, LOC(gen->iter), GET_AITER);
52885288
}
52895289
}
52905290

@@ -5618,15 +5618,14 @@ pop_inlined_comprehension_state(struct compiler *c, location loc,
56185618
}
56195619

56205620
static inline int
5621-
codegen_comprehension_iter(struct compiler *c, location loc,
5622-
comprehension_ty comp)
5621+
codegen_comprehension_iter(struct compiler *c, comprehension_ty comp)
56235622
{
56245623
VISIT(c, expr, comp->iter);
56255624
if (comp->is_async) {
5626-
ADDOP(c, loc, GET_AITER);
5625+
ADDOP(c, LOC(comp->iter), GET_AITER);
56275626
}
56285627
else {
5629-
ADDOP(c, loc, GET_ITER);
5628+
ADDOP(c, LOC(comp->iter), GET_ITER);
56305629
}
56315630
return SUCCESS;
56325631
}
@@ -5654,7 +5653,7 @@ codegen_comprehension(struct compiler *c, expr_ty e, int type,
56545653

56555654
outermost = (comprehension_ty) asdl_seq_GET(generators, 0);
56565655
if (is_inlined) {
5657-
if (codegen_comprehension_iter(c, loc, outermost)) {
5656+
if (codegen_comprehension_iter(c, outermost)) {
56585657
goto error;
56595658
}
56605659
if (push_inlined_comprehension_state(c, loc, entry, &inline_state)) {
@@ -5736,7 +5735,7 @@ codegen_comprehension(struct compiler *c, expr_ty e, int type,
57365735
}
57375736
Py_CLEAR(co);
57385737

5739-
if (codegen_comprehension_iter(c, loc, outermost)) {
5738+
if (codegen_comprehension_iter(c, outermost)) {
57405739
goto error;
57415740
}
57425741

0 commit comments

Comments
 (0)