diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2018-03-10 16:49:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-10 16:49:26 (GMT) |
commit | 67ee07795bcd84b679c000780212d4d81a1490a3 (patch) | |
tree | 70576a4c9554754165bdb1980c2d8c0ad44a3553 /Python/compile.c | |
parent | 24d3201eb7f0b39a7eaf2a5b2a2ceca10ad1f8eb (diff) | |
download | cpython-67ee07795bcd84b679c000780212d4d81a1490a3.zip cpython-67ee07795bcd84b679c000780212d4d81a1490a3.tar.gz cpython-67ee07795bcd84b679c000780212d4d81a1490a3.tar.bz2 |
bpo-33041: Add missed error checks when compile "async for" (#6053)
and remove redundant code.
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/Python/compile.c b/Python/compile.c index 6c9e795..fbd1fc9 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -2437,7 +2437,7 @@ compiler_async_for(struct compiler *c, stmt_ty s) _Py_IDENTIFIER(StopAsyncIteration); basicblock *try, *except, *end, *after_try, *try_cleanup, - *after_loop, *after_loop_else; + *after_loop_else; PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration); if (stop_aiter_error == NULL) { @@ -2449,14 +2449,14 @@ compiler_async_for(struct compiler *c, stmt_ty s) end = compiler_new_block(c); after_try = compiler_new_block(c); try_cleanup = compiler_new_block(c); - after_loop = compiler_new_block(c); after_loop_else = compiler_new_block(c); if (try == NULL || except == NULL || end == NULL - || after_try == NULL || try_cleanup == NULL) + || after_try == NULL || try_cleanup == NULL + || after_loop_else == NULL) return 0; - if (!compiler_push_fblock(c, FOR_LOOP, try, after_loop)) + if (!compiler_push_fblock(c, FOR_LOOP, try, end)) return 0; VISIT(c, expr, s->v.AsyncFor.iter); @@ -2504,10 +2504,6 @@ compiler_async_for(struct compiler *c, stmt_ty s) compiler_pop_fblock(c, FOR_LOOP, try); - /* Block reached after `break`ing from loop */ - compiler_use_next_block(c, after_loop); - ADDOP_JABS(c, JUMP_ABSOLUTE, end); - /* `else` block */ compiler_use_next_block(c, after_loop_else); VISIT_SEQ(c, stmt, s->v.For.orelse); @@ -4014,7 +4010,7 @@ compiler_async_comprehension_generator(struct compiler *c, _Py_IDENTIFIER(StopAsyncIteration); comprehension_ty gen; - basicblock *anchor, *skip, *if_cleanup, *try, + basicblock *anchor, *if_cleanup, *try, *after_try, *except, *try_cleanup; Py_ssize_t i, n; @@ -4027,13 +4023,12 @@ compiler_async_comprehension_generator(struct compiler *c, after_try = compiler_new_block(c); try_cleanup = compiler_new_block(c); except = compiler_new_block(c); - skip = compiler_new_block(c); if_cleanup = compiler_new_block(c); anchor = compiler_new_block(c); - if (skip == NULL || if_cleanup == NULL || anchor == NULL || + if (if_cleanup == NULL || anchor == NULL || try == NULL || after_try == NULL || - except == NULL || after_try == NULL) { + except == NULL || try_cleanup == NULL) { return 0; } @@ -4125,8 +4120,6 @@ compiler_async_comprehension_generator(struct compiler *c, default: return 0; } - - compiler_use_next_block(c, skip); } compiler_use_next_block(c, if_cleanup); ADDOP_JABS(c, JUMP_ABSOLUTE, try); |