[3.7] bpo-33041: Add missed error checks when compile "async for" (GH… · python/cpython@d082634 (original) (raw)

`@@ -2189,7 +2189,7 @@ compiler_async_for(struct compiler *c, stmt_ty s)

`

2189

2189

`_Py_IDENTIFIER(StopAsyncIteration);

`

2190

2190

``

2191

2191

`basicblock *try, *except, *end, *after_try, *try_cleanup,

`

2192

``

`-

*after_loop, *after_loop_else;

`

``

2192

`+

*after_loop_else;

`

2193

2193

``

2194

2194

`PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration);

`

2195

2195

`if (stop_aiter_error == NULL) {

`

`@@ -2201,14 +2201,14 @@ compiler_async_for(struct compiler *c, stmt_ty s)

`

2201

2201

`end = compiler_new_block(c);

`

2202

2202

`after_try = compiler_new_block(c);

`

2203

2203

`try_cleanup = compiler_new_block(c);

`

2204

``

`-

after_loop = compiler_new_block(c);

`

2205

2204

`after_loop_else = compiler_new_block(c);

`

2206

2205

``

2207

2206

`if (try == NULL || except == NULL || end == NULL

`

2208

``

`-

|| after_try == NULL || try_cleanup == NULL)

`

``

2207

`+

|| after_try == NULL || try_cleanup == NULL

`

``

2208

`+

|| after_loop_else == NULL)

`

2209

2209

`return 0;

`

2210

2210

``

2211

``

`-

ADDOP_JREL(c, SETUP_LOOP, after_loop);

`

``

2211

`+

ADDOP_JREL(c, SETUP_LOOP, end);

`

2212

2212

`if (!compiler_push_fblock(c, LOOP, try))

`

2213

2213

`return 0;

`

2214

2214

``

`@@ -2257,9 +2257,6 @@ compiler_async_for(struct compiler *c, stmt_ty s)

`

2257

2257

`ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */

`

2258

2258

`compiler_pop_fblock(c, LOOP, try);

`

2259

2259

``

2260

``

`-

compiler_use_next_block(c, after_loop);

`

2261

``

`-

ADDOP_JABS(c, JUMP_ABSOLUTE, end);

`

2262

``

-

2263

2260

`compiler_use_next_block(c, after_loop_else);

`

2264

2261

`VISIT_SEQ(c, stmt, s->v.For.orelse);

`

2265

2262

``

`@@ -3753,7 +3750,7 @@ compiler_async_comprehension_generator(struct compiler *c,

`

3753

3750

`_Py_IDENTIFIER(StopAsyncIteration);

`

3754

3751

``

3755

3752

`comprehension_ty gen;

`

3756

``

`-

basicblock *anchor, *skip, *if_cleanup, *try,

`

``

3753

`+

basicblock *anchor, *if_cleanup, *try,

`

3757

3754

`*after_try, *except, *try_cleanup;

`

3758

3755

`Py_ssize_t i, n;

`

3759

3756

``

`@@ -3766,13 +3763,12 @@ compiler_async_comprehension_generator(struct compiler *c,

`

3766

3763

`after_try = compiler_new_block(c);

`

3767

3764

`try_cleanup = compiler_new_block(c);

`

3768

3765

`except = compiler_new_block(c);

`

3769

``

`-

skip = compiler_new_block(c);

`

3770

3766

`if_cleanup = compiler_new_block(c);

`

3771

3767

`anchor = compiler_new_block(c);

`

3772

3768

``

3773

``

`-

if (skip == NULL || if_cleanup == NULL || anchor == NULL ||

`

``

3769

`+

if (if_cleanup == NULL || anchor == NULL ||

`

3774

3770

`try == NULL || after_try == NULL ||

`

3775

``

`-

except == NULL || after_try == NULL) {

`

``

3771

`+

except == NULL || try_cleanup == NULL) {

`

3776

3772

`return 0;

`

3777

3773

` }

`

3778

3774

``

`@@ -3866,8 +3862,6 @@ compiler_async_comprehension_generator(struct compiler *c,

`

3866

3862

`default:

`

3867

3863

`return 0;

`

3868

3864

` }

`

3869

``

-

3870

``

`-

compiler_use_next_block(c, skip);

`

3871

3865

` }

`

3872

3866

`compiler_use_next_block(c, if_cleanup);

`

3873

3867

`ADDOP_JABS(c, JUMP_ABSOLUTE, try);

`