summaryrefslogtreecommitdiffstats
path: root/Python/compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/compile.c')
-rw-r--r--Python/compile.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 2a6291c..7cf05dd 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3075,7 +3075,12 @@ compiler_for(struct compiler *c, stmt_ty s)
ADDOP_JUMP(c, NO_LOCATION, JUMP, start);
USE_LABEL(c, cleanup);
+ /* It is important for instrumentation that the `END_FOR` comes first.
+ * Iteration over a generator will jump to the first of these instructions,
+ * but a non-generator will jump to a later instruction.
+ */
ADDOP(c, NO_LOCATION, END_FOR);
+ ADDOP(c, NO_LOCATION, POP_TOP);
compiler_pop_fblock(c, FOR_LOOP, start);
@@ -5390,7 +5395,12 @@ compiler_sync_comprehension_generator(struct compiler *c, location loc,
ADDOP_JUMP(c, elt_loc, JUMP, start);
USE_LABEL(c, anchor);
+ /* It is important for instrumentation that the `END_FOR` comes first.
+ * Iteration over a generator will jump to the first of these instructions,
+ * but a non-generator will jump to a later instruction.
+ */
ADDOP(c, NO_LOCATION, END_FOR);
+ ADDOP(c, NO_LOCATION, POP_TOP);
}
return SUCCESS;