Skip to content

Commit 0181aa2

Browse files
authored
[3.12] gh-123142: fix too wide source location of GET_ITER/GET_AITER (GH-123420). (#123436)
(cherry picked from commit 61bef62)
1 parent ccc6c2b commit 0181aa2

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
@@ -2472,14 +2472,17 @@ def is_slot_wrapper(name, value):
24722472

24732473

24742474
class BrokenIter:
2475-
def __init__(self, init_raises=False, next_raises=False):
2475+
def __init__(self, init_raises=False, next_raises=False, iter_raises=False):
24762476
if init_raises:
24772477
1/0
24782478
self.next_raises = next_raises
2479+
self.iter_raises = iter_raises
24792480

24802481
def __next__(self):
24812482
if self.next_raises:
24822483
1/0
24832484

24842485
def __iter__(self):
2486+
if self.iter_raises:
2487+
1/0
24852488
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
@@ -725,8 +725,15 @@ def next_raises():
725725
except Exception as e:
726726
return e
727727

728+
def iter_raises():
729+
try:
730+
[x for x in BrokenIter(iter_raises=True)]
731+
except Exception as e:
732+
return e
733+
728734
for func, expected in [(init_raises, "BrokenIter(init_raises=True)"),
729735
(next_raises, "BrokenIter(next_raises=True)"),
736+
(iter_raises, "BrokenIter(iter_raises=True)"),
730737
]:
731738
with self.subTest(func):
732739
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
@@ -3069,7 +3069,7 @@ compiler_async_for(struct compiler *c, stmt_ty s)
30693069
NEW_JUMP_TARGET_LABEL(c, end);
30703070

30713071
VISIT(c, expr, s->v.AsyncFor.iter);
3072-
ADDOP(c, loc, GET_AITER);
3072+
ADDOP(c, LOC(s->v.AsyncFor.iter), GET_AITER);
30733073

30743074
USE_LABEL(c, start);
30753075
RETURN_IF_ERROR(compiler_push_fblock(c, loc, FOR_LOOP, start, end, NULL));
@@ -5367,7 +5367,7 @@ compiler_async_comprehension_generator(struct compiler *c, location loc,
53675367
else {
53685368
/* Sub-iter - calculate on the fly */
53695369
VISIT(c, expr, gen->iter);
5370-
ADDOP(c, loc, GET_AITER);
5370+
ADDOP(c, LOC(gen->iter), GET_AITER);
53715371
}
53725372
}
53735373

@@ -5652,15 +5652,14 @@ pop_inlined_comprehension_state(struct compiler *c, location loc,
56525652
}
56535653

56545654
static inline int
5655-
compiler_comprehension_iter(struct compiler *c, location loc,
5656-
comprehension_ty comp)
5655+
compiler_comprehension_iter(struct compiler *c, comprehension_ty comp)
56575656
{
56585657
VISIT(c, expr, comp->iter);
56595658
if (comp->is_async) {
5660-
ADDOP(c, loc, GET_AITER);
5659+
ADDOP(c, LOC(comp->iter), GET_AITER);
56615660
}
56625661
else {
5663-
ADDOP(c, loc, GET_ITER);
5662+
ADDOP(c, LOC(comp->iter), GET_ITER);
56645663
}
56655664
return SUCCESS;
56665665
}
@@ -5686,7 +5685,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
56865685

56875686
outermost = (comprehension_ty) asdl_seq_GET(generators, 0);
56885687
if (is_inlined) {
5689-
if (compiler_comprehension_iter(c, loc, outermost)) {
5688+
if (compiler_comprehension_iter(c, outermost)) {
56905689
goto error;
56915690
}
56925691
if (push_inlined_comprehension_state(c, loc, entry, &inline_state)) {
@@ -5772,7 +5771,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
57725771
}
57735772
Py_CLEAR(co);
57745773

5775-
if (compiler_comprehension_iter(c, loc, outermost)) {
5774+
if (compiler_comprehension_iter(c, outermost)) {
57765775
goto error;
57775776
}
57785777

0 commit comments

Comments
 (0)