mirror of
https://github.com/python/cpython.git
synced 2025-10-03 21:55:41 +00:00
[3.7] bpo-33041: Add missed error checks when compile "async for" (GH-6053) (GH-6060)
and remove redundant code.
(cherry picked from commit 67ee07795b
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
bf0d116517
commit
9e94c0d3c7
1 changed files with 7 additions and 13 deletions
|
@ -2337,7 +2337,7 @@ compiler_async_for(struct compiler *c, stmt_ty s)
|
||||||
_Py_IDENTIFIER(StopAsyncIteration);
|
_Py_IDENTIFIER(StopAsyncIteration);
|
||||||
|
|
||||||
basicblock *try, *except, *end, *after_try, *try_cleanup,
|
basicblock *try, *except, *end, *after_try, *try_cleanup,
|
||||||
*after_loop, *after_loop_else;
|
*after_loop_else;
|
||||||
|
|
||||||
PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration);
|
PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration);
|
||||||
if (stop_aiter_error == NULL) {
|
if (stop_aiter_error == NULL) {
|
||||||
|
@ -2349,14 +2349,14 @@ compiler_async_for(struct compiler *c, stmt_ty s)
|
||||||
end = compiler_new_block(c);
|
end = compiler_new_block(c);
|
||||||
after_try = compiler_new_block(c);
|
after_try = compiler_new_block(c);
|
||||||
try_cleanup = compiler_new_block(c);
|
try_cleanup = compiler_new_block(c);
|
||||||
after_loop = compiler_new_block(c);
|
|
||||||
after_loop_else = compiler_new_block(c);
|
after_loop_else = compiler_new_block(c);
|
||||||
|
|
||||||
if (try == NULL || except == NULL || end == NULL
|
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;
|
return 0;
|
||||||
|
|
||||||
ADDOP_JREL(c, SETUP_LOOP, after_loop);
|
ADDOP_JREL(c, SETUP_LOOP, end);
|
||||||
if (!compiler_push_fblock(c, LOOP, try))
|
if (!compiler_push_fblock(c, LOOP, try))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -2404,9 +2404,6 @@ compiler_async_for(struct compiler *c, stmt_ty s)
|
||||||
ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */
|
ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */
|
||||||
compiler_pop_fblock(c, LOOP, try);
|
compiler_pop_fblock(c, LOOP, try);
|
||||||
|
|
||||||
compiler_use_next_block(c, after_loop);
|
|
||||||
ADDOP_JABS(c, JUMP_ABSOLUTE, end);
|
|
||||||
|
|
||||||
compiler_use_next_block(c, after_loop_else);
|
compiler_use_next_block(c, after_loop_else);
|
||||||
VISIT_SEQ(c, stmt, s->v.For.orelse);
|
VISIT_SEQ(c, stmt, s->v.For.orelse);
|
||||||
|
|
||||||
|
@ -3893,7 +3890,7 @@ compiler_async_comprehension_generator(struct compiler *c,
|
||||||
_Py_IDENTIFIER(StopAsyncIteration);
|
_Py_IDENTIFIER(StopAsyncIteration);
|
||||||
|
|
||||||
comprehension_ty gen;
|
comprehension_ty gen;
|
||||||
basicblock *anchor, *skip, *if_cleanup, *try,
|
basicblock *anchor, *if_cleanup, *try,
|
||||||
*after_try, *except, *try_cleanup;
|
*after_try, *except, *try_cleanup;
|
||||||
Py_ssize_t i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
|
@ -3906,13 +3903,12 @@ compiler_async_comprehension_generator(struct compiler *c,
|
||||||
after_try = compiler_new_block(c);
|
after_try = compiler_new_block(c);
|
||||||
try_cleanup = compiler_new_block(c);
|
try_cleanup = compiler_new_block(c);
|
||||||
except = compiler_new_block(c);
|
except = compiler_new_block(c);
|
||||||
skip = compiler_new_block(c);
|
|
||||||
if_cleanup = compiler_new_block(c);
|
if_cleanup = compiler_new_block(c);
|
||||||
anchor = 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 ||
|
try == NULL || after_try == NULL ||
|
||||||
except == NULL || after_try == NULL) {
|
except == NULL || try_cleanup == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4004,8 +4000,6 @@ compiler_async_comprehension_generator(struct compiler *c,
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
compiler_use_next_block(c, skip);
|
|
||||||
}
|
}
|
||||||
compiler_use_next_block(c, if_cleanup);
|
compiler_use_next_block(c, if_cleanup);
|
||||||
ADDOP_JABS(c, JUMP_ABSOLUTE, try);
|
ADDOP_JABS(c, JUMP_ABSOLUTE, try);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue