Skip to content

Commit d379a92

Browse files
authored
[3.13] gh-123142: fix too wide source location of GET_ITER/GET_AITER (GH-123420). (#123435)
(cherry picked from commit 61bef62)
1 parent 19a1f18 commit d379a92

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
@@ -2676,14 +2676,17 @@ def initialized_with_pyrepl():
26762676

26772677

26782678
class BrokenIter:
2679-
def __init__(self, init_raises=False, next_raises=False):
2679+
def __init__(self, init_raises=False, next_raises=False, iter_raises=False):
26802680
if init_raises:
26812681
1/0
26822682
self.next_raises = next_raises
2683+
self.iter_raises = iter_raises
26832684

26842685
def __next__(self):
26852686
if self.next_raises:
26862687
1/0
26872688

26882689
def __iter__(self):
2690+
if self.iter_raises:
2691+
1/0
26892692
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
@@ -3160,7 +3160,7 @@ compiler_async_for(struct compiler *c, stmt_ty s)
31603160
NEW_JUMP_TARGET_LABEL(c, end);
31613161

31623162
VISIT(c, expr, s->v.AsyncFor.iter);
3163-
ADDOP(c, loc, GET_AITER);
3163+
ADDOP(c, LOC(s->v.AsyncFor.iter), GET_AITER);
31643164

31653165
USE_LABEL(c, start);
31663166
RETURN_IF_ERROR(compiler_push_fblock(c, loc, FOR_LOOP, start, end, NULL));
@@ -5484,7 +5484,7 @@ compiler_async_comprehension_generator(struct compiler *c, location loc,
54845484
else {
54855485
/* Sub-iter - calculate on the fly */
54865486
VISIT(c, expr, gen->iter);
5487-
ADDOP(c, loc, GET_AITER);
5487+
ADDOP(c, LOC(gen->iter), GET_AITER);
54885488
}
54895489
}
54905490

@@ -5774,15 +5774,14 @@ pop_inlined_comprehension_state(struct compiler *c, location loc,
57745774
}
57755775

57765776
static inline int
5777-
compiler_comprehension_iter(struct compiler *c, location loc,
5778-
comprehension_ty comp)
5777+
compiler_comprehension_iter(struct compiler *c, comprehension_ty comp)
57795778
{
57805779
VISIT(c, expr, comp->iter);
57815780
if (comp->is_async) {
5782-
ADDOP(c, loc, GET_AITER);
5781+
ADDOP(c, LOC(comp->iter), GET_AITER);
57835782
}
57845783
else {
5785-
ADDOP(c, loc, GET_ITER);
5784+
ADDOP(c, LOC(comp->iter), GET_ITER);
57865785
}
57875786
return SUCCESS;
57885787
}
@@ -5808,7 +5807,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
58085807

58095808
outermost = (comprehension_ty) asdl_seq_GET(generators, 0);
58105809
if (is_inlined) {
5811-
if (compiler_comprehension_iter(c, loc, outermost)) {
5810+
if (compiler_comprehension_iter(c, outermost)) {
58125811
goto error;
58135812
}
58145813
if (push_inlined_comprehension_state(c, loc, entry, &inline_state)) {
@@ -5894,7 +5893,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
58945893
}
58955894
Py_CLEAR(co);
58965895

5897-
if (compiler_comprehension_iter(c, loc, outermost)) {
5896+
if (compiler_comprehension_iter(c, outermost)) {
58985897
goto error;
58995898
}
59005899

0 commit comments

Comments
 (0)