From 46491baa9df85f555cc75fef2da341c334a995e4 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Fri, 6 Mar 2026 21:52:19 -0500 Subject: [PATCH 01/48] Initial proof-of-concept for yielding synchronous functions. --- Include/internal/pycore_genobject.h | 2 + Include/internal/pycore_intrinsics.h | 3 +- Objects/genobject.c | 108 +++++++++++++++++++++++++++ Python/codegen.c | 5 +- Python/intrinsics.c | 1 + 5 files changed, 116 insertions(+), 3 deletions(-) diff --git a/Include/internal/pycore_genobject.h b/Include/internal/pycore_genobject.h index a3badb59cb771a..236c9a20229e64 100644 --- a/Include/internal/pycore_genobject.h +++ b/Include/internal/pycore_genobject.h @@ -32,10 +32,12 @@ PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); PyAPI_FUNC(PyObject *)_PyCoro_GetAwaitableIter(PyObject *o); PyAPI_FUNC(PyObject *)_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *); +PyAPI_FUNC(PyObject *)_PyAsyncGenYieldFrom_New(PyThreadState *state, PyObject *); extern PyTypeObject _PyCoroWrapper_Type; extern PyTypeObject _PyAsyncGenWrappedValue_Type; extern PyTypeObject _PyAsyncGenAThrow_Type; +extern PyTypeObject _PyAsyncGenYieldFrom_Type; #ifdef __cplusplus } diff --git a/Include/internal/pycore_intrinsics.h b/Include/internal/pycore_intrinsics.h index 39c2a30f6e979d..8befa343038e5b 100644 --- a/Include/internal/pycore_intrinsics.h +++ b/Include/internal/pycore_intrinsics.h @@ -18,8 +18,9 @@ #define INTRINSIC_TYPEVARTUPLE 9 #define INTRINSIC_SUBSCRIPT_GENERIC 10 #define INTRINSIC_TYPEALIAS 11 +#define INSTRINSIC_ASYNC_GEN_WRAP_YIELD_FROM 12 -#define MAX_INTRINSIC_1 11 +#define MAX_INTRINSIC_1 12 /* Binary Functions: */ diff --git a/Objects/genobject.c b/Objects/genobject.c index 5088500fc4142b..4cb7437cbf87b1 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2605,3 +2605,111 @@ async_gen_athrow_new(PyAsyncGenObject *gen, PyObject *args) _PyObject_GC_TRACK((PyObject*)o); return (PyObject*)o; } + +typedef struct { + PyObject_HEAD + PyObject *agyf_iterator; +} _PyAsyncGenYieldFrom; + +#define _PyAsyncGenYieldFrom_CAST(op) ((_PyAsyncGenYieldFrom *)op) + +static int +async_gen_yield_from_traverse(PyObject *op, visitproc visit, void *arg) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + Py_VISIT(self->agyf_iterator); + return 0; +} + +static int +async_gen_yield_from_clear(PyObject *op) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + Py_CLEAR(self->agyf_iterator); + return 0; +} + +static void +async_gen_yield_from_dealloc(PyObject *op) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + _PyObject_GC_UNTRACK(op); + (void)async_gen_yield_from_clear(op); + PyObject_GC_Del(op); +} + +static PyObject * +async_gen_yield_from_iternext(PyObject *op) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + PyObject *result = PyIter_Next(self->agyf_iterator); + if (result == NULL) { + return NULL; + } + + PyObject *wrapped = _PyAsyncGenValueWrapperNew(_PyThreadState_GET(), result); + Py_DECREF(result); + return wrapped; +} + +PyTypeObject _PyAsyncGenYieldFrom_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "async_generator_yield_from", /* tp_name */ + sizeof(_PyAsyncGenYieldFrom), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + async_gen_yield_from_dealloc, /* tp_dealloc */ + 0, /* tp_vectorcall_offset */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_as_async */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + async_gen_yield_from_traverse, /* tp_traverse */ + async_gen_yield_from_clear, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + async_gen_yield_from_iternext, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ +}; + + +PyObject * +_PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterator) +{ + assert(tstate != NULL); + assert(iterator != NULL); + _PyAsyncGenYieldFrom *yield_from = PyObject_GC_New(_PyAsyncGenYieldFrom, + &_PyAsyncGenYieldFrom_Type); + if (yield_from == NULL) { + return NULL; + } + yield_from->agyf_iterator = Py_NewRef(iterator); + _PyObject_GC_TRACK((PyObject *)yield_from); + return (PyObject *)yield_from; +} \ No newline at end of file diff --git a/Python/codegen.c b/Python/codegen.c index 5749b615386717..189043228220e4 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -5404,10 +5404,11 @@ codegen_visit_expr(compiler *c, expr_ty e) if (!_PyST_IsFunctionLike(SYMTABLE_ENTRY(c))) { return _PyCompile_Error(c, loc, "'yield from' outside function"); } + + VISIT(c, expr, e->v.YieldFrom.value); if (SCOPE_TYPE(c) == COMPILE_SCOPE_ASYNC_FUNCTION) { - return _PyCompile_Error(c, loc, "'yield from' inside async function"); + ADDOP_I(c, loc, CALL_INTRINSIC_1, INSTRINSIC_ASYNC_GEN_WRAP_YIELD_FROM); } - VISIT(c, expr, e->v.YieldFrom.value); ADDOP(c, loc, GET_YIELD_FROM_ITER); ADDOP_LOAD_CONST(c, loc, Py_None); ADD_YIELD_FROM(c, loc, 0); diff --git a/Python/intrinsics.c b/Python/intrinsics.c index 9cfc285c6a5925..10b9bfea44b43f 100644 --- a/Python/intrinsics.c +++ b/Python/intrinsics.c @@ -219,6 +219,7 @@ _PyIntrinsics_UnaryFunctions[] = { INTRINSIC_FUNC_ENTRY(INTRINSIC_TYPEVARTUPLE, _Py_make_typevartuple) INTRINSIC_FUNC_ENTRY(INTRINSIC_SUBSCRIPT_GENERIC, _Py_subscript_generic) INTRINSIC_FUNC_ENTRY(INTRINSIC_TYPEALIAS, _Py_make_typealias) + INTRINSIC_FUNC_ENTRY(INSTRINSIC_ASYNC_GEN_WRAP_YIELD_FROM, _PyAsyncGenYieldFrom_New) }; From 075a6abaeeee3687618e61ddb75f91a026d40a23 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Fri, 6 Mar 2026 22:31:59 -0500 Subject: [PATCH 02/48] Get the parser working with "async yield from". --- Grammar/python.gram | 3 +- Include/internal/pycore_ast.h | 16 +- Include/internal/pycore_ast_state.h | 1 + Parser/Python.asdl | 1 + Parser/parser.c | 3958 ++++++++++++++------------- Python/Python-ast.c | 103 + Python/ast.c | 3 + Python/codegen.c | 10 + 8 files changed, 2162 insertions(+), 1933 deletions(-) diff --git a/Grammar/python.gram b/Grammar/python.gram index 1212e8640a1a9c..f3f26aef576fb7 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -127,7 +127,7 @@ simple_stmt[stmt_ty] (memo): | &'raise' raise_stmt | &'pass' pass_stmt | &'del' del_stmt - | &'yield' yield_stmt + | &('yield' | 'async') yield_stmt | &'assert' assert_stmt | &'break' break_stmt | &'continue' continue_stmt @@ -724,6 +724,7 @@ if_expression[expr_ty]: yield_expr[expr_ty]: | 'yield' 'from' a=expression { _PyAST_YieldFrom(a, EXTRA) } | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) } + | 'async' 'yield' 'from' a=expression { _PyAST_AsyncYieldFrom(a, EXTRA) } star_expressions[expr_ty]: | a=star_expression b=(',' c=star_expression { c })+ [','] { diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h index b47398669bbe51..1d60cdfdcfae95 100644 --- a/Include/internal/pycore_ast.h +++ b/Include/internal/pycore_ast.h @@ -362,11 +362,11 @@ enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4, Lambda_kind=5, IfExp_kind=6, Dict_kind=7, Set_kind=8, ListComp_kind=9, SetComp_kind=10, DictComp_kind=11, GeneratorExp_kind=12, Await_kind=13, Yield_kind=14, - YieldFrom_kind=15, Compare_kind=16, Call_kind=17, - FormattedValue_kind=18, Interpolation_kind=19, - JoinedStr_kind=20, TemplateStr_kind=21, Constant_kind=22, - Attribute_kind=23, Subscript_kind=24, Starred_kind=25, - Name_kind=26, List_kind=27, Tuple_kind=28, Slice_kind=29}; + YieldFrom_kind=15, AsyncYieldFrom_kind=16, Compare_kind=17, + Call_kind=18, FormattedValue_kind=19, Interpolation_kind=20, + JoinedStr_kind=21, TemplateStr_kind=22, Constant_kind=23, + Attribute_kind=24, Subscript_kind=25, Starred_kind=26, + Name_kind=27, List_kind=28, Tuple_kind=29, Slice_kind=30}; struct _expr { enum _expr_kind kind; union { @@ -444,6 +444,10 @@ struct _expr { expr_ty value; } YieldFrom; + struct { + expr_ty value; + } AsyncYieldFrom; + struct { expr_ty left; asdl_int_seq *ops; @@ -826,6 +830,8 @@ expr_ty _PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); expr_ty _PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); +expr_ty _PyAST_AsyncYieldFrom(expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); expr_ty _PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); diff --git a/Include/internal/pycore_ast_state.h b/Include/internal/pycore_ast_state.h index 1caf200ee34b2a..27236f27726d7e 100644 --- a/Include/internal/pycore_ast_state.h +++ b/Include/internal/pycore_ast_state.h @@ -27,6 +27,7 @@ struct ast_state { PyObject *AsyncFor_type; PyObject *AsyncFunctionDef_type; PyObject *AsyncWith_type; + PyObject *AsyncYieldFrom_type; PyObject *Attribute_type; PyObject *AugAssign_type; PyObject *Await_type; diff --git a/Parser/Python.asdl b/Parser/Python.asdl index 2f0b123858f8d1..c1ef5a29118bb4 100644 --- a/Parser/Python.asdl +++ b/Parser/Python.asdl @@ -73,6 +73,7 @@ module Python | Await(expr value) | Yield(expr? value) | YieldFrom(expr value) + | AsyncYieldFrom(expr value) -- need sequences for compare to distinguish between -- x < 4 < 3 and (x < 4) < 3 | Compare(expr left, cmpop* ops, expr* comparators) diff --git a/Parser/parser.c b/Parser/parser.c index 37c19c4c9020c8..498d42a244082a 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -22,59 +22,59 @@ static KeywordToken *reserved_keywords[] = { (KeywordToken[]) {{NULL, -1}}, (KeywordToken[]) {{NULL, -1}}, (KeywordToken[]) { - {"if", 695}, - {"as", 693}, - {"in", 708}, - {"or", 589}, - {"is", 597}, + {"if", 699}, + {"as", 697}, + {"in", 712}, + {"or", 593}, + {"is", 601}, {NULL, -1}, }, (KeywordToken[]) { - {"del", 634}, - {"def", 712}, - {"for", 707}, - {"try", 669}, - {"and", 590}, - {"not", 716}, + {"del", 638}, + {"def", 716}, + {"for", 711}, + {"try", 673}, + {"and", 594}, + {"not", 720}, {NULL, -1}, }, (KeywordToken[]) { - {"from", 646}, - {"pass", 527}, - {"with", 660}, - {"elif", 700}, - {"else", 699}, - {"None", 628}, - {"True", 627}, + {"from", 650}, + {"pass", 528}, + {"with", 664}, + {"elif", 704}, + {"else", 703}, + {"None", 632}, + {"True", 631}, {NULL, -1}, }, (KeywordToken[]) { - {"raise", 632}, - {"yield", 588}, - {"break", 528}, - {"async", 711}, - {"class", 714}, - {"while", 702}, - {"False", 629}, - {"await", 598}, + {"raise", 636}, + {"yield", 591}, + {"async", 715}, + {"break", 529}, + {"class", 718}, + {"while", 706}, + {"False", 633}, + {"await", 602}, {NULL, -1}, }, (KeywordToken[]) { - {"import", 647}, - {"return", 522}, - {"assert", 638}, - {"global", 530}, - {"except", 690}, - {"lambda", 622}, + {"import", 651}, + {"return", 523}, + {"assert", 642}, + {"global", 531}, + {"except", 694}, + {"lambda", 626}, {NULL, -1}, }, (KeywordToken[]) { - {"finally", 686}, + {"finally", 690}, {NULL, -1}, }, (KeywordToken[]) { - {"continue", 529}, - {"nonlocal", 531}, + {"continue", 530}, + {"nonlocal", 532}, {NULL, -1}, }, }; @@ -373,118 +373,118 @@ static char *soft_keywords[] = { #define _tmp_9_type 1284 #define _tmp_10_type 1285 #define _tmp_11_type 1286 -#define _loop1_12_type 1287 -#define _loop0_13_type 1288 -#define _gather_14_type 1289 -#define _tmp_15_type 1290 +#define _tmp_12_type 1287 +#define _loop1_13_type 1288 +#define _loop0_14_type 1289 +#define _gather_15_type 1290 #define _tmp_16_type 1291 -#define _loop0_17_type 1292 -#define _loop1_18_type 1293 -#define _loop0_19_type 1294 -#define _gather_20_type 1295 -#define _tmp_21_type 1296 -#define _loop0_22_type 1297 -#define _gather_23_type 1298 -#define _loop1_24_type 1299 -#define _tmp_25_type 1300 +#define _tmp_17_type 1292 +#define _loop0_18_type 1293 +#define _loop1_19_type 1294 +#define _loop0_20_type 1295 +#define _gather_21_type 1296 +#define _tmp_22_type 1297 +#define _loop0_23_type 1298 +#define _gather_24_type 1299 +#define _loop1_25_type 1300 #define _tmp_26_type 1301 -#define _loop0_27_type 1302 +#define _tmp_27_type 1302 #define _loop0_28_type 1303 -#define _loop1_29_type 1304 +#define _loop0_29_type 1304 #define _loop1_30_type 1305 -#define _loop0_31_type 1306 -#define _loop1_32_type 1307 -#define _loop0_33_type 1308 -#define _gather_34_type 1309 -#define _tmp_35_type 1310 -#define _loop1_36_type 1311 +#define _loop1_31_type 1306 +#define _loop0_32_type 1307 +#define _loop1_33_type 1308 +#define _loop0_34_type 1309 +#define _gather_35_type 1310 +#define _tmp_36_type 1311 #define _loop1_37_type 1312 #define _loop1_38_type 1313 -#define _loop0_39_type 1314 -#define _gather_40_type 1315 -#define _tmp_41_type 1316 +#define _loop1_39_type 1314 +#define _loop0_40_type 1315 +#define _gather_41_type 1316 #define _tmp_42_type 1317 #define _tmp_43_type 1318 -#define _loop0_44_type 1319 -#define _gather_45_type 1320 -#define _loop0_46_type 1321 -#define _gather_47_type 1322 -#define _tmp_48_type 1323 -#define _loop0_49_type 1324 -#define _gather_50_type 1325 -#define _loop0_51_type 1326 -#define _gather_52_type 1327 -#define _loop0_53_type 1328 -#define _gather_54_type 1329 -#define _loop1_55_type 1330 +#define _tmp_44_type 1319 +#define _loop0_45_type 1320 +#define _gather_46_type 1321 +#define _loop0_47_type 1322 +#define _gather_48_type 1323 +#define _tmp_49_type 1324 +#define _loop0_50_type 1325 +#define _gather_51_type 1326 +#define _loop0_52_type 1327 +#define _gather_53_type 1328 +#define _loop0_54_type 1329 +#define _gather_55_type 1330 #define _loop1_56_type 1331 -#define _loop0_57_type 1332 -#define _gather_58_type 1333 -#define _loop0_59_type 1334 -#define _gather_60_type 1335 -#define _loop1_61_type 1336 +#define _loop1_57_type 1332 +#define _loop0_58_type 1333 +#define _gather_59_type 1334 +#define _loop0_60_type 1335 +#define _gather_61_type 1336 #define _loop1_62_type 1337 #define _loop1_63_type 1338 -#define _tmp_64_type 1339 -#define _loop0_65_type 1340 -#define _gather_66_type 1341 -#define _tmp_67_type 1342 +#define _loop1_64_type 1339 +#define _tmp_65_type 1340 +#define _loop0_66_type 1341 +#define _gather_67_type 1342 #define _tmp_68_type 1343 #define _tmp_69_type 1344 #define _tmp_70_type 1345 #define _tmp_71_type 1346 -#define _loop0_72_type 1347 +#define _tmp_72_type 1347 #define _loop0_73_type 1348 -#define _loop1_74_type 1349 +#define _loop0_74_type 1349 #define _loop1_75_type 1350 -#define _loop0_76_type 1351 -#define _loop1_77_type 1352 -#define _loop0_78_type 1353 +#define _loop1_76_type 1351 +#define _loop0_77_type 1352 +#define _loop1_78_type 1353 #define _loop0_79_type 1354 #define _loop0_80_type 1355 #define _loop0_81_type 1356 -#define _loop1_82_type 1357 +#define _loop0_82_type 1357 #define _loop1_83_type 1358 -#define _tmp_84_type 1359 -#define _loop0_85_type 1360 -#define _gather_86_type 1361 -#define _loop1_87_type 1362 -#define _loop0_88_type 1363 -#define _tmp_89_type 1364 -#define _loop0_90_type 1365 -#define _gather_91_type 1366 -#define _tmp_92_type 1367 -#define _loop0_93_type 1368 -#define _gather_94_type 1369 -#define _loop0_95_type 1370 -#define _gather_96_type 1371 -#define _loop0_97_type 1372 +#define _loop1_84_type 1359 +#define _tmp_85_type 1360 +#define _loop0_86_type 1361 +#define _gather_87_type 1362 +#define _loop1_88_type 1363 +#define _loop0_89_type 1364 +#define _tmp_90_type 1365 +#define _loop0_91_type 1366 +#define _gather_92_type 1367 +#define _tmp_93_type 1368 +#define _loop0_94_type 1369 +#define _gather_95_type 1370 +#define _loop0_96_type 1371 +#define _gather_97_type 1372 #define _loop0_98_type 1373 -#define _gather_99_type 1374 -#define _loop1_100_type 1375 -#define _tmp_101_type 1376 -#define _loop0_102_type 1377 -#define _gather_103_type 1378 -#define _loop0_104_type 1379 -#define _gather_105_type 1380 -#define _tmp_106_type 1381 +#define _loop0_99_type 1374 +#define _gather_100_type 1375 +#define _loop1_101_type 1376 +#define _tmp_102_type 1377 +#define _loop0_103_type 1378 +#define _gather_104_type 1379 +#define _loop0_105_type 1380 +#define _gather_106_type 1381 #define _tmp_107_type 1382 -#define _loop0_108_type 1383 -#define _gather_109_type 1384 -#define _tmp_110_type 1385 +#define _tmp_108_type 1383 +#define _loop0_109_type 1384 +#define _gather_110_type 1385 #define _tmp_111_type 1386 #define _tmp_112_type 1387 #define _tmp_113_type 1388 #define _tmp_114_type 1389 -#define _loop1_115_type 1390 -#define _tmp_116_type 1391 +#define _tmp_115_type 1390 +#define _loop1_116_type 1391 #define _tmp_117_type 1392 #define _tmp_118_type 1393 #define _tmp_119_type 1394 #define _tmp_120_type 1395 -#define _loop0_121_type 1396 +#define _tmp_121_type 1396 #define _loop0_122_type 1397 -#define _tmp_123_type 1398 +#define _loop0_123_type 1398 #define _tmp_124_type 1399 #define _tmp_125_type 1400 #define _tmp_126_type 1401 @@ -492,22 +492,22 @@ static char *soft_keywords[] = { #define _tmp_128_type 1403 #define _tmp_129_type 1404 #define _tmp_130_type 1405 -#define _loop0_131_type 1406 -#define _gather_132_type 1407 -#define _tmp_133_type 1408 +#define _tmp_131_type 1406 +#define _loop0_132_type 1407 +#define _gather_133_type 1408 #define _tmp_134_type 1409 #define _tmp_135_type 1410 #define _tmp_136_type 1411 -#define _loop0_137_type 1412 -#define _gather_138_type 1413 -#define _tmp_139_type 1414 -#define _loop0_140_type 1415 -#define _gather_141_type 1416 -#define _loop0_142_type 1417 -#define _gather_143_type 1418 -#define _tmp_144_type 1419 -#define _loop0_145_type 1420 -#define _tmp_146_type 1421 +#define _tmp_137_type 1412 +#define _loop0_138_type 1413 +#define _gather_139_type 1414 +#define _tmp_140_type 1415 +#define _loop0_141_type 1416 +#define _gather_142_type 1417 +#define _loop0_143_type 1418 +#define _gather_144_type 1419 +#define _tmp_145_type 1420 +#define _loop0_146_type 1421 #define _tmp_147_type 1422 #define _tmp_148_type 1423 #define _tmp_149_type 1424 @@ -535,13 +535,14 @@ static char *soft_keywords[] = { #define _tmp_171_type 1446 #define _tmp_172_type 1447 #define _tmp_173_type 1448 -#define _loop0_174_type 1449 -#define _tmp_175_type 1450 +#define _tmp_174_type 1449 +#define _loop0_175_type 1450 #define _tmp_176_type 1451 #define _tmp_177_type 1452 #define _tmp_178_type 1453 #define _tmp_179_type 1454 #define _tmp_180_type 1455 +#define _tmp_181_type 1456 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -830,118 +831,118 @@ static void *_tmp_8_rule(Parser *p); static void *_tmp_9_rule(Parser *p); static void *_tmp_10_rule(Parser *p); static void *_tmp_11_rule(Parser *p); -static asdl_seq *_loop1_12_rule(Parser *p); -static asdl_seq *_loop0_13_rule(Parser *p); -static asdl_seq *_gather_14_rule(Parser *p); -static void *_tmp_15_rule(Parser *p); +static void *_tmp_12_rule(Parser *p); +static asdl_seq *_loop1_13_rule(Parser *p); +static asdl_seq *_loop0_14_rule(Parser *p); +static asdl_seq *_gather_15_rule(Parser *p); static void *_tmp_16_rule(Parser *p); -static asdl_seq *_loop0_17_rule(Parser *p); -static asdl_seq *_loop1_18_rule(Parser *p); -static asdl_seq *_loop0_19_rule(Parser *p); -static asdl_seq *_gather_20_rule(Parser *p); -static void *_tmp_21_rule(Parser *p); -static asdl_seq *_loop0_22_rule(Parser *p); -static asdl_seq *_gather_23_rule(Parser *p); -static asdl_seq *_loop1_24_rule(Parser *p); -static void *_tmp_25_rule(Parser *p); +static void *_tmp_17_rule(Parser *p); +static asdl_seq *_loop0_18_rule(Parser *p); +static asdl_seq *_loop1_19_rule(Parser *p); +static asdl_seq *_loop0_20_rule(Parser *p); +static asdl_seq *_gather_21_rule(Parser *p); +static void *_tmp_22_rule(Parser *p); +static asdl_seq *_loop0_23_rule(Parser *p); +static asdl_seq *_gather_24_rule(Parser *p); +static asdl_seq *_loop1_25_rule(Parser *p); static void *_tmp_26_rule(Parser *p); -static asdl_seq *_loop0_27_rule(Parser *p); +static void *_tmp_27_rule(Parser *p); static asdl_seq *_loop0_28_rule(Parser *p); -static asdl_seq *_loop1_29_rule(Parser *p); +static asdl_seq *_loop0_29_rule(Parser *p); static asdl_seq *_loop1_30_rule(Parser *p); -static asdl_seq *_loop0_31_rule(Parser *p); -static asdl_seq *_loop1_32_rule(Parser *p); -static asdl_seq *_loop0_33_rule(Parser *p); -static asdl_seq *_gather_34_rule(Parser *p); -static void *_tmp_35_rule(Parser *p); -static asdl_seq *_loop1_36_rule(Parser *p); +static asdl_seq *_loop1_31_rule(Parser *p); +static asdl_seq *_loop0_32_rule(Parser *p); +static asdl_seq *_loop1_33_rule(Parser *p); +static asdl_seq *_loop0_34_rule(Parser *p); +static asdl_seq *_gather_35_rule(Parser *p); +static void *_tmp_36_rule(Parser *p); static asdl_seq *_loop1_37_rule(Parser *p); static asdl_seq *_loop1_38_rule(Parser *p); -static asdl_seq *_loop0_39_rule(Parser *p); -static asdl_seq *_gather_40_rule(Parser *p); -static void *_tmp_41_rule(Parser *p); +static asdl_seq *_loop1_39_rule(Parser *p); +static asdl_seq *_loop0_40_rule(Parser *p); +static asdl_seq *_gather_41_rule(Parser *p); static void *_tmp_42_rule(Parser *p); static void *_tmp_43_rule(Parser *p); -static asdl_seq *_loop0_44_rule(Parser *p); -static asdl_seq *_gather_45_rule(Parser *p); -static asdl_seq *_loop0_46_rule(Parser *p); -static asdl_seq *_gather_47_rule(Parser *p); -static void *_tmp_48_rule(Parser *p); -static asdl_seq *_loop0_49_rule(Parser *p); -static asdl_seq *_gather_50_rule(Parser *p); -static asdl_seq *_loop0_51_rule(Parser *p); -static asdl_seq *_gather_52_rule(Parser *p); -static asdl_seq *_loop0_53_rule(Parser *p); -static asdl_seq *_gather_54_rule(Parser *p); -static asdl_seq *_loop1_55_rule(Parser *p); +static void *_tmp_44_rule(Parser *p); +static asdl_seq *_loop0_45_rule(Parser *p); +static asdl_seq *_gather_46_rule(Parser *p); +static asdl_seq *_loop0_47_rule(Parser *p); +static asdl_seq *_gather_48_rule(Parser *p); +static void *_tmp_49_rule(Parser *p); +static asdl_seq *_loop0_50_rule(Parser *p); +static asdl_seq *_gather_51_rule(Parser *p); +static asdl_seq *_loop0_52_rule(Parser *p); +static asdl_seq *_gather_53_rule(Parser *p); +static asdl_seq *_loop0_54_rule(Parser *p); +static asdl_seq *_gather_55_rule(Parser *p); static asdl_seq *_loop1_56_rule(Parser *p); -static asdl_seq *_loop0_57_rule(Parser *p); -static asdl_seq *_gather_58_rule(Parser *p); -static asdl_seq *_loop0_59_rule(Parser *p); -static asdl_seq *_gather_60_rule(Parser *p); -static asdl_seq *_loop1_61_rule(Parser *p); +static asdl_seq *_loop1_57_rule(Parser *p); +static asdl_seq *_loop0_58_rule(Parser *p); +static asdl_seq *_gather_59_rule(Parser *p); +static asdl_seq *_loop0_60_rule(Parser *p); +static asdl_seq *_gather_61_rule(Parser *p); static asdl_seq *_loop1_62_rule(Parser *p); static asdl_seq *_loop1_63_rule(Parser *p); -static void *_tmp_64_rule(Parser *p); -static asdl_seq *_loop0_65_rule(Parser *p); -static asdl_seq *_gather_66_rule(Parser *p); -static void *_tmp_67_rule(Parser *p); +static asdl_seq *_loop1_64_rule(Parser *p); +static void *_tmp_65_rule(Parser *p); +static asdl_seq *_loop0_66_rule(Parser *p); +static asdl_seq *_gather_67_rule(Parser *p); static void *_tmp_68_rule(Parser *p); static void *_tmp_69_rule(Parser *p); static void *_tmp_70_rule(Parser *p); static void *_tmp_71_rule(Parser *p); -static asdl_seq *_loop0_72_rule(Parser *p); +static void *_tmp_72_rule(Parser *p); static asdl_seq *_loop0_73_rule(Parser *p); -static asdl_seq *_loop1_74_rule(Parser *p); +static asdl_seq *_loop0_74_rule(Parser *p); static asdl_seq *_loop1_75_rule(Parser *p); -static asdl_seq *_loop0_76_rule(Parser *p); -static asdl_seq *_loop1_77_rule(Parser *p); -static asdl_seq *_loop0_78_rule(Parser *p); +static asdl_seq *_loop1_76_rule(Parser *p); +static asdl_seq *_loop0_77_rule(Parser *p); +static asdl_seq *_loop1_78_rule(Parser *p); static asdl_seq *_loop0_79_rule(Parser *p); static asdl_seq *_loop0_80_rule(Parser *p); static asdl_seq *_loop0_81_rule(Parser *p); -static asdl_seq *_loop1_82_rule(Parser *p); +static asdl_seq *_loop0_82_rule(Parser *p); static asdl_seq *_loop1_83_rule(Parser *p); -static void *_tmp_84_rule(Parser *p); -static asdl_seq *_loop0_85_rule(Parser *p); -static asdl_seq *_gather_86_rule(Parser *p); -static asdl_seq *_loop1_87_rule(Parser *p); -static asdl_seq *_loop0_88_rule(Parser *p); -static void *_tmp_89_rule(Parser *p); -static asdl_seq *_loop0_90_rule(Parser *p); -static asdl_seq *_gather_91_rule(Parser *p); -static void *_tmp_92_rule(Parser *p); -static asdl_seq *_loop0_93_rule(Parser *p); -static asdl_seq *_gather_94_rule(Parser *p); -static asdl_seq *_loop0_95_rule(Parser *p); -static asdl_seq *_gather_96_rule(Parser *p); -static asdl_seq *_loop0_97_rule(Parser *p); +static asdl_seq *_loop1_84_rule(Parser *p); +static void *_tmp_85_rule(Parser *p); +static asdl_seq *_loop0_86_rule(Parser *p); +static asdl_seq *_gather_87_rule(Parser *p); +static asdl_seq *_loop1_88_rule(Parser *p); +static asdl_seq *_loop0_89_rule(Parser *p); +static void *_tmp_90_rule(Parser *p); +static asdl_seq *_loop0_91_rule(Parser *p); +static asdl_seq *_gather_92_rule(Parser *p); +static void *_tmp_93_rule(Parser *p); +static asdl_seq *_loop0_94_rule(Parser *p); +static asdl_seq *_gather_95_rule(Parser *p); +static asdl_seq *_loop0_96_rule(Parser *p); +static asdl_seq *_gather_97_rule(Parser *p); static asdl_seq *_loop0_98_rule(Parser *p); -static asdl_seq *_gather_99_rule(Parser *p); -static asdl_seq *_loop1_100_rule(Parser *p); -static void *_tmp_101_rule(Parser *p); -static asdl_seq *_loop0_102_rule(Parser *p); -static asdl_seq *_gather_103_rule(Parser *p); -static asdl_seq *_loop0_104_rule(Parser *p); -static asdl_seq *_gather_105_rule(Parser *p); -static void *_tmp_106_rule(Parser *p); +static asdl_seq *_loop0_99_rule(Parser *p); +static asdl_seq *_gather_100_rule(Parser *p); +static asdl_seq *_loop1_101_rule(Parser *p); +static void *_tmp_102_rule(Parser *p); +static asdl_seq *_loop0_103_rule(Parser *p); +static asdl_seq *_gather_104_rule(Parser *p); +static asdl_seq *_loop0_105_rule(Parser *p); +static asdl_seq *_gather_106_rule(Parser *p); static void *_tmp_107_rule(Parser *p); -static asdl_seq *_loop0_108_rule(Parser *p); -static asdl_seq *_gather_109_rule(Parser *p); -static void *_tmp_110_rule(Parser *p); +static void *_tmp_108_rule(Parser *p); +static asdl_seq *_loop0_109_rule(Parser *p); +static asdl_seq *_gather_110_rule(Parser *p); static void *_tmp_111_rule(Parser *p); static void *_tmp_112_rule(Parser *p); static void *_tmp_113_rule(Parser *p); static void *_tmp_114_rule(Parser *p); -static asdl_seq *_loop1_115_rule(Parser *p); -static void *_tmp_116_rule(Parser *p); +static void *_tmp_115_rule(Parser *p); +static asdl_seq *_loop1_116_rule(Parser *p); static void *_tmp_117_rule(Parser *p); static void *_tmp_118_rule(Parser *p); static void *_tmp_119_rule(Parser *p); static void *_tmp_120_rule(Parser *p); -static asdl_seq *_loop0_121_rule(Parser *p); +static void *_tmp_121_rule(Parser *p); static asdl_seq *_loop0_122_rule(Parser *p); -static void *_tmp_123_rule(Parser *p); +static asdl_seq *_loop0_123_rule(Parser *p); static void *_tmp_124_rule(Parser *p); static void *_tmp_125_rule(Parser *p); static void *_tmp_126_rule(Parser *p); @@ -949,22 +950,22 @@ static void *_tmp_127_rule(Parser *p); static void *_tmp_128_rule(Parser *p); static void *_tmp_129_rule(Parser *p); static void *_tmp_130_rule(Parser *p); -static asdl_seq *_loop0_131_rule(Parser *p); -static asdl_seq *_gather_132_rule(Parser *p); -static void *_tmp_133_rule(Parser *p); +static void *_tmp_131_rule(Parser *p); +static asdl_seq *_loop0_132_rule(Parser *p); +static asdl_seq *_gather_133_rule(Parser *p); static void *_tmp_134_rule(Parser *p); static void *_tmp_135_rule(Parser *p); static void *_tmp_136_rule(Parser *p); -static asdl_seq *_loop0_137_rule(Parser *p); -static asdl_seq *_gather_138_rule(Parser *p); -static void *_tmp_139_rule(Parser *p); -static asdl_seq *_loop0_140_rule(Parser *p); -static asdl_seq *_gather_141_rule(Parser *p); -static asdl_seq *_loop0_142_rule(Parser *p); -static asdl_seq *_gather_143_rule(Parser *p); -static void *_tmp_144_rule(Parser *p); -static asdl_seq *_loop0_145_rule(Parser *p); -static void *_tmp_146_rule(Parser *p); +static void *_tmp_137_rule(Parser *p); +static asdl_seq *_loop0_138_rule(Parser *p); +static asdl_seq *_gather_139_rule(Parser *p); +static void *_tmp_140_rule(Parser *p); +static asdl_seq *_loop0_141_rule(Parser *p); +static asdl_seq *_gather_142_rule(Parser *p); +static asdl_seq *_loop0_143_rule(Parser *p); +static asdl_seq *_gather_144_rule(Parser *p); +static void *_tmp_145_rule(Parser *p); +static asdl_seq *_loop0_146_rule(Parser *p); static void *_tmp_147_rule(Parser *p); static void *_tmp_148_rule(Parser *p); static void *_tmp_149_rule(Parser *p); @@ -992,13 +993,14 @@ static void *_tmp_170_rule(Parser *p); static void *_tmp_171_rule(Parser *p); static void *_tmp_172_rule(Parser *p); static void *_tmp_173_rule(Parser *p); -static asdl_seq *_loop0_174_rule(Parser *p); -static void *_tmp_175_rule(Parser *p); +static void *_tmp_174_rule(Parser *p); +static asdl_seq *_loop0_175_rule(Parser *p); static void *_tmp_176_rule(Parser *p); static void *_tmp_177_rule(Parser *p); static void *_tmp_178_rule(Parser *p); static void *_tmp_179_rule(Parser *p); static void *_tmp_180_rule(Parser *p); +static void *_tmp_181_rule(Parser *p); // file: statements? $ @@ -1572,7 +1574,7 @@ simple_stmts_rule(Parser *p) // | &'raise' raise_stmt // | &'pass' pass_stmt // | &'del' del_stmt -// | &'yield' yield_stmt +// | &('yield' | 'async') yield_stmt // | &'assert' assert_stmt // | &'break' break_stmt // | &'continue' continue_stmt @@ -1705,7 +1707,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt")); stmt_ty return_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 522) // token='return' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 523) // token='return' && (return_stmt_var = return_stmt_rule(p)) // return_stmt ) @@ -1726,7 +1728,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt")); stmt_ty raise_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 632) // token='raise' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 636) // token='raise' && (raise_stmt_var = raise_stmt_rule(p)) // raise_stmt ) @@ -1747,7 +1749,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'pass' pass_stmt")); stmt_ty pass_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 527) // token='pass' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 528) // token='pass' && (pass_stmt_var = pass_stmt_rule(p)) // pass_stmt ) @@ -1768,7 +1770,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt")); stmt_ty del_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 634) // token='del' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 638) // token='del' && (del_stmt_var = del_stmt_rule(p)) // del_stmt ) @@ -1781,26 +1783,26 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt")); } - { // &'yield' yield_stmt + { // &('yield' | 'async') yield_stmt if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt")); + D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('yield' | 'async') yield_stmt")); stmt_ty yield_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 588) // token='yield' + _PyPegen_lookahead(1, _tmp_6_rule, p) && (yield_stmt_var = yield_stmt_rule(p)) // yield_stmt ) { - D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt")); + D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('yield' | 'async') yield_stmt")); _res = yield_stmt_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('yield' | 'async') yield_stmt")); } { // &'assert' assert_stmt if (p->error_indicator) { @@ -1810,7 +1812,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt")); stmt_ty assert_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 638) // token='assert' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 642) // token='assert' && (assert_stmt_var = assert_stmt_rule(p)) // assert_stmt ) @@ -1831,7 +1833,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'break' break_stmt")); stmt_ty break_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 528) // token='break' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 529) // token='break' && (break_stmt_var = break_stmt_rule(p)) // break_stmt ) @@ -1852,7 +1854,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'continue' continue_stmt")); stmt_ty continue_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 529) // token='continue' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 530) // token='continue' && (continue_stmt_var = continue_stmt_rule(p)) // continue_stmt ) @@ -1873,7 +1875,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt")); stmt_ty global_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 530) // token='global' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 531) // token='global' && (global_stmt_var = global_stmt_rule(p)) // global_stmt ) @@ -1894,7 +1896,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt")); stmt_ty nonlocal_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 531) // token='nonlocal' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 532) // token='nonlocal' && (nonlocal_stmt_var = nonlocal_stmt_rule(p)) // nonlocal_stmt ) @@ -1943,7 +1945,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def")); stmt_ty function_def_var; if ( - _PyPegen_lookahead(1, _tmp_6_rule, p) + _PyPegen_lookahead(1, _tmp_7_rule, p) && (function_def_var = function_def_rule(p)) // function_def ) @@ -1964,7 +1966,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt")); stmt_ty if_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 695) // token='if' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 699) // token='if' && (if_stmt_var = if_stmt_rule(p)) // if_stmt ) @@ -1985,7 +1987,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def")); stmt_ty class_def_var; if ( - _PyPegen_lookahead(1, _tmp_7_rule, p) + _PyPegen_lookahead(1, _tmp_8_rule, p) && (class_def_var = class_def_rule(p)) // class_def ) @@ -2006,7 +2008,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt")); stmt_ty with_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_8_rule, p) + _PyPegen_lookahead(1, _tmp_9_rule, p) && (with_stmt_var = with_stmt_rule(p)) // with_stmt ) @@ -2027,7 +2029,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt")); stmt_ty for_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_9_rule, p) + _PyPegen_lookahead(1, _tmp_10_rule, p) && (for_stmt_var = for_stmt_rule(p)) // for_stmt ) @@ -2048,7 +2050,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt")); stmt_ty try_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 669) // token='try' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 673) // token='try' && (try_stmt_var = try_stmt_rule(p)) // try_stmt ) @@ -2069,7 +2071,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt")); stmt_ty while_stmt_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 702) // token='while' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 706) // token='while' && (while_stmt_var = while_stmt_rule(p)) // while_stmt ) @@ -2151,7 +2153,7 @@ assignment_rule(Parser *p) && (b = expression_rule(p)) // expression && - (c = _tmp_10_rule(p), !p->error_indicator) // ['=' annotated_rhs] + (c = _tmp_11_rule(p), !p->error_indicator) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]")); @@ -2187,13 +2189,13 @@ assignment_rule(Parser *p) expr_ty b; void *c; if ( - (a = _tmp_11_rule(p)) // '(' single_target ')' | single_subscript_attribute_target + (a = _tmp_12_rule(p)) // '(' single_target ')' | single_subscript_attribute_target && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = expression_rule(p)) // expression && - (c = _tmp_10_rule(p), !p->error_indicator) // ['=' annotated_rhs] + (c = _tmp_11_rule(p), !p->error_indicator) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]")); @@ -2228,7 +2230,7 @@ assignment_rule(Parser *p) expr_ty b; void *tc; if ( - (a = (asdl_expr_seq*)_loop1_12_rule(p)) // ((star_targets '='))+ + (a = (asdl_expr_seq*)_loop1_13_rule(p)) // ((star_targets '='))+ && (b = annotated_rhs_rule(p)) // annotated_rhs && @@ -2762,7 +2764,7 @@ return_stmt_rule(Parser *p) Token * _keyword; void *a; if ( - (_keyword = _PyPegen_expect_token(p, 522)) // token='return' + (_keyword = _PyPegen_expect_token(p, 523)) // token='return' && (a = star_expressions_rule(p), !p->error_indicator) // star_expressions? ) @@ -2832,11 +2834,11 @@ raise_stmt_rule(Parser *p) expr_ty a; expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 632)) // token='raise' + (_keyword = _PyPegen_expect_token(p, 636)) // token='raise' && (a = expression_rule(p)) // expression && - (_keyword_1 = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword_1 = _PyPegen_expect_token(p, 650)) // token='from' && (b = expression_rule(p)) // expression ) @@ -2891,7 +2893,7 @@ raise_stmt_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 632)) // token='raise' + (_keyword = _PyPegen_expect_token(p, 636)) // token='raise' && (a = expression_rule(p)) // expression ) @@ -2926,7 +2928,7 @@ raise_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 632)) // token='raise' + (_keyword = _PyPegen_expect_token(p, 636)) // token='raise' ) { D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'")); @@ -2987,7 +2989,7 @@ pass_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> pass_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 527)) // token='pass' + (_keyword = _PyPegen_expect_token(p, 528)) // token='pass' ) { D(fprintf(stderr, "%*c+ pass_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'")); @@ -3048,7 +3050,7 @@ break_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> break_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 528)) // token='break' + (_keyword = _PyPegen_expect_token(p, 529)) // token='break' ) { D(fprintf(stderr, "%*c+ break_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'")); @@ -3109,7 +3111,7 @@ continue_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> continue_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 529)) // token='continue' + (_keyword = _PyPegen_expect_token(p, 530)) // token='continue' ) { D(fprintf(stderr, "%*c+ continue_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'")); @@ -3171,9 +3173,9 @@ global_stmt_rule(Parser *p) Token * _keyword; asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 530)) // token='global' + (_keyword = _PyPegen_expect_token(p, 531)) // token='global' && - (a = (asdl_expr_seq*)_gather_14_rule(p)) // ','.NAME+ + (a = (asdl_expr_seq*)_gather_15_rule(p)) // ','.NAME+ ) { D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); @@ -3235,9 +3237,9 @@ nonlocal_stmt_rule(Parser *p) Token * _keyword; asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 531)) // token='nonlocal' + (_keyword = _PyPegen_expect_token(p, 532)) // token='nonlocal' && - (a = (asdl_expr_seq*)_gather_14_rule(p)) // ','.NAME+ + (a = (asdl_expr_seq*)_gather_15_rule(p)) // ','.NAME+ ) { D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); @@ -3299,11 +3301,11 @@ del_stmt_rule(Parser *p) Token * _keyword; asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 634)) // token='del' + (_keyword = _PyPegen_expect_token(p, 638)) // token='del' && (a = del_targets_rule(p)) // del_targets && - _PyPegen_lookahead(1, _tmp_15_rule, p) + _PyPegen_lookahead(1, _tmp_16_rule, p) ) { D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)")); @@ -3465,11 +3467,11 @@ assert_stmt_rule(Parser *p) expr_ty a; void *b; if ( - (_keyword = _PyPegen_expect_token(p, 638)) // token='assert' + (_keyword = _PyPegen_expect_token(p, 642)) // token='assert' && (a = expression_rule(p)) // expression && - (b = _tmp_16_rule(p), !p->error_indicator) // [',' expression] + (b = _tmp_17_rule(p), !p->error_indicator) // [',' expression] ) { D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); @@ -3615,7 +3617,7 @@ import_name_rule(Parser *p) if ( (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator) // "lazy"? && - (_keyword = _PyPegen_expect_token(p, 647)) // token='import' + (_keyword = _PyPegen_expect_token(p, 651)) // token='import' && (a = dotted_as_names_rule(p)) // dotted_as_names ) @@ -3687,13 +3689,13 @@ import_from_rule(Parser *p) if ( (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator) // "lazy"? && - (_keyword = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword = _PyPegen_expect_token(p, 650)) // token='from' && - (a = _loop0_17_rule(p)) // (('.' | '...'))* + (a = _loop0_18_rule(p)) // (('.' | '...'))* && (b = dotted_name_rule(p)) // dotted_name && - (_keyword_1 = _PyPegen_expect_token(p, 647)) // token='import' + (_keyword_1 = _PyPegen_expect_token(p, 651)) // token='import' && (c = import_from_targets_rule(p)) // import_from_targets ) @@ -3734,11 +3736,11 @@ import_from_rule(Parser *p) if ( (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator) // "lazy"? && - (_keyword = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword = _PyPegen_expect_token(p, 650)) // token='from' && - (a = _loop1_18_rule(p)) // (('.' | '...'))+ + (a = _loop1_19_rule(p)) // (('.' | '...'))+ && - (_keyword_1 = _PyPegen_expect_token(p, 647)) // token='import' + (_keyword_1 = _PyPegen_expect_token(p, 651)) // token='import' && (b = import_from_targets_rule(p)) // import_from_targets ) @@ -3931,7 +3933,7 @@ import_from_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_20_rule(p)) // ','.import_from_as_name+ + (a = (asdl_alias_seq*)_gather_21_rule(p)) // ','.import_from_as_name+ ) { D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); @@ -4005,7 +4007,7 @@ import_from_as_name_rule(Parser *p) if ( (a = _PyPegen_name_token(p)) // NAME && - (b = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (b = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]")); @@ -4057,7 +4059,7 @@ dotted_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_23_rule(p)) // ','.dotted_as_name+ + (a = (asdl_alias_seq*)_gather_24_rule(p)) // ','.dotted_as_name+ ) { D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); @@ -4131,7 +4133,7 @@ dotted_as_name_rule(Parser *p) if ( (a = dotted_name_rule(p)) // dotted_name && - (b = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (b = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]")); @@ -4382,7 +4384,7 @@ decorators_rule(Parser *p) D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_loop1_24_rule(p)) // (('@' named_expression NEWLINE))+ + (a = (asdl_expr_seq*)_loop1_25_rule(p)) // (('@' named_expression NEWLINE))+ ) { D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); @@ -4525,13 +4527,13 @@ class_def_raw_rule(Parser *p) asdl_stmt_seq* c; void *t; if ( - (_keyword = _PyPegen_expect_token(p, 714)) // token='class' + (_keyword = _PyPegen_expect_token(p, 718)) // token='class' && (a = _PyPegen_name_token(p)) // NAME && (t = type_params_rule(p), !p->error_indicator) // type_params? && - (b = _tmp_25_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (b = _tmp_26_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -4692,7 +4694,7 @@ function_def_raw_rule(Parser *p) void *t; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 712)) // token='def' + (_keyword = _PyPegen_expect_token(p, 716)) // token='def' && (n = _PyPegen_name_token(p)) // NAME && @@ -4704,7 +4706,7 @@ function_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (a = _tmp_26_rule(p), !p->error_indicator) // ['->' expression] + (a = _tmp_27_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -4753,9 +4755,9 @@ function_def_raw_rule(Parser *p) void *t; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' && - (_keyword_1 = _PyPegen_expect_token(p, 712)) // token='def' + (_keyword_1 = _PyPegen_expect_token(p, 716)) // token='def' && (n = _PyPegen_name_token(p)) // NAME && @@ -4767,7 +4769,7 @@ function_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (a = _tmp_26_rule(p), !p->error_indicator) // ['->' expression] + (a = _tmp_27_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -4892,9 +4894,9 @@ parameters_rule(Parser *p) if ( (a = slash_no_default_rule(p)) // slash_no_default && - (b = (asdl_arg_seq*)_loop0_27_rule(p)) // param_no_default* + (b = (asdl_arg_seq*)_loop0_28_rule(p)) // param_no_default* && - (c = _loop0_28_rule(p)) // param_with_default* + (c = _loop0_29_rule(p)) // param_with_default* && (d = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4924,7 +4926,7 @@ parameters_rule(Parser *p) if ( (a = slash_with_default_rule(p)) // slash_with_default && - (b = _loop0_28_rule(p)) // param_with_default* + (b = _loop0_29_rule(p)) // param_with_default* && (c = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4952,9 +4954,9 @@ parameters_rule(Parser *p) asdl_seq * b; void *c; if ( - (a = (asdl_arg_seq*)_loop1_29_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_30_rule(p)) // param_no_default+ && - (b = _loop0_28_rule(p)) // param_with_default* + (b = _loop0_29_rule(p)) // param_with_default* && (c = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4981,7 +4983,7 @@ parameters_rule(Parser *p) asdl_seq * a; void *b; if ( - (a = _loop1_30_rule(p)) // param_with_default+ + (a = _loop1_31_rule(p)) // param_with_default+ && (b = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -5052,7 +5054,7 @@ slash_no_default_rule(Parser *p) Token * _literal_1; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_29_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_30_rule(p)) // param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5081,7 +5083,7 @@ slash_no_default_rule(Parser *p) Token * _literal; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_29_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_30_rule(p)) // param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5133,9 +5135,9 @@ slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_27_rule(p)) // param_no_default* + (a = _loop0_28_rule(p)) // param_no_default* && - (b = _loop1_30_rule(p)) // param_with_default+ + (b = _loop1_31_rule(p)) // param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5165,9 +5167,9 @@ slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_27_rule(p)) // param_no_default* + (a = _loop0_28_rule(p)) // param_no_default* && - (b = _loop1_30_rule(p)) // param_with_default+ + (b = _loop1_31_rule(p)) // param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5245,7 +5247,7 @@ star_etc_rule(Parser *p) && (a = param_no_default_rule(p)) // param_no_default && - (b = _loop0_31_rule(p)) // param_maybe_default* + (b = _loop0_32_rule(p)) // param_maybe_default* && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -5278,7 +5280,7 @@ star_etc_rule(Parser *p) && (a = param_no_default_star_annotation_rule(p)) // param_no_default_star_annotation && - (b = _loop0_31_rule(p)) // param_maybe_default* + (b = _loop0_32_rule(p)) // param_maybe_default* && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -5311,7 +5313,7 @@ star_etc_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _loop1_32_rule(p)) // param_maybe_default+ + (b = _loop1_33_rule(p)) // param_maybe_default+ && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -6093,7 +6095,7 @@ if_stmt_rule(Parser *p) asdl_stmt_seq* b; stmt_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (a = named_expression_rule(p)) // named_expression && @@ -6138,7 +6140,7 @@ if_stmt_rule(Parser *p) asdl_stmt_seq* b; void *c; if ( - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (a = named_expression_rule(p)) // named_expression && @@ -6233,7 +6235,7 @@ elif_stmt_rule(Parser *p) asdl_stmt_seq* b; stmt_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 700)) // token='elif' + (_keyword = _PyPegen_expect_token(p, 704)) // token='elif' && (a = named_expression_rule(p)) // named_expression && @@ -6278,7 +6280,7 @@ elif_stmt_rule(Parser *p) asdl_stmt_seq* b; void *c; if ( - (_keyword = _PyPegen_expect_token(p, 700)) // token='elif' + (_keyword = _PyPegen_expect_token(p, 704)) // token='elif' && (a = named_expression_rule(p)) // named_expression && @@ -6359,7 +6361,7 @@ else_block_rule(Parser *p) Token * _literal; asdl_stmt_seq* b; if ( - (_keyword = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword = _PyPegen_expect_token(p, 703)) // token='else' && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -6438,7 +6440,7 @@ while_stmt_rule(Parser *p) asdl_stmt_seq* b; void *c; if ( - (_keyword = _PyPegen_expect_token(p, 702)) // token='while' + (_keyword = _PyPegen_expect_token(p, 706)) // token='while' && (a = named_expression_rule(p)) // named_expression && @@ -6538,11 +6540,11 @@ for_stmt_rule(Parser *p) expr_ty t; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' && (t = star_targets_rule(p)) // star_targets && - (_keyword_1 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_1 = _PyPegen_expect_token(p, 712)) // token='in' && (_cut_var = 1) && @@ -6600,13 +6602,13 @@ for_stmt_rule(Parser *p) expr_ty t; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' && - (_keyword_1 = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword_1 = _PyPegen_expect_token(p, 711)) // token='for' && (t = star_targets_rule(p)) // star_targets && - (_keyword_2 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_2 = _PyPegen_expect_token(p, 712)) // token='in' && (_cut_var = 1) && @@ -6735,11 +6737,11 @@ with_stmt_rule(Parser *p) asdl_stmt_seq* b; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword = _PyPegen_expect_token(p, 664)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = (asdl_withitem_seq*)_gather_34_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_35_rule(p)) // ','.with_item+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -6786,9 +6788,9 @@ with_stmt_rule(Parser *p) asdl_stmt_seq* b; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword = _PyPegen_expect_token(p, 664)) // token='with' && - (a = (asdl_withitem_seq*)_gather_34_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_35_rule(p)) // ','.with_item+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -6835,13 +6837,13 @@ with_stmt_rule(Parser *p) asdl_withitem_seq* a; asdl_stmt_seq* b; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' && - (_keyword_1 = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword_1 = _PyPegen_expect_token(p, 664)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = (asdl_withitem_seq*)_gather_34_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_35_rule(p)) // ','.with_item+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -6887,11 +6889,11 @@ with_stmt_rule(Parser *p) asdl_stmt_seq* b; void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' && - (_keyword_1 = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword_1 = _PyPegen_expect_token(p, 664)) // token='with' && - (a = (asdl_withitem_seq*)_gather_34_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_35_rule(p)) // ','.with_item+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -6975,11 +6977,11 @@ with_item_rule(Parser *p) if ( (e = expression_rule(p)) // expression && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (t = star_target_rule(p)) // star_target && - _PyPegen_lookahead(1, _tmp_35_rule, p) + _PyPegen_lookahead(1, _tmp_36_rule, p) ) { D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); @@ -7100,7 +7102,7 @@ try_stmt_rule(Parser *p) asdl_stmt_seq* b; asdl_stmt_seq* f; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -7144,13 +7146,13 @@ try_stmt_rule(Parser *p) asdl_excepthandler_seq* ex; void *f; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && (b = block_rule(p)) // block && - (ex = (asdl_excepthandler_seq*)_loop1_36_rule(p)) // except_block+ + (ex = (asdl_excepthandler_seq*)_loop1_37_rule(p)) // except_block+ && (el = else_block_rule(p), !p->error_indicator) // else_block? && @@ -7192,13 +7194,13 @@ try_stmt_rule(Parser *p) asdl_excepthandler_seq* ex; void *f; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && (b = block_rule(p)) // block && - (ex = (asdl_excepthandler_seq*)_loop1_37_rule(p)) // except_star_block+ + (ex = (asdl_excepthandler_seq*)_loop1_38_rule(p)) // except_star_block+ && (el = else_block_rule(p), !p->error_indicator) // else_block? && @@ -7291,7 +7293,7 @@ except_block_rule(Parser *p) asdl_stmt_seq* b; expr_ty e; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (e = expression_rule(p)) // expression && @@ -7335,11 +7337,11 @@ except_block_rule(Parser *p) expr_ty e; expr_ty t; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (e = expression_rule(p)) // expression && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (t = _PyPegen_name_token(p)) // NAME && @@ -7381,7 +7383,7 @@ except_block_rule(Parser *p) asdl_stmt_seq* b; expr_ty e; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (e = expressions_rule(p)) // expressions && @@ -7422,7 +7424,7 @@ except_block_rule(Parser *p) Token * _literal; asdl_stmt_seq* b; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -7534,7 +7536,7 @@ except_star_block_rule(Parser *p) asdl_stmt_seq* b; expr_ty e; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && @@ -7581,13 +7583,13 @@ except_star_block_rule(Parser *p) expr_ty e; expr_ty t; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && (e = expression_rule(p)) // expression && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (t = _PyPegen_name_token(p)) // NAME && @@ -7630,7 +7632,7 @@ except_star_block_rule(Parser *p) asdl_stmt_seq* b; expr_ty e; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && @@ -7730,7 +7732,7 @@ finally_block_rule(Parser *p) Token * _literal; asdl_stmt_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 686)) // token='finally' + (_keyword = _PyPegen_expect_token(p, 690)) // token='finally' && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -7804,7 +7806,7 @@ match_stmt_rule(Parser *p) && (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' && - (cases = (asdl_match_case_seq*)_loop1_38_rule(p)) // case_block+ + (cases = (asdl_match_case_seq*)_loop1_39_rule(p)) // case_block+ && (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' ) @@ -8038,7 +8040,7 @@ guard_rule(Parser *p) Token * _keyword; expr_ty guard; if ( - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (guard = named_expression_rule(p)) // named_expression ) @@ -8233,7 +8235,7 @@ as_pattern_rule(Parser *p) if ( (pattern = or_pattern_rule(p)) // or_pattern && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (target = pattern_capture_target_rule(p)) // pattern_capture_target ) @@ -8315,7 +8317,7 @@ or_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); asdl_pattern_seq* patterns; if ( - (patterns = (asdl_pattern_seq*)_gather_40_rule(p)) // '|'.closed_pattern+ + (patterns = (asdl_pattern_seq*)_gather_41_rule(p)) // '|'.closed_pattern+ ) { D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); @@ -8568,7 +8570,7 @@ literal_pattern_rule(Parser *p) if ( (value = signed_number_rule(p)) // signed_number && - _PyPegen_lookahead(0, _tmp_41_rule, p) + _PyPegen_lookahead(0, _tmp_42_rule, p) ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); @@ -8667,7 +8669,7 @@ literal_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 628)) // token='None' + (_keyword = _PyPegen_expect_token(p, 632)) // token='None' ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); @@ -8700,7 +8702,7 @@ literal_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 627)) // token='True' + (_keyword = _PyPegen_expect_token(p, 631)) // token='True' ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); @@ -8733,7 +8735,7 @@ literal_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 629)) // token='False' + (_keyword = _PyPegen_expect_token(p, 633)) // token='False' ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); @@ -8802,7 +8804,7 @@ literal_expr_rule(Parser *p) if ( (signed_number_var = signed_number_rule(p)) // signed_number && - _PyPegen_lookahead(0, _tmp_41_rule, p) + _PyPegen_lookahead(0, _tmp_42_rule, p) ) { D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); @@ -8840,7 +8842,7 @@ literal_expr_rule(Parser *p) D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings")); expr_ty strings_var; if ( - _PyPegen_lookahead(1, _tmp_42_rule, p) + _PyPegen_lookahead(1, _tmp_43_rule, p) && (strings_var = strings_rule(p)) // strings ) @@ -8861,7 +8863,7 @@ literal_expr_rule(Parser *p) D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 628)) // token='None' + (_keyword = _PyPegen_expect_token(p, 632)) // token='None' ) { D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); @@ -8894,7 +8896,7 @@ literal_expr_rule(Parser *p) D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 627)) // token='True' + (_keyword = _PyPegen_expect_token(p, 631)) // token='True' ) { D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); @@ -8927,7 +8929,7 @@ literal_expr_rule(Parser *p) D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 629)) // token='False' + (_keyword = _PyPegen_expect_token(p, 633)) // token='False' ) { D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); @@ -9404,7 +9406,7 @@ pattern_capture_target_rule(Parser *p) && (name = _PyPegen_name_token(p)) // NAME && - _PyPegen_lookahead(0, _tmp_43_rule, p) + _PyPegen_lookahead(0, _tmp_44_rule, p) ) { D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); @@ -9519,7 +9521,7 @@ value_pattern_rule(Parser *p) if ( (attr = attr_rule(p)) // attr && - _PyPegen_lookahead(0, _tmp_43_rule, p) + _PyPegen_lookahead(0, _tmp_44_rule, p) ) { D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); @@ -9938,7 +9940,7 @@ maybe_sequence_pattern_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_seq * patterns; if ( - (patterns = _gather_45_rule(p)) // ','.maybe_star_pattern+ + (patterns = _gather_46_rule(p)) // ','.maybe_star_pattern+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -10366,13 +10368,13 @@ items_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - asdl_seq * _gather_47_var; + asdl_seq * _gather_48_var; if ( - (_gather_47_var = _gather_47_rule(p)) // ','.key_value_pattern+ + (_gather_48_var = _gather_48_rule(p)) // ','.key_value_pattern+ ) { D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - _res = _gather_47_var; + _res = _gather_48_var; goto done; } p->mark = _mark; @@ -10408,7 +10410,7 @@ key_value_pattern_rule(Parser *p) void *key; pattern_ty pattern; if ( - (key = _tmp_48_rule(p)) // literal_expr | attr + (key = _tmp_49_rule(p)) // literal_expr | attr && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -10736,7 +10738,7 @@ positional_patterns_rule(Parser *p) D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+")); asdl_pattern_seq* args; if ( - (args = (asdl_pattern_seq*)_gather_50_rule(p)) // ','.pattern+ + (args = (asdl_pattern_seq*)_gather_51_rule(p)) // ','.pattern+ ) { D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+")); @@ -10777,13 +10779,13 @@ keyword_patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - asdl_seq * _gather_52_var; + asdl_seq * _gather_53_var; if ( - (_gather_52_var = _gather_52_rule(p)) // ','.keyword_pattern+ + (_gather_53_var = _gather_53_rule(p)) // ','.keyword_pattern+ ) { D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - _res = _gather_52_var; + _res = _gather_53_var; goto done; } p->mark = _mark; @@ -11009,7 +11011,7 @@ type_param_seq_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_type_param_seq* a; if ( - (a = (asdl_type_param_seq*)_gather_54_rule(p)) // ','.type_param+ + (a = (asdl_type_param_seq*)_gather_55_rule(p)) // ','.type_param+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -11379,7 +11381,7 @@ expressions_rule(Parser *p) if ( (a = expression_rule(p)) // expression && - (b = _loop1_55_rule(p)) // ((',' expression))+ + (b = _loop1_56_rule(p)) // ((',' expression))+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -11647,11 +11649,11 @@ if_expression_rule(Parser *p) if ( (a = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && (c = expression_rule(p)) // expression ) @@ -11684,7 +11686,10 @@ if_expression_rule(Parser *p) return _res; } -// yield_expr: 'yield' 'from' expression | 'yield' star_expressions? +// yield_expr: +// | 'yield' 'from' expression +// | 'yield' star_expressions? +// | 'async' 'yield' 'from' expression static expr_ty yield_expr_rule(Parser *p) { @@ -11716,9 +11721,9 @@ yield_expr_rule(Parser *p) Token * _keyword_1; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 588)) // token='yield' + (_keyword = _PyPegen_expect_token(p, 591)) // token='yield' && - (_keyword_1 = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword_1 = _PyPegen_expect_token(p, 650)) // token='from' && (a = expression_rule(p)) // expression ) @@ -11754,7 +11759,7 @@ yield_expr_rule(Parser *p) Token * _keyword; void *a; if ( - (_keyword = _PyPegen_expect_token(p, 588)) // token='yield' + (_keyword = _PyPegen_expect_token(p, 591)) // token='yield' && (a = star_expressions_rule(p), !p->error_indicator) // star_expressions? ) @@ -11781,6 +11786,48 @@ yield_expr_rule(Parser *p) D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?")); } + { // 'async' 'yield' 'from' expression + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'yield' 'from' expression")); + Token * _keyword; + Token * _keyword_1; + Token * _keyword_2; + expr_ty a; + if ( + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' + && + (_keyword_1 = _PyPegen_expect_token(p, 591)) // token='yield' + && + (_keyword_2 = _PyPegen_expect_token(p, 650)) // token='from' + && + (a = expression_rule(p)) // expression + ) + { + D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'yield' 'from' expression")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + p->level--; + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_AsyncYieldFrom ( a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + p->level--; + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'yield' 'from' expression")); + } _res = NULL; done: p->level--; @@ -11825,7 +11872,7 @@ star_expressions_rule(Parser *p) if ( (a = star_expression_rule(p)) // star_expression && - (b = _loop1_56_rule(p)) // ((',' star_expression))+ + (b = _loop1_57_rule(p)) // ((',' star_expression))+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -12024,7 +12071,7 @@ star_named_expressions_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_58_rule(p)) // ','.star_named_expression+ + (a = (asdl_expr_seq*)_gather_59_rule(p)) // ','.star_named_expression+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -12071,7 +12118,7 @@ star_named_expressions_sequence_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_60_rule(p)) // ','.star_named_expression_sequence+ + (a = (asdl_expr_seq*)_gather_61_rule(p)) // ','.star_named_expression_sequence+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -12426,7 +12473,7 @@ disjunction_rule(Parser *p) if ( (a = conjunction_rule(p)) // conjunction && - (b = _loop1_61_rule(p)) // (('or' conjunction))+ + (b = _loop1_62_rule(p)) // (('or' conjunction))+ ) { D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); @@ -12514,7 +12561,7 @@ conjunction_rule(Parser *p) if ( (a = inversion_rule(p)) // inversion && - (b = _loop1_62_rule(p)) // (('and' inversion))+ + (b = _loop1_63_rule(p)) // (('and' inversion))+ ) { D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); @@ -12600,7 +12647,7 @@ inversion_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 716)) // token='not' + (_keyword = _PyPegen_expect_token(p, 720)) // token='not' && (a = inversion_rule(p)) // inversion ) @@ -12686,7 +12733,7 @@ comparison_rule(Parser *p) if ( (a = bitwise_or_rule(p)) // bitwise_or && - (b = _loop1_63_rule(p)) // compare_op_bitwise_or_pair+ + (b = _loop1_64_rule(p)) // compare_op_bitwise_or_pair+ ) { D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); @@ -13020,10 +13067,10 @@ noteq_bitwise_or_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); - void *_tmp_64_var; + void *_tmp_65_var; expr_ty a; if ( - (_tmp_64_var = _tmp_64_rule(p)) // '!=' + (_tmp_65_var = _tmp_65_rule(p)) // '!=' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -13254,9 +13301,9 @@ notin_bitwise_or_rule(Parser *p) Token * _keyword_1; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 716)) // token='not' + (_keyword = _PyPegen_expect_token(p, 720)) // token='not' && - (_keyword_1 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_1 = _PyPegen_expect_token(p, 712)) // token='in' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -13302,7 +13349,7 @@ in_bitwise_or_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword = _PyPegen_expect_token(p, 712)) // token='in' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -13349,9 +13396,9 @@ isnot_bitwise_or_rule(Parser *p) Token * _keyword_1; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 597)) // token='is' + (_keyword = _PyPegen_expect_token(p, 601)) // token='is' && - (_keyword_1 = _PyPegen_expect_token(p, 716)) // token='not' + (_keyword_1 = _PyPegen_expect_token(p, 720)) // token='not' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -13397,7 +13444,7 @@ is_bitwise_or_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 597)) // token='is' + (_keyword = _PyPegen_expect_token(p, 601)) // token='is' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -14713,7 +14760,7 @@ await_primary_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 598)) // token='await' + (_keyword = _PyPegen_expect_token(p, 602)) // token='await' && (a = primary_rule(p)) // primary ) @@ -15071,7 +15118,7 @@ slices_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_66_rule(p)) // ','.(slice | starred_expression)+ + (a = (asdl_expr_seq*)_gather_67_rule(p)) // ','.(slice | starred_expression)+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -15143,7 +15190,7 @@ slice_rule(Parser *p) && (b = expression_rule(p), !p->error_indicator) // expression? && - (c = _tmp_67_rule(p), !p->error_indicator) // [':' expression?] + (c = _tmp_68_rule(p), !p->error_indicator) // [':' expression?] ) { D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); @@ -15257,7 +15304,7 @@ atom_rule(Parser *p) D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 627)) // token='True' + (_keyword = _PyPegen_expect_token(p, 631)) // token='True' ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); @@ -15290,7 +15337,7 @@ atom_rule(Parser *p) D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 629)) // token='False' + (_keyword = _PyPegen_expect_token(p, 633)) // token='False' ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); @@ -15323,7 +15370,7 @@ atom_rule(Parser *p) D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 628)) // token='None' + (_keyword = _PyPegen_expect_token(p, 632)) // token='None' ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); @@ -15356,7 +15403,7 @@ atom_rule(Parser *p) D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings")); expr_ty strings_var; if ( - _PyPegen_lookahead(1, _tmp_42_rule, p) + _PyPegen_lookahead(1, _tmp_43_rule, p) && (strings_var = strings_rule(p)) // strings ) @@ -15394,15 +15441,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (genexp | tuple | group)")); - void *_tmp_68_var; + void *_tmp_69_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7) // token='(' && - (_tmp_68_var = _tmp_68_rule(p)) // genexp | tuple | group + (_tmp_69_var = _tmp_69_rule(p)) // genexp | tuple | group ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (genexp | tuple | group)")); - _res = _tmp_68_var; + _res = _tmp_69_var; goto done; } p->mark = _mark; @@ -15415,15 +15462,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (listcomp | list)")); - void *_tmp_69_var; + void *_tmp_70_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9) // token='[' && - (_tmp_69_var = _tmp_69_rule(p)) // listcomp | list + (_tmp_70_var = _tmp_70_rule(p)) // listcomp | list ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (listcomp | list)")); - _res = _tmp_69_var; + _res = _tmp_70_var; goto done; } p->mark = _mark; @@ -15436,15 +15483,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dictcomp | setcomp | dict | set)")); - void *_tmp_70_var; + void *_tmp_71_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25) // token='{' && - (_tmp_70_var = _tmp_70_rule(p)) // dictcomp | setcomp | dict | set + (_tmp_71_var = _tmp_71_rule(p)) // dictcomp | setcomp | dict | set ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dictcomp | setcomp | dict | set)")); - _res = _tmp_70_var; + _res = _tmp_71_var; goto done; } p->mark = _mark; @@ -15515,7 +15562,7 @@ group_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = _tmp_71_rule(p)) // yield_expr | named_expression + (a = _tmp_72_rule(p)) // yield_expr | named_expression && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) @@ -15591,7 +15638,7 @@ lambdef_rule(Parser *p) void *a; expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 622)) // token='lambda' + (_keyword = _PyPegen_expect_token(p, 626)) // token='lambda' && (a = lambda_params_rule(p), !p->error_indicator) // lambda_params? && @@ -15716,9 +15763,9 @@ lambda_parameters_rule(Parser *p) if ( (a = lambda_slash_no_default_rule(p)) // lambda_slash_no_default && - (b = (asdl_arg_seq*)_loop0_72_rule(p)) // lambda_param_no_default* + (b = (asdl_arg_seq*)_loop0_73_rule(p)) // lambda_param_no_default* && - (c = _loop0_73_rule(p)) // lambda_param_with_default* + (c = _loop0_74_rule(p)) // lambda_param_with_default* && (d = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15748,7 +15795,7 @@ lambda_parameters_rule(Parser *p) if ( (a = lambda_slash_with_default_rule(p)) // lambda_slash_with_default && - (b = _loop0_73_rule(p)) // lambda_param_with_default* + (b = _loop0_74_rule(p)) // lambda_param_with_default* && (c = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15776,9 +15823,9 @@ lambda_parameters_rule(Parser *p) asdl_seq * b; void *c; if ( - (a = (asdl_arg_seq*)_loop1_74_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_75_rule(p)) // lambda_param_no_default+ && - (b = _loop0_73_rule(p)) // lambda_param_with_default* + (b = _loop0_74_rule(p)) // lambda_param_with_default* && (c = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15805,7 +15852,7 @@ lambda_parameters_rule(Parser *p) asdl_seq * a; void *b; if ( - (a = _loop1_75_rule(p)) // lambda_param_with_default+ + (a = _loop1_76_rule(p)) // lambda_param_with_default+ && (b = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15878,7 +15925,7 @@ lambda_slash_no_default_rule(Parser *p) Token * _literal_1; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_74_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_75_rule(p)) // lambda_param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15907,7 +15954,7 @@ lambda_slash_no_default_rule(Parser *p) Token * _literal; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_74_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_75_rule(p)) // lambda_param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15959,9 +16006,9 @@ lambda_slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_72_rule(p)) // lambda_param_no_default* + (a = _loop0_73_rule(p)) // lambda_param_no_default* && - (b = _loop1_75_rule(p)) // lambda_param_with_default+ + (b = _loop1_76_rule(p)) // lambda_param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15991,9 +16038,9 @@ lambda_slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_72_rule(p)) // lambda_param_no_default* + (a = _loop0_73_rule(p)) // lambda_param_no_default* && - (b = _loop1_75_rule(p)) // lambda_param_with_default+ + (b = _loop1_76_rule(p)) // lambda_param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -16070,7 +16117,7 @@ lambda_star_etc_rule(Parser *p) && (a = lambda_param_no_default_rule(p)) // lambda_param_no_default && - (b = _loop0_76_rule(p)) // lambda_param_maybe_default* + (b = _loop0_77_rule(p)) // lambda_param_maybe_default* && (c = lambda_kwds_rule(p), !p->error_indicator) // lambda_kwds? ) @@ -16103,7 +16150,7 @@ lambda_star_etc_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _loop1_77_rule(p)) // lambda_param_maybe_default+ + (b = _loop1_78_rule(p)) // lambda_param_maybe_default+ && (c = lambda_kwds_rule(p), !p->error_indicator) // lambda_kwds? ) @@ -16743,7 +16790,7 @@ fstring_full_format_spec_rule(Parser *p) if ( (colon = _PyPegen_expect_token(p, 11)) // token=':' && - (spec = _loop0_78_rule(p)) // fstring_format_spec* + (spec = _loop0_79_rule(p)) // fstring_format_spec* ) { D(fprintf(stderr, "%*c+ fstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*")); @@ -16861,7 +16908,7 @@ fstring_rule(Parser *p) if ( (a = _PyPegen_expect_token(p, FSTRING_START)) // token='FSTRING_START' && - (b = _loop0_79_rule(p)) // fstring_middle* + (b = _loop0_80_rule(p)) // fstring_middle* && (c = _PyPegen_expect_token(p, FSTRING_END)) // token='FSTRING_END' ) @@ -17077,7 +17124,7 @@ tstring_full_format_spec_rule(Parser *p) if ( (colon = _PyPegen_expect_token(p, 11)) // token=':' && - (spec = _loop0_80_rule(p)) // tstring_format_spec* + (spec = _loop0_81_rule(p)) // tstring_format_spec* ) { D(fprintf(stderr, "%*c+ tstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' tstring_format_spec*")); @@ -17296,7 +17343,7 @@ tstring_rule(Parser *p) if ( (a = _PyPegen_expect_token(p, TSTRING_START)) // token='TSTRING_START' && - (b = _loop0_81_rule(p)) // tstring_middle* + (b = _loop0_82_rule(p)) // tstring_middle* && (c = _PyPegen_expect_token(p, TSTRING_END)) // token='TSTRING_END' ) @@ -17417,7 +17464,7 @@ strings_rule(Parser *p) D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((fstring | string))+")); asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_loop1_82_rule(p)) // ((fstring | string))+ + (a = (asdl_expr_seq*)_loop1_83_rule(p)) // ((fstring | string))+ ) { D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((fstring | string))+")); @@ -17450,7 +17497,7 @@ strings_rule(Parser *p) D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring+")); asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_loop1_83_rule(p)) // tstring+ + (a = (asdl_expr_seq*)_loop1_84_rule(p)) // tstring+ ) { D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring+")); @@ -17583,7 +17630,7 @@ tuple_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = _tmp_84_rule(p), !p->error_indicator) // [star_named_expression_sequence ',' star_named_expressions_sequence?] + (a = _tmp_85_rule(p), !p->error_indicator) // [star_named_expression_sequence ',' star_named_expressions_sequence?] && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) @@ -17798,7 +17845,7 @@ double_starred_kvpairs_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_seq * a; if ( - (a = _gather_86_rule(p)) // ','.double_starred_kvpair+ + (a = _gather_87_rule(p)) // ','.double_starred_kvpair+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -17957,7 +18004,7 @@ for_if_clauses_rule(Parser *p) D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); asdl_comprehension_seq* a; if ( - (a = (asdl_comprehension_seq*)_loop1_87_rule(p)) // for_if_clause+ + (a = (asdl_comprehension_seq*)_loop1_88_rule(p)) // for_if_clause+ ) { D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); @@ -18010,19 +18057,19 @@ for_if_clause_rule(Parser *p) expr_ty b; asdl_expr_seq* c; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' && - (_keyword_1 = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword_1 = _PyPegen_expect_token(p, 711)) // token='for' && (a = star_targets_rule(p)) // star_targets && - (_keyword_2 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_2 = _PyPegen_expect_token(p, 712)) // token='in' && (_cut_var = 1) && (b = disjunction_rule(p)) // disjunction && - (c = (asdl_expr_seq*)_loop0_88_rule(p)) // (('if' disjunction))* + (c = (asdl_expr_seq*)_loop0_89_rule(p)) // (('if' disjunction))* ) { D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); @@ -18055,17 +18102,17 @@ for_if_clause_rule(Parser *p) expr_ty b; asdl_expr_seq* c; if ( - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' && (a = star_targets_rule(p)) // star_targets && - (_keyword_1 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_1 = _PyPegen_expect_token(p, 712)) // token='in' && (_cut_var = 1) && (b = disjunction_rule(p)) // disjunction && - (c = (asdl_expr_seq*)_loop0_88_rule(p)) // (('if' disjunction))* + (c = (asdl_expr_seq*)_loop0_89_rule(p)) // (('if' disjunction))* ) { D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); @@ -18344,7 +18391,7 @@ genexp_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = _tmp_89_rule(p)) // assignment_expression | expression !':=' | starred_expression + (a = _tmp_90_rule(p)) // assignment_expression | expression !':=' | starred_expression && (b = for_if_clauses_rule(p)) // for_if_clauses && @@ -18619,9 +18666,9 @@ args_rule(Parser *p) asdl_expr_seq* a; void *b; if ( - (a = (asdl_expr_seq*)_gather_91_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ + (a = (asdl_expr_seq*)_gather_92_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ && - (b = _tmp_92_rule(p), !p->error_indicator) // [',' kwargs] + (b = _tmp_93_rule(p), !p->error_indicator) // [',' kwargs] ) { D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]")); @@ -18711,11 +18758,11 @@ kwargs_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _gather_94_rule(p)) // ','.kwarg_or_starred+ + (a = _gather_95_rule(p)) // ','.kwarg_or_starred+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _gather_96_rule(p)) // ','.kwarg_or_double_starred+ + (b = _gather_97_rule(p)) // ','.kwarg_or_double_starred+ ) { D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); @@ -18737,13 +18784,13 @@ kwargs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); - asdl_seq * _gather_94_var; + asdl_seq * _gather_95_var; if ( - (_gather_94_var = _gather_94_rule(p)) // ','.kwarg_or_starred+ + (_gather_95_var = _gather_95_rule(p)) // ','.kwarg_or_starred+ ) { D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); - _res = _gather_94_var; + _res = _gather_95_var; goto done; } p->mark = _mark; @@ -18756,13 +18803,13 @@ kwargs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); - asdl_seq * _gather_96_var; + asdl_seq * _gather_97_var; if ( - (_gather_96_var = _gather_96_rule(p)) // ','.kwarg_or_double_starred+ + (_gather_97_var = _gather_97_rule(p)) // ','.kwarg_or_double_starred+ ) { D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); - _res = _gather_96_var; + _res = _gather_97_var; goto done; } p->mark = _mark; @@ -19173,7 +19220,7 @@ star_targets_rule(Parser *p) if ( (a = star_target_rule(p)) // star_target && - (b = _loop0_97_rule(p)) // ((',' star_target))* + (b = _loop0_98_rule(p)) // ((',' star_target))* && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -19229,7 +19276,7 @@ star_targets_list_seq_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_99_rule(p)) // ','.star_target+ + (a = (asdl_expr_seq*)_gather_100_rule(p)) // ','.star_target+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -19279,7 +19326,7 @@ star_targets_tuple_seq_rule(Parser *p) if ( (a = star_target_rule(p)) // star_target && - (b = _loop1_100_rule(p)) // ((',' star_target))+ + (b = _loop1_101_rule(p)) // ((',' star_target))+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -19367,7 +19414,7 @@ star_target_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (a = _tmp_101_rule(p)) // !'*' star_target + (a = _tmp_102_rule(p)) // !'*' star_target ) { D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)")); @@ -20290,7 +20337,7 @@ del_targets_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_103_rule(p)) // ','.del_target+ + (a = (asdl_expr_seq*)_gather_104_rule(p)) // ','.del_target+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -20648,7 +20695,7 @@ type_expressions_rule(Parser *p) expr_ty b; expr_ty c; if ( - (a = _gather_105_rule(p)) // ','.expression+ + (a = _gather_106_rule(p)) // ','.expression+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -20687,7 +20734,7 @@ type_expressions_rule(Parser *p) asdl_seq * a; expr_ty b; if ( - (a = _gather_105_rule(p)) // ','.expression+ + (a = _gather_106_rule(p)) // ','.expression+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -20720,7 +20767,7 @@ type_expressions_rule(Parser *p) asdl_seq * a; expr_ty b; if ( - (a = _gather_105_rule(p)) // ','.expression+ + (a = _gather_106_rule(p)) // ','.expression+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -20840,7 +20887,7 @@ type_expressions_rule(Parser *p) D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+")); asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_105_rule(p)) // ','.expression+ + (a = (asdl_expr_seq*)_gather_106_rule(p)) // ','.expression+ ) { D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+")); @@ -20891,7 +20938,7 @@ func_type_comment_rule(Parser *p) && (t = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT' && - _PyPegen_lookahead(1, _tmp_106_rule, p) + _PyPegen_lookahead(1, _tmp_107_rule, p) ) { D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); @@ -20977,15 +21024,15 @@ invalid_arguments_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+")); - asdl_seq * _gather_109_var; - void *_tmp_107_var; + asdl_seq * _gather_110_var; + void *_tmp_108_var; Token * a; if ( - (_tmp_107_var = _tmp_107_rule(p)) // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs + (_tmp_108_var = _tmp_108_rule(p)) // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs && (a = _PyPegen_expect_token(p, 12)) // token=',' && - (_gather_109_var = _gather_109_rule(p)) // ','.(starred_expression !'=')+ + (_gather_110_var = _gather_110_rule(p)) // ','.(starred_expression !'=')+ ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+")); @@ -21019,7 +21066,7 @@ invalid_arguments_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_opt_var = _tmp_110_rule(p), !p->error_indicator) // [args | expression for_if_clauses] + (_opt_var = _tmp_111_rule(p), !p->error_indicator) // [args | expression for_if_clauses] ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]")); @@ -21079,13 +21126,13 @@ invalid_arguments_rule(Parser *p) expr_ty a; Token * b; if ( - (_opt_var = _tmp_111_rule(p), !p->error_indicator) // [(args ',')] + (_opt_var = _tmp_112_rule(p), !p->error_indicator) // [(args ',')] && (a = _PyPegen_name_token(p)) // NAME && (b = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(1, _tmp_112_rule, p) + _PyPegen_lookahead(1, _tmp_113_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')")); @@ -21223,7 +21270,7 @@ invalid_kwarg_rule(Parser *p) Token* a; Token * b; if ( - (a = (Token*)_tmp_113_rule(p)) // 'True' | 'False' | 'None' + (a = (Token*)_tmp_114_rule(p)) // 'True' | 'False' | 'None' && (b = _PyPegen_expect_token(p, 22)) // token='=' ) @@ -21283,7 +21330,7 @@ invalid_kwarg_rule(Parser *p) expr_ty a; Token * b; if ( - _PyPegen_lookahead(0, _tmp_114_rule, p) + _PyPegen_lookahead(0, _tmp_115_rule, p) && (a = expression_rule(p)) // expression && @@ -21386,11 +21433,11 @@ expression_without_invalid_rule(Parser *p) if ( (a = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && (c = expression_rule(p)) // expression ) @@ -21631,7 +21678,7 @@ invalid_expression_rule(Parser *p) if ( (string_var = _PyPegen_string_token(p)) // STRING && - (a = _loop1_115_rule(p)) // ((!STRING expression_without_invalid))+ + (a = _loop1_116_rule(p)) // ((!STRING expression_without_invalid))+ && (string_var_1 = _PyPegen_string_token(p)) // STRING ) @@ -21658,7 +21705,7 @@ invalid_expression_rule(Parser *p) expr_ty a; expr_ty b; if ( - _PyPegen_lookahead(0, _tmp_116_rule, p) + _PyPegen_lookahead(0, _tmp_117_rule, p) && (a = disjunction_rule(p)) // disjunction && @@ -21690,11 +21737,11 @@ invalid_expression_rule(Parser *p) if ( (a = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - _PyPegen_lookahead(0, _tmp_117_rule, p) + _PyPegen_lookahead(0, _tmp_118_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')")); @@ -21723,11 +21770,11 @@ invalid_expression_rule(Parser *p) if ( (a = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && _PyPegen_lookahead_for_expr(0, expression_rule, p) ) @@ -21757,13 +21804,13 @@ invalid_expression_rule(Parser *p) expr_ty b; stmt_ty c; if ( - (a = (stmt_ty)_tmp_118_rule(p)) // pass_stmt | break_stmt | continue_stmt + (a = (stmt_ty)_tmp_119_rule(p)) // pass_stmt | break_stmt | continue_stmt && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && (c = simple_stmt_rule(p)) // simple_stmt ) @@ -21792,7 +21839,7 @@ invalid_expression_rule(Parser *p) Token * a; Token * b; if ( - (a = _PyPegen_expect_token(p, 622)) // token='lambda' + (a = _PyPegen_expect_token(p, 626)) // token='lambda' && (_opt_var = lambda_params_rule(p), !p->error_indicator) // lambda_params? && @@ -21825,7 +21872,7 @@ invalid_expression_rule(Parser *p) Token * a; Token * b; if ( - (a = _PyPegen_expect_token(p, 622)) // token='lambda' + (a = _PyPegen_expect_token(p, 626)) // token='lambda' && (_opt_var = lambda_params_rule(p), !p->error_indicator) // lambda_params? && @@ -21882,11 +21929,11 @@ invalid_if_expression_rule(Parser *p) if ( (disjunction_var = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && (a = _PyPegen_expect_token(p, 16)) // token='*' ) @@ -21918,11 +21965,11 @@ invalid_if_expression_rule(Parser *p) if ( (disjunction_var = disjunction_rule(p)) // disjunction && - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 703)) // token='else' && (a = _PyPegen_expect_token(p, 35)) // token='**' ) @@ -22012,7 +22059,7 @@ invalid_named_expression_rule(Parser *p) && (b = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_119_rule, p) + _PyPegen_lookahead(0, _tmp_120_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')")); @@ -22038,7 +22085,7 @@ invalid_named_expression_rule(Parser *p) Token * b; expr_ty bitwise_or_var; if ( - _PyPegen_lookahead(0, _tmp_120_rule, p) + _PyPegen_lookahead(0, _tmp_121_rule, p) && (a = bitwise_or_rule(p)) // bitwise_or && @@ -22046,7 +22093,7 @@ invalid_named_expression_rule(Parser *p) && (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_119_rule, p) + _PyPegen_lookahead(0, _tmp_120_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')")); @@ -22126,7 +22173,7 @@ invalid_assignment_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_121_var; + asdl_seq * _loop0_122_var; expr_ty a; expr_ty expression_var; if ( @@ -22134,7 +22181,7 @@ invalid_assignment_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_loop0_121_var = _loop0_121_rule(p)) // star_named_expressions* + (_loop0_122_var = _loop0_122_rule(p)) // star_named_expressions* && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -22191,10 +22238,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='")); Token * _literal; - asdl_seq * _loop0_122_var; + asdl_seq * _loop0_123_var; expr_ty a; if ( - (_loop0_122_var = _loop0_122_rule(p)) // ((star_targets '='))* + (_loop0_123_var = _loop0_123_rule(p)) // ((star_targets '='))* && (a = star_expressions_rule(p)) // star_expressions && @@ -22221,10 +22268,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='")); Token * _literal; - asdl_seq * _loop0_122_var; + asdl_seq * _loop0_123_var; expr_ty a; if ( - (_loop0_122_var = _loop0_122_rule(p)) // ((star_targets '='))* + (_loop0_123_var = _loop0_123_rule(p)) // ((star_targets '='))* && (a = yield_expr_rule(p)) // yield_expr && @@ -22389,9 +22436,9 @@ invalid_raise_stmt_rule(Parser *p) Token * a; Token * b; if ( - (a = _PyPegen_expect_token(p, 632)) // token='raise' + (a = _PyPegen_expect_token(p, 636)) // token='raise' && - (b = _PyPegen_expect_token(p, 646)) // token='from' + (b = _PyPegen_expect_token(p, 650)) // token='from' ) { D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' 'from'")); @@ -22417,11 +22464,11 @@ invalid_raise_stmt_rule(Parser *p) Token * a; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 632)) // token='raise' + (_keyword = _PyPegen_expect_token(p, 636)) // token='raise' && (expression_var = expression_rule(p)) // expression && - (a = _PyPegen_expect_token(p, 646)) // token='from' + (a = _PyPegen_expect_token(p, 650)) // token='from' ) { D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from'")); @@ -22465,7 +22512,7 @@ invalid_del_stmt_rule(Parser *p) Token * _keyword; expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 634)) // token='del' + (_keyword = _PyPegen_expect_token(p, 638)) // token='del' && (a = star_expressions_rule(p)) // star_expressions ) @@ -22517,7 +22564,7 @@ invalid_assert_stmt_rule(Parser *p) expr_ty a; expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 638)) // token='assert' + (_keyword = _PyPegen_expect_token(p, 642)) // token='assert' && (a = expression_rule(p)) // expression && @@ -22552,7 +22599,7 @@ invalid_assert_stmt_rule(Parser *p) expr_ty b; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 638)) // token='assert' + (_keyword = _PyPegen_expect_token(p, 642)) // token='assert' && (expression_var = expression_rule(p)) // expression && @@ -22589,7 +22636,7 @@ invalid_assert_stmt_rule(Parser *p) expr_ty a; expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 638)) // token='assert' + (_keyword = _PyPegen_expect_token(p, 642)) // token='assert' && (a = expression_rule(p)) // expression && @@ -22624,7 +22671,7 @@ invalid_assert_stmt_rule(Parser *p) expr_ty b; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 638)) // token='assert' + (_keyword = _PyPegen_expect_token(p, 642)) // token='assert' && (expression_var = expression_rule(p)) // expression && @@ -22791,12 +22838,12 @@ invalid_comprehension_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); Token * _literal; - void *_tmp_123_var; + void *_tmp_124_var; expr_ty a; asdl_expr_seq* b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_123_var = _tmp_123_rule(p)) // '[' | '{' + (_tmp_124_var = _tmp_124_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -22826,12 +22873,12 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); - void *_tmp_123_var; + void *_tmp_124_var; expr_ty a; Token * b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_123_var = _tmp_123_rule(p)) // '[' | '{' + (_tmp_124_var = _tmp_124_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -22911,13 +22958,13 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'")); - asdl_seq * _loop0_31_var; - void *_tmp_124_var; + asdl_seq * _loop0_32_var; + void *_tmp_125_var; Token * a; if ( - (_tmp_124_var = _tmp_124_rule(p)) // slash_no_default | slash_with_default + (_tmp_125_var = _tmp_125_rule(p)) // slash_no_default | slash_with_default && - (_loop0_31_var = _loop0_31_rule(p)) // param_maybe_default* + (_loop0_32_var = _loop0_32_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -22941,7 +22988,7 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_27_var; + asdl_seq * _loop0_28_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -22949,7 +22996,7 @@ invalid_parameters_rule(Parser *p) if ( (_opt_var = slash_no_default_rule(p), !p->error_indicator) // slash_no_default? && - (_loop0_27_var = _loop0_27_rule(p)) // param_no_default* + (_loop0_28_var = _loop0_28_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && @@ -22975,18 +23022,18 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'")); - asdl_seq * _loop0_27_var; - asdl_seq * _loop1_29_var; + asdl_seq * _loop0_28_var; + asdl_seq * _loop1_30_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_27_var = _loop0_27_rule(p)) // param_no_default* + (_loop0_28_var = _loop0_28_rule(p)) // param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_loop1_29_var = _loop1_29_rule(p)) // param_no_default+ + (_loop1_30_var = _loop1_30_rule(p)) // param_no_default+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -23013,22 +23060,22 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_31_var; - asdl_seq * _loop0_31_var_1; + asdl_seq * _loop0_32_var; + asdl_seq * _loop0_32_var_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_125_var; + void *_tmp_126_var; Token * a; if ( - (_opt_var = _tmp_124_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] + (_opt_var = _tmp_125_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] && - (_loop0_31_var = _loop0_31_rule(p)) // param_maybe_default* + (_loop0_32_var = _loop0_32_rule(p)) // param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_125_var = _tmp_125_rule(p)) // ',' | param_no_default + (_tmp_126_var = _tmp_126_rule(p)) // ',' | param_no_default && - (_loop0_31_var_1 = _loop0_31_rule(p)) // param_maybe_default* + (_loop0_32_var_1 = _loop0_32_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -23053,10 +23100,10 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_32_var; + asdl_seq * _loop1_33_var; Token * a; if ( - (_loop1_32_var = _loop1_32_rule(p)) // param_maybe_default+ + (_loop1_33_var = _loop1_33_rule(p)) // param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -23105,7 +23152,7 @@ invalid_default_rule(Parser *p) if ( (a = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(1, _tmp_126_rule, p) + _PyPegen_lookahead(1, _tmp_127_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')")); @@ -23150,12 +23197,12 @@ invalid_star_etc_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); - void *_tmp_127_var; + void *_tmp_128_var; Token * a; if ( (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_127_var = _tmp_127_rule(p)) // ')' | ',' (')' | '**') + (_tmp_128_var = _tmp_128_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); @@ -23238,20 +23285,20 @@ invalid_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_31_var; - void *_tmp_128_var; - void *_tmp_128_var_1; + asdl_seq * _loop0_32_var; + void *_tmp_129_var; + void *_tmp_129_var_1; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_128_var = _tmp_128_rule(p)) // param_no_default | ',' + (_tmp_129_var = _tmp_129_rule(p)) // param_no_default | ',' && - (_loop0_31_var = _loop0_31_rule(p)) // param_maybe_default* + (_loop0_32_var = _loop0_32_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_128_var_1 = _tmp_128_rule(p)) // param_no_default | ',' + (_tmp_129_var_1 = _tmp_129_rule(p)) // param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); @@ -23366,7 +23413,7 @@ invalid_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_129_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_130_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')")); @@ -23431,13 +23478,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_30_var; + asdl_seq * _loop1_31_var; if ( - (_loop1_30_var = _loop1_30_rule(p)) // param_with_default+ + (_loop1_31_var = _loop1_31_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_30_var; + _res = _loop1_31_var; goto done; } p->mark = _mark; @@ -23502,13 +23549,13 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'")); - asdl_seq * _loop0_76_var; - void *_tmp_130_var; + asdl_seq * _loop0_77_var; + void *_tmp_131_var; Token * a; if ( - (_tmp_130_var = _tmp_130_rule(p)) // lambda_slash_no_default | lambda_slash_with_default + (_tmp_131_var = _tmp_131_rule(p)) // lambda_slash_no_default | lambda_slash_with_default && - (_loop0_76_var = _loop0_76_rule(p)) // lambda_param_maybe_default* + (_loop0_77_var = _loop0_77_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -23532,7 +23579,7 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_72_var; + asdl_seq * _loop0_73_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -23540,7 +23587,7 @@ invalid_lambda_parameters_rule(Parser *p) if ( (_opt_var = lambda_slash_no_default_rule(p), !p->error_indicator) // lambda_slash_no_default? && - (_loop0_72_var = _loop0_72_rule(p)) // lambda_param_no_default* + (_loop0_73_var = _loop0_73_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && @@ -23566,18 +23613,18 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'")); - asdl_seq * _gather_132_var; - asdl_seq * _loop0_72_var; + asdl_seq * _gather_133_var; + asdl_seq * _loop0_73_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_72_var = _loop0_72_rule(p)) // lambda_param_no_default* + (_loop0_73_var = _loop0_73_rule(p)) // lambda_param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_132_var = _gather_132_rule(p)) // ','.lambda_param+ + (_gather_133_var = _gather_133_rule(p)) // ','.lambda_param+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -23604,22 +23651,22 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_76_var; - asdl_seq * _loop0_76_var_1; + asdl_seq * _loop0_77_var; + asdl_seq * _loop0_77_var_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_133_var; + void *_tmp_134_var; Token * a; if ( - (_opt_var = _tmp_130_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] + (_opt_var = _tmp_131_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] && - (_loop0_76_var = _loop0_76_rule(p)) // lambda_param_maybe_default* + (_loop0_77_var = _loop0_77_rule(p)) // lambda_param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_133_var = _tmp_133_rule(p)) // ',' | lambda_param_no_default + (_tmp_134_var = _tmp_134_rule(p)) // ',' | lambda_param_no_default && - (_loop0_76_var_1 = _loop0_76_rule(p)) // lambda_param_maybe_default* + (_loop0_77_var_1 = _loop0_77_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -23644,10 +23691,10 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_77_var; + asdl_seq * _loop1_78_var; Token * a; if ( - (_loop1_77_var = _loop1_77_rule(p)) // lambda_param_maybe_default+ + (_loop1_78_var = _loop1_78_rule(p)) // lambda_param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -23718,13 +23765,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_75_var; + asdl_seq * _loop1_76_var; if ( - (_loop1_75_var = _loop1_75_rule(p)) // lambda_param_with_default+ + (_loop1_76_var = _loop1_76_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_75_var; + _res = _loop1_76_var; goto done; } p->mark = _mark; @@ -23760,11 +23807,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_134_var; + void *_tmp_135_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_134_var = _tmp_134_rule(p)) // ':' | ',' (':' | '**') + (_tmp_135_var = _tmp_135_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -23817,20 +23864,20 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_76_var; - void *_tmp_135_var; - void *_tmp_135_var_1; + asdl_seq * _loop0_77_var; + void *_tmp_136_var; + void *_tmp_136_var_1; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_135_var = _tmp_135_rule(p)) // lambda_param_no_default | ',' + (_tmp_136_var = _tmp_136_rule(p)) // lambda_param_no_default | ',' && - (_loop0_76_var = _loop0_76_rule(p)) // lambda_param_maybe_default* + (_loop0_77_var = _loop0_77_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_135_var_1 = _tmp_135_rule(p)) // lambda_param_no_default | ',' + (_tmp_136_var_1 = _tmp_136_rule(p)) // lambda_param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); @@ -23948,7 +23995,7 @@ invalid_lambda_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_129_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_130_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')")); @@ -24050,11 +24097,11 @@ invalid_with_item_rule(Parser *p) if ( (expression_var = expression_rule(p)) // expression && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_35_rule, p) + _PyPegen_lookahead(1, _tmp_36_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -24098,15 +24145,15 @@ invalid_for_if_clause_rule(Parser *p) Token * _keyword; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_136_var; + void *_tmp_137_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' && - (_tmp_136_var = _tmp_136_rule(p)) // bitwise_or ((',' bitwise_or))* ','? + (_tmp_137_var = _tmp_137_rule(p)) // bitwise_or ((',' bitwise_or))* ','? && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 708) // token='in' + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 712) // token='in' ) { D(fprintf(stderr, "%*c+ invalid_for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'")); @@ -24152,9 +24199,9 @@ invalid_for_target_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings expr_ty a; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' && (a = star_expressions_rule(p)) // star_expressions ) @@ -24279,16 +24326,16 @@ invalid_import_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name")); - asdl_seq * _gather_138_var; + asdl_seq * _gather_139_var; Token * _keyword; Token * a; expr_ty dotted_name_var; if ( - (a = _PyPegen_expect_token(p, 647)) // token='import' + (a = _PyPegen_expect_token(p, 651)) // token='import' && - (_gather_138_var = _gather_138_rule(p)) // ','.dotted_name+ + (_gather_139_var = _gather_139_rule(p)) // ','.dotted_name+ && - (_keyword = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword = _PyPegen_expect_token(p, 650)) // token='from' && (dotted_name_var = dotted_name_rule(p)) // dotted_name ) @@ -24315,7 +24362,7 @@ invalid_import_rule(Parser *p) Token * _keyword; Token * token; if ( - (_keyword = _PyPegen_expect_token(p, 647)) // token='import' + (_keyword = _PyPegen_expect_token(p, 651)) // token='import' && (token = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -24364,9 +24411,9 @@ invalid_dotted_as_name_rule(Parser *p) if ( (dotted_name_var = dotted_name_rule(p)) // dotted_name && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && - _PyPegen_lookahead(0, _tmp_139_rule, p) + _PyPegen_lookahead(0, _tmp_140_rule, p) && (a = expression_rule(p)) // expression ) @@ -24415,9 +24462,9 @@ invalid_import_from_as_name_rule(Parser *p) if ( (name_var = _PyPegen_name_token(p)) // NAME && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && - _PyPegen_lookahead(0, _tmp_139_rule, p) + _PyPegen_lookahead(0, _tmp_140_rule, p) && (a = expression_rule(p)) // expression ) @@ -24535,17 +24582,17 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE")); - asdl_seq * _gather_141_var; + asdl_seq * _gather_142_var; Token * _keyword; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * newline_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword = _PyPegen_expect_token(p, 664)) // token='with' && - (_gather_141_var = _gather_141_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_142_var = _gather_142_rule(p)) // ','.(expression ['as' star_target])+ && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -24569,7 +24616,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE")); - asdl_seq * _gather_143_var; + asdl_seq * _gather_144_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -24579,13 +24626,13 @@ invalid_with_stmt_rule(Parser *p) UNUSED(_opt_var_1); // Silence compiler warnings Token * newline_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword = _PyPegen_expect_token(p, 664)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_143_var = _gather_143_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_144_var = _gather_144_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -24634,18 +24681,18 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); - asdl_seq * _gather_141_var; + asdl_seq * _gather_142_var; Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * newline_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (a = _PyPegen_expect_token(p, 660)) // token='with' + (a = _PyPegen_expect_token(p, 664)) // token='with' && - (_gather_141_var = _gather_141_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_142_var = _gather_142_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24673,7 +24720,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); - asdl_seq * _gather_143_var; + asdl_seq * _gather_144_var; Token * _literal; Token * _literal_1; Token * _literal_2; @@ -24684,13 +24731,13 @@ invalid_with_stmt_indent_rule(Parser *p) Token * a; Token * newline_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (a = _PyPegen_expect_token(p, 660)) // token='with' + (a = _PyPegen_expect_token(p, 664)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_143_var = _gather_143_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_144_var = _gather_144_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -24749,7 +24796,7 @@ invalid_try_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 669)) // token='try' + (a = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24781,13 +24828,13 @@ invalid_try_stmt_rule(Parser *p) Token * _literal; asdl_stmt_seq* block_var; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (block_var = block_rule(p)) // block && - _PyPegen_lookahead(0, _tmp_144_rule, p) + _PyPegen_lookahead(0, _tmp_145_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')")); @@ -24812,29 +24859,29 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_145_var; - asdl_seq * _loop1_36_var; + asdl_seq * _loop0_146_var; + asdl_seq * _loop1_37_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_145_var = _loop0_145_rule(p)) // block* + (_loop0_146_var = _loop0_146_rule(p)) // block* && - (_loop1_36_var = _loop1_36_rule(p)) // except_block+ + (_loop1_37_var = _loop1_37_rule(p)) // except_block+ && - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (b = _PyPegen_expect_token(p, 16)) // token='*' && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -24861,23 +24908,23 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_145_var; - asdl_seq * _loop1_37_var; + asdl_seq * _loop0_146_var; + asdl_seq * _loop1_38_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; if ( - (_keyword = _PyPegen_expect_token(p, 669)) // token='try' + (_keyword = _PyPegen_expect_token(p, 673)) // token='try' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_145_var = _loop0_145_rule(p)) // block* + (_loop0_146_var = _loop0_146_rule(p)) // block* && - (_loop1_37_var = _loop1_37_rule(p)) // except_star_block+ + (_loop1_38_var = _loop1_38_rule(p)) // except_star_block+ && - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && - (_opt_var = _tmp_146_rule(p), !p->error_indicator) // [expression ['as' NAME]] + (_opt_var = _tmp_147_rule(p), !p->error_indicator) // [expression ['as' NAME]] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -24932,7 +24979,7 @@ invalid_except_stmt_rule(Parser *p) expr_ty expressions_var; expr_ty name_var; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (a = expression_rule(p)) // expression && @@ -24940,7 +24987,7 @@ invalid_except_stmt_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -24972,11 +25019,11 @@ invalid_except_stmt_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -25003,7 +25050,7 @@ invalid_except_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -25034,11 +25081,11 @@ invalid_except_stmt_rule(Parser *p) asdl_stmt_seq* block_var; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (expression_var = expression_rule(p)) // expression && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (a = expression_rule(p)) // expression && @@ -25098,7 +25145,7 @@ invalid_except_star_stmt_rule(Parser *p) expr_ty expressions_var; expr_ty name_var; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && @@ -25108,7 +25155,7 @@ invalid_except_star_stmt_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -25141,13 +25188,13 @@ invalid_except_star_stmt_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -25172,14 +25219,14 @@ invalid_except_star_stmt_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); Token * _literal; - void *_tmp_147_var; + void *_tmp_148_var; Token * a; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_147_var = _tmp_147_rule(p)) // NEWLINE | ':' + (_tmp_148_var = _tmp_148_rule(p)) // NEWLINE | ':' ) { D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); @@ -25209,13 +25256,13 @@ invalid_except_star_stmt_rule(Parser *p) asdl_stmt_seq* block_var; expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && (expression_var = expression_rule(p)) // expression && - (_keyword_1 = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword_1 = _PyPegen_expect_token(p, 697)) // token='as' && (a = expression_rule(p)) // expression && @@ -25266,7 +25313,7 @@ invalid_finally_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 686)) // token='finally' + (a = _PyPegen_expect_token(p, 690)) // token='finally' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -25322,11 +25369,11 @@ invalid_except_stmt_indent_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -25358,7 +25405,7 @@ invalid_except_stmt_indent_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -25414,13 +25461,13 @@ invalid_except_star_stmt_indent_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 690)) // token='except' + (a = _PyPegen_expect_token(p, 694)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -25691,7 +25738,7 @@ invalid_as_pattern_rule(Parser *p) if ( (or_pattern_var = or_pattern_rule(p)) // or_pattern && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (a = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' ) @@ -25721,7 +25768,7 @@ invalid_as_pattern_rule(Parser *p) if ( (or_pattern_var = or_pattern_rule(p)) // or_pattern && - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (a = expression_rule(p)) // expression ) @@ -25826,7 +25873,7 @@ invalid_mapping_pattern_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_opt_var = _tmp_148_rule(p), !p->error_indicator) // [(items_pattern ',')] + (_opt_var = _tmp_149_rule(p), !p->error_indicator) // [(items_pattern ',')] && (rest = double_star_pattern_rule(p)) // double_star_pattern && @@ -25884,7 +25931,7 @@ invalid_class_argument_pattern_rule(Parser *p) asdl_pattern_seq* a; asdl_seq* keyword_patterns_var; if ( - (_opt_var = _tmp_149_rule(p), !p->error_indicator) // [positional_patterns ','] + (_opt_var = _tmp_150_rule(p), !p->error_indicator) // [positional_patterns ','] && (keyword_patterns_var = keyword_patterns_rule(p)) // keyword_patterns && @@ -25937,7 +25984,7 @@ invalid_if_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -25968,7 +26015,7 @@ invalid_if_stmt_rule(Parser *p) expr_ty a_1; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 695)) // token='if' + (a = _PyPegen_expect_token(p, 699)) // token='if' && (a_1 = named_expression_rule(p)) // named_expression && @@ -26023,7 +26070,7 @@ invalid_elif_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 700)) // token='elif' + (_keyword = _PyPegen_expect_token(p, 704)) // token='elif' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -26054,7 +26101,7 @@ invalid_elif_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 700)) // token='elif' + (a = _PyPegen_expect_token(p, 704)) // token='elif' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -26107,7 +26154,7 @@ invalid_else_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 699)) // token='else' + (a = _PyPegen_expect_token(p, 703)) // token='else' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -26140,13 +26187,13 @@ invalid_else_stmt_rule(Parser *p) Token * _literal; asdl_stmt_seq* block_var; if ( - (_keyword = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword = _PyPegen_expect_token(p, 703)) // token='else' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (block_var = block_rule(p)) // block && - (_keyword_1 = _PyPegen_expect_token(p, 700)) // token='elif' + (_keyword_1 = _PyPegen_expect_token(p, 704)) // token='elif' ) { D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' block 'elif'")); @@ -26193,7 +26240,7 @@ invalid_while_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 702)) // token='while' + (_keyword = _PyPegen_expect_token(p, 706)) // token='while' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -26224,7 +26271,7 @@ invalid_while_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 702)) // token='while' + (a = _PyPegen_expect_token(p, 706)) // token='while' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -26283,13 +26330,13 @@ invalid_for_stmt_rule(Parser *p) expr_ty star_expressions_var; expr_ty star_targets_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' && (star_targets_var = star_targets_rule(p)) // star_targets && - (_keyword_1 = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword_1 = _PyPegen_expect_token(p, 712)) // token='in' && (star_expressions_var = star_expressions_rule(p)) // star_expressions && @@ -26324,13 +26371,13 @@ invalid_for_stmt_rule(Parser *p) expr_ty star_expressions_var; expr_ty star_targets_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (a = _PyPegen_expect_token(p, 707)) // token='for' + (a = _PyPegen_expect_token(p, 711)) // token='for' && (star_targets_var = star_targets_rule(p)) // star_targets && - (_keyword = _PyPegen_expect_token(p, 708)) // token='in' + (_keyword = _PyPegen_expect_token(p, 712)) // token='in' && (star_expressions_var = star_expressions_rule(p)) // star_expressions && @@ -26396,9 +26443,9 @@ invalid_def_raw_rule(Parser *p) expr_ty name_var; Token * newline_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (a = _PyPegen_expect_token(p, 712)) // token='def' + (a = _PyPegen_expect_token(p, 716)) // token='def' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -26410,7 +26457,7 @@ invalid_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator) // ['->' expression] + (_opt_var_3 = _tmp_27_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -26455,9 +26502,9 @@ invalid_def_raw_rule(Parser *p) asdl_stmt_seq* block_var; expr_ty name_var; if ( - (_opt_var = _PyPegen_expect_token(p, 711), !p->error_indicator) // 'async'? + (_opt_var = _PyPegen_expect_token(p, 715), !p->error_indicator) // 'async'? && - (_keyword = _PyPegen_expect_token(p, 712)) // token='def' + (_keyword = _PyPegen_expect_token(p, 716)) // token='def' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -26469,7 +26516,7 @@ invalid_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator) // ['->' expression] + (_opt_var_3 = _tmp_27_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -26521,13 +26568,13 @@ invalid_class_def_raw_rule(Parser *p) expr_ty name_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 714)) // token='class' + (_keyword = _PyPegen_expect_token(p, 718)) // token='class' && (name_var = _PyPegen_name_token(p)) // NAME && (_opt_var = type_params_rule(p), !p->error_indicator) // type_params? && - (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var_1 = _tmp_26_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -26560,13 +26607,13 @@ invalid_class_def_raw_rule(Parser *p) expr_ty name_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 714)) // token='class' + (a = _PyPegen_expect_token(p, 718)) // token='class' && (name_var = _PyPegen_name_token(p)) // NAME && (_opt_var = type_params_rule(p), !p->error_indicator) // type_params? && - (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var_1 = _tmp_26_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -26639,19 +26686,19 @@ invalid_double_starred_kvpairs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)")); - asdl_seq * _gather_86_var; + asdl_seq * _gather_87_var; Token * _literal; - void *_tmp_150_var; + void *_tmp_151_var; if ( - (_gather_86_var = _gather_86_rule(p)) // ','.double_starred_kvpair+ + (_gather_87_var = _gather_87_rule(p)) // ','.double_starred_kvpair+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_150_var = _tmp_150_rule(p)) // invalid_kvpair | invalid_kvpair_unpacking + (_tmp_151_var = _tmp_151_rule(p)) // invalid_kvpair | invalid_kvpair_unpacking ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)")); - _res = _PyPegen_dummy_name(p, _gather_86_var, _literal, _tmp_150_var); + _res = _PyPegen_dummy_name(p, _gather_87_var, _literal, _tmp_151_var); goto done; } p->mark = _mark; @@ -26671,7 +26718,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_151_rule, p) + _PyPegen_lookahead(1, _tmp_152_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -26998,7 +27045,7 @@ invalid_kvpair_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_151_rule, p) + _PyPegen_lookahead(1, _tmp_152_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -27380,7 +27427,7 @@ invalid_fstring_replacement_field_rule(Parser *p) && (annotated_rhs_var = annotated_rhs_rule(p)) // annotated_rhs && - _PyPegen_lookahead(0, _tmp_152_rule, p) + _PyPegen_lookahead(0, _tmp_153_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')")); @@ -27412,7 +27459,7 @@ invalid_fstring_replacement_field_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(0, _tmp_153_rule, p) + _PyPegen_lookahead(0, _tmp_154_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')")); @@ -27476,9 +27523,9 @@ invalid_fstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && - _PyPegen_lookahead(0, _tmp_155_rule, p) + _PyPegen_lookahead(0, _tmp_156_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')")); @@ -27502,7 +27549,7 @@ invalid_fstring_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_78_var; + asdl_seq * _loop0_79_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; @@ -27515,11 +27562,11 @@ invalid_fstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_78_var = _loop0_78_rule(p)) // fstring_format_spec* + (_loop0_79_var = _loop0_79_rule(p)) // fstring_format_spec* && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -27556,7 +27603,7 @@ invalid_fstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -27603,7 +27650,7 @@ invalid_fstring_conversion_character_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' && - _PyPegen_lookahead(1, _tmp_155_rule, p) + _PyPegen_lookahead(1, _tmp_156_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_fstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')")); @@ -27822,7 +27869,7 @@ invalid_tstring_replacement_field_rule(Parser *p) && (annotated_rhs_var = annotated_rhs_rule(p)) // annotated_rhs && - _PyPegen_lookahead(0, _tmp_152_rule, p) + _PyPegen_lookahead(0, _tmp_153_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')")); @@ -27854,7 +27901,7 @@ invalid_tstring_replacement_field_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(0, _tmp_153_rule, p) + _PyPegen_lookahead(0, _tmp_154_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')")); @@ -27918,9 +27965,9 @@ invalid_tstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && - _PyPegen_lookahead(0, _tmp_155_rule, p) + _PyPegen_lookahead(0, _tmp_156_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')")); @@ -27944,7 +27991,7 @@ invalid_tstring_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_78_var; + asdl_seq * _loop0_79_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; @@ -27957,11 +28004,11 @@ invalid_tstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_78_var = _loop0_78_rule(p)) // fstring_format_spec* + (_loop0_79_var = _loop0_79_rule(p)) // fstring_format_spec* && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -27998,7 +28045,7 @@ invalid_tstring_replacement_field_rule(Parser *p) && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_154_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_155_rule(p), !p->error_indicator) // ['!' NAME] && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -28045,7 +28092,7 @@ invalid_tstring_conversion_character_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' && - _PyPegen_lookahead(1, _tmp_155_rule, p) + _PyPegen_lookahead(1, _tmp_156_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_tstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')")); @@ -28117,7 +28164,7 @@ invalid_string_tstring_concat_rule(Parser *p) asdl_seq * a; expr_ty b; if ( - (a = _loop1_82_rule(p)) // ((fstring | string))+ + (a = _loop1_83_rule(p)) // ((fstring | string))+ && (b = (expr_ty)tstring_rule(p)) // tstring ) @@ -28144,9 +28191,9 @@ invalid_string_tstring_concat_rule(Parser *p) asdl_seq * a; expr_ty b; if ( - (a = _loop1_83_rule(p)) // tstring+ + (a = _loop1_84_rule(p)) // tstring+ && - (b = (expr_ty)_tmp_156_rule(p)) // fstring | string + (b = (expr_ty)_tmp_157_rule(p)) // fstring | string ) { D(fprintf(stderr, "%*c+ invalid_string_tstring_concat[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring+ (fstring | string)")); @@ -28187,16 +28234,16 @@ invalid_arithmetic_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_arithmetic[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion")); - void *_tmp_157_var; + void *_tmp_158_var; Token * a; expr_ty b; expr_ty sum_var; if ( (sum_var = sum_rule(p)) // sum && - (_tmp_157_var = _tmp_157_rule(p)) // '+' | '-' | '*' | '/' | '%' | '//' | '@' + (_tmp_158_var = _tmp_158_rule(p)) // '+' | '-' | '*' | '/' | '%' | '//' | '@' && - (a = _PyPegen_expect_token(p, 716)) // token='not' + (a = _PyPegen_expect_token(p, 720)) // token='not' && (b = inversion_rule(p)) // inversion ) @@ -28239,13 +28286,13 @@ invalid_factor_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('+' | '-' | '~') 'not' factor")); - void *_tmp_158_var; + void *_tmp_159_var; Token * a; expr_ty b; if ( - (_tmp_158_var = _tmp_158_rule(p)) // '+' | '-' | '~' + (_tmp_159_var = _tmp_159_rule(p)) // '+' | '-' | '~' && - (a = _PyPegen_expect_token(p, 716)) // token='not' + (a = _PyPegen_expect_token(p, 720)) // token='not' && (b = factor_rule(p)) // factor ) @@ -28592,7 +28639,7 @@ _tmp_5_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 647)) // token='import' + (_keyword = _PyPegen_expect_token(p, 651)) // token='import' ) { D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'")); @@ -28611,7 +28658,7 @@ _tmp_5_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 646)) // token='from' + (_keyword = _PyPegen_expect_token(p, 650)) // token='from' ) { D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'")); @@ -28647,7 +28694,7 @@ _tmp_5_rule(Parser *p) return _res; } -// _tmp_6: 'def' | '@' | 'async' +// _tmp_6: 'yield' | 'async' static void * _tmp_6_rule(Parser *p) { @@ -28660,23 +28707,80 @@ _tmp_6_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'def' + { // 'yield' + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 591)) // token='yield' + ) + { + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield'")); + } + { // 'async' if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 712)) // token='def' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); + } + _res = NULL; + done: + p->level--; + return _res; +} + +// _tmp_7: 'def' | '@' | 'async' +static void * +_tmp_7_rule(Parser *p) +{ + if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'def' + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 716)) // token='def' + ) + { + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'")); } { // '@' @@ -28684,18 +28788,18 @@ _tmp_6_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } { // 'async' @@ -28703,18 +28807,18 @@ _tmp_6_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -28723,9 +28827,9 @@ _tmp_6_rule(Parser *p) return _res; } -// _tmp_7: 'class' | '@' +// _tmp_8: 'class' | '@' static void * -_tmp_7_rule(Parser *p) +_tmp_8_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -28741,18 +28845,18 @@ _tmp_7_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 714)) // token='class' + (_keyword = _PyPegen_expect_token(p, 718)) // token='class' ) { - D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'")); } { // '@' @@ -28760,18 +28864,18 @@ _tmp_7_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } _res = NULL; @@ -28780,9 +28884,9 @@ _tmp_7_rule(Parser *p) return _res; } -// _tmp_8: 'with' | 'async' +// _tmp_9: 'with' | 'async' static void * -_tmp_8_rule(Parser *p) +_tmp_9_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -28798,18 +28902,18 @@ _tmp_8_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 660)) // token='with' + (_keyword = _PyPegen_expect_token(p, 664)) // token='with' ) { - D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'")); } { // 'async' @@ -28817,18 +28921,18 @@ _tmp_8_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -28837,9 +28941,9 @@ _tmp_8_rule(Parser *p) return _res; } -// _tmp_9: 'for' | 'async' +// _tmp_10: 'for' | 'async' static void * -_tmp_9_rule(Parser *p) +_tmp_10_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -28855,18 +28959,18 @@ _tmp_9_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 707)) // token='for' + (_keyword = _PyPegen_expect_token(p, 711)) // token='for' ) { - D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'")); } { // 'async' @@ -28874,18 +28978,18 @@ _tmp_9_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 711)) // token='async' + (_keyword = _PyPegen_expect_token(p, 715)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -28894,9 +28998,9 @@ _tmp_9_rule(Parser *p) return _res; } -// _tmp_10: '=' annotated_rhs +// _tmp_11: '=' annotated_rhs static void * -_tmp_10_rule(Parser *p) +_tmp_11_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -28912,7 +29016,7 @@ _tmp_10_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); Token * _literal; expr_ty d; if ( @@ -28921,7 +29025,7 @@ _tmp_10_rule(Parser *p) (d = annotated_rhs_rule(p)) // annotated_rhs ) { - D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28931,7 +29035,7 @@ _tmp_10_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); } _res = NULL; @@ -28940,9 +29044,9 @@ _tmp_10_rule(Parser *p) return _res; } -// _tmp_11: '(' single_target ')' | single_subscript_attribute_target +// _tmp_12: '(' single_target ')' | single_subscript_attribute_target static void * -_tmp_11_rule(Parser *p) +_tmp_12_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -28958,7 +29062,7 @@ _tmp_11_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); Token * _literal; Token * _literal_1; expr_ty b; @@ -28970,7 +29074,7 @@ _tmp_11_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); _res = b; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28980,7 +29084,7 @@ _tmp_11_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); } { // single_subscript_attribute_target @@ -28988,18 +29092,18 @@ _tmp_11_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); expr_ty single_subscript_attribute_target_var; if ( (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target ) { - D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); _res = single_subscript_attribute_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); } _res = NULL; @@ -29008,9 +29112,9 @@ _tmp_11_rule(Parser *p) return _res; } -// _loop1_12: (star_targets '=') +// _loop1_13: (star_targets '=') static asdl_seq * -_loop1_12_rule(Parser *p) +_loop1_13_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29035,13 +29139,13 @@ _loop1_12_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_159_var; + D(fprintf(stderr, "%*c> _loop1_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_160_var; while ( - (_tmp_159_var = _tmp_159_rule(p)) // star_targets '=' + (_tmp_160_var = _tmp_160_rule(p)) // star_targets '=' ) { - _res = _tmp_159_var; + _res = _tmp_160_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29058,7 +29162,7 @@ _loop1_12_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_12[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_13[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } if (_n == 0 || p->error_indicator) { @@ -29080,9 +29184,9 @@ _loop1_12_rule(Parser *p) return _seq; } -// _loop0_13: ',' NAME +// _loop0_14: ',' NAME static asdl_seq * -_loop0_13_rule(Parser *p) +_loop0_14_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29107,7 +29211,7 @@ _loop0_13_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c> _loop0_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); Token * _literal; expr_ty elem; while ( @@ -29139,7 +29243,7 @@ _loop0_13_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_14[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29156,9 +29260,9 @@ _loop0_13_rule(Parser *p) return _seq; } -// _gather_14: NAME _loop0_13 +// _gather_15: NAME _loop0_14 static asdl_seq * -_gather_14_rule(Parser *p) +_gather_15_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29169,27 +29273,27 @@ _gather_14_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // NAME _loop0_13 + { // NAME _loop0_14 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13")); + D(fprintf(stderr, "%*c> _gather_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_14")); expr_ty elem; asdl_seq * seq; if ( (elem = _PyPegen_name_token(p)) // NAME && - (seq = _loop0_13_rule(p)) // _loop0_13 + (seq = _loop0_14_rule(p)) // _loop0_14 ) { - D(fprintf(stderr, "%*c+ _gather_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13")); + D(fprintf(stderr, "%*c+ _gather_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_14")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_14[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_13")); + D(fprintf(stderr, "%*c%s _gather_15[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_14")); } _res = NULL; done: @@ -29197,9 +29301,9 @@ _gather_14_rule(Parser *p) return _res; } -// _tmp_15: ';' | NEWLINE +// _tmp_16: ';' | NEWLINE static void * -_tmp_15_rule(Parser *p) +_tmp_16_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29215,18 +29319,18 @@ _tmp_15_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 13)) // token=';' ) { - D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'")); } { // NEWLINE @@ -29234,18 +29338,18 @@ _tmp_15_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } _res = NULL; @@ -29254,9 +29358,9 @@ _tmp_15_rule(Parser *p) return _res; } -// _tmp_16: ',' expression +// _tmp_17: ',' expression static void * -_tmp_16_rule(Parser *p) +_tmp_17_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29272,7 +29376,7 @@ _tmp_16_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty z; if ( @@ -29281,7 +29385,7 @@ _tmp_16_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29291,7 +29395,7 @@ _tmp_16_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -29300,9 +29404,9 @@ _tmp_16_rule(Parser *p) return _res; } -// _loop0_17: ('.' | '...') +// _loop0_18: ('.' | '...') static asdl_seq * -_loop0_17_rule(Parser *p) +_loop0_18_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29327,13 +29431,13 @@ _loop0_17_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_160_var; + D(fprintf(stderr, "%*c> _loop0_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_161_var; while ( - (_tmp_160_var = _tmp_160_rule(p)) // '.' | '...' + (_tmp_161_var = _tmp_161_rule(p)) // '.' | '...' ) { - _res = _tmp_160_var; + _res = _tmp_161_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29350,7 +29454,7 @@ _loop0_17_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_17[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_18[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29367,9 +29471,9 @@ _loop0_17_rule(Parser *p) return _seq; } -// _loop1_18: ('.' | '...') +// _loop1_19: ('.' | '...') static asdl_seq * -_loop1_18_rule(Parser *p) +_loop1_19_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29394,13 +29498,13 @@ _loop1_18_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_160_var; + D(fprintf(stderr, "%*c> _loop1_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_161_var; while ( - (_tmp_160_var = _tmp_160_rule(p)) // '.' | '...' + (_tmp_161_var = _tmp_161_rule(p)) // '.' | '...' ) { - _res = _tmp_160_var; + _res = _tmp_161_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29417,7 +29521,7 @@ _loop1_18_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_18[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_19[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } if (_n == 0 || p->error_indicator) { @@ -29439,9 +29543,9 @@ _loop1_18_rule(Parser *p) return _seq; } -// _loop0_19: ',' import_from_as_name +// _loop0_20: ',' import_from_as_name static asdl_seq * -_loop0_19_rule(Parser *p) +_loop0_20_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29466,7 +29570,7 @@ _loop0_19_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); + D(fprintf(stderr, "%*c> _loop0_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); Token * _literal; alias_ty elem; while ( @@ -29498,7 +29602,7 @@ _loop0_19_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_19[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_20[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29515,9 +29619,9 @@ _loop0_19_rule(Parser *p) return _seq; } -// _gather_20: import_from_as_name _loop0_19 +// _gather_21: import_from_as_name _loop0_20 static asdl_seq * -_gather_20_rule(Parser *p) +_gather_21_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29528,27 +29632,27 @@ _gather_20_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // import_from_as_name _loop0_19 + { // import_from_as_name _loop0_20 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19")); + D(fprintf(stderr, "%*c> _gather_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_20")); alias_ty elem; asdl_seq * seq; if ( (elem = import_from_as_name_rule(p)) // import_from_as_name && - (seq = _loop0_19_rule(p)) // _loop0_19 + (seq = _loop0_20_rule(p)) // _loop0_20 ) { - D(fprintf(stderr, "%*c+ _gather_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19")); + D(fprintf(stderr, "%*c+ _gather_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_20")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_20[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_19")); + D(fprintf(stderr, "%*c%s _gather_21[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_20")); } _res = NULL; done: @@ -29556,9 +29660,9 @@ _gather_20_rule(Parser *p) return _res; } -// _tmp_21: 'as' NAME +// _tmp_22: 'as' NAME static void * -_tmp_21_rule(Parser *p) +_tmp_22_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29574,16 +29678,16 @@ _tmp_21_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty z; if ( - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_22[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29593,7 +29697,7 @@ _tmp_21_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_21[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_22[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -29602,9 +29706,9 @@ _tmp_21_rule(Parser *p) return _res; } -// _loop0_22: ',' dotted_as_name +// _loop0_23: ',' dotted_as_name static asdl_seq * -_loop0_22_rule(Parser *p) +_loop0_23_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29629,7 +29733,7 @@ _loop0_22_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); + D(fprintf(stderr, "%*c> _loop0_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); Token * _literal; alias_ty elem; while ( @@ -29661,7 +29765,7 @@ _loop0_22_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_22[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_23[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29678,9 +29782,9 @@ _loop0_22_rule(Parser *p) return _seq; } -// _gather_23: dotted_as_name _loop0_22 +// _gather_24: dotted_as_name _loop0_23 static asdl_seq * -_gather_23_rule(Parser *p) +_gather_24_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29691,27 +29795,27 @@ _gather_23_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // dotted_as_name _loop0_22 + { // dotted_as_name _loop0_23 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22")); + D(fprintf(stderr, "%*c> _gather_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_23")); alias_ty elem; asdl_seq * seq; if ( (elem = dotted_as_name_rule(p)) // dotted_as_name && - (seq = _loop0_22_rule(p)) // _loop0_22 + (seq = _loop0_23_rule(p)) // _loop0_23 ) { - D(fprintf(stderr, "%*c+ _gather_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22")); + D(fprintf(stderr, "%*c+ _gather_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_23")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_23[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_22")); + D(fprintf(stderr, "%*c%s _gather_24[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_23")); } _res = NULL; done: @@ -29719,9 +29823,9 @@ _gather_23_rule(Parser *p) return _res; } -// _loop1_24: ('@' named_expression NEWLINE) +// _loop1_25: ('@' named_expression NEWLINE) static asdl_seq * -_loop1_24_rule(Parser *p) +_loop1_25_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29746,13 +29850,13 @@ _loop1_24_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_161_var; + D(fprintf(stderr, "%*c> _loop1_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); + void *_tmp_162_var; while ( - (_tmp_161_var = _tmp_161_rule(p)) // '@' named_expression NEWLINE + (_tmp_162_var = _tmp_162_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_161_var; + _res = _tmp_162_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29769,7 +29873,7 @@ _loop1_24_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_24[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_25[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)")); } if (_n == 0 || p->error_indicator) { @@ -29791,9 +29895,9 @@ _loop1_24_rule(Parser *p) return _seq; } -// _tmp_25: '(' arguments? ')' +// _tmp_26: '(' arguments? ')' static void * -_tmp_25_rule(Parser *p) +_tmp_26_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29809,7 +29913,7 @@ _tmp_25_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *z; @@ -29821,7 +29925,7 @@ _tmp_25_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_25[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29831,7 +29935,7 @@ _tmp_25_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_25[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_26[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -29840,9 +29944,9 @@ _tmp_25_rule(Parser *p) return _res; } -// _tmp_26: '->' expression +// _tmp_27: '->' expression static void * -_tmp_26_rule(Parser *p) +_tmp_27_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29858,7 +29962,7 @@ _tmp_26_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty z; if ( @@ -29867,7 +29971,7 @@ _tmp_26_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_27[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29877,7 +29981,7 @@ _tmp_26_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_26[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_27[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -29886,9 +29990,9 @@ _tmp_26_rule(Parser *p) return _res; } -// _loop0_27: param_no_default +// _loop0_28: param_no_default static asdl_seq * -_loop0_27_rule(Parser *p) +_loop0_28_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29913,7 +30017,7 @@ _loop0_27_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -29936,7 +30040,7 @@ _loop0_27_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_27[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29953,9 +30057,9 @@ _loop0_27_rule(Parser *p) return _seq; } -// _loop0_28: param_with_default +// _loop0_29: param_with_default static asdl_seq * -_loop0_28_rule(Parser *p) +_loop0_29_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -29980,7 +30084,7 @@ _loop0_28_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop0_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -30003,7 +30107,7 @@ _loop0_28_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_29[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30020,9 +30124,9 @@ _loop0_28_rule(Parser *p) return _seq; } -// _loop1_29: param_no_default +// _loop1_30: param_no_default static asdl_seq * -_loop1_29_rule(Parser *p) +_loop1_30_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30047,7 +30151,7 @@ _loop1_29_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -30070,7 +30174,7 @@ _loop1_29_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_29[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_30[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -30092,9 +30196,9 @@ _loop1_29_rule(Parser *p) return _seq; } -// _loop1_30: param_with_default +// _loop1_31: param_with_default static asdl_seq * -_loop1_30_rule(Parser *p) +_loop1_31_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30119,7 +30223,7 @@ _loop1_30_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -30142,7 +30246,7 @@ _loop1_30_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_30[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_31[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -30164,9 +30268,9 @@ _loop1_30_rule(Parser *p) return _seq; } -// _loop0_31: param_maybe_default +// _loop0_32: param_maybe_default static asdl_seq * -_loop0_31_rule(Parser *p) +_loop0_32_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30191,7 +30295,7 @@ _loop0_31_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -30214,7 +30318,7 @@ _loop0_31_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_32[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30231,9 +30335,9 @@ _loop0_31_rule(Parser *p) return _seq; } -// _loop1_32: param_maybe_default +// _loop1_33: param_maybe_default static asdl_seq * -_loop1_32_rule(Parser *p) +_loop1_33_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30258,7 +30362,7 @@ _loop1_32_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -30281,7 +30385,7 @@ _loop1_32_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_33[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -30303,9 +30407,9 @@ _loop1_32_rule(Parser *p) return _seq; } -// _loop0_33: ',' with_item +// _loop0_34: ',' with_item static asdl_seq * -_loop0_33_rule(Parser *p) +_loop0_34_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30330,7 +30434,7 @@ _loop0_33_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c> _loop0_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; withitem_ty elem; while ( @@ -30362,7 +30466,7 @@ _loop0_33_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_33[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_34[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30379,9 +30483,9 @@ _loop0_33_rule(Parser *p) return _seq; } -// _gather_34: with_item _loop0_33 +// _gather_35: with_item _loop0_34 static asdl_seq * -_gather_34_rule(Parser *p) +_gather_35_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30392,27 +30496,27 @@ _gather_34_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // with_item _loop0_33 + { // with_item _loop0_34 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33")); + D(fprintf(stderr, "%*c> _gather_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_34")); withitem_ty elem; asdl_seq * seq; if ( (elem = with_item_rule(p)) // with_item && - (seq = _loop0_33_rule(p)) // _loop0_33 + (seq = _loop0_34_rule(p)) // _loop0_34 ) { - D(fprintf(stderr, "%*c+ _gather_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33")); + D(fprintf(stderr, "%*c+ _gather_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_34")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_34[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_33")); + D(fprintf(stderr, "%*c%s _gather_35[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_34")); } _res = NULL; done: @@ -30420,9 +30524,9 @@ _gather_34_rule(Parser *p) return _res; } -// _tmp_35: ',' | ')' | ':' +// _tmp_36: ',' | ')' | ':' static void * -_tmp_35_rule(Parser *p) +_tmp_36_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30438,18 +30542,18 @@ _tmp_35_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_36[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -30457,18 +30561,18 @@ _tmp_35_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_36[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -30476,18 +30580,18 @@ _tmp_35_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_36[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -30496,9 +30600,9 @@ _tmp_35_rule(Parser *p) return _res; } -// _loop1_36: except_block +// _loop1_37: except_block static asdl_seq * -_loop1_36_rule(Parser *p) +_loop1_37_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30523,7 +30627,7 @@ _loop1_36_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); + D(fprintf(stderr, "%*c> _loop1_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); excepthandler_ty except_block_var; while ( (except_block_var = except_block_rule(p)) // except_block @@ -30546,7 +30650,7 @@ _loop1_36_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_36[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_37[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); } if (_n == 0 || p->error_indicator) { @@ -30568,9 +30672,9 @@ _loop1_36_rule(Parser *p) return _seq; } -// _loop1_37: except_star_block +// _loop1_38: except_star_block static asdl_seq * -_loop1_37_rule(Parser *p) +_loop1_38_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30595,7 +30699,7 @@ _loop1_37_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); + D(fprintf(stderr, "%*c> _loop1_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); excepthandler_ty except_star_block_var; while ( (except_star_block_var = except_star_block_rule(p)) // except_star_block @@ -30618,7 +30722,7 @@ _loop1_37_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_37[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_38[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block")); } if (_n == 0 || p->error_indicator) { @@ -30640,9 +30744,9 @@ _loop1_37_rule(Parser *p) return _seq; } -// _loop1_38: case_block +// _loop1_39: case_block static asdl_seq * -_loop1_38_rule(Parser *p) +_loop1_39_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30667,7 +30771,7 @@ _loop1_38_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); + D(fprintf(stderr, "%*c> _loop1_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); match_case_ty case_block_var; while ( (case_block_var = case_block_rule(p)) // case_block @@ -30690,7 +30794,7 @@ _loop1_38_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_38[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_39[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block")); } if (_n == 0 || p->error_indicator) { @@ -30712,9 +30816,9 @@ _loop1_38_rule(Parser *p) return _seq; } -// _loop0_39: '|' closed_pattern +// _loop0_40: '|' closed_pattern static asdl_seq * -_loop0_39_rule(Parser *p) +_loop0_40_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30739,7 +30843,7 @@ _loop0_39_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); + D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); Token * _literal; pattern_ty elem; while ( @@ -30771,7 +30875,7 @@ _loop0_39_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_39[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_40[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30788,9 +30892,9 @@ _loop0_39_rule(Parser *p) return _seq; } -// _gather_40: closed_pattern _loop0_39 +// _gather_41: closed_pattern _loop0_40 static asdl_seq * -_gather_40_rule(Parser *p) +_gather_41_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30801,27 +30905,27 @@ _gather_40_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // closed_pattern _loop0_39 + { // closed_pattern _loop0_40 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39")); + D(fprintf(stderr, "%*c> _gather_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_40")); pattern_ty elem; asdl_seq * seq; if ( (elem = closed_pattern_rule(p)) // closed_pattern && - (seq = _loop0_39_rule(p)) // _loop0_39 + (seq = _loop0_40_rule(p)) // _loop0_40 ) { - D(fprintf(stderr, "%*c+ _gather_40[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39")); + D(fprintf(stderr, "%*c+ _gather_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_40")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_40[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_39")); + D(fprintf(stderr, "%*c%s _gather_41[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_40")); } _res = NULL; done: @@ -30829,9 +30933,9 @@ _gather_40_rule(Parser *p) return _res; } -// _tmp_41: '+' | '-' +// _tmp_42: '+' | '-' static void * -_tmp_41_rule(Parser *p) +_tmp_42_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30847,18 +30951,18 @@ _tmp_41_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } { // '-' @@ -30866,18 +30970,18 @@ _tmp_41_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } _res = NULL; @@ -30886,9 +30990,9 @@ _tmp_41_rule(Parser *p) return _res; } -// _tmp_42: STRING | FSTRING_START | TSTRING_START +// _tmp_43: STRING | FSTRING_START | TSTRING_START static void * -_tmp_42_rule(Parser *p) +_tmp_43_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30904,18 +31008,18 @@ _tmp_42_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); + D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); expr_ty string_var; if ( (string_var = _PyPegen_string_token(p)) // STRING ) { - D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING")); + D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING")); _res = string_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING")); } { // FSTRING_START @@ -30923,18 +31027,18 @@ _tmp_42_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); + D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); Token * fstring_start_var; if ( (fstring_start_var = _PyPegen_expect_token(p, FSTRING_START)) // token='FSTRING_START' ) { - D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); + D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); _res = fstring_start_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START")); } { // TSTRING_START @@ -30942,18 +31046,18 @@ _tmp_42_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START")); + D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START")); Token * tstring_start_var; if ( (tstring_start_var = _PyPegen_expect_token(p, TSTRING_START)) // token='TSTRING_START' ) { - D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START")); + D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START")); _res = tstring_start_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_START")); } _res = NULL; @@ -30962,9 +31066,9 @@ _tmp_42_rule(Parser *p) return _res; } -// _tmp_43: '.' | '(' | '=' +// _tmp_44: '.' | '(' | '=' static void * -_tmp_43_rule(Parser *p) +_tmp_44_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -30980,18 +31084,18 @@ _tmp_43_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_44[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_44[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '(' @@ -30999,18 +31103,18 @@ _tmp_43_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_44[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_44[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '=' @@ -31018,18 +31122,18 @@ _tmp_43_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_44[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_44[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } _res = NULL; @@ -31038,9 +31142,9 @@ _tmp_43_rule(Parser *p) return _res; } -// _loop0_44: ',' maybe_star_pattern +// _loop0_45: ',' maybe_star_pattern static asdl_seq * -_loop0_44_rule(Parser *p) +_loop0_45_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31065,7 +31169,7 @@ _loop0_44_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); + D(fprintf(stderr, "%*c> _loop0_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); Token * _literal; pattern_ty elem; while ( @@ -31097,7 +31201,7 @@ _loop0_44_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_45[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31114,9 +31218,9 @@ _loop0_44_rule(Parser *p) return _seq; } -// _gather_45: maybe_star_pattern _loop0_44 +// _gather_46: maybe_star_pattern _loop0_45 static asdl_seq * -_gather_45_rule(Parser *p) +_gather_46_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31127,27 +31231,27 @@ _gather_45_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // maybe_star_pattern _loop0_44 + { // maybe_star_pattern _loop0_45 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44")); + D(fprintf(stderr, "%*c> _gather_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_45")); pattern_ty elem; asdl_seq * seq; if ( (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern && - (seq = _loop0_44_rule(p)) // _loop0_44 + (seq = _loop0_45_rule(p)) // _loop0_45 ) { - D(fprintf(stderr, "%*c+ _gather_45[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44")); + D(fprintf(stderr, "%*c+ _gather_46[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_45")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_45[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_44")); + D(fprintf(stderr, "%*c%s _gather_46[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_45")); } _res = NULL; done: @@ -31155,9 +31259,9 @@ _gather_45_rule(Parser *p) return _res; } -// _loop0_46: ',' key_value_pattern +// _loop0_47: ',' key_value_pattern static asdl_seq * -_loop0_46_rule(Parser *p) +_loop0_47_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31182,7 +31286,7 @@ _loop0_46_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); + D(fprintf(stderr, "%*c> _loop0_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); Token * _literal; KeyPatternPair* elem; while ( @@ -31214,7 +31318,7 @@ _loop0_46_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_47[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31231,9 +31335,9 @@ _loop0_46_rule(Parser *p) return _seq; } -// _gather_47: key_value_pattern _loop0_46 +// _gather_48: key_value_pattern _loop0_47 static asdl_seq * -_gather_47_rule(Parser *p) +_gather_48_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31244,27 +31348,27 @@ _gather_47_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // key_value_pattern _loop0_46 + { // key_value_pattern _loop0_47 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46")); + D(fprintf(stderr, "%*c> _gather_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_47")); KeyPatternPair* elem; asdl_seq * seq; if ( (elem = key_value_pattern_rule(p)) // key_value_pattern && - (seq = _loop0_46_rule(p)) // _loop0_46 + (seq = _loop0_47_rule(p)) // _loop0_47 ) { - D(fprintf(stderr, "%*c+ _gather_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46")); + D(fprintf(stderr, "%*c+ _gather_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_47")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_47[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_46")); + D(fprintf(stderr, "%*c%s _gather_48[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_47")); } _res = NULL; done: @@ -31272,9 +31376,9 @@ _gather_47_rule(Parser *p) return _res; } -// _tmp_48: literal_expr | attr +// _tmp_49: literal_expr | attr static void * -_tmp_48_rule(Parser *p) +_tmp_49_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31290,18 +31394,18 @@ _tmp_48_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); + D(fprintf(stderr, "%*c> _tmp_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); expr_ty literal_expr_var; if ( (literal_expr_var = literal_expr_rule(p)) // literal_expr ) { - D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); + D(fprintf(stderr, "%*c+ _tmp_49[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); _res = literal_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_49[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr")); } { // attr @@ -31309,18 +31413,18 @@ _tmp_48_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c> _tmp_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); expr_ty attr_var; if ( (attr_var = attr_rule(p)) // attr ) { - D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c+ _tmp_49[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); _res = attr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_49[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); } _res = NULL; @@ -31329,9 +31433,9 @@ _tmp_48_rule(Parser *p) return _res; } -// _loop0_49: ',' pattern +// _loop0_50: ',' pattern static asdl_seq * -_loop0_49_rule(Parser *p) +_loop0_50_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31356,7 +31460,7 @@ _loop0_49_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); + D(fprintf(stderr, "%*c> _loop0_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); Token * _literal; pattern_ty elem; while ( @@ -31388,7 +31492,7 @@ _loop0_49_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_49[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_50[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31405,9 +31509,9 @@ _loop0_49_rule(Parser *p) return _seq; } -// _gather_50: pattern _loop0_49 +// _gather_51: pattern _loop0_50 static asdl_seq * -_gather_50_rule(Parser *p) +_gather_51_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31418,27 +31522,27 @@ _gather_50_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // pattern _loop0_49 + { // pattern _loop0_50 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49")); + D(fprintf(stderr, "%*c> _gather_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_50")); pattern_ty elem; asdl_seq * seq; if ( (elem = pattern_rule(p)) // pattern && - (seq = _loop0_49_rule(p)) // _loop0_49 + (seq = _loop0_50_rule(p)) // _loop0_50 ) { - D(fprintf(stderr, "%*c+ _gather_50[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49")); + D(fprintf(stderr, "%*c+ _gather_51[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_50")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_50[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_49")); + D(fprintf(stderr, "%*c%s _gather_51[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_50")); } _res = NULL; done: @@ -31446,9 +31550,9 @@ _gather_50_rule(Parser *p) return _res; } -// _loop0_51: ',' keyword_pattern +// _loop0_52: ',' keyword_pattern static asdl_seq * -_loop0_51_rule(Parser *p) +_loop0_52_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31473,7 +31577,7 @@ _loop0_51_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); + D(fprintf(stderr, "%*c> _loop0_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); Token * _literal; KeyPatternPair* elem; while ( @@ -31505,7 +31609,7 @@ _loop0_51_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_51[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_52[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31522,9 +31626,9 @@ _loop0_51_rule(Parser *p) return _seq; } -// _gather_52: keyword_pattern _loop0_51 +// _gather_53: keyword_pattern _loop0_52 static asdl_seq * -_gather_52_rule(Parser *p) +_gather_53_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31535,27 +31639,27 @@ _gather_52_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // keyword_pattern _loop0_51 + { // keyword_pattern _loop0_52 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51")); + D(fprintf(stderr, "%*c> _gather_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_52")); KeyPatternPair* elem; asdl_seq * seq; if ( (elem = keyword_pattern_rule(p)) // keyword_pattern && - (seq = _loop0_51_rule(p)) // _loop0_51 + (seq = _loop0_52_rule(p)) // _loop0_52 ) { - D(fprintf(stderr, "%*c+ _gather_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51")); + D(fprintf(stderr, "%*c+ _gather_53[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_52")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_52[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_51")); + D(fprintf(stderr, "%*c%s _gather_53[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_52")); } _res = NULL; done: @@ -31563,9 +31667,9 @@ _gather_52_rule(Parser *p) return _res; } -// _loop0_53: ',' type_param +// _loop0_54: ',' type_param static asdl_seq * -_loop0_53_rule(Parser *p) +_loop0_54_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31590,7 +31694,7 @@ _loop0_53_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param")); + D(fprintf(stderr, "%*c> _loop0_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param")); Token * _literal; type_param_ty elem; while ( @@ -31622,7 +31726,7 @@ _loop0_53_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_53[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_54[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' type_param")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31639,9 +31743,9 @@ _loop0_53_rule(Parser *p) return _seq; } -// _gather_54: type_param _loop0_53 +// _gather_55: type_param _loop0_54 static asdl_seq * -_gather_54_rule(Parser *p) +_gather_55_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31652,27 +31756,27 @@ _gather_54_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // type_param _loop0_53 + { // type_param _loop0_54 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53")); + D(fprintf(stderr, "%*c> _gather_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_54")); type_param_ty elem; asdl_seq * seq; if ( (elem = type_param_rule(p)) // type_param && - (seq = _loop0_53_rule(p)) // _loop0_53 + (seq = _loop0_54_rule(p)) // _loop0_54 ) { - D(fprintf(stderr, "%*c+ _gather_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53")); + D(fprintf(stderr, "%*c+ _gather_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_54")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_54[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_53")); + D(fprintf(stderr, "%*c%s _gather_55[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_54")); } _res = NULL; done: @@ -31680,9 +31784,9 @@ _gather_54_rule(Parser *p) return _res; } -// _loop1_55: (',' expression) +// _loop1_56: (',' expression) static asdl_seq * -_loop1_55_rule(Parser *p) +_loop1_56_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31707,13 +31811,13 @@ _loop1_55_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_16_var; + D(fprintf(stderr, "%*c> _loop1_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); + void *_tmp_17_var; while ( - (_tmp_16_var = _tmp_16_rule(p)) // ',' expression + (_tmp_17_var = _tmp_17_rule(p)) // ',' expression ) { - _res = _tmp_16_var; + _res = _tmp_17_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -31730,7 +31834,7 @@ _loop1_55_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_55[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_56[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)")); } if (_n == 0 || p->error_indicator) { @@ -31752,9 +31856,9 @@ _loop1_55_rule(Parser *p) return _seq; } -// _loop1_56: (',' star_expression) +// _loop1_57: (',' star_expression) static asdl_seq * -_loop1_56_rule(Parser *p) +_loop1_57_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31779,13 +31883,13 @@ _loop1_56_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_162_var; + D(fprintf(stderr, "%*c> _loop1_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); + void *_tmp_163_var; while ( - (_tmp_162_var = _tmp_162_rule(p)) // ',' star_expression + (_tmp_163_var = _tmp_163_rule(p)) // ',' star_expression ) { - _res = _tmp_162_var; + _res = _tmp_163_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -31802,7 +31906,7 @@ _loop1_56_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_56[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_57[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)")); } if (_n == 0 || p->error_indicator) { @@ -31824,9 +31928,9 @@ _loop1_56_rule(Parser *p) return _seq; } -// _loop0_57: ',' star_named_expression +// _loop0_58: ',' star_named_expression static asdl_seq * -_loop0_57_rule(Parser *p) +_loop0_58_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31851,7 +31955,7 @@ _loop0_57_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); + D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); Token * _literal; expr_ty elem; while ( @@ -31883,7 +31987,7 @@ _loop0_57_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_58[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31900,9 +32004,9 @@ _loop0_57_rule(Parser *p) return _seq; } -// _gather_58: star_named_expression _loop0_57 +// _gather_59: star_named_expression _loop0_58 static asdl_seq * -_gather_58_rule(Parser *p) +_gather_59_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31913,27 +32017,27 @@ _gather_58_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // star_named_expression _loop0_57 + { // star_named_expression _loop0_58 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57")); + D(fprintf(stderr, "%*c> _gather_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_58")); expr_ty elem; asdl_seq * seq; if ( (elem = star_named_expression_rule(p)) // star_named_expression && - (seq = _loop0_57_rule(p)) // _loop0_57 + (seq = _loop0_58_rule(p)) // _loop0_58 ) { - D(fprintf(stderr, "%*c+ _gather_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57")); + D(fprintf(stderr, "%*c+ _gather_59[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_58")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_58[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_57")); + D(fprintf(stderr, "%*c%s _gather_59[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_58")); } _res = NULL; done: @@ -31941,9 +32045,9 @@ _gather_58_rule(Parser *p) return _res; } -// _loop0_59: ',' star_named_expression_sequence +// _loop0_60: ',' star_named_expression_sequence static asdl_seq * -_loop0_59_rule(Parser *p) +_loop0_60_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -31968,7 +32072,7 @@ _loop0_59_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression_sequence")); + D(fprintf(stderr, "%*c> _loop0_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression_sequence")); Token * _literal; expr_ty elem; while ( @@ -32000,7 +32104,7 @@ _loop0_59_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_59[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_60[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression_sequence")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -32017,9 +32121,9 @@ _loop0_59_rule(Parser *p) return _seq; } -// _gather_60: star_named_expression_sequence _loop0_59 +// _gather_61: star_named_expression_sequence _loop0_60 static asdl_seq * -_gather_60_rule(Parser *p) +_gather_61_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32030,27 +32134,27 @@ _gather_60_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // star_named_expression_sequence _loop0_59 + { // star_named_expression_sequence _loop0_60 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence _loop0_59")); + D(fprintf(stderr, "%*c> _gather_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence _loop0_60")); expr_ty elem; asdl_seq * seq; if ( (elem = star_named_expression_sequence_rule(p)) // star_named_expression_sequence && - (seq = _loop0_59_rule(p)) // _loop0_59 + (seq = _loop0_60_rule(p)) // _loop0_60 ) { - D(fprintf(stderr, "%*c+ _gather_60[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence _loop0_59")); + D(fprintf(stderr, "%*c+ _gather_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence _loop0_60")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_60[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression_sequence _loop0_59")); + D(fprintf(stderr, "%*c%s _gather_61[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression_sequence _loop0_60")); } _res = NULL; done: @@ -32058,9 +32162,9 @@ _gather_60_rule(Parser *p) return _res; } -// _loop1_61: ('or' conjunction) +// _loop1_62: ('or' conjunction) static asdl_seq * -_loop1_61_rule(Parser *p) +_loop1_62_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32085,13 +32189,13 @@ _loop1_61_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_163_var; + D(fprintf(stderr, "%*c> _loop1_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); + void *_tmp_164_var; while ( - (_tmp_163_var = _tmp_163_rule(p)) // 'or' conjunction + (_tmp_164_var = _tmp_164_rule(p)) // 'or' conjunction ) { - _res = _tmp_163_var; + _res = _tmp_164_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32108,7 +32212,7 @@ _loop1_61_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_62[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)")); } if (_n == 0 || p->error_indicator) { @@ -32130,9 +32234,9 @@ _loop1_61_rule(Parser *p) return _seq; } -// _loop1_62: ('and' inversion) +// _loop1_63: ('and' inversion) static asdl_seq * -_loop1_62_rule(Parser *p) +_loop1_63_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32157,13 +32261,13 @@ _loop1_62_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_164_var; + D(fprintf(stderr, "%*c> _loop1_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); + void *_tmp_165_var; while ( - (_tmp_164_var = _tmp_164_rule(p)) // 'and' inversion + (_tmp_165_var = _tmp_165_rule(p)) // 'and' inversion ) { - _res = _tmp_164_var; + _res = _tmp_165_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32180,7 +32284,7 @@ _loop1_62_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_62[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_63[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)")); } if (_n == 0 || p->error_indicator) { @@ -32202,9 +32306,9 @@ _loop1_62_rule(Parser *p) return _seq; } -// _loop1_63: compare_op_bitwise_or_pair +// _loop1_64: compare_op_bitwise_or_pair static asdl_seq * -_loop1_63_rule(Parser *p) +_loop1_64_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32229,7 +32333,7 @@ _loop1_63_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); + D(fprintf(stderr, "%*c> _loop1_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); CmpopExprPair* compare_op_bitwise_or_pair_var; while ( (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p)) // compare_op_bitwise_or_pair @@ -32252,7 +32356,7 @@ _loop1_63_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_63[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_64[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair")); } if (_n == 0 || p->error_indicator) { @@ -32274,9 +32378,9 @@ _loop1_63_rule(Parser *p) return _seq; } -// _tmp_64: '!=' +// _tmp_65: '!=' static void * -_tmp_64_rule(Parser *p) +_tmp_65_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32292,13 +32396,13 @@ _tmp_64_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); + D(fprintf(stderr, "%*c> _tmp_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); Token * tok; if ( (tok = _PyPegen_expect_token(p, 28)) // token='!=' ) { - D(fprintf(stderr, "%*c+ _tmp_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); + D(fprintf(stderr, "%*c+ _tmp_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -32308,7 +32412,7 @@ _tmp_64_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_64[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_65[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='")); } _res = NULL; @@ -32317,9 +32421,9 @@ _tmp_64_rule(Parser *p) return _res; } -// _loop0_65: ',' (slice | starred_expression) +// _loop0_66: ',' (slice | starred_expression) static asdl_seq * -_loop0_65_rule(Parser *p) +_loop0_66_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32344,13 +32448,13 @@ _loop0_65_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)")); + D(fprintf(stderr, "%*c> _loop0_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_165_rule(p)) // slice | starred_expression + (elem = _tmp_166_rule(p)) // slice | starred_expression ) { _res = elem; @@ -32376,7 +32480,7 @@ _loop0_65_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_65[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_66[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (slice | starred_expression)")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -32393,9 +32497,9 @@ _loop0_65_rule(Parser *p) return _seq; } -// _gather_66: (slice | starred_expression) _loop0_65 +// _gather_67: (slice | starred_expression) _loop0_66 static asdl_seq * -_gather_66_rule(Parser *p) +_gather_67_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32406,27 +32510,27 @@ _gather_66_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (slice | starred_expression) _loop0_65 + { // (slice | starred_expression) _loop0_66 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_65")); + D(fprintf(stderr, "%*c> _gather_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_66")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_165_rule(p)) // slice | starred_expression + (elem = _tmp_166_rule(p)) // slice | starred_expression && - (seq = _loop0_65_rule(p)) // _loop0_65 + (seq = _loop0_66_rule(p)) // _loop0_66 ) { - D(fprintf(stderr, "%*c+ _gather_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_65")); + D(fprintf(stderr, "%*c+ _gather_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_66")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_66[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_65")); + D(fprintf(stderr, "%*c%s _gather_67[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_66")); } _res = NULL; done: @@ -32434,9 +32538,9 @@ _gather_66_rule(Parser *p) return _res; } -// _tmp_67: ':' expression? +// _tmp_68: ':' expression? static void * -_tmp_67_rule(Parser *p) +_tmp_68_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32452,7 +32556,7 @@ _tmp_67_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); + D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); Token * _literal; void *d; if ( @@ -32461,7 +32565,7 @@ _tmp_67_rule(Parser *p) (d = expression_rule(p), !p->error_indicator) // expression? ) { - D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); + D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -32471,7 +32575,7 @@ _tmp_67_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?")); } _res = NULL; @@ -32480,9 +32584,9 @@ _tmp_67_rule(Parser *p) return _res; } -// _tmp_68: genexp | tuple | group +// _tmp_69: genexp | tuple | group static void * -_tmp_68_rule(Parser *p) +_tmp_69_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32498,18 +32602,18 @@ _tmp_68_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } { // tuple @@ -32517,18 +32621,18 @@ _tmp_68_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // group @@ -32536,18 +32640,18 @@ _tmp_68_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); expr_ty group_var; if ( (group_var = group_rule(p)) // group ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); _res = group_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group")); } _res = NULL; @@ -32556,9 +32660,9 @@ _tmp_68_rule(Parser *p) return _res; } -// _tmp_69: listcomp | list +// _tmp_70: listcomp | list static void * -_tmp_69_rule(Parser *p) +_tmp_70_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32574,18 +32678,18 @@ _tmp_69_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); + D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); expr_ty listcomp_var; if ( (listcomp_var = listcomp_rule(p)) // listcomp ) { - D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); + D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); _res = listcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp")); } { // list @@ -32593,18 +32697,18 @@ _tmp_69_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } _res = NULL; @@ -32613,9 +32717,9 @@ _tmp_69_rule(Parser *p) return _res; } -// _tmp_70: dictcomp | setcomp | dict | set +// _tmp_71: dictcomp | setcomp | dict | set static void * -_tmp_70_rule(Parser *p) +_tmp_71_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32631,18 +32735,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); + D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); expr_ty dictcomp_var; if ( (dictcomp_var = dictcomp_rule(p)) // dictcomp ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); + D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); _res = dictcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp")); } { // setcomp @@ -32650,18 +32754,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); + D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); expr_ty setcomp_var; if ( (setcomp_var = setcomp_rule(p)) // setcomp ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); + D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); _res = setcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp")); } { // dict @@ -32669,18 +32773,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); + D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); expr_ty dict_var; if ( (dict_var = dict_rule(p)) // dict ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); + D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); _res = dict_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict")); } { // set @@ -32688,18 +32792,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); + D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); expr_ty set_var; if ( (set_var = set_rule(p)) // set ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); + D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); _res = set_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set")); } _res = NULL; @@ -32708,9 +32812,9 @@ _tmp_70_rule(Parser *p) return _res; } -// _tmp_71: yield_expr | named_expression +// _tmp_72: yield_expr | named_expression static void * -_tmp_71_rule(Parser *p) +_tmp_72_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32726,18 +32830,18 @@ _tmp_71_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_72[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_72[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // named_expression @@ -32745,18 +32849,18 @@ _tmp_71_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c> _tmp_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); expr_ty named_expression_var; if ( (named_expression_var = named_expression_rule(p)) // named_expression ) { - D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c+ _tmp_72[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); _res = named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_72[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); } _res = NULL; @@ -32765,9 +32869,9 @@ _tmp_71_rule(Parser *p) return _res; } -// _loop0_72: lambda_param_no_default +// _loop0_73: lambda_param_no_default static asdl_seq * -_loop0_72_rule(Parser *p) +_loop0_73_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32792,7 +32896,7 @@ _loop0_72_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -32815,7 +32919,7 @@ _loop0_72_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_72[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_73[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -32832,9 +32936,9 @@ _loop0_72_rule(Parser *p) return _seq; } -// _loop0_73: lambda_param_with_default +// _loop0_74: lambda_param_with_default static asdl_seq * -_loop0_73_rule(Parser *p) +_loop0_74_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32859,7 +32963,7 @@ _loop0_73_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -32882,7 +32986,7 @@ _loop0_73_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_73[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -32899,9 +33003,9 @@ _loop0_73_rule(Parser *p) return _seq; } -// _loop1_74: lambda_param_no_default +// _loop1_75: lambda_param_no_default static asdl_seq * -_loop1_74_rule(Parser *p) +_loop1_75_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32926,7 +33030,7 @@ _loop1_74_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -32949,7 +33053,7 @@ _loop1_74_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_74[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_75[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -32971,9 +33075,9 @@ _loop1_74_rule(Parser *p) return _seq; } -// _loop1_75: lambda_param_with_default +// _loop1_76: lambda_param_with_default static asdl_seq * -_loop1_75_rule(Parser *p) +_loop1_76_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -32998,7 +33102,7 @@ _loop1_75_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -33021,7 +33125,7 @@ _loop1_75_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_75[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_76[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -33043,9 +33147,9 @@ _loop1_75_rule(Parser *p) return _seq; } -// _loop0_76: lambda_param_maybe_default +// _loop0_77: lambda_param_maybe_default static asdl_seq * -_loop0_76_rule(Parser *p) +_loop0_77_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33070,7 +33174,7 @@ _loop0_76_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -33093,7 +33197,7 @@ _loop0_76_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_76[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_77[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33110,9 +33214,9 @@ _loop0_76_rule(Parser *p) return _seq; } -// _loop1_77: lambda_param_maybe_default +// _loop1_78: lambda_param_maybe_default static asdl_seq * -_loop1_77_rule(Parser *p) +_loop1_78_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33137,7 +33241,7 @@ _loop1_77_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -33160,7 +33264,7 @@ _loop1_77_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_77[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_78[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -33182,9 +33286,9 @@ _loop1_77_rule(Parser *p) return _seq; } -// _loop0_78: fstring_format_spec +// _loop0_79: fstring_format_spec static asdl_seq * -_loop0_78_rule(Parser *p) +_loop0_79_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33209,7 +33313,7 @@ _loop0_78_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); + D(fprintf(stderr, "%*c> _loop0_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); expr_ty fstring_format_spec_var; while ( (fstring_format_spec_var = fstring_format_spec_rule(p)) // fstring_format_spec @@ -33232,7 +33336,7 @@ _loop0_78_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_79[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33249,9 +33353,9 @@ _loop0_78_rule(Parser *p) return _seq; } -// _loop0_79: fstring_middle +// _loop0_80: fstring_middle static asdl_seq * -_loop0_79_rule(Parser *p) +_loop0_80_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33276,7 +33380,7 @@ _loop0_79_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle")); + D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle")); expr_ty fstring_middle_var; while ( (fstring_middle_var = fstring_middle_rule(p)) // fstring_middle @@ -33299,7 +33403,7 @@ _loop0_79_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_79[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_80[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_middle")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33316,9 +33420,9 @@ _loop0_79_rule(Parser *p) return _seq; } -// _loop0_80: tstring_format_spec +// _loop0_81: tstring_format_spec static asdl_seq * -_loop0_80_rule(Parser *p) +_loop0_81_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33343,7 +33447,7 @@ _loop0_80_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec")); + D(fprintf(stderr, "%*c> _loop0_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec")); expr_ty tstring_format_spec_var; while ( (tstring_format_spec_var = tstring_format_spec_rule(p)) // tstring_format_spec @@ -33366,7 +33470,7 @@ _loop0_80_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_80[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_81[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_format_spec")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33383,9 +33487,9 @@ _loop0_80_rule(Parser *p) return _seq; } -// _loop0_81: tstring_middle +// _loop0_82: tstring_middle static asdl_seq * -_loop0_81_rule(Parser *p) +_loop0_82_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33410,7 +33514,7 @@ _loop0_81_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_middle")); + D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_middle")); expr_ty tstring_middle_var; while ( (tstring_middle_var = tstring_middle_rule(p)) // tstring_middle @@ -33433,7 +33537,7 @@ _loop0_81_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_81[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_middle")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33450,9 +33554,9 @@ _loop0_81_rule(Parser *p) return _seq; } -// _loop1_82: (fstring | string) +// _loop1_83: (fstring | string) static asdl_seq * -_loop1_82_rule(Parser *p) +_loop1_83_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33477,13 +33581,13 @@ _loop1_82_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string)")); - void *_tmp_156_var; + D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string)")); + void *_tmp_157_var; while ( - (_tmp_156_var = _tmp_156_rule(p)) // fstring | string + (_tmp_157_var = _tmp_157_rule(p)) // fstring | string ) { - _res = _tmp_156_var; + _res = _tmp_157_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -33500,7 +33604,7 @@ _loop1_82_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_82[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(fstring | string)")); } if (_n == 0 || p->error_indicator) { @@ -33522,9 +33626,9 @@ _loop1_82_rule(Parser *p) return _seq; } -// _loop1_83: tstring +// _loop1_84: tstring static asdl_seq * -_loop1_83_rule(Parser *p) +_loop1_84_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33549,7 +33653,7 @@ _loop1_83_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring")); + D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring")); expr_ty tstring_var; while ( (tstring_var = tstring_rule(p)) // tstring @@ -33572,7 +33676,7 @@ _loop1_83_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_84[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring")); } if (_n == 0 || p->error_indicator) { @@ -33594,9 +33698,9 @@ _loop1_83_rule(Parser *p) return _seq; } -// _tmp_84: star_named_expression_sequence ',' star_named_expressions_sequence? +// _tmp_85: star_named_expression_sequence ',' star_named_expressions_sequence? static void * -_tmp_84_rule(Parser *p) +_tmp_85_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33612,7 +33716,7 @@ _tmp_84_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence ',' star_named_expressions_sequence?")); + D(fprintf(stderr, "%*c> _tmp_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence ',' star_named_expressions_sequence?")); Token * _literal; expr_ty y; void *z; @@ -33624,7 +33728,7 @@ _tmp_84_rule(Parser *p) (z = star_named_expressions_sequence_rule(p), !p->error_indicator) // star_named_expressions_sequence? ) { - D(fprintf(stderr, "%*c+ _tmp_84[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence ',' star_named_expressions_sequence?")); + D(fprintf(stderr, "%*c+ _tmp_85[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression_sequence ',' star_named_expressions_sequence?")); _res = _PyPegen_seq_insert_in_front ( p , y , z ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -33634,7 +33738,7 @@ _tmp_84_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_84[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_85[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression_sequence ',' star_named_expressions_sequence?")); } _res = NULL; @@ -33643,9 +33747,9 @@ _tmp_84_rule(Parser *p) return _res; } -// _loop0_85: ',' double_starred_kvpair +// _loop0_86: ',' double_starred_kvpair static asdl_seq * -_loop0_85_rule(Parser *p) +_loop0_86_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33670,7 +33774,7 @@ _loop0_85_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -33702,7 +33806,7 @@ _loop0_85_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_85[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_86[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33719,9 +33823,9 @@ _loop0_85_rule(Parser *p) return _seq; } -// _gather_86: double_starred_kvpair _loop0_85 +// _gather_87: double_starred_kvpair _loop0_86 static asdl_seq * -_gather_86_rule(Parser *p) +_gather_87_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33732,27 +33836,27 @@ _gather_86_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_85 + { // double_starred_kvpair _loop0_86 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_85")); + D(fprintf(stderr, "%*c> _gather_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_86")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_85_rule(p)) // _loop0_85 + (seq = _loop0_86_rule(p)) // _loop0_86 ) { - D(fprintf(stderr, "%*c+ _gather_86[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_85")); + D(fprintf(stderr, "%*c+ _gather_87[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_86")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_86[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_85")); + D(fprintf(stderr, "%*c%s _gather_87[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_86")); } _res = NULL; done: @@ -33760,9 +33864,9 @@ _gather_86_rule(Parser *p) return _res; } -// _loop1_87: for_if_clause +// _loop1_88: for_if_clause static asdl_seq * -_loop1_87_rule(Parser *p) +_loop1_88_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33787,7 +33891,7 @@ _loop1_87_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause")); + D(fprintf(stderr, "%*c> _loop1_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause")); comprehension_ty for_if_clause_var; while ( (for_if_clause_var = for_if_clause_rule(p)) // for_if_clause @@ -33810,7 +33914,7 @@ _loop1_87_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_87[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_88[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause")); } if (_n == 0 || p->error_indicator) { @@ -33832,9 +33936,9 @@ _loop1_87_rule(Parser *p) return _seq; } -// _loop0_88: ('if' disjunction) +// _loop0_89: ('if' disjunction) static asdl_seq * -_loop0_88_rule(Parser *p) +_loop0_89_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33859,13 +33963,13 @@ _loop0_88_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_166_var; + D(fprintf(stderr, "%*c> _loop0_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); + void *_tmp_167_var; while ( - (_tmp_166_var = _tmp_166_rule(p)) // 'if' disjunction + (_tmp_167_var = _tmp_167_rule(p)) // 'if' disjunction ) { - _res = _tmp_166_var; + _res = _tmp_167_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -33882,7 +33986,7 @@ _loop0_88_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_88[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_89[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -33899,9 +34003,9 @@ _loop0_88_rule(Parser *p) return _seq; } -// _tmp_89: assignment_expression | expression !':=' | starred_expression +// _tmp_90: assignment_expression | expression !':=' | starred_expression static void * -_tmp_89_rule(Parser *p) +_tmp_90_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -33917,18 +34021,18 @@ _tmp_89_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); expr_ty assignment_expression_var; if ( (assignment_expression_var = assignment_expression_rule(p)) // assignment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); _res = assignment_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression")); } { // expression !':=' @@ -33936,7 +34040,7 @@ _tmp_89_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression @@ -33944,12 +34048,12 @@ _tmp_89_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } { // starred_expression @@ -33957,18 +34061,18 @@ _tmp_89_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } _res = NULL; @@ -33977,9 +34081,9 @@ _tmp_89_rule(Parser *p) return _res; } -// _loop0_90: ',' (starred_expression | (assignment_expression | expression !':=') !'=') +// _loop0_91: ',' (starred_expression | (assignment_expression | expression !':=') !'=') static asdl_seq * -_loop0_90_rule(Parser *p) +_loop0_91_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34004,13 +34108,13 @@ _loop0_90_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); + D(fprintf(stderr, "%*c> _loop0_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_167_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_168_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' ) { _res = elem; @@ -34036,7 +34140,7 @@ _loop0_90_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_90[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_91[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34053,10 +34157,10 @@ _loop0_90_rule(Parser *p) return _seq; } -// _gather_91: -// | (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90 +// _gather_92: +// | (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_91 static asdl_seq * -_gather_91_rule(Parser *p) +_gather_92_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34067,27 +34171,27 @@ _gather_91_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90 + { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_91 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90")); + D(fprintf(stderr, "%*c> _gather_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_91")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_167_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_168_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' && - (seq = _loop0_90_rule(p)) // _loop0_90 + (seq = _loop0_91_rule(p)) // _loop0_91 ) { - D(fprintf(stderr, "%*c+ _gather_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90")); + D(fprintf(stderr, "%*c+ _gather_92[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_91")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_91[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90")); + D(fprintf(stderr, "%*c%s _gather_92[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_91")); } _res = NULL; done: @@ -34095,9 +34199,9 @@ _gather_91_rule(Parser *p) return _res; } -// _tmp_92: ',' kwargs +// _tmp_93: ',' kwargs static void * -_tmp_92_rule(Parser *p) +_tmp_93_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34113,7 +34217,7 @@ _tmp_92_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs")); + D(fprintf(stderr, "%*c> _tmp_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs")); Token * _literal; asdl_seq* k; if ( @@ -34122,7 +34226,7 @@ _tmp_92_rule(Parser *p) (k = kwargs_rule(p)) // kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_92[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs")); + D(fprintf(stderr, "%*c+ _tmp_93[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs")); _res = k; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -34132,7 +34236,7 @@ _tmp_92_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_92[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_93[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs")); } _res = NULL; @@ -34141,9 +34245,9 @@ _tmp_92_rule(Parser *p) return _res; } -// _loop0_93: ',' kwarg_or_starred +// _loop0_94: ',' kwarg_or_starred static asdl_seq * -_loop0_93_rule(Parser *p) +_loop0_94_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34168,7 +34272,7 @@ _loop0_93_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); + D(fprintf(stderr, "%*c> _loop0_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); Token * _literal; KeywordOrStarred* elem; while ( @@ -34200,7 +34304,7 @@ _loop0_93_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_93[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_94[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34217,9 +34321,9 @@ _loop0_93_rule(Parser *p) return _seq; } -// _gather_94: kwarg_or_starred _loop0_93 +// _gather_95: kwarg_or_starred _loop0_94 static asdl_seq * -_gather_94_rule(Parser *p) +_gather_95_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34230,27 +34334,27 @@ _gather_94_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // kwarg_or_starred _loop0_93 + { // kwarg_or_starred _loop0_94 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_93")); + D(fprintf(stderr, "%*c> _gather_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_94")); KeywordOrStarred* elem; asdl_seq * seq; if ( (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred && - (seq = _loop0_93_rule(p)) // _loop0_93 + (seq = _loop0_94_rule(p)) // _loop0_94 ) { - D(fprintf(stderr, "%*c+ _gather_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_93")); + D(fprintf(stderr, "%*c+ _gather_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_94")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_94[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_93")); + D(fprintf(stderr, "%*c%s _gather_95[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_94")); } _res = NULL; done: @@ -34258,9 +34362,9 @@ _gather_94_rule(Parser *p) return _res; } -// _loop0_95: ',' kwarg_or_double_starred +// _loop0_96: ',' kwarg_or_double_starred static asdl_seq * -_loop0_95_rule(Parser *p) +_loop0_96_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34285,7 +34389,7 @@ _loop0_95_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); + D(fprintf(stderr, "%*c> _loop0_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); Token * _literal; KeywordOrStarred* elem; while ( @@ -34317,7 +34421,7 @@ _loop0_95_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_95[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_96[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34334,9 +34438,9 @@ _loop0_95_rule(Parser *p) return _seq; } -// _gather_96: kwarg_or_double_starred _loop0_95 +// _gather_97: kwarg_or_double_starred _loop0_96 static asdl_seq * -_gather_96_rule(Parser *p) +_gather_97_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34347,27 +34451,27 @@ _gather_96_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // kwarg_or_double_starred _loop0_95 + { // kwarg_or_double_starred _loop0_96 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_95")); + D(fprintf(stderr, "%*c> _gather_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_96")); KeywordOrStarred* elem; asdl_seq * seq; if ( (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred && - (seq = _loop0_95_rule(p)) // _loop0_95 + (seq = _loop0_96_rule(p)) // _loop0_96 ) { - D(fprintf(stderr, "%*c+ _gather_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_95")); + D(fprintf(stderr, "%*c+ _gather_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_96")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_96[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_95")); + D(fprintf(stderr, "%*c%s _gather_97[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_96")); } _res = NULL; done: @@ -34375,9 +34479,9 @@ _gather_96_rule(Parser *p) return _res; } -// _loop0_97: (',' star_target) +// _loop0_98: (',' star_target) static asdl_seq * -_loop0_97_rule(Parser *p) +_loop0_98_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34402,13 +34506,13 @@ _loop0_97_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_168_var; + D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); + void *_tmp_169_var; while ( - (_tmp_168_var = _tmp_168_rule(p)) // ',' star_target + (_tmp_169_var = _tmp_169_rule(p)) // ',' star_target ) { - _res = _tmp_168_var; + _res = _tmp_169_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34425,7 +34529,7 @@ _loop0_97_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_97[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_98[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34442,9 +34546,9 @@ _loop0_97_rule(Parser *p) return _seq; } -// _loop0_98: ',' star_target +// _loop0_99: ',' star_target static asdl_seq * -_loop0_98_rule(Parser *p) +_loop0_99_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34469,7 +34573,7 @@ _loop0_98_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _loop0_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty elem; while ( @@ -34501,7 +34605,7 @@ _loop0_98_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_98[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_99[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34518,9 +34622,9 @@ _loop0_98_rule(Parser *p) return _seq; } -// _gather_99: star_target _loop0_98 +// _gather_100: star_target _loop0_99 static asdl_seq * -_gather_99_rule(Parser *p) +_gather_100_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34531,27 +34635,27 @@ _gather_99_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // star_target _loop0_98 + { // star_target _loop0_99 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_98")); + D(fprintf(stderr, "%*c> _gather_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_99")); expr_ty elem; asdl_seq * seq; if ( (elem = star_target_rule(p)) // star_target && - (seq = _loop0_98_rule(p)) // _loop0_98 + (seq = _loop0_99_rule(p)) // _loop0_99 ) { - D(fprintf(stderr, "%*c+ _gather_99[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_98")); + D(fprintf(stderr, "%*c+ _gather_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_99")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_99[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_98")); + D(fprintf(stderr, "%*c%s _gather_100[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_99")); } _res = NULL; done: @@ -34559,9 +34663,9 @@ _gather_99_rule(Parser *p) return _res; } -// _loop1_100: (',' star_target) +// _loop1_101: (',' star_target) static asdl_seq * -_loop1_100_rule(Parser *p) +_loop1_101_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34586,13 +34690,13 @@ _loop1_100_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_168_var; + D(fprintf(stderr, "%*c> _loop1_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); + void *_tmp_169_var; while ( - (_tmp_168_var = _tmp_168_rule(p)) // ',' star_target + (_tmp_169_var = _tmp_169_rule(p)) // ',' star_target ) { - _res = _tmp_168_var; + _res = _tmp_169_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34609,7 +34713,7 @@ _loop1_100_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_100[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_101[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); } if (_n == 0 || p->error_indicator) { @@ -34631,9 +34735,9 @@ _loop1_100_rule(Parser *p) return _seq; } -// _tmp_101: !'*' star_target +// _tmp_102: !'*' star_target static void * -_tmp_101_rule(Parser *p) +_tmp_102_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34649,7 +34753,7 @@ _tmp_101_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); + D(fprintf(stderr, "%*c> _tmp_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); expr_ty star_target_var; if ( _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16) // token='*' @@ -34657,12 +34761,12 @@ _tmp_101_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_101[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); + D(fprintf(stderr, "%*c+ _tmp_102[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); _res = star_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_101[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_102[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target")); } _res = NULL; @@ -34671,9 +34775,9 @@ _tmp_101_rule(Parser *p) return _res; } -// _loop0_102: ',' del_target +// _loop0_103: ',' del_target static asdl_seq * -_loop0_102_rule(Parser *p) +_loop0_103_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34698,7 +34802,7 @@ _loop0_102_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target")); + D(fprintf(stderr, "%*c> _loop0_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target")); Token * _literal; expr_ty elem; while ( @@ -34730,7 +34834,7 @@ _loop0_102_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_102[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_103[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34747,9 +34851,9 @@ _loop0_102_rule(Parser *p) return _seq; } -// _gather_103: del_target _loop0_102 +// _gather_104: del_target _loop0_103 static asdl_seq * -_gather_103_rule(Parser *p) +_gather_104_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34760,27 +34864,27 @@ _gather_103_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // del_target _loop0_102 + { // del_target _loop0_103 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_102")); + D(fprintf(stderr, "%*c> _gather_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_103")); expr_ty elem; asdl_seq * seq; if ( (elem = del_target_rule(p)) // del_target && - (seq = _loop0_102_rule(p)) // _loop0_102 + (seq = _loop0_103_rule(p)) // _loop0_103 ) { - D(fprintf(stderr, "%*c+ _gather_103[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_102")); + D(fprintf(stderr, "%*c+ _gather_104[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_103")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_103[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_102")); + D(fprintf(stderr, "%*c%s _gather_104[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_103")); } _res = NULL; done: @@ -34788,9 +34892,9 @@ _gather_103_rule(Parser *p) return _res; } -// _loop0_104: ',' expression +// _loop0_105: ',' expression static asdl_seq * -_loop0_104_rule(Parser *p) +_loop0_105_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34815,7 +34919,7 @@ _loop0_104_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _loop0_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty elem; while ( @@ -34847,7 +34951,7 @@ _loop0_104_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_104[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_105[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34864,9 +34968,9 @@ _loop0_104_rule(Parser *p) return _seq; } -// _gather_105: expression _loop0_104 +// _gather_106: expression _loop0_105 static asdl_seq * -_gather_105_rule(Parser *p) +_gather_106_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34877,27 +34981,27 @@ _gather_105_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // expression _loop0_104 + { // expression _loop0_105 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_104")); + D(fprintf(stderr, "%*c> _gather_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_105")); expr_ty elem; asdl_seq * seq; if ( (elem = expression_rule(p)) // expression && - (seq = _loop0_104_rule(p)) // _loop0_104 + (seq = _loop0_105_rule(p)) // _loop0_105 ) { - D(fprintf(stderr, "%*c+ _gather_105[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_104")); + D(fprintf(stderr, "%*c+ _gather_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_105")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_105[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_104")); + D(fprintf(stderr, "%*c%s _gather_106[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_105")); } _res = NULL; done: @@ -34905,9 +35009,9 @@ _gather_105_rule(Parser *p) return _res; } -// _tmp_106: NEWLINE INDENT +// _tmp_107: NEWLINE INDENT static void * -_tmp_106_rule(Parser *p) +_tmp_107_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34923,7 +35027,7 @@ _tmp_106_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); + D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); Token * indent_var; Token * newline_var; if ( @@ -34932,12 +35036,12 @@ _tmp_106_rule(Parser *p) (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' ) { - D(fprintf(stderr, "%*c+ _tmp_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); + D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); _res = _PyPegen_dummy_name(p, newline_var, indent_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_106[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT")); } _res = NULL; @@ -34946,11 +35050,11 @@ _tmp_106_rule(Parser *p) return _res; } -// _tmp_107: +// _tmp_108: // | (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) // | kwargs static void * -_tmp_107_rule(Parser *p) +_tmp_108_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -34966,18 +35070,18 @@ _tmp_107_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); - void *_tmp_169_var; + D(fprintf(stderr, "%*c> _tmp_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); + void *_tmp_170_var; if ( - (_tmp_169_var = _tmp_169_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs + (_tmp_170_var = _tmp_170_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); - _res = _tmp_169_var; + D(fprintf(stderr, "%*c+ _tmp_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); + _res = _tmp_170_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_108[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); } { // kwargs @@ -34985,18 +35089,18 @@ _tmp_107_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs")); + D(fprintf(stderr, "%*c> _tmp_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs")); asdl_seq* kwargs_var; if ( (kwargs_var = kwargs_rule(p)) // kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs")); + D(fprintf(stderr, "%*c+ _tmp_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs")); _res = kwargs_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_108[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs")); } _res = NULL; @@ -35005,9 +35109,9 @@ _tmp_107_rule(Parser *p) return _res; } -// _loop0_108: ',' (starred_expression !'=') +// _loop0_109: ',' (starred_expression !'=') static asdl_seq * -_loop0_108_rule(Parser *p) +_loop0_109_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35032,13 +35136,13 @@ _loop0_108_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression !'=')")); + D(fprintf(stderr, "%*c> _loop0_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression !'=')")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_170_rule(p)) // starred_expression !'=' + (elem = _tmp_171_rule(p)) // starred_expression !'=' ) { _res = elem; @@ -35064,7 +35168,7 @@ _loop0_108_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_108[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_109[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression !'=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35081,9 +35185,9 @@ _loop0_108_rule(Parser *p) return _seq; } -// _gather_109: (starred_expression !'=') _loop0_108 +// _gather_110: (starred_expression !'=') _loop0_109 static asdl_seq * -_gather_109_rule(Parser *p) +_gather_110_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35094,27 +35198,27 @@ _gather_109_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (starred_expression !'=') _loop0_108 + { // (starred_expression !'=') _loop0_109 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_108")); + D(fprintf(stderr, "%*c> _gather_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_109")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_170_rule(p)) // starred_expression !'=' + (elem = _tmp_171_rule(p)) // starred_expression !'=' && - (seq = _loop0_108_rule(p)) // _loop0_108 + (seq = _loop0_109_rule(p)) // _loop0_109 ) { - D(fprintf(stderr, "%*c+ _gather_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_108")); + D(fprintf(stderr, "%*c+ _gather_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_109")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_109[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression !'=') _loop0_108")); + D(fprintf(stderr, "%*c%s _gather_110[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression !'=') _loop0_109")); } _res = NULL; done: @@ -35122,9 +35226,9 @@ _gather_109_rule(Parser *p) return _res; } -// _tmp_110: args | expression for_if_clauses +// _tmp_111: args | expression for_if_clauses static void * -_tmp_110_rule(Parser *p) +_tmp_111_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35140,18 +35244,18 @@ _tmp_110_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args")); + D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args")); expr_ty args_var; if ( (args_var = args_rule(p)) // args ) { - D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args")); + D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args")); _res = args_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args")); } { // expression for_if_clauses @@ -35159,7 +35263,7 @@ _tmp_110_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); + D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); expr_ty expression_var; asdl_comprehension_seq* for_if_clauses_var; if ( @@ -35168,12 +35272,12 @@ _tmp_110_rule(Parser *p) (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses ) { - D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); + D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); _res = _PyPegen_dummy_name(p, expression_var, for_if_clauses_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses")); } _res = NULL; @@ -35182,9 +35286,9 @@ _tmp_110_rule(Parser *p) return _res; } -// _tmp_111: args ',' +// _tmp_112: args ',' static void * -_tmp_111_rule(Parser *p) +_tmp_112_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35200,7 +35304,7 @@ _tmp_111_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','")); + D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','")); Token * _literal; expr_ty args_var; if ( @@ -35209,12 +35313,12 @@ _tmp_111_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','")); + D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','")); _res = _PyPegen_dummy_name(p, args_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','")); } _res = NULL; @@ -35223,9 +35327,9 @@ _tmp_111_rule(Parser *p) return _res; } -// _tmp_112: ',' | ')' +// _tmp_113: ',' | ')' static void * -_tmp_112_rule(Parser *p) +_tmp_113_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35241,18 +35345,18 @@ _tmp_112_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -35260,18 +35364,18 @@ _tmp_112_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } _res = NULL; @@ -35280,9 +35384,9 @@ _tmp_112_rule(Parser *p) return _res; } -// _tmp_113: 'True' | 'False' | 'None' +// _tmp_114: 'True' | 'False' | 'None' static void * -_tmp_113_rule(Parser *p) +_tmp_114_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35298,18 +35402,18 @@ _tmp_113_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 627)) // token='True' + (_keyword = _PyPegen_expect_token(p, 631)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'False' @@ -35317,18 +35421,18 @@ _tmp_113_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 629)) // token='False' + (_keyword = _PyPegen_expect_token(p, 633)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } { // 'None' @@ -35336,18 +35440,18 @@ _tmp_113_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 628)) // token='None' + (_keyword = _PyPegen_expect_token(p, 632)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } _res = NULL; @@ -35356,9 +35460,9 @@ _tmp_113_rule(Parser *p) return _res; } -// _tmp_114: NAME '=' +// _tmp_115: NAME '=' static void * -_tmp_114_rule(Parser *p) +_tmp_115_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35374,7 +35478,7 @@ _tmp_114_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='")); + D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='")); Token * _literal; expr_ty name_var; if ( @@ -35383,12 +35487,12 @@ _tmp_114_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='")); + D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='")); _res = _PyPegen_dummy_name(p, name_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '='")); } _res = NULL; @@ -35397,9 +35501,9 @@ _tmp_114_rule(Parser *p) return _res; } -// _loop1_115: (!STRING expression_without_invalid) +// _loop1_116: (!STRING expression_without_invalid) static asdl_seq * -_loop1_115_rule(Parser *p) +_loop1_116_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35424,13 +35528,13 @@ _loop1_115_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(!STRING expression_without_invalid)")); - void *_tmp_171_var; + D(fprintf(stderr, "%*c> _loop1_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(!STRING expression_without_invalid)")); + void *_tmp_172_var; while ( - (_tmp_171_var = _tmp_171_rule(p)) // !STRING expression_without_invalid + (_tmp_172_var = _tmp_172_rule(p)) // !STRING expression_without_invalid ) { - _res = _tmp_171_var; + _res = _tmp_172_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -35447,7 +35551,7 @@ _loop1_115_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_115[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_116[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(!STRING expression_without_invalid)")); } if (_n == 0 || p->error_indicator) { @@ -35469,9 +35573,9 @@ _loop1_115_rule(Parser *p) return _seq; } -// _tmp_116: NAME STRING | SOFT_KEYWORD +// _tmp_117: NAME STRING | SOFT_KEYWORD static void * -_tmp_116_rule(Parser *p) +_tmp_117_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35487,7 +35591,7 @@ _tmp_116_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING")); expr_ty name_var; expr_ty string_var; if ( @@ -35496,12 +35600,12 @@ _tmp_116_rule(Parser *p) (string_var = _PyPegen_string_token(p)) // STRING ) { - D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING")); _res = _PyPegen_dummy_name(p, name_var, string_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME STRING")); } { // SOFT_KEYWORD @@ -35509,18 +35613,18 @@ _tmp_116_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); expr_ty soft_keyword_var; if ( (soft_keyword_var = _PyPegen_soft_keyword_token(p)) // SOFT_KEYWORD ) { - D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); _res = soft_keyword_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "SOFT_KEYWORD")); } _res = NULL; @@ -35529,9 +35633,9 @@ _tmp_116_rule(Parser *p) return _res; } -// _tmp_117: 'else' | ':' +// _tmp_118: 'else' | ':' static void * -_tmp_117_rule(Parser *p) +_tmp_118_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35547,18 +35651,18 @@ _tmp_117_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'")); + D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 699)) // token='else' + (_keyword = _PyPegen_expect_token(p, 703)) // token='else' ) { - D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'")); + D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else'")); } { // ':' @@ -35566,18 +35670,18 @@ _tmp_117_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -35586,9 +35690,9 @@ _tmp_117_rule(Parser *p) return _res; } -// _tmp_118: pass_stmt | break_stmt | continue_stmt +// _tmp_119: pass_stmt | break_stmt | continue_stmt static void * -_tmp_118_rule(Parser *p) +_tmp_119_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35604,18 +35708,18 @@ _tmp_118_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pass_stmt")); + D(fprintf(stderr, "%*c> _tmp_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pass_stmt")); stmt_ty pass_stmt_var; if ( (pass_stmt_var = pass_stmt_rule(p)) // pass_stmt ) { - D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pass_stmt")); + D(fprintf(stderr, "%*c+ _tmp_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pass_stmt")); _res = pass_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_119[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pass_stmt")); } { // break_stmt @@ -35623,18 +35727,18 @@ _tmp_118_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "break_stmt")); + D(fprintf(stderr, "%*c> _tmp_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "break_stmt")); stmt_ty break_stmt_var; if ( (break_stmt_var = break_stmt_rule(p)) // break_stmt ) { - D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "break_stmt")); + D(fprintf(stderr, "%*c+ _tmp_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "break_stmt")); _res = break_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_119[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "break_stmt")); } { // continue_stmt @@ -35642,18 +35746,18 @@ _tmp_118_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "continue_stmt")); + D(fprintf(stderr, "%*c> _tmp_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "continue_stmt")); stmt_ty continue_stmt_var; if ( (continue_stmt_var = continue_stmt_rule(p)) // continue_stmt ) { - D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "continue_stmt")); + D(fprintf(stderr, "%*c+ _tmp_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "continue_stmt")); _res = continue_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_119[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "continue_stmt")); } _res = NULL; @@ -35662,9 +35766,9 @@ _tmp_118_rule(Parser *p) return _res; } -// _tmp_119: '=' | ':=' +// _tmp_120: '=' | ':=' static void * -_tmp_119_rule(Parser *p) +_tmp_120_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35680,18 +35784,18 @@ _tmp_119_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_119[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -35699,18 +35803,18 @@ _tmp_119_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_119[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } _res = NULL; @@ -35719,9 +35823,9 @@ _tmp_119_rule(Parser *p) return _res; } -// _tmp_120: list | tuple | genexp | 'True' | 'None' | 'False' +// _tmp_121: list | tuple | genexp | 'True' | 'None' | 'False' static void * -_tmp_120_rule(Parser *p) +_tmp_121_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35737,18 +35841,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } { // tuple @@ -35756,18 +35860,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // genexp @@ -35775,18 +35879,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } { // 'True' @@ -35794,18 +35898,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 627)) // token='True' + (_keyword = _PyPegen_expect_token(p, 631)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'None' @@ -35813,18 +35917,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 628)) // token='None' + (_keyword = _PyPegen_expect_token(p, 632)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } { // 'False' @@ -35832,18 +35936,18 @@ _tmp_120_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 629)) // token='False' + (_keyword = _PyPegen_expect_token(p, 633)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; @@ -35852,9 +35956,9 @@ _tmp_120_rule(Parser *p) return _res; } -// _loop0_121: star_named_expressions +// _loop0_122: star_named_expressions static asdl_seq * -_loop0_121_rule(Parser *p) +_loop0_122_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35879,7 +35983,7 @@ _loop0_121_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); + D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); asdl_expr_seq* star_named_expressions_var; while ( (star_named_expressions_var = star_named_expressions_rule(p)) // star_named_expressions @@ -35902,7 +36006,7 @@ _loop0_121_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_121[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_122[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35919,9 +36023,9 @@ _loop0_121_rule(Parser *p) return _seq; } -// _loop0_122: (star_targets '=') +// _loop0_123: (star_targets '=') static asdl_seq * -_loop0_122_rule(Parser *p) +_loop0_123_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -35946,13 +36050,13 @@ _loop0_122_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_159_var; + D(fprintf(stderr, "%*c> _loop0_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_160_var; while ( - (_tmp_159_var = _tmp_159_rule(p)) // star_targets '=' + (_tmp_160_var = _tmp_160_rule(p)) // star_targets '=' ) { - _res = _tmp_159_var; + _res = _tmp_160_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -35969,7 +36073,7 @@ _loop0_122_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_122[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_123[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35986,9 +36090,9 @@ _loop0_122_rule(Parser *p) return _seq; } -// _tmp_123: '[' | '{' +// _tmp_124: '[' | '{' static void * -_tmp_123_rule(Parser *p) +_tmp_124_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36004,18 +36108,18 @@ _tmp_123_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -36023,18 +36127,18 @@ _tmp_123_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -36043,9 +36147,9 @@ _tmp_123_rule(Parser *p) return _res; } -// _tmp_124: slash_no_default | slash_with_default +// _tmp_125: slash_no_default | slash_with_default static void * -_tmp_124_rule(Parser *p) +_tmp_125_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36061,18 +36165,18 @@ _tmp_124_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); asdl_arg_seq* slash_no_default_var; if ( (slash_no_default_var = slash_no_default_rule(p)) // slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); _res = slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default")); } { // slash_with_default @@ -36080,18 +36184,18 @@ _tmp_124_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); SlashWithDefault* slash_with_default_var; if ( (slash_with_default_var = slash_with_default_rule(p)) // slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); _res = slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default")); } _res = NULL; @@ -36100,9 +36204,9 @@ _tmp_124_rule(Parser *p) return _res; } -// _tmp_125: ',' | param_no_default +// _tmp_126: ',' | param_no_default static void * -_tmp_125_rule(Parser *p) +_tmp_126_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36118,18 +36222,18 @@ _tmp_125_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // param_no_default @@ -36137,18 +36241,18 @@ _tmp_125_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } _res = NULL; @@ -36157,9 +36261,9 @@ _tmp_125_rule(Parser *p) return _res; } -// _tmp_126: ')' | ',' +// _tmp_127: ')' | ',' static void * -_tmp_126_rule(Parser *p) +_tmp_127_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36175,18 +36279,18 @@ _tmp_126_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' @@ -36194,18 +36298,18 @@ _tmp_126_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36214,9 +36318,9 @@ _tmp_126_rule(Parser *p) return _res; } -// _tmp_127: ')' | ',' (')' | '**') +// _tmp_128: ')' | ',' (')' | '**') static void * -_tmp_127_rule(Parser *p) +_tmp_128_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36232,18 +36336,18 @@ _tmp_127_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -36251,21 +36355,21 @@ _tmp_127_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_172_var; + void *_tmp_173_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_172_var = _tmp_172_rule(p)) // ')' | '**' + (_tmp_173_var = _tmp_173_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_172_var); + D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_173_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -36274,9 +36378,9 @@ _tmp_127_rule(Parser *p) return _res; } -// _tmp_128: param_no_default | ',' +// _tmp_129: param_no_default | ',' static void * -_tmp_128_rule(Parser *p) +_tmp_129_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36292,18 +36396,18 @@ _tmp_128_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } { // ',' @@ -36311,18 +36415,18 @@ _tmp_128_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36331,9 +36435,9 @@ _tmp_128_rule(Parser *p) return _res; } -// _tmp_129: '*' | '**' | '/' +// _tmp_130: '*' | '**' | '/' static void * -_tmp_129_rule(Parser *p) +_tmp_130_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36349,18 +36453,18 @@ _tmp_129_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '**' @@ -36368,18 +36472,18 @@ _tmp_129_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } { // '/' @@ -36387,18 +36491,18 @@ _tmp_129_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } _res = NULL; @@ -36407,9 +36511,9 @@ _tmp_129_rule(Parser *p) return _res; } -// _tmp_130: lambda_slash_no_default | lambda_slash_with_default +// _tmp_131: lambda_slash_no_default | lambda_slash_with_default static void * -_tmp_130_rule(Parser *p) +_tmp_131_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36425,18 +36529,18 @@ _tmp_130_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); asdl_arg_seq* lambda_slash_no_default_var; if ( (lambda_slash_no_default_var = lambda_slash_no_default_rule(p)) // lambda_slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); _res = lambda_slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default")); } { // lambda_slash_with_default @@ -36444,18 +36548,18 @@ _tmp_130_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); SlashWithDefault* lambda_slash_with_default_var; if ( (lambda_slash_with_default_var = lambda_slash_with_default_rule(p)) // lambda_slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); _res = lambda_slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default")); } _res = NULL; @@ -36464,9 +36568,9 @@ _tmp_130_rule(Parser *p) return _res; } -// _loop0_131: ',' lambda_param +// _loop0_132: ',' lambda_param static asdl_seq * -_loop0_131_rule(Parser *p) +_loop0_132_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36491,7 +36595,7 @@ _loop0_131_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); + D(fprintf(stderr, "%*c> _loop0_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); Token * _literal; arg_ty elem; while ( @@ -36523,7 +36627,7 @@ _loop0_131_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_131[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_132[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' lambda_param")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36540,9 +36644,9 @@ _loop0_131_rule(Parser *p) return _seq; } -// _gather_132: lambda_param _loop0_131 +// _gather_133: lambda_param _loop0_132 static asdl_seq * -_gather_132_rule(Parser *p) +_gather_133_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36553,27 +36657,27 @@ _gather_132_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // lambda_param _loop0_131 + { // lambda_param _loop0_132 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_131")); + D(fprintf(stderr, "%*c> _gather_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_132")); arg_ty elem; asdl_seq * seq; if ( (elem = lambda_param_rule(p)) // lambda_param && - (seq = _loop0_131_rule(p)) // _loop0_131 + (seq = _loop0_132_rule(p)) // _loop0_132 ) { - D(fprintf(stderr, "%*c+ _gather_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_131")); + D(fprintf(stderr, "%*c+ _gather_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_132")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_132[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_131")); + D(fprintf(stderr, "%*c%s _gather_133[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_132")); } _res = NULL; done: @@ -36581,9 +36685,9 @@ _gather_132_rule(Parser *p) return _res; } -// _tmp_133: ',' | lambda_param_no_default +// _tmp_134: ',' | lambda_param_no_default static void * -_tmp_133_rule(Parser *p) +_tmp_134_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36599,18 +36703,18 @@ _tmp_133_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // lambda_param_no_default @@ -36618,18 +36722,18 @@ _tmp_133_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } _res = NULL; @@ -36638,9 +36742,9 @@ _tmp_133_rule(Parser *p) return _res; } -// _tmp_134: ':' | ',' (':' | '**') +// _tmp_135: ':' | ',' (':' | '**') static void * -_tmp_134_rule(Parser *p) +_tmp_135_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36656,18 +36760,18 @@ _tmp_134_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -36675,21 +36779,21 @@ _tmp_134_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_173_var; + void *_tmp_174_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_173_var = _tmp_173_rule(p)) // ':' | '**' + (_tmp_174_var = _tmp_174_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_173_var); + D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_174_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -36698,9 +36802,9 @@ _tmp_134_rule(Parser *p) return _res; } -// _tmp_135: lambda_param_no_default | ',' +// _tmp_136: lambda_param_no_default | ',' static void * -_tmp_135_rule(Parser *p) +_tmp_136_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36716,18 +36820,18 @@ _tmp_135_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_136[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } { // ',' @@ -36735,18 +36839,18 @@ _tmp_135_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_136[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36755,9 +36859,9 @@ _tmp_135_rule(Parser *p) return _res; } -// _tmp_136: bitwise_or ((',' bitwise_or))* ','? +// _tmp_137: bitwise_or ((',' bitwise_or))* ','? static void * -_tmp_136_rule(Parser *p) +_tmp_137_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36773,25 +36877,25 @@ _tmp_136_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?")); - asdl_seq * _loop0_174_var; + D(fprintf(stderr, "%*c> _tmp_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?")); + asdl_seq * _loop0_175_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty bitwise_or_var; if ( (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - (_loop0_174_var = _loop0_174_rule(p)) // ((',' bitwise_or))* + (_loop0_175_var = _loop0_175_rule(p)) // ((',' bitwise_or))* && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) { - D(fprintf(stderr, "%*c+ _tmp_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?")); - _res = _PyPegen_dummy_name(p, bitwise_or_var, _loop0_174_var, _opt_var); + D(fprintf(stderr, "%*c+ _tmp_137[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?")); + _res = _PyPegen_dummy_name(p, bitwise_or_var, _loop0_175_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_136[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_137[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?")); } _res = NULL; @@ -36800,9 +36904,9 @@ _tmp_136_rule(Parser *p) return _res; } -// _loop0_137: ',' dotted_name +// _loop0_138: ',' dotted_name static asdl_seq * -_loop0_137_rule(Parser *p) +_loop0_138_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36827,7 +36931,7 @@ _loop0_137_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); + D(fprintf(stderr, "%*c> _loop0_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); Token * _literal; expr_ty elem; while ( @@ -36859,7 +36963,7 @@ _loop0_137_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_137[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_138[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36876,9 +36980,9 @@ _loop0_137_rule(Parser *p) return _seq; } -// _gather_138: dotted_name _loop0_137 +// _gather_139: dotted_name _loop0_138 static asdl_seq * -_gather_138_rule(Parser *p) +_gather_139_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36889,27 +36993,27 @@ _gather_138_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // dotted_name _loop0_137 + { // dotted_name _loop0_138 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_137")); + D(fprintf(stderr, "%*c> _gather_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_138")); expr_ty elem; asdl_seq * seq; if ( (elem = dotted_name_rule(p)) // dotted_name && - (seq = _loop0_137_rule(p)) // _loop0_137 + (seq = _loop0_138_rule(p)) // _loop0_138 ) { - D(fprintf(stderr, "%*c+ _gather_138[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_137")); + D(fprintf(stderr, "%*c+ _gather_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_138")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_138[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_137")); + D(fprintf(stderr, "%*c%s _gather_139[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_138")); } _res = NULL; done: @@ -36917,9 +37021,9 @@ _gather_138_rule(Parser *p) return _res; } -// _tmp_139: NAME (',' | ')' | ';' | NEWLINE) +// _tmp_140: NAME (',' | ')' | ';' | NEWLINE) static void * -_tmp_139_rule(Parser *p) +_tmp_140_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36935,21 +37039,21 @@ _tmp_139_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)")); - void *_tmp_175_var; + D(fprintf(stderr, "%*c> _tmp_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)")); + void *_tmp_176_var; expr_ty name_var; if ( (name_var = _PyPegen_name_token(p)) // NAME && - (_tmp_175_var = _tmp_175_rule(p)) // ',' | ')' | ';' | NEWLINE + (_tmp_176_var = _tmp_176_rule(p)) // ',' | ')' | ';' | NEWLINE ) { - D(fprintf(stderr, "%*c+ _tmp_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)")); - _res = _PyPegen_dummy_name(p, name_var, _tmp_175_var); + D(fprintf(stderr, "%*c+ _tmp_140[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)")); + _res = _PyPegen_dummy_name(p, name_var, _tmp_176_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_139[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_140[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)")); } _res = NULL; @@ -36958,9 +37062,9 @@ _tmp_139_rule(Parser *p) return _res; } -// _loop0_140: ',' (expression ['as' star_target]) +// _loop0_141: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_140_rule(Parser *p) +_loop0_141_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -36985,13 +37089,13 @@ _loop0_140_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_176_rule(p)) // expression ['as' star_target] + (elem = _tmp_177_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -37017,7 +37121,7 @@ _loop0_140_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_140[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_141[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37034,9 +37138,9 @@ _loop0_140_rule(Parser *p) return _seq; } -// _gather_141: (expression ['as' star_target]) _loop0_140 +// _gather_142: (expression ['as' star_target]) _loop0_141 static asdl_seq * -_gather_141_rule(Parser *p) +_gather_142_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37047,27 +37151,27 @@ _gather_141_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_140 + { // (expression ['as' star_target]) _loop0_141 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_140")); + D(fprintf(stderr, "%*c> _gather_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_141")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_176_rule(p)) // expression ['as' star_target] + (elem = _tmp_177_rule(p)) // expression ['as' star_target] && - (seq = _loop0_140_rule(p)) // _loop0_140 + (seq = _loop0_141_rule(p)) // _loop0_141 ) { - D(fprintf(stderr, "%*c+ _gather_141[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_140")); + D(fprintf(stderr, "%*c+ _gather_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_141")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_141[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_140")); + D(fprintf(stderr, "%*c%s _gather_142[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_141")); } _res = NULL; done: @@ -37075,9 +37179,9 @@ _gather_141_rule(Parser *p) return _res; } -// _loop0_142: ',' (expressions ['as' star_target]) +// _loop0_143: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_142_rule(Parser *p) +_loop0_143_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37102,13 +37206,13 @@ _loop0_142_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_177_rule(p)) // expressions ['as' star_target] + (elem = _tmp_178_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -37134,7 +37238,7 @@ _loop0_142_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_142[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_143[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37151,9 +37255,9 @@ _loop0_142_rule(Parser *p) return _seq; } -// _gather_143: (expressions ['as' star_target]) _loop0_142 +// _gather_144: (expressions ['as' star_target]) _loop0_143 static asdl_seq * -_gather_143_rule(Parser *p) +_gather_144_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37164,27 +37268,27 @@ _gather_143_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_142 + { // (expressions ['as' star_target]) _loop0_143 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_142")); + D(fprintf(stderr, "%*c> _gather_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_143")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_177_rule(p)) // expressions ['as' star_target] + (elem = _tmp_178_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_142_rule(p)) // _loop0_142 + (seq = _loop0_143_rule(p)) // _loop0_143 ) { - D(fprintf(stderr, "%*c+ _gather_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_142")); + D(fprintf(stderr, "%*c+ _gather_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_143")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_143[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_142")); + D(fprintf(stderr, "%*c%s _gather_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_143")); } _res = NULL; done: @@ -37192,9 +37296,9 @@ _gather_143_rule(Parser *p) return _res; } -// _tmp_144: 'except' | 'finally' +// _tmp_145: 'except' | 'finally' static void * -_tmp_144_rule(Parser *p) +_tmp_145_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37210,18 +37314,18 @@ _tmp_144_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 690)) // token='except' + (_keyword = _PyPegen_expect_token(p, 694)) // token='except' ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except'")); } { // 'finally' @@ -37229,18 +37333,18 @@ _tmp_144_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 686)) // token='finally' + (_keyword = _PyPegen_expect_token(p, 690)) // token='finally' ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally'")); } _res = NULL; @@ -37249,9 +37353,9 @@ _tmp_144_rule(Parser *p) return _res; } -// _loop0_145: block +// _loop0_146: block static asdl_seq * -_loop0_145_rule(Parser *p) +_loop0_146_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37276,7 +37380,7 @@ _loop0_145_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); + D(fprintf(stderr, "%*c> _loop0_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); asdl_stmt_seq* block_var; while ( (block_var = block_rule(p)) // block @@ -37299,7 +37403,7 @@ _loop0_145_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_145[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_146[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37316,9 +37420,9 @@ _loop0_145_rule(Parser *p) return _seq; } -// _tmp_146: expression ['as' NAME] +// _tmp_147: expression ['as' NAME] static void * -_tmp_146_rule(Parser *p) +_tmp_147_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37334,22 +37438,22 @@ _tmp_146_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_21_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_22_rule(p), !p->error_indicator) // ['as' NAME] ) { - D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' NAME]")); } _res = NULL; @@ -37358,9 +37462,9 @@ _tmp_146_rule(Parser *p) return _res; } -// _tmp_147: NEWLINE | ':' +// _tmp_148: NEWLINE | ':' static void * -_tmp_147_rule(Parser *p) +_tmp_148_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37376,18 +37480,18 @@ _tmp_147_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } { // ':' @@ -37395,18 +37499,18 @@ _tmp_147_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -37415,9 +37519,9 @@ _tmp_147_rule(Parser *p) return _res; } -// _tmp_148: items_pattern ',' +// _tmp_149: items_pattern ',' static void * -_tmp_148_rule(Parser *p) +_tmp_149_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37433,7 +37537,7 @@ _tmp_148_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "items_pattern ','")); + D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "items_pattern ','")); Token * _literal; asdl_seq* items_pattern_var; if ( @@ -37442,12 +37546,12 @@ _tmp_148_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "items_pattern ','")); + D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "items_pattern ','")); _res = _PyPegen_dummy_name(p, items_pattern_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "items_pattern ','")); } _res = NULL; @@ -37456,9 +37560,9 @@ _tmp_148_rule(Parser *p) return _res; } -// _tmp_149: positional_patterns ',' +// _tmp_150: positional_patterns ',' static void * -_tmp_149_rule(Parser *p) +_tmp_150_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37474,7 +37578,7 @@ _tmp_149_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); Token * _literal; asdl_pattern_seq* positional_patterns_var; if ( @@ -37483,12 +37587,12 @@ _tmp_149_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); _res = _PyPegen_dummy_name(p, positional_patterns_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "positional_patterns ','")); } _res = NULL; @@ -37497,9 +37601,9 @@ _tmp_149_rule(Parser *p) return _res; } -// _tmp_150: invalid_kvpair | invalid_kvpair_unpacking +// _tmp_151: invalid_kvpair | invalid_kvpair_unpacking static void * -_tmp_150_rule(Parser *p) +_tmp_151_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37515,18 +37619,18 @@ _tmp_150_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair")); void *invalid_kvpair_var; if ( (invalid_kvpair_var = invalid_kvpair_rule(p)) // invalid_kvpair ) { - D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair")); _res = invalid_kvpair_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kvpair")); } if (p->call_invalid_rules) { // invalid_kvpair_unpacking @@ -37534,18 +37638,18 @@ _tmp_150_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking")); void *invalid_kvpair_unpacking_var; if ( (invalid_kvpair_unpacking_var = invalid_kvpair_unpacking_rule(p)) // invalid_kvpair_unpacking ) { - D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking")); _res = invalid_kvpair_unpacking_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kvpair_unpacking")); } _res = NULL; @@ -37554,9 +37658,9 @@ _tmp_150_rule(Parser *p) return _res; } -// _tmp_151: '}' | ',' +// _tmp_152: '}' | ',' static void * -_tmp_151_rule(Parser *p) +_tmp_152_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37572,18 +37676,18 @@ _tmp_151_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -37591,18 +37695,18 @@ _tmp_151_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -37611,9 +37715,9 @@ _tmp_151_rule(Parser *p) return _res; } -// _tmp_152: '=' | '!' | ':' | '}' +// _tmp_153: '=' | '!' | ':' | '}' static void * -_tmp_152_rule(Parser *p) +_tmp_153_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37629,18 +37733,18 @@ _tmp_152_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // '!' @@ -37648,18 +37752,18 @@ _tmp_152_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -37667,18 +37771,18 @@ _tmp_152_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -37686,18 +37790,18 @@ _tmp_152_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -37706,9 +37810,9 @@ _tmp_152_rule(Parser *p) return _res; } -// _tmp_153: '!' | ':' | '}' +// _tmp_154: '!' | ':' | '}' static void * -_tmp_153_rule(Parser *p) +_tmp_154_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37724,18 +37828,18 @@ _tmp_153_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -37743,18 +37847,18 @@ _tmp_153_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -37762,18 +37866,18 @@ _tmp_153_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -37782,9 +37886,9 @@ _tmp_153_rule(Parser *p) return _res; } -// _tmp_154: '!' NAME +// _tmp_155: '!' NAME static void * -_tmp_154_rule(Parser *p) +_tmp_155_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37800,7 +37904,7 @@ _tmp_154_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -37809,12 +37913,12 @@ _tmp_154_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -37823,9 +37927,9 @@ _tmp_154_rule(Parser *p) return _res; } -// _tmp_155: ':' | '}' +// _tmp_156: ':' | '}' static void * -_tmp_155_rule(Parser *p) +_tmp_156_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37841,18 +37945,18 @@ _tmp_155_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -37860,18 +37964,18 @@ _tmp_155_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -37880,9 +37984,9 @@ _tmp_155_rule(Parser *p) return _res; } -// _tmp_156: fstring | string +// _tmp_157: fstring | string static void * -_tmp_156_rule(Parser *p) +_tmp_157_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37898,18 +38002,18 @@ _tmp_156_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); expr_ty fstring_var; if ( (fstring_var = fstring_rule(p)) // fstring ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); _res = fstring_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring")); } { // string @@ -37917,18 +38021,18 @@ _tmp_156_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); expr_ty string_var; if ( (string_var = string_rule(p)) // string ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); _res = string_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "string")); } _res = NULL; @@ -37937,9 +38041,9 @@ _tmp_156_rule(Parser *p) return _res; } -// _tmp_157: '+' | '-' | '*' | '/' | '%' | '//' | '@' +// _tmp_158: '+' | '-' | '*' | '/' | '%' | '//' | '@' static void * -_tmp_157_rule(Parser *p) +_tmp_158_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -37955,18 +38059,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } { // '-' @@ -37974,18 +38078,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } { // '*' @@ -37993,18 +38097,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '/' @@ -38012,18 +38116,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } { // '%' @@ -38031,18 +38135,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 24)) // token='%' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%'")); } { // '//' @@ -38050,18 +38154,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 47)) // token='//' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//'")); } { // '@' @@ -38069,18 +38173,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } _res = NULL; @@ -38089,9 +38193,9 @@ _tmp_157_rule(Parser *p) return _res; } -// _tmp_158: '+' | '-' | '~' +// _tmp_159: '+' | '-' | '~' static void * -_tmp_158_rule(Parser *p) +_tmp_159_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38107,18 +38211,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } { // '-' @@ -38126,18 +38230,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } { // '~' @@ -38145,18 +38249,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 31)) // token='~' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~'")); } _res = NULL; @@ -38165,9 +38269,9 @@ _tmp_158_rule(Parser *p) return _res; } -// _tmp_159: star_targets '=' +// _tmp_160: star_targets '=' static void * -_tmp_159_rule(Parser *p) +_tmp_160_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38183,7 +38287,7 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -38192,7 +38296,7 @@ _tmp_159_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38202,7 +38306,7 @@ _tmp_159_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -38211,9 +38315,9 @@ _tmp_159_rule(Parser *p) return _res; } -// _tmp_160: '.' | '...' +// _tmp_161: '.' | '...' static void * -_tmp_160_rule(Parser *p) +_tmp_161_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38229,18 +38333,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -38248,18 +38352,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -38268,9 +38372,9 @@ _tmp_160_rule(Parser *p) return _res; } -// _tmp_161: '@' named_expression NEWLINE +// _tmp_162: '@' named_expression NEWLINE static void * -_tmp_161_rule(Parser *p) +_tmp_162_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38286,7 +38390,7 @@ _tmp_161_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -38298,7 +38402,7 @@ _tmp_161_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38308,7 +38412,7 @@ _tmp_161_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -38317,9 +38421,9 @@ _tmp_161_rule(Parser *p) return _res; } -// _tmp_162: ',' star_expression +// _tmp_163: ',' star_expression static void * -_tmp_162_rule(Parser *p) +_tmp_163_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38335,7 +38439,7 @@ _tmp_162_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -38344,7 +38448,7 @@ _tmp_162_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38354,7 +38458,7 @@ _tmp_162_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -38363,9 +38467,9 @@ _tmp_162_rule(Parser *p) return _res; } -// _tmp_163: 'or' conjunction +// _tmp_164: 'or' conjunction static void * -_tmp_163_rule(Parser *p) +_tmp_164_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38381,16 +38485,16 @@ _tmp_163_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 589)) // token='or' + (_keyword = _PyPegen_expect_token(p, 593)) // token='or' && (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38400,7 +38504,7 @@ _tmp_163_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -38409,9 +38513,9 @@ _tmp_163_rule(Parser *p) return _res; } -// _tmp_164: 'and' inversion +// _tmp_165: 'and' inversion static void * -_tmp_164_rule(Parser *p) +_tmp_165_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38427,16 +38531,16 @@ _tmp_164_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 590)) // token='and' + (_keyword = _PyPegen_expect_token(p, 594)) // token='and' && (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38446,7 +38550,7 @@ _tmp_164_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -38455,9 +38559,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: slice | starred_expression +// _tmp_166: slice | starred_expression static void * -_tmp_165_rule(Parser *p) +_tmp_166_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38473,18 +38577,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); expr_ty slice_var; if ( (slice_var = slice_rule(p)) // slice ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); _res = slice_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice")); } { // starred_expression @@ -38492,18 +38596,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } _res = NULL; @@ -38512,9 +38616,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _tmp_166: 'if' disjunction +// _tmp_167: 'if' disjunction static void * -_tmp_166_rule(Parser *p) +_tmp_167_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38530,16 +38634,16 @@ _tmp_166_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( - (_keyword = _PyPegen_expect_token(p, 695)) // token='if' + (_keyword = _PyPegen_expect_token(p, 699)) // token='if' && (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38549,7 +38653,7 @@ _tmp_166_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -38558,9 +38662,9 @@ _tmp_166_rule(Parser *p) return _res; } -// _tmp_167: starred_expression | (assignment_expression | expression !':=') !'=' +// _tmp_168: starred_expression | (assignment_expression | expression !':=') !'=' static void * -_tmp_167_rule(Parser *p) +_tmp_168_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38576,18 +38680,18 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // (assignment_expression | expression !':=') !'=' @@ -38595,20 +38699,20 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - void *_tmp_178_var; + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + void *_tmp_179_var; if ( - (_tmp_178_var = _tmp_178_rule(p)) // assignment_expression | expression !':=' + (_tmp_179_var = _tmp_179_rule(p)) // assignment_expression | expression !':=' && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - _res = _tmp_178_var; + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + _res = _tmp_179_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='")); } _res = NULL; @@ -38617,9 +38721,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: ',' star_target +// _tmp_169: ',' star_target static void * -_tmp_168_rule(Parser *p) +_tmp_169_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38635,7 +38739,7 @@ _tmp_168_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -38644,7 +38748,7 @@ _tmp_168_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -38654,7 +38758,7 @@ _tmp_168_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -38663,10 +38767,10 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: +// _tmp_170: // | ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs static void * -_tmp_169_rule(Parser *p) +_tmp_170_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38682,24 +38786,24 @@ _tmp_169_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); - asdl_seq * _gather_91_var; + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); + asdl_seq * _gather_92_var; Token * _literal; asdl_seq* kwargs_var; if ( - (_gather_91_var = _gather_91_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ + (_gather_92_var = _gather_92_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && (kwargs_var = kwargs_rule(p)) // kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); - _res = _PyPegen_dummy_name(p, _gather_91_var, _literal, kwargs_var); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); + _res = _PyPegen_dummy_name(p, _gather_92_var, _literal, kwargs_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); } _res = NULL; @@ -38708,9 +38812,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: starred_expression !'=' +// _tmp_171: starred_expression !'=' static void * -_tmp_170_rule(Parser *p) +_tmp_171_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38726,7 +38830,7 @@ _tmp_170_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression @@ -38734,12 +38838,12 @@ _tmp_170_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression !'='")); } _res = NULL; @@ -38748,9 +38852,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: !STRING expression_without_invalid +// _tmp_172: !STRING expression_without_invalid static void * -_tmp_171_rule(Parser *p) +_tmp_172_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38766,7 +38870,7 @@ _tmp_171_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid")); expr_ty expression_without_invalid_var; if ( _PyPegen_lookahead(0, _PyPegen_string_token, p) @@ -38774,12 +38878,12 @@ _tmp_171_rule(Parser *p) (expression_without_invalid_var = expression_without_invalid_rule(p)) // expression_without_invalid ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid")); _res = expression_without_invalid_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!STRING expression_without_invalid")); } _res = NULL; @@ -38788,9 +38892,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: ')' | '**' +// _tmp_173: ')' | '**' static void * -_tmp_172_rule(Parser *p) +_tmp_173_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38806,18 +38910,18 @@ _tmp_172_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -38825,18 +38929,18 @@ _tmp_172_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -38845,9 +38949,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _tmp_173: ':' | '**' +// _tmp_174: ':' | '**' static void * -_tmp_173_rule(Parser *p) +_tmp_174_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38863,18 +38967,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -38882,18 +38986,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -38902,9 +39006,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _loop0_174: (',' bitwise_or) +// _loop0_175: (',' bitwise_or) static asdl_seq * -_loop0_174_rule(Parser *p) +_loop0_175_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38929,13 +39033,13 @@ _loop0_174_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' bitwise_or)")); - void *_tmp_179_var; + D(fprintf(stderr, "%*c> _loop0_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' bitwise_or)")); + void *_tmp_180_var; while ( - (_tmp_179_var = _tmp_179_rule(p)) // ',' bitwise_or + (_tmp_180_var = _tmp_180_rule(p)) // ',' bitwise_or ) { - _res = _tmp_179_var; + _res = _tmp_180_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -38952,7 +39056,7 @@ _loop0_174_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' bitwise_or)")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38969,9 +39073,9 @@ _loop0_174_rule(Parser *p) return _seq; } -// _tmp_175: ',' | ')' | ';' | NEWLINE +// _tmp_176: ',' | ')' | ';' | NEWLINE static void * -_tmp_175_rule(Parser *p) +_tmp_176_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -38987,18 +39091,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -39006,18 +39110,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ';' @@ -39025,18 +39129,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 13)) // token=';' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'")); } { // NEWLINE @@ -39044,18 +39148,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } _res = NULL; @@ -39064,9 +39168,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: expression ['as' star_target] +// _tmp_177: expression ['as' star_target] static void * -_tmp_176_rule(Parser *p) +_tmp_177_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -39082,22 +39186,22 @@ _tmp_176_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_180_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_181_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -39106,9 +39210,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: expressions ['as' star_target] +// _tmp_178: expressions ['as' star_target] static void * -_tmp_177_rule(Parser *p) +_tmp_178_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -39124,22 +39228,22 @@ _tmp_177_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_180_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_181_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -39148,9 +39252,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: assignment_expression | expression !':=' +// _tmp_179: assignment_expression | expression !':=' static void * -_tmp_178_rule(Parser *p) +_tmp_179_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -39166,18 +39270,18 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); expr_ty assignment_expression_var; if ( (assignment_expression_var = assignment_expression_rule(p)) // assignment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); _res = assignment_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression")); } { // expression !':=' @@ -39185,7 +39289,7 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression @@ -39193,12 +39297,12 @@ _tmp_178_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; @@ -39207,9 +39311,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: ',' bitwise_or +// _tmp_180: ',' bitwise_or static void * -_tmp_179_rule(Parser *p) +_tmp_180_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -39225,7 +39329,7 @@ _tmp_179_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' bitwise_or")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' bitwise_or")); Token * _literal; expr_ty bitwise_or_var; if ( @@ -39234,12 +39338,12 @@ _tmp_179_rule(Parser *p) (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' bitwise_or")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' bitwise_or")); _res = _PyPegen_dummy_name(p, _literal, bitwise_or_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' bitwise_or")); } _res = NULL; @@ -39248,9 +39352,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: 'as' star_target +// _tmp_181: 'as' star_target static void * -_tmp_180_rule(Parser *p) +_tmp_181_rule(Parser *p) { if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) { _Pypegen_stack_overflow(p); @@ -39266,21 +39370,21 @@ _tmp_180_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( - (_keyword = _PyPegen_expect_token(p, 693)) // token='as' + (_keyword = _PyPegen_expect_token(p, 697)) // token='as' && (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 5d319992dcda1e..cc1eac488ced86 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -44,6 +44,7 @@ void _PyAST_Fini(PyInterpreterState *interp) Py_CLEAR(state->AsyncFor_type); Py_CLEAR(state->AsyncFunctionDef_type); Py_CLEAR(state->AsyncWith_type); + Py_CLEAR(state->AsyncYieldFrom_type); Py_CLEAR(state->Attribute_type); Py_CLEAR(state->AugAssign_type); Py_CLEAR(state->Await_type); @@ -612,6 +613,9 @@ static const char * const Yield_fields[]={ static const char * const YieldFrom_fields[]={ "value", }; +static const char * const AsyncYieldFrom_fields[]={ + "value", +}; static const char * const Compare_fields[]={ "left", "ops", @@ -3062,6 +3066,33 @@ add_ast_annotations(struct ast_state *state) return 0; } Py_DECREF(YieldFrom_annotations); + PyObject *AsyncYieldFrom_annotations = PyDict_New(); + if (!AsyncYieldFrom_annotations) return 0; + { + PyObject *type = state->expr_type; + Py_INCREF(type); + cond = PyDict_SetItemString(AsyncYieldFrom_annotations, "value", type) + == 0; + Py_DECREF(type); + if (!cond) { + Py_DECREF(AsyncYieldFrom_annotations); + return 0; + } + } + cond = PyObject_SetAttrString(state->AsyncYieldFrom_type, "_field_types", + AsyncYieldFrom_annotations) == 0; + if (!cond) { + Py_DECREF(AsyncYieldFrom_annotations); + return 0; + } + cond = PyObject_SetAttrString(state->AsyncYieldFrom_type, + "__annotations__", + AsyncYieldFrom_annotations) == 0; + if (!cond) { + Py_DECREF(AsyncYieldFrom_annotations); + return 0; + } + Py_DECREF(AsyncYieldFrom_annotations); PyObject *Compare_annotations = PyDict_New(); if (!Compare_annotations) return 0; { @@ -6441,6 +6472,7 @@ init_types(void *arg) " | Await(expr value)\n" " | Yield(expr? value)\n" " | YieldFrom(expr value)\n" + " | AsyncYieldFrom(expr value)\n" " | Compare(expr left, cmpop* ops, expr* comparators)\n" " | Call(expr func, expr* args, keyword* keywords)\n" " | FormattedValue(expr value, int conversion, expr? format_spec)\n" @@ -6527,6 +6559,11 @@ init_types(void *arg) YieldFrom_fields, 1, "YieldFrom(expr value)"); if (!state->YieldFrom_type) return -1; + state->AsyncYieldFrom_type = make_type(state, "AsyncYieldFrom", + state->expr_type, + AsyncYieldFrom_fields, 1, + "AsyncYieldFrom(expr value)"); + if (!state->AsyncYieldFrom_type) return -1; state->Compare_type = make_type(state, "Compare", state->expr_type, Compare_fields, 3, "Compare(expr left, cmpop* ops, expr* comparators)"); @@ -8154,6 +8191,28 @@ _PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int return p; } +expr_ty +_PyAST_AsyncYieldFrom(expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field 'value' is required for AsyncYieldFrom"); + return NULL; + } + p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = AsyncYieldFrom_kind; + p->v.AsyncYieldFrom.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + expr_ty _PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int lineno, int col_offset, int end_lineno, int end_col_offset, @@ -9855,6 +9914,16 @@ ast2obj_expr(struct ast_state *state, void* _o) goto failed; Py_DECREF(value); break; + case AsyncYieldFrom_kind: + tp = (PyTypeObject *)state->AsyncYieldFrom_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(state, o->v.AsyncYieldFrom.value); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->value, value) == -1) + goto failed; + Py_DECREF(value); + break; case Compare_kind: tp = (PyTypeObject *)state->Compare_type; result = PyType_GenericNew(tp, NULL, NULL); @@ -14831,6 +14900,36 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (*out == NULL) goto failed; return 0; } + tp = state->AsyncYieldFrom_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return -1; + } + if (isinstance) { + expr_ty value; + + if (PyObject_GetOptionalAttr(obj, state->value, &tmp) < 0) { + return -1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AsyncYieldFrom"); + return -1; + } + else { + int res; + if (_Py_EnterRecursiveCall(" while traversing 'AsyncYieldFrom' node")) { + goto failed; + } + res = obj2ast_expr(state, tmp, &value, arena); + _Py_LeaveRecursiveCall(); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_AsyncYieldFrom(value, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } tp = state->Compare_type; isinstance = PyObject_IsInstance(obj, tp); if (isinstance == -1) { @@ -18241,6 +18340,10 @@ astmodule_exec(PyObject *m) if (PyModule_AddObjectRef(m, "YieldFrom", state->YieldFrom_type) < 0) { return -1; } + if (PyModule_AddObjectRef(m, "AsyncYieldFrom", state->AsyncYieldFrom_type) + < 0) { + return -1; + } if (PyModule_AddObjectRef(m, "Compare", state->Compare_type) < 0) { return -1; } diff --git a/Python/ast.c b/Python/ast.c index 4cfa2ff559a5f7..ce11dfa700e38f 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -316,6 +316,9 @@ validate_expr(expr_ty exp, expr_context_ty ctx) case YieldFrom_kind: ret = validate_expr(exp->v.YieldFrom.value, Load); break; + case AsyncYieldFrom_kind: + ret = validate_expr(exp->v.AsyncYieldFrom.value, Load); + break; case Await_kind: ret = validate_expr(exp->v.Await.value, Load); break; diff --git a/Python/codegen.c b/Python/codegen.c index 189043228220e4..0a288972a3f2d6 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -5413,6 +5413,16 @@ codegen_visit_expr(compiler *c, expr_ty e) ADDOP_LOAD_CONST(c, loc, Py_None); ADD_YIELD_FROM(c, loc, 0); break; + case AsyncYieldFrom_kind: + if (!_PyST_IsFunctionLike(SYMTABLE_ENTRY(c))) { + return _PyCompile_Error(c, loc, "'async yield from' outside function"); + } + + VISIT(c, expr, e->v.AsyncYieldFrom.value); + ADDOP(c, loc, GET_YIELD_FROM_ITER); + ADDOP_LOAD_CONST(c, loc, Py_None); + ADD_YIELD_FROM(c, loc, 0); + break; case Await_kind: VISIT(c, expr, e->v.Await.value); ADDOP_I(c, loc, GET_AWAITABLE, 0); From 67783c055aa65867fd3343e329be73aa2dddf431 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Fri, 6 Mar 2026 22:58:49 -0500 Subject: [PATCH 03/48] Fix the symtable and other things. --- Parser/action_helpers.c | 2 ++ Python/ast_preprocess.c | 3 +++ Python/ast_unparse.c | 10 ++++++++++ Python/symtable.c | 10 ++++++++++ 4 files changed, 25 insertions(+) diff --git a/Parser/action_helpers.c b/Parser/action_helpers.c index 1f5b6220ba1baa..74e6f0e2f8ddba 100644 --- a/Parser/action_helpers.c +++ b/Parser/action_helpers.c @@ -1096,6 +1096,8 @@ _PyPegen_get_expr_name(expr_ty e) case Yield_kind: case YieldFrom_kind: return "yield expression"; + case AsyncYieldFrom_kind: + return "async yield expression"; case Await_kind: return "await expression"; case ListComp_kind: diff --git a/Python/ast_preprocess.c b/Python/ast_preprocess.c index 54dec3dfe04268..d63c18f71bd84a 100644 --- a/Python/ast_preprocess.c +++ b/Python/ast_preprocess.c @@ -575,6 +575,9 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTPreprocessState *state) case YieldFrom_kind: CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value); break; + case AsyncYieldFrom_kind: + CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value); + break; case Compare_kind: CALL(astfold_expr, expr_ty, node_->v.Compare.left); CALL_SEQ(astfold_expr, expr, node_->v.Compare.comparators); diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c index c25699978cf651..7997bb52489b4f 100644 --- a/Python/ast_unparse.c +++ b/Python/ast_unparse.c @@ -909,6 +909,14 @@ append_ast_yield_from(PyUnicodeWriter *writer, expr_ty e) APPEND_CHAR_FINISH(')'); } +static int +append_ast_async_yield_from(PyUnicodeWriter *writer, expr_ty e) +{ + APPEND_STR("(async yield from "); + APPEND_EXPR(e->v.YieldFrom.value, PR_TEST); + APPEND_CHAR_FINISH(')'); +} + static int append_ast_await(PyUnicodeWriter *writer, expr_ty e, int level) { @@ -960,6 +968,8 @@ append_ast_expr(PyUnicodeWriter *writer, expr_ty e, int level) return append_ast_yield(writer, e); case YieldFrom_kind: return append_ast_yield_from(writer, e); + case AsyncYieldFrom_kind: + return append_ast_async_yield_from(writer, e); case Await_kind: return append_ast_await(writer, e, level); case Compare_kind: diff --git a/Python/symtable.c b/Python/symtable.c index beb6df88d097e3..5170eec08e3374 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -2540,6 +2540,16 @@ symtable_visit_expr(struct symtable *st, expr_ty e) return symtable_raise_if_comprehension_block(st, e); } break; + case AsyncYieldFrom_kind: + if (!symtable_raise_if_annotation_block(st, "async yield expression", e)) { + return 0; + } + VISIT(st, expr, e->v.AsyncYieldFrom.value); + st->st_cur->ste_generator = 1; + if (st->st_cur->ste_comprehension) { + return symtable_raise_if_comprehension_block(st, e); + } + break; case Await_kind: if (!symtable_raise_if_annotation_block(st, "await expression", e)) { return 0; From fd254b4df86e60667ca5b2e5c847b86f562a19e3 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 00:39:51 -0500 Subject: [PATCH 04/48] Get things somewhat working in the eval loop. --- Include/internal/pycore_magic_number.h | 3 +- Include/internal/pycore_opcode_metadata.h | 20 +- Include/internal/pycore_uop_ids.h | 1346 +++++++++++---------- Include/internal/pycore_uop_metadata.h | 30 + Include/opcode_ids.h | 212 ++-- Lib/_opcode_metadata.py | 212 ++-- Modules/_testinternalcapi/test_cases.c.h | 63 + Modules/_testinternalcapi/test_targets.h | 20 +- Objects/genobject.c | 3 +- Programs/test_frozenmain.h | 26 +- Python/bytecodes.c | 30 + Python/codegen.c | 38 +- Python/executor_cases.c.h | 74 ++ Python/generated_cases.c.h | 63 + Python/opcode_targets.h | 20 +- Python/optimizer_cases.c.h | 17 + 16 files changed, 1254 insertions(+), 923 deletions(-) diff --git a/Include/internal/pycore_magic_number.h b/Include/internal/pycore_magic_number.h index 3fcf650426d36d..e88832e2383cfb 100644 --- a/Include/internal/pycore_magic_number.h +++ b/Include/internal/pycore_magic_number.h @@ -292,6 +292,7 @@ Known values: Python 3.15a4 3659 (Add CALL_FUNCTION_EX specialization) Python 3.15a4 3660 (Change generator preamble code) Python 3.15a4 3661 (Lazy imports IMPORT_NAME opcode changes) + Python 3.15a6 3662 (Asynchronous yield from changes) Python 3.16 will start with 3700 @@ -305,7 +306,7 @@ PC/launcher.c must also be updated. */ -#define PYC_MAGIC_NUMBER 3661 +#define PYC_MAGIC_NUMBER 3662 /* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes (little-endian) and then appending b'\r\n'. */ #define PYC_MAGIC_NUMBER_TOKEN \ diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 126bc7d7102925..2685f25494c80b 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -224,6 +224,10 @@ int _PyOpcode_num_popped(int opcode, int oparg) { return 1; case GET_ANEXT: return 1; + case GET_ASEND: + return 2; + case GET_ASYNC_YIELD_FROM_ITER: + return 1; case GET_AWAITABLE: return 1; case GET_ITER: @@ -715,6 +719,10 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { return 1; case GET_ANEXT: return 2; + case GET_ASEND: + return 1; + case GET_ASYNC_YIELD_FROM_ITER: + return 1; case GET_AWAITABLE: return 1; case GET_ITER: @@ -1185,6 +1193,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG }, [GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [GET_ASEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [GET_ASYNC_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [GET_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, @@ -1430,6 +1440,8 @@ _PyOpcode_macro_expansion[256] = { [FOR_ITER_TUPLE] = { .nuops = 3, .uops = { { _ITER_CHECK_TUPLE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_TUPLE, OPARG_REPLACED, 1 }, { _ITER_NEXT_TUPLE, OPARG_SIMPLE, 1 } } }, [GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, OPARG_SIMPLE, 0 } } }, [GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, OPARG_SIMPLE, 0 } } }, + [GET_ASEND] = { .nuops = 1, .uops = { { _GET_ASEND, OPARG_SIMPLE, 0 } } }, + [GET_ASYNC_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { _GET_ASYNC_YIELD_FROM_ITER, OPARG_SIMPLE, 0 } } }, [GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, OPARG_SIMPLE, 0 } } }, [GET_ITER] = { .nuops = 1, .uops = { { _GET_ITER, OPARG_SIMPLE, 0 } } }, [GET_LEN] = { .nuops = 1, .uops = { { _GET_LEN, OPARG_SIMPLE, 0 } } }, @@ -1633,6 +1645,8 @@ const char *_PyOpcode_OpName[267] = { [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE", [GET_AITER] = "GET_AITER", [GET_ANEXT] = "GET_ANEXT", + [GET_ASEND] = "GET_ASEND", + [GET_ASYNC_YIELD_FROM_ITER] = "GET_ASYNC_YIELD_FROM_ITER", [GET_AWAITABLE] = "GET_AWAITABLE", [GET_ITER] = "GET_ITER", [GET_LEN] = "GET_LEN", @@ -1811,8 +1825,6 @@ const uint8_t _PyOpcode_Caches[256] = { PyAPI_DATA(const uint8_t) _PyOpcode_Deopt[256]; #ifdef NEED_OPCODE_METADATA const uint8_t _PyOpcode_Deopt[256] = { - [121] = 121, - [122] = 122, [123] = 123, [124] = 124, [125] = 125, @@ -1931,6 +1943,8 @@ const uint8_t _PyOpcode_Deopt[256] = { [FOR_ITER_TUPLE] = FOR_ITER, [GET_AITER] = GET_AITER, [GET_ANEXT] = GET_ANEXT, + [GET_ASEND] = GET_ASEND, + [GET_ASYNC_YIELD_FROM_ITER] = GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = GET_AWAITABLE, [GET_ITER] = GET_ITER, [GET_LEN] = GET_LEN, @@ -2072,8 +2086,6 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ - case 121: \ - case 122: \ case 123: \ case 124: \ case 125: \ diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 760fe86783fb8a..693cf6688f19cf 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -125,6 +125,8 @@ extern "C" { #define _FOR_ITER_TIER_TWO 386 #define _GET_AITER GET_AITER #define _GET_ANEXT GET_ANEXT +#define _GET_ASEND GET_ASEND +#define _GET_ASYNC_YIELD_FROM_ITER GET_ASYNC_YIELD_FROM_ITER #define _GET_AWAITABLE GET_AWAITABLE #define _GET_ITER GET_ITER #define _GET_LEN GET_LEN @@ -586,677 +588,679 @@ extern "C" { #define _FOR_ITER_TIER_TWO_r23 783 #define _GET_AITER_r11 784 #define _GET_ANEXT_r12 785 -#define _GET_AWAITABLE_r11 786 -#define _GET_ITER_r12 787 -#define _GET_LEN_r12 788 -#define _GET_YIELD_FROM_ITER_r11 789 -#define _GUARD_BINARY_OP_EXTEND_r22 790 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 791 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 792 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 793 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 794 -#define _GUARD_BIT_IS_SET_POP_r00 795 -#define _GUARD_BIT_IS_SET_POP_r10 796 -#define _GUARD_BIT_IS_SET_POP_r21 797 -#define _GUARD_BIT_IS_SET_POP_r32 798 -#define _GUARD_BIT_IS_SET_POP_4_r00 799 -#define _GUARD_BIT_IS_SET_POP_4_r10 800 -#define _GUARD_BIT_IS_SET_POP_4_r21 801 -#define _GUARD_BIT_IS_SET_POP_4_r32 802 -#define _GUARD_BIT_IS_SET_POP_5_r00 803 -#define _GUARD_BIT_IS_SET_POP_5_r10 804 -#define _GUARD_BIT_IS_SET_POP_5_r21 805 -#define _GUARD_BIT_IS_SET_POP_5_r32 806 -#define _GUARD_BIT_IS_SET_POP_6_r00 807 -#define _GUARD_BIT_IS_SET_POP_6_r10 808 -#define _GUARD_BIT_IS_SET_POP_6_r21 809 -#define _GUARD_BIT_IS_SET_POP_6_r32 810 -#define _GUARD_BIT_IS_SET_POP_7_r00 811 -#define _GUARD_BIT_IS_SET_POP_7_r10 812 -#define _GUARD_BIT_IS_SET_POP_7_r21 813 -#define _GUARD_BIT_IS_SET_POP_7_r32 814 -#define _GUARD_BIT_IS_UNSET_POP_r00 815 -#define _GUARD_BIT_IS_UNSET_POP_r10 816 -#define _GUARD_BIT_IS_UNSET_POP_r21 817 -#define _GUARD_BIT_IS_UNSET_POP_r32 818 -#define _GUARD_BIT_IS_UNSET_POP_4_r00 819 -#define _GUARD_BIT_IS_UNSET_POP_4_r10 820 -#define _GUARD_BIT_IS_UNSET_POP_4_r21 821 -#define _GUARD_BIT_IS_UNSET_POP_4_r32 822 -#define _GUARD_BIT_IS_UNSET_POP_5_r00 823 -#define _GUARD_BIT_IS_UNSET_POP_5_r10 824 -#define _GUARD_BIT_IS_UNSET_POP_5_r21 825 -#define _GUARD_BIT_IS_UNSET_POP_5_r32 826 -#define _GUARD_BIT_IS_UNSET_POP_6_r00 827 -#define _GUARD_BIT_IS_UNSET_POP_6_r10 828 -#define _GUARD_BIT_IS_UNSET_POP_6_r21 829 -#define _GUARD_BIT_IS_UNSET_POP_6_r32 830 -#define _GUARD_BIT_IS_UNSET_POP_7_r00 831 -#define _GUARD_BIT_IS_UNSET_POP_7_r10 832 -#define _GUARD_BIT_IS_UNSET_POP_7_r21 833 -#define _GUARD_BIT_IS_UNSET_POP_7_r32 834 -#define _GUARD_CALLABLE_ISINSTANCE_r03 835 -#define _GUARD_CALLABLE_ISINSTANCE_r13 836 -#define _GUARD_CALLABLE_ISINSTANCE_r23 837 -#define _GUARD_CALLABLE_ISINSTANCE_r33 838 -#define _GUARD_CALLABLE_LEN_r03 839 -#define _GUARD_CALLABLE_LEN_r13 840 -#define _GUARD_CALLABLE_LEN_r23 841 -#define _GUARD_CALLABLE_LEN_r33 842 -#define _GUARD_CALLABLE_LIST_APPEND_r03 843 -#define _GUARD_CALLABLE_LIST_APPEND_r13 844 -#define _GUARD_CALLABLE_LIST_APPEND_r23 845 -#define _GUARD_CALLABLE_LIST_APPEND_r33 846 -#define _GUARD_CALLABLE_STR_1_r03 847 -#define _GUARD_CALLABLE_STR_1_r13 848 -#define _GUARD_CALLABLE_STR_1_r23 849 -#define _GUARD_CALLABLE_STR_1_r33 850 -#define _GUARD_CALLABLE_TUPLE_1_r03 851 -#define _GUARD_CALLABLE_TUPLE_1_r13 852 -#define _GUARD_CALLABLE_TUPLE_1_r23 853 -#define _GUARD_CALLABLE_TUPLE_1_r33 854 -#define _GUARD_CALLABLE_TYPE_1_r03 855 -#define _GUARD_CALLABLE_TYPE_1_r13 856 -#define _GUARD_CALLABLE_TYPE_1_r23 857 -#define _GUARD_CALLABLE_TYPE_1_r33 858 -#define _GUARD_CODE_VERSION_r00 859 -#define _GUARD_CODE_VERSION_r11 860 -#define _GUARD_CODE_VERSION_r22 861 -#define _GUARD_CODE_VERSION_r33 862 -#define _GUARD_DORV_NO_DICT_r01 863 -#define _GUARD_DORV_NO_DICT_r11 864 -#define _GUARD_DORV_NO_DICT_r22 865 -#define _GUARD_DORV_NO_DICT_r33 866 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 867 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 868 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 869 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 870 -#define _GUARD_GLOBALS_VERSION_r00 871 -#define _GUARD_GLOBALS_VERSION_r11 872 -#define _GUARD_GLOBALS_VERSION_r22 873 -#define _GUARD_GLOBALS_VERSION_r33 874 -#define _GUARD_IP_RETURN_GENERATOR_r00 875 -#define _GUARD_IP_RETURN_GENERATOR_r11 876 -#define _GUARD_IP_RETURN_GENERATOR_r22 877 -#define _GUARD_IP_RETURN_GENERATOR_r33 878 -#define _GUARD_IP_RETURN_VALUE_r00 879 -#define _GUARD_IP_RETURN_VALUE_r11 880 -#define _GUARD_IP_RETURN_VALUE_r22 881 -#define _GUARD_IP_RETURN_VALUE_r33 882 -#define _GUARD_IP_YIELD_VALUE_r00 883 -#define _GUARD_IP_YIELD_VALUE_r11 884 -#define _GUARD_IP_YIELD_VALUE_r22 885 -#define _GUARD_IP_YIELD_VALUE_r33 886 -#define _GUARD_IP__PUSH_FRAME_r00 887 -#define _GUARD_IP__PUSH_FRAME_r11 888 -#define _GUARD_IP__PUSH_FRAME_r22 889 -#define _GUARD_IP__PUSH_FRAME_r33 890 -#define _GUARD_IS_FALSE_POP_r00 891 -#define _GUARD_IS_FALSE_POP_r10 892 -#define _GUARD_IS_FALSE_POP_r21 893 -#define _GUARD_IS_FALSE_POP_r32 894 -#define _GUARD_IS_NONE_POP_r00 895 -#define _GUARD_IS_NONE_POP_r10 896 -#define _GUARD_IS_NONE_POP_r21 897 -#define _GUARD_IS_NONE_POP_r32 898 -#define _GUARD_IS_NOT_NONE_POP_r10 899 -#define _GUARD_IS_TRUE_POP_r00 900 -#define _GUARD_IS_TRUE_POP_r10 901 -#define _GUARD_IS_TRUE_POP_r21 902 -#define _GUARD_IS_TRUE_POP_r32 903 -#define _GUARD_KEYS_VERSION_r01 904 -#define _GUARD_KEYS_VERSION_r11 905 -#define _GUARD_KEYS_VERSION_r22 906 -#define _GUARD_KEYS_VERSION_r33 907 -#define _GUARD_NOS_ANY_DICT_r02 908 -#define _GUARD_NOS_ANY_DICT_r12 909 -#define _GUARD_NOS_ANY_DICT_r22 910 -#define _GUARD_NOS_ANY_DICT_r33 911 -#define _GUARD_NOS_COMPACT_ASCII_r02 912 -#define _GUARD_NOS_COMPACT_ASCII_r12 913 -#define _GUARD_NOS_COMPACT_ASCII_r22 914 -#define _GUARD_NOS_COMPACT_ASCII_r33 915 -#define _GUARD_NOS_DICT_r02 916 -#define _GUARD_NOS_DICT_r12 917 -#define _GUARD_NOS_DICT_r22 918 -#define _GUARD_NOS_DICT_r33 919 -#define _GUARD_NOS_FLOAT_r02 920 -#define _GUARD_NOS_FLOAT_r12 921 -#define _GUARD_NOS_FLOAT_r22 922 -#define _GUARD_NOS_FLOAT_r33 923 -#define _GUARD_NOS_INT_r02 924 -#define _GUARD_NOS_INT_r12 925 -#define _GUARD_NOS_INT_r22 926 -#define _GUARD_NOS_INT_r33 927 -#define _GUARD_NOS_LIST_r02 928 -#define _GUARD_NOS_LIST_r12 929 -#define _GUARD_NOS_LIST_r22 930 -#define _GUARD_NOS_LIST_r33 931 -#define _GUARD_NOS_NOT_NULL_r02 932 -#define _GUARD_NOS_NOT_NULL_r12 933 -#define _GUARD_NOS_NOT_NULL_r22 934 -#define _GUARD_NOS_NOT_NULL_r33 935 -#define _GUARD_NOS_NULL_r02 936 -#define _GUARD_NOS_NULL_r12 937 -#define _GUARD_NOS_NULL_r22 938 -#define _GUARD_NOS_NULL_r33 939 -#define _GUARD_NOS_OVERFLOWED_r02 940 -#define _GUARD_NOS_OVERFLOWED_r12 941 -#define _GUARD_NOS_OVERFLOWED_r22 942 -#define _GUARD_NOS_OVERFLOWED_r33 943 -#define _GUARD_NOS_TUPLE_r02 944 -#define _GUARD_NOS_TUPLE_r12 945 -#define _GUARD_NOS_TUPLE_r22 946 -#define _GUARD_NOS_TUPLE_r33 947 -#define _GUARD_NOS_UNICODE_r02 948 -#define _GUARD_NOS_UNICODE_r12 949 -#define _GUARD_NOS_UNICODE_r22 950 -#define _GUARD_NOS_UNICODE_r33 951 -#define _GUARD_NOT_EXHAUSTED_LIST_r02 952 -#define _GUARD_NOT_EXHAUSTED_LIST_r12 953 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 954 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 955 -#define _GUARD_NOT_EXHAUSTED_RANGE_r02 956 -#define _GUARD_NOT_EXHAUSTED_RANGE_r12 957 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 958 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 959 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 960 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 961 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 962 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 963 -#define _GUARD_THIRD_NULL_r03 964 -#define _GUARD_THIRD_NULL_r13 965 -#define _GUARD_THIRD_NULL_r23 966 -#define _GUARD_THIRD_NULL_r33 967 -#define _GUARD_TOS_ANY_DICT_r01 968 -#define _GUARD_TOS_ANY_DICT_r11 969 -#define _GUARD_TOS_ANY_DICT_r22 970 -#define _GUARD_TOS_ANY_DICT_r33 971 -#define _GUARD_TOS_ANY_SET_r01 972 -#define _GUARD_TOS_ANY_SET_r11 973 -#define _GUARD_TOS_ANY_SET_r22 974 -#define _GUARD_TOS_ANY_SET_r33 975 -#define _GUARD_TOS_FLOAT_r01 976 -#define _GUARD_TOS_FLOAT_r11 977 -#define _GUARD_TOS_FLOAT_r22 978 -#define _GUARD_TOS_FLOAT_r33 979 -#define _GUARD_TOS_INT_r01 980 -#define _GUARD_TOS_INT_r11 981 -#define _GUARD_TOS_INT_r22 982 -#define _GUARD_TOS_INT_r33 983 -#define _GUARD_TOS_LIST_r01 984 -#define _GUARD_TOS_LIST_r11 985 -#define _GUARD_TOS_LIST_r22 986 -#define _GUARD_TOS_LIST_r33 987 -#define _GUARD_TOS_OVERFLOWED_r01 988 -#define _GUARD_TOS_OVERFLOWED_r11 989 -#define _GUARD_TOS_OVERFLOWED_r22 990 -#define _GUARD_TOS_OVERFLOWED_r33 991 -#define _GUARD_TOS_SLICE_r01 992 -#define _GUARD_TOS_SLICE_r11 993 -#define _GUARD_TOS_SLICE_r22 994 -#define _GUARD_TOS_SLICE_r33 995 -#define _GUARD_TOS_TUPLE_r01 996 -#define _GUARD_TOS_TUPLE_r11 997 -#define _GUARD_TOS_TUPLE_r22 998 -#define _GUARD_TOS_TUPLE_r33 999 -#define _GUARD_TOS_UNICODE_r01 1000 -#define _GUARD_TOS_UNICODE_r11 1001 -#define _GUARD_TOS_UNICODE_r22 1002 -#define _GUARD_TOS_UNICODE_r33 1003 -#define _GUARD_TYPE_VERSION_r01 1004 -#define _GUARD_TYPE_VERSION_r11 1005 -#define _GUARD_TYPE_VERSION_r22 1006 -#define _GUARD_TYPE_VERSION_r33 1007 -#define _GUARD_TYPE_VERSION_AND_LOCK_r01 1008 -#define _GUARD_TYPE_VERSION_AND_LOCK_r11 1009 -#define _GUARD_TYPE_VERSION_AND_LOCK_r22 1010 -#define _GUARD_TYPE_VERSION_AND_LOCK_r33 1011 -#define _HANDLE_PENDING_AND_DEOPT_r00 1012 -#define _HANDLE_PENDING_AND_DEOPT_r10 1013 -#define _HANDLE_PENDING_AND_DEOPT_r20 1014 -#define _HANDLE_PENDING_AND_DEOPT_r30 1015 -#define _IMPORT_FROM_r12 1016 -#define _IMPORT_NAME_r21 1017 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1018 -#define _INIT_CALL_PY_EXACT_ARGS_r01 1019 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1020 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1021 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1022 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1023 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1024 -#define _INSERT_1_LOAD_CONST_INLINE_r02 1025 -#define _INSERT_1_LOAD_CONST_INLINE_r12 1026 -#define _INSERT_1_LOAD_CONST_INLINE_r23 1027 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 1028 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 1029 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 1030 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r03 1031 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r13 1032 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r23 1033 -#define _INSERT_NULL_r10 1034 -#define _INSTRUMENTED_FOR_ITER_r23 1035 -#define _INSTRUMENTED_INSTRUCTION_r00 1036 -#define _INSTRUMENTED_JUMP_FORWARD_r00 1037 -#define _INSTRUMENTED_JUMP_FORWARD_r11 1038 -#define _INSTRUMENTED_JUMP_FORWARD_r22 1039 -#define _INSTRUMENTED_JUMP_FORWARD_r33 1040 -#define _INSTRUMENTED_LINE_r00 1041 -#define _INSTRUMENTED_NOT_TAKEN_r00 1042 -#define _INSTRUMENTED_NOT_TAKEN_r11 1043 -#define _INSTRUMENTED_NOT_TAKEN_r22 1044 -#define _INSTRUMENTED_NOT_TAKEN_r33 1045 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1046 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1047 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1048 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1049 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1050 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1051 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1052 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1053 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1054 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1055 -#define _IS_NONE_r11 1056 -#define _IS_OP_r03 1057 -#define _IS_OP_r13 1058 -#define _IS_OP_r23 1059 -#define _ITER_CHECK_LIST_r02 1060 -#define _ITER_CHECK_LIST_r12 1061 -#define _ITER_CHECK_LIST_r22 1062 -#define _ITER_CHECK_LIST_r33 1063 -#define _ITER_CHECK_RANGE_r02 1064 -#define _ITER_CHECK_RANGE_r12 1065 -#define _ITER_CHECK_RANGE_r22 1066 -#define _ITER_CHECK_RANGE_r33 1067 -#define _ITER_CHECK_TUPLE_r02 1068 -#define _ITER_CHECK_TUPLE_r12 1069 -#define _ITER_CHECK_TUPLE_r22 1070 -#define _ITER_CHECK_TUPLE_r33 1071 -#define _ITER_JUMP_LIST_r02 1072 -#define _ITER_JUMP_LIST_r12 1073 -#define _ITER_JUMP_LIST_r22 1074 -#define _ITER_JUMP_LIST_r33 1075 -#define _ITER_JUMP_RANGE_r02 1076 -#define _ITER_JUMP_RANGE_r12 1077 -#define _ITER_JUMP_RANGE_r22 1078 -#define _ITER_JUMP_RANGE_r33 1079 -#define _ITER_JUMP_TUPLE_r02 1080 -#define _ITER_JUMP_TUPLE_r12 1081 -#define _ITER_JUMP_TUPLE_r22 1082 -#define _ITER_JUMP_TUPLE_r33 1083 -#define _ITER_NEXT_LIST_r23 1084 -#define _ITER_NEXT_LIST_TIER_TWO_r23 1085 -#define _ITER_NEXT_RANGE_r03 1086 -#define _ITER_NEXT_RANGE_r13 1087 -#define _ITER_NEXT_RANGE_r23 1088 -#define _ITER_NEXT_TUPLE_r03 1089 -#define _ITER_NEXT_TUPLE_r13 1090 -#define _ITER_NEXT_TUPLE_r23 1091 -#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1092 -#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1093 -#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1094 -#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1095 -#define _JUMP_TO_TOP_r00 1096 -#define _LIST_APPEND_r10 1097 -#define _LIST_EXTEND_r10 1098 -#define _LOAD_ATTR_r10 1099 -#define _LOAD_ATTR_CLASS_r11 1100 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1101 -#define _LOAD_ATTR_INSTANCE_VALUE_r02 1102 -#define _LOAD_ATTR_INSTANCE_VALUE_r12 1103 -#define _LOAD_ATTR_INSTANCE_VALUE_r23 1104 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1105 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1106 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1107 -#define _LOAD_ATTR_METHOD_NO_DICT_r02 1108 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 1109 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 1110 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1111 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1112 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1113 -#define _LOAD_ATTR_MODULE_r12 1114 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1115 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1116 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 1117 -#define _LOAD_ATTR_SLOT_r02 1118 -#define _LOAD_ATTR_SLOT_r12 1119 -#define _LOAD_ATTR_SLOT_r23 1120 -#define _LOAD_ATTR_WITH_HINT_r12 1121 -#define _LOAD_BUILD_CLASS_r01 1122 -#define _LOAD_BYTECODE_r00 1123 -#define _LOAD_COMMON_CONSTANT_r01 1124 -#define _LOAD_COMMON_CONSTANT_r12 1125 -#define _LOAD_COMMON_CONSTANT_r23 1126 -#define _LOAD_CONST_r01 1127 -#define _LOAD_CONST_r12 1128 -#define _LOAD_CONST_r23 1129 -#define _LOAD_CONST_INLINE_r01 1130 -#define _LOAD_CONST_INLINE_r12 1131 -#define _LOAD_CONST_INLINE_r23 1132 -#define _LOAD_CONST_INLINE_BORROW_r01 1133 -#define _LOAD_CONST_INLINE_BORROW_r12 1134 -#define _LOAD_CONST_INLINE_BORROW_r23 1135 -#define _LOAD_CONST_UNDER_INLINE_r02 1136 -#define _LOAD_CONST_UNDER_INLINE_r12 1137 -#define _LOAD_CONST_UNDER_INLINE_r23 1138 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1139 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1140 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1141 -#define _LOAD_DEREF_r01 1142 -#define _LOAD_FAST_r01 1143 -#define _LOAD_FAST_r12 1144 -#define _LOAD_FAST_r23 1145 -#define _LOAD_FAST_0_r01 1146 -#define _LOAD_FAST_0_r12 1147 -#define _LOAD_FAST_0_r23 1148 -#define _LOAD_FAST_1_r01 1149 -#define _LOAD_FAST_1_r12 1150 -#define _LOAD_FAST_1_r23 1151 -#define _LOAD_FAST_2_r01 1152 -#define _LOAD_FAST_2_r12 1153 -#define _LOAD_FAST_2_r23 1154 -#define _LOAD_FAST_3_r01 1155 -#define _LOAD_FAST_3_r12 1156 -#define _LOAD_FAST_3_r23 1157 -#define _LOAD_FAST_4_r01 1158 -#define _LOAD_FAST_4_r12 1159 -#define _LOAD_FAST_4_r23 1160 -#define _LOAD_FAST_5_r01 1161 -#define _LOAD_FAST_5_r12 1162 -#define _LOAD_FAST_5_r23 1163 -#define _LOAD_FAST_6_r01 1164 -#define _LOAD_FAST_6_r12 1165 -#define _LOAD_FAST_6_r23 1166 -#define _LOAD_FAST_7_r01 1167 -#define _LOAD_FAST_7_r12 1168 -#define _LOAD_FAST_7_r23 1169 -#define _LOAD_FAST_AND_CLEAR_r01 1170 -#define _LOAD_FAST_AND_CLEAR_r12 1171 -#define _LOAD_FAST_AND_CLEAR_r23 1172 -#define _LOAD_FAST_BORROW_r01 1173 -#define _LOAD_FAST_BORROW_r12 1174 -#define _LOAD_FAST_BORROW_r23 1175 -#define _LOAD_FAST_BORROW_0_r01 1176 -#define _LOAD_FAST_BORROW_0_r12 1177 -#define _LOAD_FAST_BORROW_0_r23 1178 -#define _LOAD_FAST_BORROW_1_r01 1179 -#define _LOAD_FAST_BORROW_1_r12 1180 -#define _LOAD_FAST_BORROW_1_r23 1181 -#define _LOAD_FAST_BORROW_2_r01 1182 -#define _LOAD_FAST_BORROW_2_r12 1183 -#define _LOAD_FAST_BORROW_2_r23 1184 -#define _LOAD_FAST_BORROW_3_r01 1185 -#define _LOAD_FAST_BORROW_3_r12 1186 -#define _LOAD_FAST_BORROW_3_r23 1187 -#define _LOAD_FAST_BORROW_4_r01 1188 -#define _LOAD_FAST_BORROW_4_r12 1189 -#define _LOAD_FAST_BORROW_4_r23 1190 -#define _LOAD_FAST_BORROW_5_r01 1191 -#define _LOAD_FAST_BORROW_5_r12 1192 -#define _LOAD_FAST_BORROW_5_r23 1193 -#define _LOAD_FAST_BORROW_6_r01 1194 -#define _LOAD_FAST_BORROW_6_r12 1195 -#define _LOAD_FAST_BORROW_6_r23 1196 -#define _LOAD_FAST_BORROW_7_r01 1197 -#define _LOAD_FAST_BORROW_7_r12 1198 -#define _LOAD_FAST_BORROW_7_r23 1199 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1200 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1201 -#define _LOAD_FAST_CHECK_r01 1202 -#define _LOAD_FAST_CHECK_r12 1203 -#define _LOAD_FAST_CHECK_r23 1204 -#define _LOAD_FAST_LOAD_FAST_r02 1205 -#define _LOAD_FAST_LOAD_FAST_r13 1206 -#define _LOAD_FROM_DICT_OR_DEREF_r11 1207 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1208 -#define _LOAD_GLOBAL_r00 1209 -#define _LOAD_GLOBAL_BUILTINS_r01 1210 -#define _LOAD_GLOBAL_MODULE_r01 1211 -#define _LOAD_LOCALS_r01 1212 -#define _LOAD_LOCALS_r12 1213 -#define _LOAD_LOCALS_r23 1214 -#define _LOAD_NAME_r01 1215 -#define _LOAD_SMALL_INT_r01 1216 -#define _LOAD_SMALL_INT_r12 1217 -#define _LOAD_SMALL_INT_r23 1218 -#define _LOAD_SMALL_INT_0_r01 1219 -#define _LOAD_SMALL_INT_0_r12 1220 -#define _LOAD_SMALL_INT_0_r23 1221 -#define _LOAD_SMALL_INT_1_r01 1222 -#define _LOAD_SMALL_INT_1_r12 1223 -#define _LOAD_SMALL_INT_1_r23 1224 -#define _LOAD_SMALL_INT_2_r01 1225 -#define _LOAD_SMALL_INT_2_r12 1226 -#define _LOAD_SMALL_INT_2_r23 1227 -#define _LOAD_SMALL_INT_3_r01 1228 -#define _LOAD_SMALL_INT_3_r12 1229 -#define _LOAD_SMALL_INT_3_r23 1230 -#define _LOAD_SPECIAL_r00 1231 -#define _LOAD_SUPER_ATTR_ATTR_r31 1232 -#define _LOAD_SUPER_ATTR_METHOD_r32 1233 -#define _MAKE_CALLARGS_A_TUPLE_r33 1234 -#define _MAKE_CELL_r00 1235 -#define _MAKE_FUNCTION_r11 1236 -#define _MAKE_WARM_r00 1237 -#define _MAKE_WARM_r11 1238 -#define _MAKE_WARM_r22 1239 -#define _MAKE_WARM_r33 1240 -#define _MAP_ADD_r20 1241 -#define _MATCH_CLASS_r31 1242 -#define _MATCH_KEYS_r23 1243 -#define _MATCH_MAPPING_r02 1244 -#define _MATCH_MAPPING_r12 1245 -#define _MATCH_MAPPING_r23 1246 -#define _MATCH_SEQUENCE_r02 1247 -#define _MATCH_SEQUENCE_r12 1248 -#define _MATCH_SEQUENCE_r23 1249 -#define _MAYBE_EXPAND_METHOD_r00 1250 -#define _MAYBE_EXPAND_METHOD_KW_r11 1251 -#define _MONITOR_CALL_r00 1252 -#define _MONITOR_CALL_KW_r11 1253 -#define _MONITOR_JUMP_BACKWARD_r00 1254 -#define _MONITOR_JUMP_BACKWARD_r11 1255 -#define _MONITOR_JUMP_BACKWARD_r22 1256 -#define _MONITOR_JUMP_BACKWARD_r33 1257 -#define _MONITOR_RESUME_r00 1258 -#define _NOP_r00 1259 -#define _NOP_r11 1260 -#define _NOP_r22 1261 -#define _NOP_r33 1262 -#define _POP_CALL_r20 1263 -#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1264 -#define _POP_CALL_ONE_r30 1265 -#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1266 -#define _POP_CALL_TWO_r30 1267 -#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1268 -#define _POP_EXCEPT_r10 1269 -#define _POP_ITER_r20 1270 -#define _POP_JUMP_IF_FALSE_r00 1271 -#define _POP_JUMP_IF_FALSE_r10 1272 -#define _POP_JUMP_IF_FALSE_r21 1273 -#define _POP_JUMP_IF_FALSE_r32 1274 -#define _POP_JUMP_IF_TRUE_r00 1275 -#define _POP_JUMP_IF_TRUE_r10 1276 -#define _POP_JUMP_IF_TRUE_r21 1277 -#define _POP_JUMP_IF_TRUE_r32 1278 -#define _POP_TOP_r10 1279 -#define _POP_TOP_FLOAT_r00 1280 -#define _POP_TOP_FLOAT_r10 1281 -#define _POP_TOP_FLOAT_r21 1282 -#define _POP_TOP_FLOAT_r32 1283 -#define _POP_TOP_INT_r00 1284 -#define _POP_TOP_INT_r10 1285 -#define _POP_TOP_INT_r21 1286 -#define _POP_TOP_INT_r32 1287 -#define _POP_TOP_LOAD_CONST_INLINE_r11 1288 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1289 -#define _POP_TOP_NOP_r00 1290 -#define _POP_TOP_NOP_r10 1291 -#define _POP_TOP_NOP_r21 1292 -#define _POP_TOP_NOP_r32 1293 -#define _POP_TOP_UNICODE_r00 1294 -#define _POP_TOP_UNICODE_r10 1295 -#define _POP_TOP_UNICODE_r21 1296 -#define _POP_TOP_UNICODE_r32 1297 -#define _POP_TWO_r20 1298 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1299 -#define _PUSH_EXC_INFO_r02 1300 -#define _PUSH_EXC_INFO_r12 1301 -#define _PUSH_EXC_INFO_r23 1302 -#define _PUSH_FRAME_r10 1303 -#define _PUSH_NULL_r01 1304 -#define _PUSH_NULL_r12 1305 -#define _PUSH_NULL_r23 1306 -#define _PUSH_NULL_CONDITIONAL_r00 1307 -#define _PY_FRAME_EX_r31 1308 -#define _PY_FRAME_GENERAL_r01 1309 -#define _PY_FRAME_KW_r11 1310 -#define _QUICKEN_RESUME_r00 1311 -#define _QUICKEN_RESUME_r11 1312 -#define _QUICKEN_RESUME_r22 1313 -#define _QUICKEN_RESUME_r33 1314 -#define _REPLACE_WITH_TRUE_r02 1315 -#define _REPLACE_WITH_TRUE_r12 1316 -#define _REPLACE_WITH_TRUE_r23 1317 -#define _RESUME_CHECK_r00 1318 -#define _RESUME_CHECK_r11 1319 -#define _RESUME_CHECK_r22 1320 -#define _RESUME_CHECK_r33 1321 -#define _RETURN_GENERATOR_r01 1322 -#define _RETURN_VALUE_r11 1323 -#define _SAVE_RETURN_OFFSET_r00 1324 -#define _SAVE_RETURN_OFFSET_r11 1325 -#define _SAVE_RETURN_OFFSET_r22 1326 -#define _SAVE_RETURN_OFFSET_r33 1327 -#define _SEND_r22 1328 -#define _SEND_GEN_FRAME_r22 1329 -#define _SETUP_ANNOTATIONS_r00 1330 -#define _SET_ADD_r10 1331 -#define _SET_FUNCTION_ATTRIBUTE_r01 1332 -#define _SET_FUNCTION_ATTRIBUTE_r11 1333 -#define _SET_FUNCTION_ATTRIBUTE_r21 1334 -#define _SET_FUNCTION_ATTRIBUTE_r32 1335 -#define _SET_IP_r00 1336 -#define _SET_IP_r11 1337 -#define _SET_IP_r22 1338 -#define _SET_IP_r33 1339 -#define _SET_UPDATE_r10 1340 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1341 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1342 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1343 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1344 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1345 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1346 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1347 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1348 -#define _SPILL_OR_RELOAD_r01 1349 -#define _SPILL_OR_RELOAD_r02 1350 -#define _SPILL_OR_RELOAD_r03 1351 -#define _SPILL_OR_RELOAD_r10 1352 -#define _SPILL_OR_RELOAD_r12 1353 -#define _SPILL_OR_RELOAD_r13 1354 -#define _SPILL_OR_RELOAD_r20 1355 -#define _SPILL_OR_RELOAD_r21 1356 -#define _SPILL_OR_RELOAD_r23 1357 -#define _SPILL_OR_RELOAD_r30 1358 -#define _SPILL_OR_RELOAD_r31 1359 -#define _SPILL_OR_RELOAD_r32 1360 -#define _START_EXECUTOR_r00 1361 -#define _STORE_ATTR_r20 1362 -#define _STORE_ATTR_INSTANCE_VALUE_r21 1363 -#define _STORE_ATTR_SLOT_r21 1364 -#define _STORE_ATTR_WITH_HINT_r21 1365 -#define _STORE_DEREF_r10 1366 -#define _STORE_FAST_LOAD_FAST_r11 1367 -#define _STORE_FAST_STORE_FAST_r20 1368 -#define _STORE_GLOBAL_r10 1369 -#define _STORE_NAME_r10 1370 -#define _STORE_SLICE_r30 1371 -#define _STORE_SUBSCR_r30 1372 -#define _STORE_SUBSCR_DICT_r31 1373 -#define _STORE_SUBSCR_LIST_INT_r32 1374 -#define _SWAP_r11 1375 -#define _SWAP_2_r02 1376 -#define _SWAP_2_r12 1377 -#define _SWAP_2_r22 1378 -#define _SWAP_2_r33 1379 -#define _SWAP_3_r03 1380 -#define _SWAP_3_r13 1381 -#define _SWAP_3_r23 1382 -#define _SWAP_3_r33 1383 -#define _SWAP_FAST_r01 1384 -#define _SWAP_FAST_r11 1385 -#define _SWAP_FAST_r22 1386 -#define _SWAP_FAST_r33 1387 -#define _SWAP_FAST_0_r01 1388 -#define _SWAP_FAST_0_r11 1389 -#define _SWAP_FAST_0_r22 1390 -#define _SWAP_FAST_0_r33 1391 -#define _SWAP_FAST_1_r01 1392 -#define _SWAP_FAST_1_r11 1393 -#define _SWAP_FAST_1_r22 1394 -#define _SWAP_FAST_1_r33 1395 -#define _SWAP_FAST_2_r01 1396 -#define _SWAP_FAST_2_r11 1397 -#define _SWAP_FAST_2_r22 1398 -#define _SWAP_FAST_2_r33 1399 -#define _SWAP_FAST_3_r01 1400 -#define _SWAP_FAST_3_r11 1401 -#define _SWAP_FAST_3_r22 1402 -#define _SWAP_FAST_3_r33 1403 -#define _SWAP_FAST_4_r01 1404 -#define _SWAP_FAST_4_r11 1405 -#define _SWAP_FAST_4_r22 1406 -#define _SWAP_FAST_4_r33 1407 -#define _SWAP_FAST_5_r01 1408 -#define _SWAP_FAST_5_r11 1409 -#define _SWAP_FAST_5_r22 1410 -#define _SWAP_FAST_5_r33 1411 -#define _SWAP_FAST_6_r01 1412 -#define _SWAP_FAST_6_r11 1413 -#define _SWAP_FAST_6_r22 1414 -#define _SWAP_FAST_6_r33 1415 -#define _SWAP_FAST_7_r01 1416 -#define _SWAP_FAST_7_r11 1417 -#define _SWAP_FAST_7_r22 1418 -#define _SWAP_FAST_7_r33 1419 -#define _TIER2_RESUME_CHECK_r00 1420 -#define _TIER2_RESUME_CHECK_r11 1421 -#define _TIER2_RESUME_CHECK_r22 1422 -#define _TIER2_RESUME_CHECK_r33 1423 -#define _TO_BOOL_r11 1424 -#define _TO_BOOL_BOOL_r01 1425 -#define _TO_BOOL_BOOL_r11 1426 -#define _TO_BOOL_BOOL_r22 1427 -#define _TO_BOOL_BOOL_r33 1428 -#define _TO_BOOL_INT_r02 1429 -#define _TO_BOOL_INT_r12 1430 -#define _TO_BOOL_INT_r23 1431 -#define _TO_BOOL_LIST_r02 1432 -#define _TO_BOOL_LIST_r12 1433 -#define _TO_BOOL_LIST_r23 1434 -#define _TO_BOOL_NONE_r01 1435 -#define _TO_BOOL_NONE_r11 1436 -#define _TO_BOOL_NONE_r22 1437 -#define _TO_BOOL_NONE_r33 1438 -#define _TO_BOOL_STR_r02 1439 -#define _TO_BOOL_STR_r12 1440 -#define _TO_BOOL_STR_r23 1441 -#define _TRACE_RECORD_r00 1442 -#define _UNARY_INVERT_r12 1443 -#define _UNARY_NEGATIVE_r12 1444 -#define _UNARY_NOT_r01 1445 -#define _UNARY_NOT_r11 1446 -#define _UNARY_NOT_r22 1447 -#define _UNARY_NOT_r33 1448 -#define _UNPACK_EX_r10 1449 -#define _UNPACK_SEQUENCE_r10 1450 -#define _UNPACK_SEQUENCE_LIST_r10 1451 -#define _UNPACK_SEQUENCE_TUPLE_r10 1452 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1453 -#define _WITH_EXCEPT_START_r33 1454 -#define _YIELD_VALUE_r11 1455 -#define MAX_UOP_REGS_ID 1455 +#define _GET_ASEND_r21 786 +#define _GET_ASYNC_YIELD_FROM_ITER_r11 787 +#define _GET_AWAITABLE_r11 788 +#define _GET_ITER_r12 789 +#define _GET_LEN_r12 790 +#define _GET_YIELD_FROM_ITER_r11 791 +#define _GUARD_BINARY_OP_EXTEND_r22 792 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 793 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 794 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 795 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 796 +#define _GUARD_BIT_IS_SET_POP_r00 797 +#define _GUARD_BIT_IS_SET_POP_r10 798 +#define _GUARD_BIT_IS_SET_POP_r21 799 +#define _GUARD_BIT_IS_SET_POP_r32 800 +#define _GUARD_BIT_IS_SET_POP_4_r00 801 +#define _GUARD_BIT_IS_SET_POP_4_r10 802 +#define _GUARD_BIT_IS_SET_POP_4_r21 803 +#define _GUARD_BIT_IS_SET_POP_4_r32 804 +#define _GUARD_BIT_IS_SET_POP_5_r00 805 +#define _GUARD_BIT_IS_SET_POP_5_r10 806 +#define _GUARD_BIT_IS_SET_POP_5_r21 807 +#define _GUARD_BIT_IS_SET_POP_5_r32 808 +#define _GUARD_BIT_IS_SET_POP_6_r00 809 +#define _GUARD_BIT_IS_SET_POP_6_r10 810 +#define _GUARD_BIT_IS_SET_POP_6_r21 811 +#define _GUARD_BIT_IS_SET_POP_6_r32 812 +#define _GUARD_BIT_IS_SET_POP_7_r00 813 +#define _GUARD_BIT_IS_SET_POP_7_r10 814 +#define _GUARD_BIT_IS_SET_POP_7_r21 815 +#define _GUARD_BIT_IS_SET_POP_7_r32 816 +#define _GUARD_BIT_IS_UNSET_POP_r00 817 +#define _GUARD_BIT_IS_UNSET_POP_r10 818 +#define _GUARD_BIT_IS_UNSET_POP_r21 819 +#define _GUARD_BIT_IS_UNSET_POP_r32 820 +#define _GUARD_BIT_IS_UNSET_POP_4_r00 821 +#define _GUARD_BIT_IS_UNSET_POP_4_r10 822 +#define _GUARD_BIT_IS_UNSET_POP_4_r21 823 +#define _GUARD_BIT_IS_UNSET_POP_4_r32 824 +#define _GUARD_BIT_IS_UNSET_POP_5_r00 825 +#define _GUARD_BIT_IS_UNSET_POP_5_r10 826 +#define _GUARD_BIT_IS_UNSET_POP_5_r21 827 +#define _GUARD_BIT_IS_UNSET_POP_5_r32 828 +#define _GUARD_BIT_IS_UNSET_POP_6_r00 829 +#define _GUARD_BIT_IS_UNSET_POP_6_r10 830 +#define _GUARD_BIT_IS_UNSET_POP_6_r21 831 +#define _GUARD_BIT_IS_UNSET_POP_6_r32 832 +#define _GUARD_BIT_IS_UNSET_POP_7_r00 833 +#define _GUARD_BIT_IS_UNSET_POP_7_r10 834 +#define _GUARD_BIT_IS_UNSET_POP_7_r21 835 +#define _GUARD_BIT_IS_UNSET_POP_7_r32 836 +#define _GUARD_CALLABLE_ISINSTANCE_r03 837 +#define _GUARD_CALLABLE_ISINSTANCE_r13 838 +#define _GUARD_CALLABLE_ISINSTANCE_r23 839 +#define _GUARD_CALLABLE_ISINSTANCE_r33 840 +#define _GUARD_CALLABLE_LEN_r03 841 +#define _GUARD_CALLABLE_LEN_r13 842 +#define _GUARD_CALLABLE_LEN_r23 843 +#define _GUARD_CALLABLE_LEN_r33 844 +#define _GUARD_CALLABLE_LIST_APPEND_r03 845 +#define _GUARD_CALLABLE_LIST_APPEND_r13 846 +#define _GUARD_CALLABLE_LIST_APPEND_r23 847 +#define _GUARD_CALLABLE_LIST_APPEND_r33 848 +#define _GUARD_CALLABLE_STR_1_r03 849 +#define _GUARD_CALLABLE_STR_1_r13 850 +#define _GUARD_CALLABLE_STR_1_r23 851 +#define _GUARD_CALLABLE_STR_1_r33 852 +#define _GUARD_CALLABLE_TUPLE_1_r03 853 +#define _GUARD_CALLABLE_TUPLE_1_r13 854 +#define _GUARD_CALLABLE_TUPLE_1_r23 855 +#define _GUARD_CALLABLE_TUPLE_1_r33 856 +#define _GUARD_CALLABLE_TYPE_1_r03 857 +#define _GUARD_CALLABLE_TYPE_1_r13 858 +#define _GUARD_CALLABLE_TYPE_1_r23 859 +#define _GUARD_CALLABLE_TYPE_1_r33 860 +#define _GUARD_CODE_VERSION_r00 861 +#define _GUARD_CODE_VERSION_r11 862 +#define _GUARD_CODE_VERSION_r22 863 +#define _GUARD_CODE_VERSION_r33 864 +#define _GUARD_DORV_NO_DICT_r01 865 +#define _GUARD_DORV_NO_DICT_r11 866 +#define _GUARD_DORV_NO_DICT_r22 867 +#define _GUARD_DORV_NO_DICT_r33 868 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 869 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 870 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 871 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 872 +#define _GUARD_GLOBALS_VERSION_r00 873 +#define _GUARD_GLOBALS_VERSION_r11 874 +#define _GUARD_GLOBALS_VERSION_r22 875 +#define _GUARD_GLOBALS_VERSION_r33 876 +#define _GUARD_IP_RETURN_GENERATOR_r00 877 +#define _GUARD_IP_RETURN_GENERATOR_r11 878 +#define _GUARD_IP_RETURN_GENERATOR_r22 879 +#define _GUARD_IP_RETURN_GENERATOR_r33 880 +#define _GUARD_IP_RETURN_VALUE_r00 881 +#define _GUARD_IP_RETURN_VALUE_r11 882 +#define _GUARD_IP_RETURN_VALUE_r22 883 +#define _GUARD_IP_RETURN_VALUE_r33 884 +#define _GUARD_IP_YIELD_VALUE_r00 885 +#define _GUARD_IP_YIELD_VALUE_r11 886 +#define _GUARD_IP_YIELD_VALUE_r22 887 +#define _GUARD_IP_YIELD_VALUE_r33 888 +#define _GUARD_IP__PUSH_FRAME_r00 889 +#define _GUARD_IP__PUSH_FRAME_r11 890 +#define _GUARD_IP__PUSH_FRAME_r22 891 +#define _GUARD_IP__PUSH_FRAME_r33 892 +#define _GUARD_IS_FALSE_POP_r00 893 +#define _GUARD_IS_FALSE_POP_r10 894 +#define _GUARD_IS_FALSE_POP_r21 895 +#define _GUARD_IS_FALSE_POP_r32 896 +#define _GUARD_IS_NONE_POP_r00 897 +#define _GUARD_IS_NONE_POP_r10 898 +#define _GUARD_IS_NONE_POP_r21 899 +#define _GUARD_IS_NONE_POP_r32 900 +#define _GUARD_IS_NOT_NONE_POP_r10 901 +#define _GUARD_IS_TRUE_POP_r00 902 +#define _GUARD_IS_TRUE_POP_r10 903 +#define _GUARD_IS_TRUE_POP_r21 904 +#define _GUARD_IS_TRUE_POP_r32 905 +#define _GUARD_KEYS_VERSION_r01 906 +#define _GUARD_KEYS_VERSION_r11 907 +#define _GUARD_KEYS_VERSION_r22 908 +#define _GUARD_KEYS_VERSION_r33 909 +#define _GUARD_NOS_ANY_DICT_r02 910 +#define _GUARD_NOS_ANY_DICT_r12 911 +#define _GUARD_NOS_ANY_DICT_r22 912 +#define _GUARD_NOS_ANY_DICT_r33 913 +#define _GUARD_NOS_COMPACT_ASCII_r02 914 +#define _GUARD_NOS_COMPACT_ASCII_r12 915 +#define _GUARD_NOS_COMPACT_ASCII_r22 916 +#define _GUARD_NOS_COMPACT_ASCII_r33 917 +#define _GUARD_NOS_DICT_r02 918 +#define _GUARD_NOS_DICT_r12 919 +#define _GUARD_NOS_DICT_r22 920 +#define _GUARD_NOS_DICT_r33 921 +#define _GUARD_NOS_FLOAT_r02 922 +#define _GUARD_NOS_FLOAT_r12 923 +#define _GUARD_NOS_FLOAT_r22 924 +#define _GUARD_NOS_FLOAT_r33 925 +#define _GUARD_NOS_INT_r02 926 +#define _GUARD_NOS_INT_r12 927 +#define _GUARD_NOS_INT_r22 928 +#define _GUARD_NOS_INT_r33 929 +#define _GUARD_NOS_LIST_r02 930 +#define _GUARD_NOS_LIST_r12 931 +#define _GUARD_NOS_LIST_r22 932 +#define _GUARD_NOS_LIST_r33 933 +#define _GUARD_NOS_NOT_NULL_r02 934 +#define _GUARD_NOS_NOT_NULL_r12 935 +#define _GUARD_NOS_NOT_NULL_r22 936 +#define _GUARD_NOS_NOT_NULL_r33 937 +#define _GUARD_NOS_NULL_r02 938 +#define _GUARD_NOS_NULL_r12 939 +#define _GUARD_NOS_NULL_r22 940 +#define _GUARD_NOS_NULL_r33 941 +#define _GUARD_NOS_OVERFLOWED_r02 942 +#define _GUARD_NOS_OVERFLOWED_r12 943 +#define _GUARD_NOS_OVERFLOWED_r22 944 +#define _GUARD_NOS_OVERFLOWED_r33 945 +#define _GUARD_NOS_TUPLE_r02 946 +#define _GUARD_NOS_TUPLE_r12 947 +#define _GUARD_NOS_TUPLE_r22 948 +#define _GUARD_NOS_TUPLE_r33 949 +#define _GUARD_NOS_UNICODE_r02 950 +#define _GUARD_NOS_UNICODE_r12 951 +#define _GUARD_NOS_UNICODE_r22 952 +#define _GUARD_NOS_UNICODE_r33 953 +#define _GUARD_NOT_EXHAUSTED_LIST_r02 954 +#define _GUARD_NOT_EXHAUSTED_LIST_r12 955 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 956 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 957 +#define _GUARD_NOT_EXHAUSTED_RANGE_r02 958 +#define _GUARD_NOT_EXHAUSTED_RANGE_r12 959 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 960 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 961 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 962 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 963 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 964 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 965 +#define _GUARD_THIRD_NULL_r03 966 +#define _GUARD_THIRD_NULL_r13 967 +#define _GUARD_THIRD_NULL_r23 968 +#define _GUARD_THIRD_NULL_r33 969 +#define _GUARD_TOS_ANY_DICT_r01 970 +#define _GUARD_TOS_ANY_DICT_r11 971 +#define _GUARD_TOS_ANY_DICT_r22 972 +#define _GUARD_TOS_ANY_DICT_r33 973 +#define _GUARD_TOS_ANY_SET_r01 974 +#define _GUARD_TOS_ANY_SET_r11 975 +#define _GUARD_TOS_ANY_SET_r22 976 +#define _GUARD_TOS_ANY_SET_r33 977 +#define _GUARD_TOS_FLOAT_r01 978 +#define _GUARD_TOS_FLOAT_r11 979 +#define _GUARD_TOS_FLOAT_r22 980 +#define _GUARD_TOS_FLOAT_r33 981 +#define _GUARD_TOS_INT_r01 982 +#define _GUARD_TOS_INT_r11 983 +#define _GUARD_TOS_INT_r22 984 +#define _GUARD_TOS_INT_r33 985 +#define _GUARD_TOS_LIST_r01 986 +#define _GUARD_TOS_LIST_r11 987 +#define _GUARD_TOS_LIST_r22 988 +#define _GUARD_TOS_LIST_r33 989 +#define _GUARD_TOS_OVERFLOWED_r01 990 +#define _GUARD_TOS_OVERFLOWED_r11 991 +#define _GUARD_TOS_OVERFLOWED_r22 992 +#define _GUARD_TOS_OVERFLOWED_r33 993 +#define _GUARD_TOS_SLICE_r01 994 +#define _GUARD_TOS_SLICE_r11 995 +#define _GUARD_TOS_SLICE_r22 996 +#define _GUARD_TOS_SLICE_r33 997 +#define _GUARD_TOS_TUPLE_r01 998 +#define _GUARD_TOS_TUPLE_r11 999 +#define _GUARD_TOS_TUPLE_r22 1000 +#define _GUARD_TOS_TUPLE_r33 1001 +#define _GUARD_TOS_UNICODE_r01 1002 +#define _GUARD_TOS_UNICODE_r11 1003 +#define _GUARD_TOS_UNICODE_r22 1004 +#define _GUARD_TOS_UNICODE_r33 1005 +#define _GUARD_TYPE_VERSION_r01 1006 +#define _GUARD_TYPE_VERSION_r11 1007 +#define _GUARD_TYPE_VERSION_r22 1008 +#define _GUARD_TYPE_VERSION_r33 1009 +#define _GUARD_TYPE_VERSION_AND_LOCK_r01 1010 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 1011 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 1012 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 1013 +#define _HANDLE_PENDING_AND_DEOPT_r00 1014 +#define _HANDLE_PENDING_AND_DEOPT_r10 1015 +#define _HANDLE_PENDING_AND_DEOPT_r20 1016 +#define _HANDLE_PENDING_AND_DEOPT_r30 1017 +#define _IMPORT_FROM_r12 1018 +#define _IMPORT_NAME_r21 1019 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1020 +#define _INIT_CALL_PY_EXACT_ARGS_r01 1021 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1022 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1023 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1024 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1025 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1026 +#define _INSERT_1_LOAD_CONST_INLINE_r02 1027 +#define _INSERT_1_LOAD_CONST_INLINE_r12 1028 +#define _INSERT_1_LOAD_CONST_INLINE_r23 1029 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 1030 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 1031 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 1032 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r03 1033 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r13 1034 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r23 1035 +#define _INSERT_NULL_r10 1036 +#define _INSTRUMENTED_FOR_ITER_r23 1037 +#define _INSTRUMENTED_INSTRUCTION_r00 1038 +#define _INSTRUMENTED_JUMP_FORWARD_r00 1039 +#define _INSTRUMENTED_JUMP_FORWARD_r11 1040 +#define _INSTRUMENTED_JUMP_FORWARD_r22 1041 +#define _INSTRUMENTED_JUMP_FORWARD_r33 1042 +#define _INSTRUMENTED_LINE_r00 1043 +#define _INSTRUMENTED_NOT_TAKEN_r00 1044 +#define _INSTRUMENTED_NOT_TAKEN_r11 1045 +#define _INSTRUMENTED_NOT_TAKEN_r22 1046 +#define _INSTRUMENTED_NOT_TAKEN_r33 1047 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1048 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1049 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1050 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1051 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1052 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1053 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1054 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1055 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1056 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1057 +#define _IS_NONE_r11 1058 +#define _IS_OP_r03 1059 +#define _IS_OP_r13 1060 +#define _IS_OP_r23 1061 +#define _ITER_CHECK_LIST_r02 1062 +#define _ITER_CHECK_LIST_r12 1063 +#define _ITER_CHECK_LIST_r22 1064 +#define _ITER_CHECK_LIST_r33 1065 +#define _ITER_CHECK_RANGE_r02 1066 +#define _ITER_CHECK_RANGE_r12 1067 +#define _ITER_CHECK_RANGE_r22 1068 +#define _ITER_CHECK_RANGE_r33 1069 +#define _ITER_CHECK_TUPLE_r02 1070 +#define _ITER_CHECK_TUPLE_r12 1071 +#define _ITER_CHECK_TUPLE_r22 1072 +#define _ITER_CHECK_TUPLE_r33 1073 +#define _ITER_JUMP_LIST_r02 1074 +#define _ITER_JUMP_LIST_r12 1075 +#define _ITER_JUMP_LIST_r22 1076 +#define _ITER_JUMP_LIST_r33 1077 +#define _ITER_JUMP_RANGE_r02 1078 +#define _ITER_JUMP_RANGE_r12 1079 +#define _ITER_JUMP_RANGE_r22 1080 +#define _ITER_JUMP_RANGE_r33 1081 +#define _ITER_JUMP_TUPLE_r02 1082 +#define _ITER_JUMP_TUPLE_r12 1083 +#define _ITER_JUMP_TUPLE_r22 1084 +#define _ITER_JUMP_TUPLE_r33 1085 +#define _ITER_NEXT_LIST_r23 1086 +#define _ITER_NEXT_LIST_TIER_TWO_r23 1087 +#define _ITER_NEXT_RANGE_r03 1088 +#define _ITER_NEXT_RANGE_r13 1089 +#define _ITER_NEXT_RANGE_r23 1090 +#define _ITER_NEXT_TUPLE_r03 1091 +#define _ITER_NEXT_TUPLE_r13 1092 +#define _ITER_NEXT_TUPLE_r23 1093 +#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1094 +#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1095 +#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1096 +#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1097 +#define _JUMP_TO_TOP_r00 1098 +#define _LIST_APPEND_r10 1099 +#define _LIST_EXTEND_r10 1100 +#define _LOAD_ATTR_r10 1101 +#define _LOAD_ATTR_CLASS_r11 1102 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1103 +#define _LOAD_ATTR_INSTANCE_VALUE_r02 1104 +#define _LOAD_ATTR_INSTANCE_VALUE_r12 1105 +#define _LOAD_ATTR_INSTANCE_VALUE_r23 1106 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1107 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1108 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1109 +#define _LOAD_ATTR_METHOD_NO_DICT_r02 1110 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 1111 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 1112 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1113 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1114 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1115 +#define _LOAD_ATTR_MODULE_r12 1116 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1117 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1118 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 1119 +#define _LOAD_ATTR_SLOT_r02 1120 +#define _LOAD_ATTR_SLOT_r12 1121 +#define _LOAD_ATTR_SLOT_r23 1122 +#define _LOAD_ATTR_WITH_HINT_r12 1123 +#define _LOAD_BUILD_CLASS_r01 1124 +#define _LOAD_BYTECODE_r00 1125 +#define _LOAD_COMMON_CONSTANT_r01 1126 +#define _LOAD_COMMON_CONSTANT_r12 1127 +#define _LOAD_COMMON_CONSTANT_r23 1128 +#define _LOAD_CONST_r01 1129 +#define _LOAD_CONST_r12 1130 +#define _LOAD_CONST_r23 1131 +#define _LOAD_CONST_INLINE_r01 1132 +#define _LOAD_CONST_INLINE_r12 1133 +#define _LOAD_CONST_INLINE_r23 1134 +#define _LOAD_CONST_INLINE_BORROW_r01 1135 +#define _LOAD_CONST_INLINE_BORROW_r12 1136 +#define _LOAD_CONST_INLINE_BORROW_r23 1137 +#define _LOAD_CONST_UNDER_INLINE_r02 1138 +#define _LOAD_CONST_UNDER_INLINE_r12 1139 +#define _LOAD_CONST_UNDER_INLINE_r23 1140 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1141 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1142 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1143 +#define _LOAD_DEREF_r01 1144 +#define _LOAD_FAST_r01 1145 +#define _LOAD_FAST_r12 1146 +#define _LOAD_FAST_r23 1147 +#define _LOAD_FAST_0_r01 1148 +#define _LOAD_FAST_0_r12 1149 +#define _LOAD_FAST_0_r23 1150 +#define _LOAD_FAST_1_r01 1151 +#define _LOAD_FAST_1_r12 1152 +#define _LOAD_FAST_1_r23 1153 +#define _LOAD_FAST_2_r01 1154 +#define _LOAD_FAST_2_r12 1155 +#define _LOAD_FAST_2_r23 1156 +#define _LOAD_FAST_3_r01 1157 +#define _LOAD_FAST_3_r12 1158 +#define _LOAD_FAST_3_r23 1159 +#define _LOAD_FAST_4_r01 1160 +#define _LOAD_FAST_4_r12 1161 +#define _LOAD_FAST_4_r23 1162 +#define _LOAD_FAST_5_r01 1163 +#define _LOAD_FAST_5_r12 1164 +#define _LOAD_FAST_5_r23 1165 +#define _LOAD_FAST_6_r01 1166 +#define _LOAD_FAST_6_r12 1167 +#define _LOAD_FAST_6_r23 1168 +#define _LOAD_FAST_7_r01 1169 +#define _LOAD_FAST_7_r12 1170 +#define _LOAD_FAST_7_r23 1171 +#define _LOAD_FAST_AND_CLEAR_r01 1172 +#define _LOAD_FAST_AND_CLEAR_r12 1173 +#define _LOAD_FAST_AND_CLEAR_r23 1174 +#define _LOAD_FAST_BORROW_r01 1175 +#define _LOAD_FAST_BORROW_r12 1176 +#define _LOAD_FAST_BORROW_r23 1177 +#define _LOAD_FAST_BORROW_0_r01 1178 +#define _LOAD_FAST_BORROW_0_r12 1179 +#define _LOAD_FAST_BORROW_0_r23 1180 +#define _LOAD_FAST_BORROW_1_r01 1181 +#define _LOAD_FAST_BORROW_1_r12 1182 +#define _LOAD_FAST_BORROW_1_r23 1183 +#define _LOAD_FAST_BORROW_2_r01 1184 +#define _LOAD_FAST_BORROW_2_r12 1185 +#define _LOAD_FAST_BORROW_2_r23 1186 +#define _LOAD_FAST_BORROW_3_r01 1187 +#define _LOAD_FAST_BORROW_3_r12 1188 +#define _LOAD_FAST_BORROW_3_r23 1189 +#define _LOAD_FAST_BORROW_4_r01 1190 +#define _LOAD_FAST_BORROW_4_r12 1191 +#define _LOAD_FAST_BORROW_4_r23 1192 +#define _LOAD_FAST_BORROW_5_r01 1193 +#define _LOAD_FAST_BORROW_5_r12 1194 +#define _LOAD_FAST_BORROW_5_r23 1195 +#define _LOAD_FAST_BORROW_6_r01 1196 +#define _LOAD_FAST_BORROW_6_r12 1197 +#define _LOAD_FAST_BORROW_6_r23 1198 +#define _LOAD_FAST_BORROW_7_r01 1199 +#define _LOAD_FAST_BORROW_7_r12 1200 +#define _LOAD_FAST_BORROW_7_r23 1201 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1202 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1203 +#define _LOAD_FAST_CHECK_r01 1204 +#define _LOAD_FAST_CHECK_r12 1205 +#define _LOAD_FAST_CHECK_r23 1206 +#define _LOAD_FAST_LOAD_FAST_r02 1207 +#define _LOAD_FAST_LOAD_FAST_r13 1208 +#define _LOAD_FROM_DICT_OR_DEREF_r11 1209 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1210 +#define _LOAD_GLOBAL_r00 1211 +#define _LOAD_GLOBAL_BUILTINS_r01 1212 +#define _LOAD_GLOBAL_MODULE_r01 1213 +#define _LOAD_LOCALS_r01 1214 +#define _LOAD_LOCALS_r12 1215 +#define _LOAD_LOCALS_r23 1216 +#define _LOAD_NAME_r01 1217 +#define _LOAD_SMALL_INT_r01 1218 +#define _LOAD_SMALL_INT_r12 1219 +#define _LOAD_SMALL_INT_r23 1220 +#define _LOAD_SMALL_INT_0_r01 1221 +#define _LOAD_SMALL_INT_0_r12 1222 +#define _LOAD_SMALL_INT_0_r23 1223 +#define _LOAD_SMALL_INT_1_r01 1224 +#define _LOAD_SMALL_INT_1_r12 1225 +#define _LOAD_SMALL_INT_1_r23 1226 +#define _LOAD_SMALL_INT_2_r01 1227 +#define _LOAD_SMALL_INT_2_r12 1228 +#define _LOAD_SMALL_INT_2_r23 1229 +#define _LOAD_SMALL_INT_3_r01 1230 +#define _LOAD_SMALL_INT_3_r12 1231 +#define _LOAD_SMALL_INT_3_r23 1232 +#define _LOAD_SPECIAL_r00 1233 +#define _LOAD_SUPER_ATTR_ATTR_r31 1234 +#define _LOAD_SUPER_ATTR_METHOD_r32 1235 +#define _MAKE_CALLARGS_A_TUPLE_r33 1236 +#define _MAKE_CELL_r00 1237 +#define _MAKE_FUNCTION_r11 1238 +#define _MAKE_WARM_r00 1239 +#define _MAKE_WARM_r11 1240 +#define _MAKE_WARM_r22 1241 +#define _MAKE_WARM_r33 1242 +#define _MAP_ADD_r20 1243 +#define _MATCH_CLASS_r31 1244 +#define _MATCH_KEYS_r23 1245 +#define _MATCH_MAPPING_r02 1246 +#define _MATCH_MAPPING_r12 1247 +#define _MATCH_MAPPING_r23 1248 +#define _MATCH_SEQUENCE_r02 1249 +#define _MATCH_SEQUENCE_r12 1250 +#define _MATCH_SEQUENCE_r23 1251 +#define _MAYBE_EXPAND_METHOD_r00 1252 +#define _MAYBE_EXPAND_METHOD_KW_r11 1253 +#define _MONITOR_CALL_r00 1254 +#define _MONITOR_CALL_KW_r11 1255 +#define _MONITOR_JUMP_BACKWARD_r00 1256 +#define _MONITOR_JUMP_BACKWARD_r11 1257 +#define _MONITOR_JUMP_BACKWARD_r22 1258 +#define _MONITOR_JUMP_BACKWARD_r33 1259 +#define _MONITOR_RESUME_r00 1260 +#define _NOP_r00 1261 +#define _NOP_r11 1262 +#define _NOP_r22 1263 +#define _NOP_r33 1264 +#define _POP_CALL_r20 1265 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1266 +#define _POP_CALL_ONE_r30 1267 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1268 +#define _POP_CALL_TWO_r30 1269 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1270 +#define _POP_EXCEPT_r10 1271 +#define _POP_ITER_r20 1272 +#define _POP_JUMP_IF_FALSE_r00 1273 +#define _POP_JUMP_IF_FALSE_r10 1274 +#define _POP_JUMP_IF_FALSE_r21 1275 +#define _POP_JUMP_IF_FALSE_r32 1276 +#define _POP_JUMP_IF_TRUE_r00 1277 +#define _POP_JUMP_IF_TRUE_r10 1278 +#define _POP_JUMP_IF_TRUE_r21 1279 +#define _POP_JUMP_IF_TRUE_r32 1280 +#define _POP_TOP_r10 1281 +#define _POP_TOP_FLOAT_r00 1282 +#define _POP_TOP_FLOAT_r10 1283 +#define _POP_TOP_FLOAT_r21 1284 +#define _POP_TOP_FLOAT_r32 1285 +#define _POP_TOP_INT_r00 1286 +#define _POP_TOP_INT_r10 1287 +#define _POP_TOP_INT_r21 1288 +#define _POP_TOP_INT_r32 1289 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1290 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1291 +#define _POP_TOP_NOP_r00 1292 +#define _POP_TOP_NOP_r10 1293 +#define _POP_TOP_NOP_r21 1294 +#define _POP_TOP_NOP_r32 1295 +#define _POP_TOP_UNICODE_r00 1296 +#define _POP_TOP_UNICODE_r10 1297 +#define _POP_TOP_UNICODE_r21 1298 +#define _POP_TOP_UNICODE_r32 1299 +#define _POP_TWO_r20 1300 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1301 +#define _PUSH_EXC_INFO_r02 1302 +#define _PUSH_EXC_INFO_r12 1303 +#define _PUSH_EXC_INFO_r23 1304 +#define _PUSH_FRAME_r10 1305 +#define _PUSH_NULL_r01 1306 +#define _PUSH_NULL_r12 1307 +#define _PUSH_NULL_r23 1308 +#define _PUSH_NULL_CONDITIONAL_r00 1309 +#define _PY_FRAME_EX_r31 1310 +#define _PY_FRAME_GENERAL_r01 1311 +#define _PY_FRAME_KW_r11 1312 +#define _QUICKEN_RESUME_r00 1313 +#define _QUICKEN_RESUME_r11 1314 +#define _QUICKEN_RESUME_r22 1315 +#define _QUICKEN_RESUME_r33 1316 +#define _REPLACE_WITH_TRUE_r02 1317 +#define _REPLACE_WITH_TRUE_r12 1318 +#define _REPLACE_WITH_TRUE_r23 1319 +#define _RESUME_CHECK_r00 1320 +#define _RESUME_CHECK_r11 1321 +#define _RESUME_CHECK_r22 1322 +#define _RESUME_CHECK_r33 1323 +#define _RETURN_GENERATOR_r01 1324 +#define _RETURN_VALUE_r11 1325 +#define _SAVE_RETURN_OFFSET_r00 1326 +#define _SAVE_RETURN_OFFSET_r11 1327 +#define _SAVE_RETURN_OFFSET_r22 1328 +#define _SAVE_RETURN_OFFSET_r33 1329 +#define _SEND_r22 1330 +#define _SEND_GEN_FRAME_r22 1331 +#define _SETUP_ANNOTATIONS_r00 1332 +#define _SET_ADD_r10 1333 +#define _SET_FUNCTION_ATTRIBUTE_r01 1334 +#define _SET_FUNCTION_ATTRIBUTE_r11 1335 +#define _SET_FUNCTION_ATTRIBUTE_r21 1336 +#define _SET_FUNCTION_ATTRIBUTE_r32 1337 +#define _SET_IP_r00 1338 +#define _SET_IP_r11 1339 +#define _SET_IP_r22 1340 +#define _SET_IP_r33 1341 +#define _SET_UPDATE_r10 1342 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1343 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1344 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1345 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1346 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1347 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1348 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1349 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1350 +#define _SPILL_OR_RELOAD_r01 1351 +#define _SPILL_OR_RELOAD_r02 1352 +#define _SPILL_OR_RELOAD_r03 1353 +#define _SPILL_OR_RELOAD_r10 1354 +#define _SPILL_OR_RELOAD_r12 1355 +#define _SPILL_OR_RELOAD_r13 1356 +#define _SPILL_OR_RELOAD_r20 1357 +#define _SPILL_OR_RELOAD_r21 1358 +#define _SPILL_OR_RELOAD_r23 1359 +#define _SPILL_OR_RELOAD_r30 1360 +#define _SPILL_OR_RELOAD_r31 1361 +#define _SPILL_OR_RELOAD_r32 1362 +#define _START_EXECUTOR_r00 1363 +#define _STORE_ATTR_r20 1364 +#define _STORE_ATTR_INSTANCE_VALUE_r21 1365 +#define _STORE_ATTR_SLOT_r21 1366 +#define _STORE_ATTR_WITH_HINT_r21 1367 +#define _STORE_DEREF_r10 1368 +#define _STORE_FAST_LOAD_FAST_r11 1369 +#define _STORE_FAST_STORE_FAST_r20 1370 +#define _STORE_GLOBAL_r10 1371 +#define _STORE_NAME_r10 1372 +#define _STORE_SLICE_r30 1373 +#define _STORE_SUBSCR_r30 1374 +#define _STORE_SUBSCR_DICT_r31 1375 +#define _STORE_SUBSCR_LIST_INT_r32 1376 +#define _SWAP_r11 1377 +#define _SWAP_2_r02 1378 +#define _SWAP_2_r12 1379 +#define _SWAP_2_r22 1380 +#define _SWAP_2_r33 1381 +#define _SWAP_3_r03 1382 +#define _SWAP_3_r13 1383 +#define _SWAP_3_r23 1384 +#define _SWAP_3_r33 1385 +#define _SWAP_FAST_r01 1386 +#define _SWAP_FAST_r11 1387 +#define _SWAP_FAST_r22 1388 +#define _SWAP_FAST_r33 1389 +#define _SWAP_FAST_0_r01 1390 +#define _SWAP_FAST_0_r11 1391 +#define _SWAP_FAST_0_r22 1392 +#define _SWAP_FAST_0_r33 1393 +#define _SWAP_FAST_1_r01 1394 +#define _SWAP_FAST_1_r11 1395 +#define _SWAP_FAST_1_r22 1396 +#define _SWAP_FAST_1_r33 1397 +#define _SWAP_FAST_2_r01 1398 +#define _SWAP_FAST_2_r11 1399 +#define _SWAP_FAST_2_r22 1400 +#define _SWAP_FAST_2_r33 1401 +#define _SWAP_FAST_3_r01 1402 +#define _SWAP_FAST_3_r11 1403 +#define _SWAP_FAST_3_r22 1404 +#define _SWAP_FAST_3_r33 1405 +#define _SWAP_FAST_4_r01 1406 +#define _SWAP_FAST_4_r11 1407 +#define _SWAP_FAST_4_r22 1408 +#define _SWAP_FAST_4_r33 1409 +#define _SWAP_FAST_5_r01 1410 +#define _SWAP_FAST_5_r11 1411 +#define _SWAP_FAST_5_r22 1412 +#define _SWAP_FAST_5_r33 1413 +#define _SWAP_FAST_6_r01 1414 +#define _SWAP_FAST_6_r11 1415 +#define _SWAP_FAST_6_r22 1416 +#define _SWAP_FAST_6_r33 1417 +#define _SWAP_FAST_7_r01 1418 +#define _SWAP_FAST_7_r11 1419 +#define _SWAP_FAST_7_r22 1420 +#define _SWAP_FAST_7_r33 1421 +#define _TIER2_RESUME_CHECK_r00 1422 +#define _TIER2_RESUME_CHECK_r11 1423 +#define _TIER2_RESUME_CHECK_r22 1424 +#define _TIER2_RESUME_CHECK_r33 1425 +#define _TO_BOOL_r11 1426 +#define _TO_BOOL_BOOL_r01 1427 +#define _TO_BOOL_BOOL_r11 1428 +#define _TO_BOOL_BOOL_r22 1429 +#define _TO_BOOL_BOOL_r33 1430 +#define _TO_BOOL_INT_r02 1431 +#define _TO_BOOL_INT_r12 1432 +#define _TO_BOOL_INT_r23 1433 +#define _TO_BOOL_LIST_r02 1434 +#define _TO_BOOL_LIST_r12 1435 +#define _TO_BOOL_LIST_r23 1436 +#define _TO_BOOL_NONE_r01 1437 +#define _TO_BOOL_NONE_r11 1438 +#define _TO_BOOL_NONE_r22 1439 +#define _TO_BOOL_NONE_r33 1440 +#define _TO_BOOL_STR_r02 1441 +#define _TO_BOOL_STR_r12 1442 +#define _TO_BOOL_STR_r23 1443 +#define _TRACE_RECORD_r00 1444 +#define _UNARY_INVERT_r12 1445 +#define _UNARY_NEGATIVE_r12 1446 +#define _UNARY_NOT_r01 1447 +#define _UNARY_NOT_r11 1448 +#define _UNARY_NOT_r22 1449 +#define _UNARY_NOT_r33 1450 +#define _UNPACK_EX_r10 1451 +#define _UNPACK_SEQUENCE_r10 1452 +#define _UNPACK_SEQUENCE_LIST_r10 1453 +#define _UNPACK_SEQUENCE_TUPLE_r10 1454 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1455 +#define _WITH_EXCEPT_START_r33 1456 +#define _YIELD_VALUE_r11 1457 +#define MAX_UOP_REGS_ID 1457 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index 33a4d17d766eb2..5457a61dcfbbdb 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -144,6 +144,7 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = { [_GET_AITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_GET_ANEXT] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_GET_AWAITABLE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, + [_GET_ASEND] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_SEND_GEN_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, [_YIELD_VALUE] = HAS_ARG_FLAG | HAS_NEEDS_GUARD_IP_FLAG, [_POP_EXCEPT] = HAS_ESCAPES_FLAG, @@ -225,6 +226,7 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = { [_MATCH_KEYS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_GET_ITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_GET_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, + [_GET_ASYNC_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_ITER_CHECK_LIST] = HAS_EXIT_FLAG, [_GUARD_NOT_EXHAUSTED_LIST] = HAS_EXIT_FLAG, @@ -1380,6 +1382,15 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { { -1, -1, -1 }, }, }, + [_GET_ASEND] = { + .best = { 2, 2, 2, 2 }, + .entries = { + { -1, -1, -1 }, + { -1, -1, -1 }, + { 1, 2, _GET_ASEND_r21 }, + { -1, -1, -1 }, + }, + }, [_SEND_GEN_FRAME] = { .best = { 2, 2, 2, 2 }, .entries = { @@ -2109,6 +2120,15 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { { -1, -1, -1 }, }, }, + [_GET_ASYNC_YIELD_FROM_ITER] = { + .best = { 1, 1, 1, 1 }, + .entries = { + { -1, -1, -1 }, + { 1, 1, _GET_ASYNC_YIELD_FROM_ITER_r11 }, + { -1, -1, -1 }, + { -1, -1, -1 }, + }, + }, [_FOR_ITER_TIER_TWO] = { .best = { 2, 2, 2, 2 }, .entries = { @@ -3760,6 +3780,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GET_AITER_r11] = _GET_AITER, [_GET_ANEXT_r12] = _GET_ANEXT, [_GET_AWAITABLE_r11] = _GET_AWAITABLE, + [_GET_ASEND_r21] = _GET_ASEND, [_SEND_GEN_FRAME_r22] = _SEND_GEN_FRAME, [_YIELD_VALUE_r11] = _YIELD_VALUE, [_POP_EXCEPT_r10] = _POP_EXCEPT, @@ -3881,6 +3902,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_MATCH_KEYS_r23] = _MATCH_KEYS, [_GET_ITER_r12] = _GET_ITER, [_GET_YIELD_FROM_ITER_r11] = _GET_YIELD_FROM_ITER, + [_GET_ASYNC_YIELD_FROM_ITER_r11] = _GET_ASYNC_YIELD_FROM_ITER, [_FOR_ITER_TIER_TWO_r23] = _FOR_ITER_TIER_TWO, [_ITER_CHECK_LIST_r02] = _ITER_CHECK_LIST, [_ITER_CHECK_LIST_r12] = _ITER_CHECK_LIST, @@ -4574,6 +4596,10 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_GET_AITER_r11] = "_GET_AITER_r11", [_GET_ANEXT] = "_GET_ANEXT", [_GET_ANEXT_r12] = "_GET_ANEXT_r12", + [_GET_ASEND] = "_GET_ASEND", + [_GET_ASEND_r21] = "_GET_ASEND_r21", + [_GET_ASYNC_YIELD_FROM_ITER] = "_GET_ASYNC_YIELD_FROM_ITER", + [_GET_ASYNC_YIELD_FROM_ITER_r11] = "_GET_ASYNC_YIELD_FROM_ITER_r11", [_GET_AWAITABLE] = "_GET_AWAITABLE", [_GET_AWAITABLE_r11] = "_GET_AWAITABLE_r11", [_GET_ITER] = "_GET_ITER", @@ -5637,6 +5663,8 @@ int _PyUop_num_popped(int opcode, int oparg) return 0; case _GET_AWAITABLE: return 1; + case _GET_ASEND: + return 2; case _SEND_GEN_FRAME: return 1; case _YIELD_VALUE: @@ -5799,6 +5827,8 @@ int _PyUop_num_popped(int opcode, int oparg) return 1; case _GET_YIELD_FROM_ITER: return 1; + case _GET_ASYNC_YIELD_FROM_ITER: + return 1; case _FOR_ITER_TIER_TWO: return 0; case _ITER_CHECK_LIST: diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index c46368444f4c59..e8dd136c2fd7b1 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -26,111 +26,113 @@ extern "C" { #define FORMAT_WITH_SPEC 13 #define GET_AITER 14 #define GET_ANEXT 15 -#define GET_ITER 16 +#define GET_ASEND 16 #define RESERVED 17 -#define GET_LEN 18 -#define GET_YIELD_FROM_ITER 19 -#define INTERPRETER_EXIT 20 -#define LOAD_BUILD_CLASS 21 -#define LOAD_LOCALS 22 -#define MAKE_FUNCTION 23 -#define MATCH_KEYS 24 -#define MATCH_MAPPING 25 -#define MATCH_SEQUENCE 26 -#define NOP 27 -#define NOT_TAKEN 28 -#define POP_EXCEPT 29 -#define POP_ITER 30 -#define POP_TOP 31 -#define PUSH_EXC_INFO 32 -#define PUSH_NULL 33 -#define RETURN_GENERATOR 34 -#define RETURN_VALUE 35 -#define SETUP_ANNOTATIONS 36 -#define STORE_SLICE 37 -#define STORE_SUBSCR 38 -#define TO_BOOL 39 -#define UNARY_INVERT 40 -#define UNARY_NEGATIVE 41 -#define UNARY_NOT 42 -#define WITH_EXCEPT_START 43 -#define BINARY_OP 44 -#define BUILD_INTERPOLATION 45 -#define BUILD_LIST 46 -#define BUILD_MAP 47 -#define BUILD_SET 48 -#define BUILD_SLICE 49 -#define BUILD_STRING 50 -#define BUILD_TUPLE 51 -#define CALL 52 -#define CALL_INTRINSIC_1 53 -#define CALL_INTRINSIC_2 54 -#define CALL_KW 55 -#define COMPARE_OP 56 -#define CONTAINS_OP 57 -#define CONVERT_VALUE 58 -#define COPY 59 -#define COPY_FREE_VARS 60 -#define DELETE_ATTR 61 -#define DELETE_DEREF 62 -#define DELETE_FAST 63 -#define DELETE_GLOBAL 64 -#define DELETE_NAME 65 -#define DICT_MERGE 66 -#define DICT_UPDATE 67 -#define END_ASYNC_FOR 68 -#define EXTENDED_ARG 69 -#define FOR_ITER 70 -#define GET_AWAITABLE 71 -#define IMPORT_FROM 72 -#define IMPORT_NAME 73 -#define IS_OP 74 -#define JUMP_BACKWARD 75 -#define JUMP_BACKWARD_NO_INTERRUPT 76 -#define JUMP_FORWARD 77 -#define LIST_APPEND 78 -#define LIST_EXTEND 79 -#define LOAD_ATTR 80 -#define LOAD_COMMON_CONSTANT 81 -#define LOAD_CONST 82 -#define LOAD_DEREF 83 -#define LOAD_FAST 84 -#define LOAD_FAST_AND_CLEAR 85 -#define LOAD_FAST_BORROW 86 -#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 87 -#define LOAD_FAST_CHECK 88 -#define LOAD_FAST_LOAD_FAST 89 -#define LOAD_FROM_DICT_OR_DEREF 90 -#define LOAD_FROM_DICT_OR_GLOBALS 91 -#define LOAD_GLOBAL 92 -#define LOAD_NAME 93 -#define LOAD_SMALL_INT 94 -#define LOAD_SPECIAL 95 -#define LOAD_SUPER_ATTR 96 -#define MAKE_CELL 97 -#define MAP_ADD 98 -#define MATCH_CLASS 99 -#define POP_JUMP_IF_FALSE 100 -#define POP_JUMP_IF_NONE 101 -#define POP_JUMP_IF_NOT_NONE 102 -#define POP_JUMP_IF_TRUE 103 -#define RAISE_VARARGS 104 -#define RERAISE 105 -#define SEND 106 -#define SET_ADD 107 -#define SET_FUNCTION_ATTRIBUTE 108 -#define SET_UPDATE 109 -#define STORE_ATTR 110 -#define STORE_DEREF 111 -#define STORE_FAST 112 -#define STORE_FAST_LOAD_FAST 113 -#define STORE_FAST_STORE_FAST 114 -#define STORE_GLOBAL 115 -#define STORE_NAME 116 -#define SWAP 117 -#define UNPACK_EX 118 -#define UNPACK_SEQUENCE 119 -#define YIELD_VALUE 120 +#define GET_ASYNC_YIELD_FROM_ITER 18 +#define GET_ITER 19 +#define GET_LEN 20 +#define GET_YIELD_FROM_ITER 21 +#define INTERPRETER_EXIT 22 +#define LOAD_BUILD_CLASS 23 +#define LOAD_LOCALS 24 +#define MAKE_FUNCTION 25 +#define MATCH_KEYS 26 +#define MATCH_MAPPING 27 +#define MATCH_SEQUENCE 28 +#define NOP 29 +#define NOT_TAKEN 30 +#define POP_EXCEPT 31 +#define POP_ITER 32 +#define POP_TOP 33 +#define PUSH_EXC_INFO 34 +#define PUSH_NULL 35 +#define RETURN_GENERATOR 36 +#define RETURN_VALUE 37 +#define SETUP_ANNOTATIONS 38 +#define STORE_SLICE 39 +#define STORE_SUBSCR 40 +#define TO_BOOL 41 +#define UNARY_INVERT 42 +#define UNARY_NEGATIVE 43 +#define UNARY_NOT 44 +#define WITH_EXCEPT_START 45 +#define BINARY_OP 46 +#define BUILD_INTERPOLATION 47 +#define BUILD_LIST 48 +#define BUILD_MAP 49 +#define BUILD_SET 50 +#define BUILD_SLICE 51 +#define BUILD_STRING 52 +#define BUILD_TUPLE 53 +#define CALL 54 +#define CALL_INTRINSIC_1 55 +#define CALL_INTRINSIC_2 56 +#define CALL_KW 57 +#define COMPARE_OP 58 +#define CONTAINS_OP 59 +#define CONVERT_VALUE 60 +#define COPY 61 +#define COPY_FREE_VARS 62 +#define DELETE_ATTR 63 +#define DELETE_DEREF 64 +#define DELETE_FAST 65 +#define DELETE_GLOBAL 66 +#define DELETE_NAME 67 +#define DICT_MERGE 68 +#define DICT_UPDATE 69 +#define END_ASYNC_FOR 70 +#define EXTENDED_ARG 71 +#define FOR_ITER 72 +#define GET_AWAITABLE 73 +#define IMPORT_FROM 74 +#define IMPORT_NAME 75 +#define IS_OP 76 +#define JUMP_BACKWARD 77 +#define JUMP_BACKWARD_NO_INTERRUPT 78 +#define JUMP_FORWARD 79 +#define LIST_APPEND 80 +#define LIST_EXTEND 81 +#define LOAD_ATTR 82 +#define LOAD_COMMON_CONSTANT 83 +#define LOAD_CONST 84 +#define LOAD_DEREF 85 +#define LOAD_FAST 86 +#define LOAD_FAST_AND_CLEAR 87 +#define LOAD_FAST_BORROW 88 +#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 89 +#define LOAD_FAST_CHECK 90 +#define LOAD_FAST_LOAD_FAST 91 +#define LOAD_FROM_DICT_OR_DEREF 92 +#define LOAD_FROM_DICT_OR_GLOBALS 93 +#define LOAD_GLOBAL 94 +#define LOAD_NAME 95 +#define LOAD_SMALL_INT 96 +#define LOAD_SPECIAL 97 +#define LOAD_SUPER_ATTR 98 +#define MAKE_CELL 99 +#define MAP_ADD 100 +#define MATCH_CLASS 101 +#define POP_JUMP_IF_FALSE 102 +#define POP_JUMP_IF_NONE 103 +#define POP_JUMP_IF_NOT_NONE 104 +#define POP_JUMP_IF_TRUE 105 +#define RAISE_VARARGS 106 +#define RERAISE 107 +#define SEND 108 +#define SET_ADD 109 +#define SET_FUNCTION_ATTRIBUTE 110 +#define SET_UPDATE 111 +#define STORE_ATTR 112 +#define STORE_DEREF 113 +#define STORE_FAST 114 +#define STORE_FAST_LOAD_FAST 115 +#define STORE_FAST_STORE_FAST 116 +#define STORE_GLOBAL 117 +#define STORE_NAME 118 +#define SWAP 119 +#define UNPACK_EX 120 +#define UNPACK_SEQUENCE 121 +#define YIELD_VALUE 122 #define RESUME 128 #define BINARY_OP_ADD_FLOAT 129 #define BINARY_OP_ADD_INT 130 @@ -251,7 +253,7 @@ extern "C" { #define SETUP_WITH 265 #define STORE_FAST_MAYBE_NULL 266 -#define HAVE_ARGUMENT 43 +#define HAVE_ARGUMENT 45 #define MIN_SPECIALIZED_OPCODE 129 #define MIN_INSTRUMENTED_OPCODE 233 diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index 8f14d81a43ee75..450ae3c1ede31f 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -235,110 +235,112 @@ 'FORMAT_WITH_SPEC': 13, 'GET_AITER': 14, 'GET_ANEXT': 15, - 'GET_ITER': 16, - 'GET_LEN': 18, - 'GET_YIELD_FROM_ITER': 19, - 'INTERPRETER_EXIT': 20, - 'LOAD_BUILD_CLASS': 21, - 'LOAD_LOCALS': 22, - 'MAKE_FUNCTION': 23, - 'MATCH_KEYS': 24, - 'MATCH_MAPPING': 25, - 'MATCH_SEQUENCE': 26, - 'NOP': 27, - 'NOT_TAKEN': 28, - 'POP_EXCEPT': 29, - 'POP_ITER': 30, - 'POP_TOP': 31, - 'PUSH_EXC_INFO': 32, - 'PUSH_NULL': 33, - 'RETURN_GENERATOR': 34, - 'RETURN_VALUE': 35, - 'SETUP_ANNOTATIONS': 36, - 'STORE_SLICE': 37, - 'STORE_SUBSCR': 38, - 'TO_BOOL': 39, - 'UNARY_INVERT': 40, - 'UNARY_NEGATIVE': 41, - 'UNARY_NOT': 42, - 'WITH_EXCEPT_START': 43, - 'BINARY_OP': 44, - 'BUILD_INTERPOLATION': 45, - 'BUILD_LIST': 46, - 'BUILD_MAP': 47, - 'BUILD_SET': 48, - 'BUILD_SLICE': 49, - 'BUILD_STRING': 50, - 'BUILD_TUPLE': 51, - 'CALL': 52, - 'CALL_INTRINSIC_1': 53, - 'CALL_INTRINSIC_2': 54, - 'CALL_KW': 55, - 'COMPARE_OP': 56, - 'CONTAINS_OP': 57, - 'CONVERT_VALUE': 58, - 'COPY': 59, - 'COPY_FREE_VARS': 60, - 'DELETE_ATTR': 61, - 'DELETE_DEREF': 62, - 'DELETE_FAST': 63, - 'DELETE_GLOBAL': 64, - 'DELETE_NAME': 65, - 'DICT_MERGE': 66, - 'DICT_UPDATE': 67, - 'END_ASYNC_FOR': 68, - 'EXTENDED_ARG': 69, - 'FOR_ITER': 70, - 'GET_AWAITABLE': 71, - 'IMPORT_FROM': 72, - 'IMPORT_NAME': 73, - 'IS_OP': 74, - 'JUMP_BACKWARD': 75, - 'JUMP_BACKWARD_NO_INTERRUPT': 76, - 'JUMP_FORWARD': 77, - 'LIST_APPEND': 78, - 'LIST_EXTEND': 79, - 'LOAD_ATTR': 80, - 'LOAD_COMMON_CONSTANT': 81, - 'LOAD_CONST': 82, - 'LOAD_DEREF': 83, - 'LOAD_FAST': 84, - 'LOAD_FAST_AND_CLEAR': 85, - 'LOAD_FAST_BORROW': 86, - 'LOAD_FAST_BORROW_LOAD_FAST_BORROW': 87, - 'LOAD_FAST_CHECK': 88, - 'LOAD_FAST_LOAD_FAST': 89, - 'LOAD_FROM_DICT_OR_DEREF': 90, - 'LOAD_FROM_DICT_OR_GLOBALS': 91, - 'LOAD_GLOBAL': 92, - 'LOAD_NAME': 93, - 'LOAD_SMALL_INT': 94, - 'LOAD_SPECIAL': 95, - 'LOAD_SUPER_ATTR': 96, - 'MAKE_CELL': 97, - 'MAP_ADD': 98, - 'MATCH_CLASS': 99, - 'POP_JUMP_IF_FALSE': 100, - 'POP_JUMP_IF_NONE': 101, - 'POP_JUMP_IF_NOT_NONE': 102, - 'POP_JUMP_IF_TRUE': 103, - 'RAISE_VARARGS': 104, - 'RERAISE': 105, - 'SEND': 106, - 'SET_ADD': 107, - 'SET_FUNCTION_ATTRIBUTE': 108, - 'SET_UPDATE': 109, - 'STORE_ATTR': 110, - 'STORE_DEREF': 111, - 'STORE_FAST': 112, - 'STORE_FAST_LOAD_FAST': 113, - 'STORE_FAST_STORE_FAST': 114, - 'STORE_GLOBAL': 115, - 'STORE_NAME': 116, - 'SWAP': 117, - 'UNPACK_EX': 118, - 'UNPACK_SEQUENCE': 119, - 'YIELD_VALUE': 120, + 'GET_ASEND': 16, + 'GET_ASYNC_YIELD_FROM_ITER': 18, + 'GET_ITER': 19, + 'GET_LEN': 20, + 'GET_YIELD_FROM_ITER': 21, + 'INTERPRETER_EXIT': 22, + 'LOAD_BUILD_CLASS': 23, + 'LOAD_LOCALS': 24, + 'MAKE_FUNCTION': 25, + 'MATCH_KEYS': 26, + 'MATCH_MAPPING': 27, + 'MATCH_SEQUENCE': 28, + 'NOP': 29, + 'NOT_TAKEN': 30, + 'POP_EXCEPT': 31, + 'POP_ITER': 32, + 'POP_TOP': 33, + 'PUSH_EXC_INFO': 34, + 'PUSH_NULL': 35, + 'RETURN_GENERATOR': 36, + 'RETURN_VALUE': 37, + 'SETUP_ANNOTATIONS': 38, + 'STORE_SLICE': 39, + 'STORE_SUBSCR': 40, + 'TO_BOOL': 41, + 'UNARY_INVERT': 42, + 'UNARY_NEGATIVE': 43, + 'UNARY_NOT': 44, + 'WITH_EXCEPT_START': 45, + 'BINARY_OP': 46, + 'BUILD_INTERPOLATION': 47, + 'BUILD_LIST': 48, + 'BUILD_MAP': 49, + 'BUILD_SET': 50, + 'BUILD_SLICE': 51, + 'BUILD_STRING': 52, + 'BUILD_TUPLE': 53, + 'CALL': 54, + 'CALL_INTRINSIC_1': 55, + 'CALL_INTRINSIC_2': 56, + 'CALL_KW': 57, + 'COMPARE_OP': 58, + 'CONTAINS_OP': 59, + 'CONVERT_VALUE': 60, + 'COPY': 61, + 'COPY_FREE_VARS': 62, + 'DELETE_ATTR': 63, + 'DELETE_DEREF': 64, + 'DELETE_FAST': 65, + 'DELETE_GLOBAL': 66, + 'DELETE_NAME': 67, + 'DICT_MERGE': 68, + 'DICT_UPDATE': 69, + 'END_ASYNC_FOR': 70, + 'EXTENDED_ARG': 71, + 'FOR_ITER': 72, + 'GET_AWAITABLE': 73, + 'IMPORT_FROM': 74, + 'IMPORT_NAME': 75, + 'IS_OP': 76, + 'JUMP_BACKWARD': 77, + 'JUMP_BACKWARD_NO_INTERRUPT': 78, + 'JUMP_FORWARD': 79, + 'LIST_APPEND': 80, + 'LIST_EXTEND': 81, + 'LOAD_ATTR': 82, + 'LOAD_COMMON_CONSTANT': 83, + 'LOAD_CONST': 84, + 'LOAD_DEREF': 85, + 'LOAD_FAST': 86, + 'LOAD_FAST_AND_CLEAR': 87, + 'LOAD_FAST_BORROW': 88, + 'LOAD_FAST_BORROW_LOAD_FAST_BORROW': 89, + 'LOAD_FAST_CHECK': 90, + 'LOAD_FAST_LOAD_FAST': 91, + 'LOAD_FROM_DICT_OR_DEREF': 92, + 'LOAD_FROM_DICT_OR_GLOBALS': 93, + 'LOAD_GLOBAL': 94, + 'LOAD_NAME': 95, + 'LOAD_SMALL_INT': 96, + 'LOAD_SPECIAL': 97, + 'LOAD_SUPER_ATTR': 98, + 'MAKE_CELL': 99, + 'MAP_ADD': 100, + 'MATCH_CLASS': 101, + 'POP_JUMP_IF_FALSE': 102, + 'POP_JUMP_IF_NONE': 103, + 'POP_JUMP_IF_NOT_NONE': 104, + 'POP_JUMP_IF_TRUE': 105, + 'RAISE_VARARGS': 106, + 'RERAISE': 107, + 'SEND': 108, + 'SET_ADD': 109, + 'SET_FUNCTION_ATTRIBUTE': 110, + 'SET_UPDATE': 111, + 'STORE_ATTR': 112, + 'STORE_DEREF': 113, + 'STORE_FAST': 114, + 'STORE_FAST_LOAD_FAST': 115, + 'STORE_FAST_STORE_FAST': 116, + 'STORE_GLOBAL': 117, + 'STORE_NAME': 118, + 'SWAP': 119, + 'UNPACK_EX': 120, + 'UNPACK_SEQUENCE': 121, + 'YIELD_VALUE': 122, 'INSTRUMENTED_END_FOR': 233, 'INSTRUMENTED_POP_ITER': 234, 'INSTRUMENTED_END_SEND': 235, @@ -372,5 +374,5 @@ 'STORE_FAST_MAYBE_NULL': 266, } -HAVE_ARGUMENT = 43 +HAVE_ARGUMENT = 45 MIN_INSTRUMENTED_OPCODE = 233 diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index 395c429f7ef3db..5bb73d10c73d26 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -6213,6 +6213,69 @@ DISPATCH(); } + TARGET(GET_ASEND) { + #if _Py_TAIL_CALL_INTERP + int opcode = GET_ASEND; + (void)(opcode); + #endif + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(GET_ASEND); + _PyStackRef receiver; + _PyStackRef v; + _PyStackRef retval; + v = stack_pointer[-1]; + receiver = stack_pointer[-2]; + PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, + &_Py_ID(asend), + PyStackRef_AsPyObjectBorrow(v)); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (retval_o == NULL) { + JUMP_TO_LABEL(error); + } + retval = PyStackRef_FromPyObjectSteal(retval_o); + stack_pointer[-2] = retval; + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + DISPATCH(); + } + + TARGET(GET_ASYNC_YIELD_FROM_ITER) { + #if _Py_TAIL_CALL_INTERP + int opcode = GET_ASYNC_YIELD_FROM_ITER; + (void)(opcode); + #endif + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(GET_ASYNC_YIELD_FROM_ITER); + _PyStackRef iterable; + _PyStackRef aiter; + iterable = stack_pointer[-1]; + PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); + if (PyCoro_CheckExact(iterable_o)) { + aiter = iterable; + } + else { + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *aiter_o = PyObject_GetAIter(iterable_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (aiter_o == NULL) { + JUMP_TO_LABEL(error); + } + aiter = PyStackRef_FromPyObjectSteal(aiter_o); + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = iterable; + iterable = aiter; + stack_pointer[-1] = iterable; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + } + stack_pointer[-1] = aiter; + DISPATCH(); + } + TARGET(GET_AWAITABLE) { #if _Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; diff --git a/Modules/_testinternalcapi/test_targets.h b/Modules/_testinternalcapi/test_targets.h index f57c33feec2ac2..fcd8ba6c04f626 100644 --- a/Modules/_testinternalcapi/test_targets.h +++ b/Modules/_testinternalcapi/test_targets.h @@ -16,8 +16,10 @@ static void *opcode_targets_table[256] = { &&TARGET_FORMAT_WITH_SPEC, &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, - &&TARGET_GET_ITER, + &&TARGET_GET_ASEND, &&TARGET_RESERVED, + &&TARGET_GET_ASYNC_YIELD_FROM_ITER, + &&TARGET_GET_ITER, &&TARGET_GET_LEN, &&TARGET_GET_YIELD_FROM_ITER, &&TARGET_INTERPRETER_EXIT, @@ -126,8 +128,6 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -380,8 +380,8 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_TRACE_RECORD, + &&TARGET_TRACE_RECORD, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -623,6 +623,8 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS) static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASEND(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS); @@ -864,6 +866,8 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE, [GET_AITER] = _TAIL_CALL_GET_AITER, [GET_ANEXT] = _TAIL_CALL_GET_ANEXT, + [GET_ASEND] = _TAIL_CALL_GET_ASEND, + [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE, [GET_ITER] = _TAIL_CALL_GET_ITER, [GET_LEN] = _TAIL_CALL_GET_LEN, @@ -1000,8 +1004,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, - [121] = _TAIL_CALL_UNKNOWN_OPCODE, - [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1122,6 +1124,8 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD, [GET_AITER] = _TAIL_CALL_TRACE_RECORD, [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD, + [GET_ASEND] = _TAIL_CALL_TRACE_RECORD, + [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD, [GET_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_LEN] = _TAIL_CALL_TRACE_RECORD, @@ -1258,8 +1262,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, - [121] = _TAIL_CALL_UNKNOWN_OPCODE, - [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Objects/genobject.c b/Objects/genobject.c index 4cb7437cbf87b1..557902d86638d7 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2635,7 +2635,6 @@ static void async_gen_yield_from_dealloc(PyObject *op) { assert(op != NULL); - _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); _PyObject_GC_UNTRACK(op); (void)async_gen_yield_from_clear(op); PyObject_GC_Del(op); @@ -2712,4 +2711,4 @@ _PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterator) yield_from->agyf_iterator = Py_NewRef(iterator); _PyObject_GC_TRACK((PyObject *)yield_from); return (PyObject *)yield_from; -} \ No newline at end of file +} diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index f808544045e153..28710c111c9d34 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -1,19 +1,19 @@ // Auto-generated by Programs/freeze_test_frozenmain.py unsigned char M_test_frozenmain[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,0,0,0,0,243,184,0,0,0,128,0,94,0,82,1, - 73,0,116,0,94,0,82,1,73,4,116,1,93,2,33,0, - 82,2,52,1,0,0,0,0,0,0,31,0,93,2,33,0, - 82,3,93,0,80,6,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,52,2,0,0,0,0,0,0, - 31,0,93,1,80,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,33,0,52,0,0,0,0,0, - 0,0,82,4,44,26,0,0,0,0,0,0,0,0,0,0, - 116,5,82,7,16,0,70,24,0,0,116,6,93,2,33,0, - 82,5,93,6,12,0,82,6,93,5,93,6,44,26,0,0, - 0,0,0,0,0,0,0,0,12,0,50,4,52,1,0,0, - 0,0,0,0,31,0,75,26,0,0,9,0,30,0,82,1, - 35,0,41,8,233,0,0,0,0,78,122,18,70,114,111,122, + 0,0,0,0,0,243,184,0,0,0,128,0,96,0,84,1, + 75,0,118,0,96,0,84,1,75,4,118,1,95,2,35,0, + 84,2,54,1,0,0,0,0,0,0,33,0,95,2,35,0, + 84,3,95,0,82,6,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,54,2,0,0,0,0,0,0, + 33,0,95,1,82,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,35,0,54,0,0,0,0,0, + 0,0,84,4,46,26,0,0,0,0,0,0,0,0,0,0, + 118,5,84,7,19,0,72,24,0,0,118,6,95,2,35,0, + 84,5,95,6,12,0,84,6,95,5,95,6,46,26,0,0, + 0,0,0,0,0,0,0,0,12,0,52,4,54,1,0,0, + 0,0,0,0,33,0,77,26,0,0,9,0,32,0,84,1, + 37,0,41,8,233,0,0,0,0,78,122,18,70,114,111,122, 101,110,32,72,101,108,108,111,32,87,111,114,108,100,122,8, 115,121,115,46,97,114,103,118,218,6,99,111,110,102,105,103, 122,7,99,111,110,102,105,103,32,122,2,58,32,41,5,218, diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 41323c4f54d9ed..3ef6926d718722 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1424,6 +1424,18 @@ dummy_func( retval = PyStackRef_FromPyObjectSteal(retval_o); } + inst(GET_ASEND, (receiver, v -- retval)) { + PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); + PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, + &_Py_ID(asend), + PyStackRef_AsPyObjectBorrow(v)); + INPUTS_DEAD(); + if (retval_o == NULL) { + ERROR_NO_POP(); + } + retval = PyStackRef_FromPyObjectSteal(retval_o); + } + macro(SEND) = _SPECIALIZE_SEND + _SEND; op(_SEND_GEN_FRAME, (receiver, v -- receiver, gen_frame)) { @@ -3293,6 +3305,24 @@ dummy_func( } } + inst(GET_ASYNC_YIELD_FROM_ITER, (iterable -- aiter)) { + /* before: [obj]; after [aiter(obj)] */ + PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); + if (PyCoro_CheckExact(iterable_o)) { + aiter = iterable; + DEAD(iterable); + } + else { + /* `iterable` is not a generator. */ + PyObject *aiter_o = PyObject_GetAIter(iterable_o); + if (aiter_o == NULL) { + ERROR_NO_POP(); + } + aiter = PyStackRef_FromPyObjectSteal(aiter_o); + DECREF_INPUTS(); + } + } + // Most members of this family are "secretly" super-instructions. // When the loop is exhausted, they jump, and the jump target is // always END_FOR, which pops two values off the stack. diff --git a/Python/codegen.c b/Python/codegen.c index 0a288972a3f2d6..fb9ce17acfecb9 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -510,6 +510,39 @@ codegen_add_yield_from(compiler *c, location loc, int await) return SUCCESS; } +static int +codegen_async_yield_from(compiler *c, location loc, expr_ty e) +{ + NEW_JUMP_TARGET_LABEL(c, send); + NEW_JUMP_TARGET_LABEL(c, fail); + + VISIT(c, expr, e->v.AsyncYieldFrom.value); + ADDOP(c, loc, GET_ASYNC_YIELD_FROM_ITER); + + USE_LABEL(c, send); + // Virtual try/except for the StopIteration; see above. + //ADDOP_JUMP(c, loc, SETUP_FINALLY, fail); + + // Get the __asend__() and await it + ADDOP_LOAD_CONST(c, loc, Py_None); + ADDOP(c, loc, GET_ASEND); + ADDOP_LOAD_CONST(c, loc, Py_None); + ADD_YIELD_FROM(c, loc, 1); + + // Yield the value + ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP); + ADDOP_I(c, loc, YIELD_VALUE, 0); + ADDOP_I(c, loc, RESUME, RESUME_AFTER_YIELD); + + // Repeat the loop + //ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); + + //USE_LABEL(c, fail); + //ADDOP(c, loc, CLEANUP_THROW); + + return SUCCESS; +} + static int codegen_pop_except_and_reraise(compiler *c, location loc) { @@ -5418,10 +5451,7 @@ codegen_visit_expr(compiler *c, expr_ty e) return _PyCompile_Error(c, loc, "'async yield from' outside function"); } - VISIT(c, expr, e->v.AsyncYieldFrom.value); - ADDOP(c, loc, GET_YIELD_FROM_ITER); - ADDOP_LOAD_CONST(c, loc, Py_None); - ADD_YIELD_FROM(c, loc, 0); + return codegen_async_yield_from(c, loc, e); break; case Await_kind: VISIT(c, expr, e->v.Await.value); diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 4a67ede8a02265..927c4643e2f42e 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -6863,6 +6863,41 @@ /* _SEND is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ + case _GET_ASEND_r21: { + CHECK_CURRENT_CACHED_VALUES(2); + assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + _PyStackRef v; + _PyStackRef receiver; + _PyStackRef retval; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + v = _stack_item_1; + receiver = _stack_item_0; + PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); + stack_pointer[0] = receiver; + stack_pointer[1] = v; + stack_pointer += 2; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, + &_Py_ID(asend), + PyStackRef_AsPyObjectBorrow(v)); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (retval_o == NULL) { + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + retval = PyStackRef_FromPyObjectSteal(retval_o); + _tos_cache0 = retval; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; + SET_CURRENT_CACHED_VALUES(1); + stack_pointer += -2; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + break; + } + case _SEND_GEN_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); @@ -11101,6 +11136,45 @@ break; } + case _GET_ASYNC_YIELD_FROM_ITER_r11: { + CHECK_CURRENT_CACHED_VALUES(1); + assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + _PyStackRef iterable; + _PyStackRef aiter; + _PyStackRef _stack_item_0 = _tos_cache0; + iterable = _stack_item_0; + PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); + if (PyCoro_CheckExact(iterable_o)) { + aiter = iterable; + } + else { + stack_pointer[0] = iterable; + stack_pointer += 1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *aiter_o = PyObject_GetAIter(iterable_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (aiter_o == NULL) { + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + aiter = PyStackRef_FromPyObjectSteal(aiter_o); + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = iterable; + iterable = aiter; + stack_pointer[-1] = iterable; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + } + _tos_cache0 = aiter; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; + SET_CURRENT_CACHED_VALUES(1); + assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + break; + } + /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ case _FOR_ITER_TIER_TWO_r23: { diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 12362943465e3d..9a8de17e06007f 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -6213,6 +6213,69 @@ DISPATCH(); } + TARGET(GET_ASEND) { + #if _Py_TAIL_CALL_INTERP + int opcode = GET_ASEND; + (void)(opcode); + #endif + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(GET_ASEND); + _PyStackRef receiver; + _PyStackRef v; + _PyStackRef retval; + v = stack_pointer[-1]; + receiver = stack_pointer[-2]; + PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, + &_Py_ID(asend), + PyStackRef_AsPyObjectBorrow(v)); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (retval_o == NULL) { + JUMP_TO_LABEL(error); + } + retval = PyStackRef_FromPyObjectSteal(retval_o); + stack_pointer[-2] = retval; + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + DISPATCH(); + } + + TARGET(GET_ASYNC_YIELD_FROM_ITER) { + #if _Py_TAIL_CALL_INTERP + int opcode = GET_ASYNC_YIELD_FROM_ITER; + (void)(opcode); + #endif + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(GET_ASYNC_YIELD_FROM_ITER); + _PyStackRef iterable; + _PyStackRef aiter; + iterable = stack_pointer[-1]; + PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); + if (PyCoro_CheckExact(iterable_o)) { + aiter = iterable; + } + else { + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *aiter_o = PyObject_GetAIter(iterable_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (aiter_o == NULL) { + JUMP_TO_LABEL(error); + } + aiter = PyStackRef_FromPyObjectSteal(aiter_o); + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = iterable; + iterable = aiter; + stack_pointer[-1] = iterable; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + } + stack_pointer[-1] = aiter; + DISPATCH(); + } + TARGET(GET_AWAITABLE) { #if _Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index f57c33feec2ac2..fcd8ba6c04f626 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -16,8 +16,10 @@ static void *opcode_targets_table[256] = { &&TARGET_FORMAT_WITH_SPEC, &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, - &&TARGET_GET_ITER, + &&TARGET_GET_ASEND, &&TARGET_RESERVED, + &&TARGET_GET_ASYNC_YIELD_FROM_ITER, + &&TARGET_GET_ITER, &&TARGET_GET_LEN, &&TARGET_GET_YIELD_FROM_ITER, &&TARGET_INTERPRETER_EXIT, @@ -126,8 +128,6 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -380,8 +380,8 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_TRACE_RECORD, + &&TARGET_TRACE_RECORD, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -623,6 +623,8 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS) static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASEND(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS); @@ -864,6 +866,8 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE, [GET_AITER] = _TAIL_CALL_GET_AITER, [GET_ANEXT] = _TAIL_CALL_GET_ANEXT, + [GET_ASEND] = _TAIL_CALL_GET_ASEND, + [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE, [GET_ITER] = _TAIL_CALL_GET_ITER, [GET_LEN] = _TAIL_CALL_GET_LEN, @@ -1000,8 +1004,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, - [121] = _TAIL_CALL_UNKNOWN_OPCODE, - [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1122,6 +1124,8 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD, [GET_AITER] = _TAIL_CALL_TRACE_RECORD, [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD, + [GET_ASEND] = _TAIL_CALL_TRACE_RECORD, + [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD, [GET_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_LEN] = _TAIL_CALL_TRACE_RECORD, @@ -1258,8 +1262,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, - [121] = _TAIL_CALL_UNKNOWN_OPCODE, - [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index f2616eddbb758a..e0b60bdbc2c07f 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -1322,6 +1322,16 @@ /* _SEND is not a viable micro-op for tier 2 */ + case _GET_ASEND: { + JitOptRef retval; + retval = sym_new_not_null(ctx); + CHECK_STACK_BOUNDS(-1); + stack_pointer[-2] = retval; + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + break; + } + case _SEND_GEN_FRAME: { JitOptRef v; JitOptRef receiver; @@ -2628,6 +2638,13 @@ break; } + case _GET_ASYNC_YIELD_FROM_ITER: { + JitOptRef aiter; + aiter = sym_new_not_null(ctx); + stack_pointer[-1] = aiter; + break; + } + /* _FOR_ITER is not a viable micro-op for tier 2 */ case _FOR_ITER_TIER_TWO: { From a6f9c5f3ec980486cf5919ca25ac8a4ae7a5aba2 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 01:02:29 -0500 Subject: [PATCH 05/48] Yay it mostly works. --- Python/codegen.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Python/codegen.c b/Python/codegen.c index fb9ce17acfecb9..dadabd9bce262a 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -520,25 +520,26 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP(c, loc, GET_ASYNC_YIELD_FROM_ITER); USE_LABEL(c, send); + ADDOP_JUMP(c, loc, SETUP_FINALLY, fail); // Virtual try/except for the StopIteration; see above. - //ADDOP_JUMP(c, loc, SETUP_FINALLY, fail); - // Get the __asend__() and await it + // Get the __asend__() and await it. We preserve the iterator + // on the top of the stack by copying it. + ADDOP_I(c, loc, COPY, 1); ADDOP_LOAD_CONST(c, loc, Py_None); ADDOP(c, loc, GET_ASEND); ADDOP_LOAD_CONST(c, loc, Py_None); ADD_YIELD_FROM(c, loc, 1); - // Yield the value ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP); - ADDOP_I(c, loc, YIELD_VALUE, 0); - ADDOP_I(c, loc, RESUME, RESUME_AFTER_YIELD); + ADDOP_I(c, loc, YIELD_VALUE, 1); - // Repeat the loop - //ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); + ADDOP(c, NO_LOCATION, POP_BLOCK); + ADDOP(c, loc, POP_TOP); + ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); - //USE_LABEL(c, fail); - //ADDOP(c, loc, CLEANUP_THROW); + USE_LABEL(c, fail); + ADDOP(c, loc, POP_TOP); return SUCCESS; } From c37cb050825206640041985416ca24da7258afd3 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 01:19:31 -0500 Subject: [PATCH 06/48] Fix exception handling. --- Include/internal/pycore_opcode_metadata.h | 9 +- Include/internal/pycore_uop_ids.h | 1488 +++++++++++---------- Include/opcode_ids.h | 233 ++-- Lib/_opcode_metadata.py | 233 ++-- Modules/_testinternalcapi/test_cases.c.h | 29 + Modules/_testinternalcapi/test_targets.h | 11 +- Programs/test_frozenmain.h | 26 +- Python/bytecodes.c | 14 + Python/codegen.c | 8 +- Python/executor_cases.c.h | 2 + Python/generated_cases.c.h | 29 + Python/opcode_targets.h | 11 +- Python/optimizer_cases.c.h | 2 + 13 files changed, 1091 insertions(+), 1004 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 2685f25494c80b..1204fcf3bbba5d 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -156,6 +156,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) { return 2; case CHECK_EXC_MATCH: return 2; + case CLEANUP_ASYNC_THROW: + return 1; case CLEANUP_THROW: return 3; case COMPARE_OP: @@ -651,6 +653,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { return 2; case CHECK_EXC_MATCH: return 2; + case CLEANUP_ASYNC_THROW: + return 0; case CLEANUP_THROW: return 2; case COMPARE_OP: @@ -1159,6 +1163,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, [CHECK_EG_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CHECK_EXC_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [CLEANUP_ASYNC_THROW] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [CLEANUP_THROW] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [COMPARE_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [COMPARE_OP_FLOAT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG }, @@ -1611,6 +1616,7 @@ const char *_PyOpcode_OpName[267] = { [CALL_TYPE_1] = "CALL_TYPE_1", [CHECK_EG_MATCH] = "CHECK_EG_MATCH", [CHECK_EXC_MATCH] = "CHECK_EXC_MATCH", + [CLEANUP_ASYNC_THROW] = "CLEANUP_ASYNC_THROW", [CLEANUP_THROW] = "CLEANUP_THROW", [COMPARE_OP] = "COMPARE_OP", [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT", @@ -1825,7 +1831,6 @@ const uint8_t _PyOpcode_Caches[256] = { PyAPI_DATA(const uint8_t) _PyOpcode_Deopt[256]; #ifdef NEED_OPCODE_METADATA const uint8_t _PyOpcode_Deopt[256] = { - [123] = 123, [124] = 124, [125] = 125, [126] = 126, @@ -1909,6 +1914,7 @@ const uint8_t _PyOpcode_Deopt[256] = { [CALL_TYPE_1] = CALL, [CHECK_EG_MATCH] = CHECK_EG_MATCH, [CHECK_EXC_MATCH] = CHECK_EXC_MATCH, + [CLEANUP_ASYNC_THROW] = CLEANUP_ASYNC_THROW, [CLEANUP_THROW] = CLEANUP_THROW, [COMPARE_OP] = COMPARE_OP, [COMPARE_OP_FLOAT] = COMPARE_OP, @@ -2086,7 +2092,6 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ - case 123: \ case 124: \ case 125: \ case 126: \ diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 693cf6688f19cf..c3ae9fd3ffa031 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -82,6 +82,7 @@ extern "C" { #define _CHECK_STACK_SPACE 358 #define _CHECK_STACK_SPACE_OPERAND 359 #define _CHECK_VALIDITY 360 +#define _CLEANUP_ASYNC_THROW CLEANUP_ASYNC_THROW #define _COLD_DYNAMIC_EXIT 361 #define _COLD_EXIT 362 #define _COMPARE_OP 363 @@ -518,749 +519,750 @@ extern "C" { #define _CHECK_VALIDITY_r11 713 #define _CHECK_VALIDITY_r22 714 #define _CHECK_VALIDITY_r33 715 -#define _COLD_DYNAMIC_EXIT_r00 716 -#define _COLD_EXIT_r00 717 -#define _COMPARE_OP_r21 718 -#define _COMPARE_OP_FLOAT_r03 719 -#define _COMPARE_OP_FLOAT_r13 720 -#define _COMPARE_OP_FLOAT_r23 721 -#define _COMPARE_OP_INT_r23 722 -#define _COMPARE_OP_STR_r23 723 -#define _CONTAINS_OP_r23 724 -#define _CONTAINS_OP_DICT_r23 725 -#define _CONTAINS_OP_SET_r23 726 -#define _CONVERT_VALUE_r11 727 -#define _COPY_r01 728 -#define _COPY_1_r02 729 -#define _COPY_1_r12 730 -#define _COPY_1_r23 731 -#define _COPY_2_r03 732 -#define _COPY_2_r13 733 -#define _COPY_2_r23 734 -#define _COPY_3_r03 735 -#define _COPY_3_r13 736 -#define _COPY_3_r23 737 -#define _COPY_3_r33 738 -#define _COPY_FREE_VARS_r00 739 -#define _COPY_FREE_VARS_r11 740 -#define _COPY_FREE_VARS_r22 741 -#define _COPY_FREE_VARS_r33 742 -#define _CREATE_INIT_FRAME_r01 743 -#define _DELETE_ATTR_r10 744 -#define _DELETE_DEREF_r00 745 -#define _DELETE_FAST_r00 746 -#define _DELETE_GLOBAL_r00 747 -#define _DELETE_NAME_r00 748 -#define _DELETE_SUBSCR_r20 749 -#define _DEOPT_r00 750 -#define _DEOPT_r10 751 -#define _DEOPT_r20 752 -#define _DEOPT_r30 753 -#define _DICT_MERGE_r10 754 -#define _DICT_UPDATE_r10 755 -#define _DO_CALL_r01 756 -#define _DO_CALL_FUNCTION_EX_r31 757 -#define _DO_CALL_KW_r11 758 -#define _DYNAMIC_EXIT_r00 759 -#define _DYNAMIC_EXIT_r10 760 -#define _DYNAMIC_EXIT_r20 761 -#define _DYNAMIC_EXIT_r30 762 -#define _END_FOR_r10 763 -#define _END_SEND_r21 764 -#define _ERROR_POP_N_r00 765 -#define _EXIT_INIT_CHECK_r10 766 -#define _EXIT_TRACE_r00 767 -#define _EXIT_TRACE_r10 768 -#define _EXIT_TRACE_r20 769 -#define _EXIT_TRACE_r30 770 -#define _EXPAND_METHOD_r00 771 -#define _EXPAND_METHOD_KW_r11 772 -#define _FATAL_ERROR_r00 773 -#define _FATAL_ERROR_r11 774 -#define _FATAL_ERROR_r22 775 -#define _FATAL_ERROR_r33 776 -#define _FORMAT_SIMPLE_r11 777 -#define _FORMAT_WITH_SPEC_r21 778 -#define _FOR_ITER_r23 779 -#define _FOR_ITER_GEN_FRAME_r03 780 -#define _FOR_ITER_GEN_FRAME_r13 781 -#define _FOR_ITER_GEN_FRAME_r23 782 -#define _FOR_ITER_TIER_TWO_r23 783 -#define _GET_AITER_r11 784 -#define _GET_ANEXT_r12 785 -#define _GET_ASEND_r21 786 -#define _GET_ASYNC_YIELD_FROM_ITER_r11 787 -#define _GET_AWAITABLE_r11 788 -#define _GET_ITER_r12 789 -#define _GET_LEN_r12 790 -#define _GET_YIELD_FROM_ITER_r11 791 -#define _GUARD_BINARY_OP_EXTEND_r22 792 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 793 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 794 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 795 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 796 -#define _GUARD_BIT_IS_SET_POP_r00 797 -#define _GUARD_BIT_IS_SET_POP_r10 798 -#define _GUARD_BIT_IS_SET_POP_r21 799 -#define _GUARD_BIT_IS_SET_POP_r32 800 -#define _GUARD_BIT_IS_SET_POP_4_r00 801 -#define _GUARD_BIT_IS_SET_POP_4_r10 802 -#define _GUARD_BIT_IS_SET_POP_4_r21 803 -#define _GUARD_BIT_IS_SET_POP_4_r32 804 -#define _GUARD_BIT_IS_SET_POP_5_r00 805 -#define _GUARD_BIT_IS_SET_POP_5_r10 806 -#define _GUARD_BIT_IS_SET_POP_5_r21 807 -#define _GUARD_BIT_IS_SET_POP_5_r32 808 -#define _GUARD_BIT_IS_SET_POP_6_r00 809 -#define _GUARD_BIT_IS_SET_POP_6_r10 810 -#define _GUARD_BIT_IS_SET_POP_6_r21 811 -#define _GUARD_BIT_IS_SET_POP_6_r32 812 -#define _GUARD_BIT_IS_SET_POP_7_r00 813 -#define _GUARD_BIT_IS_SET_POP_7_r10 814 -#define _GUARD_BIT_IS_SET_POP_7_r21 815 -#define _GUARD_BIT_IS_SET_POP_7_r32 816 -#define _GUARD_BIT_IS_UNSET_POP_r00 817 -#define _GUARD_BIT_IS_UNSET_POP_r10 818 -#define _GUARD_BIT_IS_UNSET_POP_r21 819 -#define _GUARD_BIT_IS_UNSET_POP_r32 820 -#define _GUARD_BIT_IS_UNSET_POP_4_r00 821 -#define _GUARD_BIT_IS_UNSET_POP_4_r10 822 -#define _GUARD_BIT_IS_UNSET_POP_4_r21 823 -#define _GUARD_BIT_IS_UNSET_POP_4_r32 824 -#define _GUARD_BIT_IS_UNSET_POP_5_r00 825 -#define _GUARD_BIT_IS_UNSET_POP_5_r10 826 -#define _GUARD_BIT_IS_UNSET_POP_5_r21 827 -#define _GUARD_BIT_IS_UNSET_POP_5_r32 828 -#define _GUARD_BIT_IS_UNSET_POP_6_r00 829 -#define _GUARD_BIT_IS_UNSET_POP_6_r10 830 -#define _GUARD_BIT_IS_UNSET_POP_6_r21 831 -#define _GUARD_BIT_IS_UNSET_POP_6_r32 832 -#define _GUARD_BIT_IS_UNSET_POP_7_r00 833 -#define _GUARD_BIT_IS_UNSET_POP_7_r10 834 -#define _GUARD_BIT_IS_UNSET_POP_7_r21 835 -#define _GUARD_BIT_IS_UNSET_POP_7_r32 836 -#define _GUARD_CALLABLE_ISINSTANCE_r03 837 -#define _GUARD_CALLABLE_ISINSTANCE_r13 838 -#define _GUARD_CALLABLE_ISINSTANCE_r23 839 -#define _GUARD_CALLABLE_ISINSTANCE_r33 840 -#define _GUARD_CALLABLE_LEN_r03 841 -#define _GUARD_CALLABLE_LEN_r13 842 -#define _GUARD_CALLABLE_LEN_r23 843 -#define _GUARD_CALLABLE_LEN_r33 844 -#define _GUARD_CALLABLE_LIST_APPEND_r03 845 -#define _GUARD_CALLABLE_LIST_APPEND_r13 846 -#define _GUARD_CALLABLE_LIST_APPEND_r23 847 -#define _GUARD_CALLABLE_LIST_APPEND_r33 848 -#define _GUARD_CALLABLE_STR_1_r03 849 -#define _GUARD_CALLABLE_STR_1_r13 850 -#define _GUARD_CALLABLE_STR_1_r23 851 -#define _GUARD_CALLABLE_STR_1_r33 852 -#define _GUARD_CALLABLE_TUPLE_1_r03 853 -#define _GUARD_CALLABLE_TUPLE_1_r13 854 -#define _GUARD_CALLABLE_TUPLE_1_r23 855 -#define _GUARD_CALLABLE_TUPLE_1_r33 856 -#define _GUARD_CALLABLE_TYPE_1_r03 857 -#define _GUARD_CALLABLE_TYPE_1_r13 858 -#define _GUARD_CALLABLE_TYPE_1_r23 859 -#define _GUARD_CALLABLE_TYPE_1_r33 860 -#define _GUARD_CODE_VERSION_r00 861 -#define _GUARD_CODE_VERSION_r11 862 -#define _GUARD_CODE_VERSION_r22 863 -#define _GUARD_CODE_VERSION_r33 864 -#define _GUARD_DORV_NO_DICT_r01 865 -#define _GUARD_DORV_NO_DICT_r11 866 -#define _GUARD_DORV_NO_DICT_r22 867 -#define _GUARD_DORV_NO_DICT_r33 868 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 869 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 870 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 871 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 872 -#define _GUARD_GLOBALS_VERSION_r00 873 -#define _GUARD_GLOBALS_VERSION_r11 874 -#define _GUARD_GLOBALS_VERSION_r22 875 -#define _GUARD_GLOBALS_VERSION_r33 876 -#define _GUARD_IP_RETURN_GENERATOR_r00 877 -#define _GUARD_IP_RETURN_GENERATOR_r11 878 -#define _GUARD_IP_RETURN_GENERATOR_r22 879 -#define _GUARD_IP_RETURN_GENERATOR_r33 880 -#define _GUARD_IP_RETURN_VALUE_r00 881 -#define _GUARD_IP_RETURN_VALUE_r11 882 -#define _GUARD_IP_RETURN_VALUE_r22 883 -#define _GUARD_IP_RETURN_VALUE_r33 884 -#define _GUARD_IP_YIELD_VALUE_r00 885 -#define _GUARD_IP_YIELD_VALUE_r11 886 -#define _GUARD_IP_YIELD_VALUE_r22 887 -#define _GUARD_IP_YIELD_VALUE_r33 888 -#define _GUARD_IP__PUSH_FRAME_r00 889 -#define _GUARD_IP__PUSH_FRAME_r11 890 -#define _GUARD_IP__PUSH_FRAME_r22 891 -#define _GUARD_IP__PUSH_FRAME_r33 892 -#define _GUARD_IS_FALSE_POP_r00 893 -#define _GUARD_IS_FALSE_POP_r10 894 -#define _GUARD_IS_FALSE_POP_r21 895 -#define _GUARD_IS_FALSE_POP_r32 896 -#define _GUARD_IS_NONE_POP_r00 897 -#define _GUARD_IS_NONE_POP_r10 898 -#define _GUARD_IS_NONE_POP_r21 899 -#define _GUARD_IS_NONE_POP_r32 900 -#define _GUARD_IS_NOT_NONE_POP_r10 901 -#define _GUARD_IS_TRUE_POP_r00 902 -#define _GUARD_IS_TRUE_POP_r10 903 -#define _GUARD_IS_TRUE_POP_r21 904 -#define _GUARD_IS_TRUE_POP_r32 905 -#define _GUARD_KEYS_VERSION_r01 906 -#define _GUARD_KEYS_VERSION_r11 907 -#define _GUARD_KEYS_VERSION_r22 908 -#define _GUARD_KEYS_VERSION_r33 909 -#define _GUARD_NOS_ANY_DICT_r02 910 -#define _GUARD_NOS_ANY_DICT_r12 911 -#define _GUARD_NOS_ANY_DICT_r22 912 -#define _GUARD_NOS_ANY_DICT_r33 913 -#define _GUARD_NOS_COMPACT_ASCII_r02 914 -#define _GUARD_NOS_COMPACT_ASCII_r12 915 -#define _GUARD_NOS_COMPACT_ASCII_r22 916 -#define _GUARD_NOS_COMPACT_ASCII_r33 917 -#define _GUARD_NOS_DICT_r02 918 -#define _GUARD_NOS_DICT_r12 919 -#define _GUARD_NOS_DICT_r22 920 -#define _GUARD_NOS_DICT_r33 921 -#define _GUARD_NOS_FLOAT_r02 922 -#define _GUARD_NOS_FLOAT_r12 923 -#define _GUARD_NOS_FLOAT_r22 924 -#define _GUARD_NOS_FLOAT_r33 925 -#define _GUARD_NOS_INT_r02 926 -#define _GUARD_NOS_INT_r12 927 -#define _GUARD_NOS_INT_r22 928 -#define _GUARD_NOS_INT_r33 929 -#define _GUARD_NOS_LIST_r02 930 -#define _GUARD_NOS_LIST_r12 931 -#define _GUARD_NOS_LIST_r22 932 -#define _GUARD_NOS_LIST_r33 933 -#define _GUARD_NOS_NOT_NULL_r02 934 -#define _GUARD_NOS_NOT_NULL_r12 935 -#define _GUARD_NOS_NOT_NULL_r22 936 -#define _GUARD_NOS_NOT_NULL_r33 937 -#define _GUARD_NOS_NULL_r02 938 -#define _GUARD_NOS_NULL_r12 939 -#define _GUARD_NOS_NULL_r22 940 -#define _GUARD_NOS_NULL_r33 941 -#define _GUARD_NOS_OVERFLOWED_r02 942 -#define _GUARD_NOS_OVERFLOWED_r12 943 -#define _GUARD_NOS_OVERFLOWED_r22 944 -#define _GUARD_NOS_OVERFLOWED_r33 945 -#define _GUARD_NOS_TUPLE_r02 946 -#define _GUARD_NOS_TUPLE_r12 947 -#define _GUARD_NOS_TUPLE_r22 948 -#define _GUARD_NOS_TUPLE_r33 949 -#define _GUARD_NOS_UNICODE_r02 950 -#define _GUARD_NOS_UNICODE_r12 951 -#define _GUARD_NOS_UNICODE_r22 952 -#define _GUARD_NOS_UNICODE_r33 953 -#define _GUARD_NOT_EXHAUSTED_LIST_r02 954 -#define _GUARD_NOT_EXHAUSTED_LIST_r12 955 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 956 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 957 -#define _GUARD_NOT_EXHAUSTED_RANGE_r02 958 -#define _GUARD_NOT_EXHAUSTED_RANGE_r12 959 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 960 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 961 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 962 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 963 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 964 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 965 -#define _GUARD_THIRD_NULL_r03 966 -#define _GUARD_THIRD_NULL_r13 967 -#define _GUARD_THIRD_NULL_r23 968 -#define _GUARD_THIRD_NULL_r33 969 -#define _GUARD_TOS_ANY_DICT_r01 970 -#define _GUARD_TOS_ANY_DICT_r11 971 -#define _GUARD_TOS_ANY_DICT_r22 972 -#define _GUARD_TOS_ANY_DICT_r33 973 -#define _GUARD_TOS_ANY_SET_r01 974 -#define _GUARD_TOS_ANY_SET_r11 975 -#define _GUARD_TOS_ANY_SET_r22 976 -#define _GUARD_TOS_ANY_SET_r33 977 -#define _GUARD_TOS_FLOAT_r01 978 -#define _GUARD_TOS_FLOAT_r11 979 -#define _GUARD_TOS_FLOAT_r22 980 -#define _GUARD_TOS_FLOAT_r33 981 -#define _GUARD_TOS_INT_r01 982 -#define _GUARD_TOS_INT_r11 983 -#define _GUARD_TOS_INT_r22 984 -#define _GUARD_TOS_INT_r33 985 -#define _GUARD_TOS_LIST_r01 986 -#define _GUARD_TOS_LIST_r11 987 -#define _GUARD_TOS_LIST_r22 988 -#define _GUARD_TOS_LIST_r33 989 -#define _GUARD_TOS_OVERFLOWED_r01 990 -#define _GUARD_TOS_OVERFLOWED_r11 991 -#define _GUARD_TOS_OVERFLOWED_r22 992 -#define _GUARD_TOS_OVERFLOWED_r33 993 -#define _GUARD_TOS_SLICE_r01 994 -#define _GUARD_TOS_SLICE_r11 995 -#define _GUARD_TOS_SLICE_r22 996 -#define _GUARD_TOS_SLICE_r33 997 -#define _GUARD_TOS_TUPLE_r01 998 -#define _GUARD_TOS_TUPLE_r11 999 -#define _GUARD_TOS_TUPLE_r22 1000 -#define _GUARD_TOS_TUPLE_r33 1001 -#define _GUARD_TOS_UNICODE_r01 1002 -#define _GUARD_TOS_UNICODE_r11 1003 -#define _GUARD_TOS_UNICODE_r22 1004 -#define _GUARD_TOS_UNICODE_r33 1005 -#define _GUARD_TYPE_VERSION_r01 1006 -#define _GUARD_TYPE_VERSION_r11 1007 -#define _GUARD_TYPE_VERSION_r22 1008 -#define _GUARD_TYPE_VERSION_r33 1009 -#define _GUARD_TYPE_VERSION_AND_LOCK_r01 1010 -#define _GUARD_TYPE_VERSION_AND_LOCK_r11 1011 -#define _GUARD_TYPE_VERSION_AND_LOCK_r22 1012 -#define _GUARD_TYPE_VERSION_AND_LOCK_r33 1013 -#define _HANDLE_PENDING_AND_DEOPT_r00 1014 -#define _HANDLE_PENDING_AND_DEOPT_r10 1015 -#define _HANDLE_PENDING_AND_DEOPT_r20 1016 -#define _HANDLE_PENDING_AND_DEOPT_r30 1017 -#define _IMPORT_FROM_r12 1018 -#define _IMPORT_NAME_r21 1019 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1020 -#define _INIT_CALL_PY_EXACT_ARGS_r01 1021 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1022 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1023 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1024 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1025 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1026 -#define _INSERT_1_LOAD_CONST_INLINE_r02 1027 -#define _INSERT_1_LOAD_CONST_INLINE_r12 1028 -#define _INSERT_1_LOAD_CONST_INLINE_r23 1029 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 1030 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 1031 -#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 1032 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r03 1033 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r13 1034 -#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r23 1035 -#define _INSERT_NULL_r10 1036 -#define _INSTRUMENTED_FOR_ITER_r23 1037 -#define _INSTRUMENTED_INSTRUCTION_r00 1038 -#define _INSTRUMENTED_JUMP_FORWARD_r00 1039 -#define _INSTRUMENTED_JUMP_FORWARD_r11 1040 -#define _INSTRUMENTED_JUMP_FORWARD_r22 1041 -#define _INSTRUMENTED_JUMP_FORWARD_r33 1042 -#define _INSTRUMENTED_LINE_r00 1043 -#define _INSTRUMENTED_NOT_TAKEN_r00 1044 -#define _INSTRUMENTED_NOT_TAKEN_r11 1045 -#define _INSTRUMENTED_NOT_TAKEN_r22 1046 -#define _INSTRUMENTED_NOT_TAKEN_r33 1047 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1048 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1049 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1050 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1051 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1052 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1053 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1054 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1055 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1056 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1057 -#define _IS_NONE_r11 1058 -#define _IS_OP_r03 1059 -#define _IS_OP_r13 1060 -#define _IS_OP_r23 1061 -#define _ITER_CHECK_LIST_r02 1062 -#define _ITER_CHECK_LIST_r12 1063 -#define _ITER_CHECK_LIST_r22 1064 -#define _ITER_CHECK_LIST_r33 1065 -#define _ITER_CHECK_RANGE_r02 1066 -#define _ITER_CHECK_RANGE_r12 1067 -#define _ITER_CHECK_RANGE_r22 1068 -#define _ITER_CHECK_RANGE_r33 1069 -#define _ITER_CHECK_TUPLE_r02 1070 -#define _ITER_CHECK_TUPLE_r12 1071 -#define _ITER_CHECK_TUPLE_r22 1072 -#define _ITER_CHECK_TUPLE_r33 1073 -#define _ITER_JUMP_LIST_r02 1074 -#define _ITER_JUMP_LIST_r12 1075 -#define _ITER_JUMP_LIST_r22 1076 -#define _ITER_JUMP_LIST_r33 1077 -#define _ITER_JUMP_RANGE_r02 1078 -#define _ITER_JUMP_RANGE_r12 1079 -#define _ITER_JUMP_RANGE_r22 1080 -#define _ITER_JUMP_RANGE_r33 1081 -#define _ITER_JUMP_TUPLE_r02 1082 -#define _ITER_JUMP_TUPLE_r12 1083 -#define _ITER_JUMP_TUPLE_r22 1084 -#define _ITER_JUMP_TUPLE_r33 1085 -#define _ITER_NEXT_LIST_r23 1086 -#define _ITER_NEXT_LIST_TIER_TWO_r23 1087 -#define _ITER_NEXT_RANGE_r03 1088 -#define _ITER_NEXT_RANGE_r13 1089 -#define _ITER_NEXT_RANGE_r23 1090 -#define _ITER_NEXT_TUPLE_r03 1091 -#define _ITER_NEXT_TUPLE_r13 1092 -#define _ITER_NEXT_TUPLE_r23 1093 -#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1094 -#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1095 -#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1096 -#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1097 -#define _JUMP_TO_TOP_r00 1098 -#define _LIST_APPEND_r10 1099 -#define _LIST_EXTEND_r10 1100 -#define _LOAD_ATTR_r10 1101 -#define _LOAD_ATTR_CLASS_r11 1102 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1103 -#define _LOAD_ATTR_INSTANCE_VALUE_r02 1104 -#define _LOAD_ATTR_INSTANCE_VALUE_r12 1105 -#define _LOAD_ATTR_INSTANCE_VALUE_r23 1106 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1107 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1108 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1109 -#define _LOAD_ATTR_METHOD_NO_DICT_r02 1110 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 1111 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 1112 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1113 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1114 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1115 -#define _LOAD_ATTR_MODULE_r12 1116 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1117 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1118 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 1119 -#define _LOAD_ATTR_SLOT_r02 1120 -#define _LOAD_ATTR_SLOT_r12 1121 -#define _LOAD_ATTR_SLOT_r23 1122 -#define _LOAD_ATTR_WITH_HINT_r12 1123 -#define _LOAD_BUILD_CLASS_r01 1124 -#define _LOAD_BYTECODE_r00 1125 -#define _LOAD_COMMON_CONSTANT_r01 1126 -#define _LOAD_COMMON_CONSTANT_r12 1127 -#define _LOAD_COMMON_CONSTANT_r23 1128 -#define _LOAD_CONST_r01 1129 -#define _LOAD_CONST_r12 1130 -#define _LOAD_CONST_r23 1131 -#define _LOAD_CONST_INLINE_r01 1132 -#define _LOAD_CONST_INLINE_r12 1133 -#define _LOAD_CONST_INLINE_r23 1134 -#define _LOAD_CONST_INLINE_BORROW_r01 1135 -#define _LOAD_CONST_INLINE_BORROW_r12 1136 -#define _LOAD_CONST_INLINE_BORROW_r23 1137 -#define _LOAD_CONST_UNDER_INLINE_r02 1138 -#define _LOAD_CONST_UNDER_INLINE_r12 1139 -#define _LOAD_CONST_UNDER_INLINE_r23 1140 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1141 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1142 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1143 -#define _LOAD_DEREF_r01 1144 -#define _LOAD_FAST_r01 1145 -#define _LOAD_FAST_r12 1146 -#define _LOAD_FAST_r23 1147 -#define _LOAD_FAST_0_r01 1148 -#define _LOAD_FAST_0_r12 1149 -#define _LOAD_FAST_0_r23 1150 -#define _LOAD_FAST_1_r01 1151 -#define _LOAD_FAST_1_r12 1152 -#define _LOAD_FAST_1_r23 1153 -#define _LOAD_FAST_2_r01 1154 -#define _LOAD_FAST_2_r12 1155 -#define _LOAD_FAST_2_r23 1156 -#define _LOAD_FAST_3_r01 1157 -#define _LOAD_FAST_3_r12 1158 -#define _LOAD_FAST_3_r23 1159 -#define _LOAD_FAST_4_r01 1160 -#define _LOAD_FAST_4_r12 1161 -#define _LOAD_FAST_4_r23 1162 -#define _LOAD_FAST_5_r01 1163 -#define _LOAD_FAST_5_r12 1164 -#define _LOAD_FAST_5_r23 1165 -#define _LOAD_FAST_6_r01 1166 -#define _LOAD_FAST_6_r12 1167 -#define _LOAD_FAST_6_r23 1168 -#define _LOAD_FAST_7_r01 1169 -#define _LOAD_FAST_7_r12 1170 -#define _LOAD_FAST_7_r23 1171 -#define _LOAD_FAST_AND_CLEAR_r01 1172 -#define _LOAD_FAST_AND_CLEAR_r12 1173 -#define _LOAD_FAST_AND_CLEAR_r23 1174 -#define _LOAD_FAST_BORROW_r01 1175 -#define _LOAD_FAST_BORROW_r12 1176 -#define _LOAD_FAST_BORROW_r23 1177 -#define _LOAD_FAST_BORROW_0_r01 1178 -#define _LOAD_FAST_BORROW_0_r12 1179 -#define _LOAD_FAST_BORROW_0_r23 1180 -#define _LOAD_FAST_BORROW_1_r01 1181 -#define _LOAD_FAST_BORROW_1_r12 1182 -#define _LOAD_FAST_BORROW_1_r23 1183 -#define _LOAD_FAST_BORROW_2_r01 1184 -#define _LOAD_FAST_BORROW_2_r12 1185 -#define _LOAD_FAST_BORROW_2_r23 1186 -#define _LOAD_FAST_BORROW_3_r01 1187 -#define _LOAD_FAST_BORROW_3_r12 1188 -#define _LOAD_FAST_BORROW_3_r23 1189 -#define _LOAD_FAST_BORROW_4_r01 1190 -#define _LOAD_FAST_BORROW_4_r12 1191 -#define _LOAD_FAST_BORROW_4_r23 1192 -#define _LOAD_FAST_BORROW_5_r01 1193 -#define _LOAD_FAST_BORROW_5_r12 1194 -#define _LOAD_FAST_BORROW_5_r23 1195 -#define _LOAD_FAST_BORROW_6_r01 1196 -#define _LOAD_FAST_BORROW_6_r12 1197 -#define _LOAD_FAST_BORROW_6_r23 1198 -#define _LOAD_FAST_BORROW_7_r01 1199 -#define _LOAD_FAST_BORROW_7_r12 1200 -#define _LOAD_FAST_BORROW_7_r23 1201 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1202 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1203 -#define _LOAD_FAST_CHECK_r01 1204 -#define _LOAD_FAST_CHECK_r12 1205 -#define _LOAD_FAST_CHECK_r23 1206 -#define _LOAD_FAST_LOAD_FAST_r02 1207 -#define _LOAD_FAST_LOAD_FAST_r13 1208 -#define _LOAD_FROM_DICT_OR_DEREF_r11 1209 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1210 -#define _LOAD_GLOBAL_r00 1211 -#define _LOAD_GLOBAL_BUILTINS_r01 1212 -#define _LOAD_GLOBAL_MODULE_r01 1213 -#define _LOAD_LOCALS_r01 1214 -#define _LOAD_LOCALS_r12 1215 -#define _LOAD_LOCALS_r23 1216 -#define _LOAD_NAME_r01 1217 -#define _LOAD_SMALL_INT_r01 1218 -#define _LOAD_SMALL_INT_r12 1219 -#define _LOAD_SMALL_INT_r23 1220 -#define _LOAD_SMALL_INT_0_r01 1221 -#define _LOAD_SMALL_INT_0_r12 1222 -#define _LOAD_SMALL_INT_0_r23 1223 -#define _LOAD_SMALL_INT_1_r01 1224 -#define _LOAD_SMALL_INT_1_r12 1225 -#define _LOAD_SMALL_INT_1_r23 1226 -#define _LOAD_SMALL_INT_2_r01 1227 -#define _LOAD_SMALL_INT_2_r12 1228 -#define _LOAD_SMALL_INT_2_r23 1229 -#define _LOAD_SMALL_INT_3_r01 1230 -#define _LOAD_SMALL_INT_3_r12 1231 -#define _LOAD_SMALL_INT_3_r23 1232 -#define _LOAD_SPECIAL_r00 1233 -#define _LOAD_SUPER_ATTR_ATTR_r31 1234 -#define _LOAD_SUPER_ATTR_METHOD_r32 1235 -#define _MAKE_CALLARGS_A_TUPLE_r33 1236 -#define _MAKE_CELL_r00 1237 -#define _MAKE_FUNCTION_r11 1238 -#define _MAKE_WARM_r00 1239 -#define _MAKE_WARM_r11 1240 -#define _MAKE_WARM_r22 1241 -#define _MAKE_WARM_r33 1242 -#define _MAP_ADD_r20 1243 -#define _MATCH_CLASS_r31 1244 -#define _MATCH_KEYS_r23 1245 -#define _MATCH_MAPPING_r02 1246 -#define _MATCH_MAPPING_r12 1247 -#define _MATCH_MAPPING_r23 1248 -#define _MATCH_SEQUENCE_r02 1249 -#define _MATCH_SEQUENCE_r12 1250 -#define _MATCH_SEQUENCE_r23 1251 -#define _MAYBE_EXPAND_METHOD_r00 1252 -#define _MAYBE_EXPAND_METHOD_KW_r11 1253 -#define _MONITOR_CALL_r00 1254 -#define _MONITOR_CALL_KW_r11 1255 -#define _MONITOR_JUMP_BACKWARD_r00 1256 -#define _MONITOR_JUMP_BACKWARD_r11 1257 -#define _MONITOR_JUMP_BACKWARD_r22 1258 -#define _MONITOR_JUMP_BACKWARD_r33 1259 -#define _MONITOR_RESUME_r00 1260 -#define _NOP_r00 1261 -#define _NOP_r11 1262 -#define _NOP_r22 1263 -#define _NOP_r33 1264 -#define _POP_CALL_r20 1265 -#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1266 -#define _POP_CALL_ONE_r30 1267 -#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1268 -#define _POP_CALL_TWO_r30 1269 -#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1270 -#define _POP_EXCEPT_r10 1271 -#define _POP_ITER_r20 1272 -#define _POP_JUMP_IF_FALSE_r00 1273 -#define _POP_JUMP_IF_FALSE_r10 1274 -#define _POP_JUMP_IF_FALSE_r21 1275 -#define _POP_JUMP_IF_FALSE_r32 1276 -#define _POP_JUMP_IF_TRUE_r00 1277 -#define _POP_JUMP_IF_TRUE_r10 1278 -#define _POP_JUMP_IF_TRUE_r21 1279 -#define _POP_JUMP_IF_TRUE_r32 1280 -#define _POP_TOP_r10 1281 -#define _POP_TOP_FLOAT_r00 1282 -#define _POP_TOP_FLOAT_r10 1283 -#define _POP_TOP_FLOAT_r21 1284 -#define _POP_TOP_FLOAT_r32 1285 -#define _POP_TOP_INT_r00 1286 -#define _POP_TOP_INT_r10 1287 -#define _POP_TOP_INT_r21 1288 -#define _POP_TOP_INT_r32 1289 -#define _POP_TOP_LOAD_CONST_INLINE_r11 1290 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1291 -#define _POP_TOP_NOP_r00 1292 -#define _POP_TOP_NOP_r10 1293 -#define _POP_TOP_NOP_r21 1294 -#define _POP_TOP_NOP_r32 1295 -#define _POP_TOP_UNICODE_r00 1296 -#define _POP_TOP_UNICODE_r10 1297 -#define _POP_TOP_UNICODE_r21 1298 -#define _POP_TOP_UNICODE_r32 1299 -#define _POP_TWO_r20 1300 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1301 -#define _PUSH_EXC_INFO_r02 1302 -#define _PUSH_EXC_INFO_r12 1303 -#define _PUSH_EXC_INFO_r23 1304 -#define _PUSH_FRAME_r10 1305 -#define _PUSH_NULL_r01 1306 -#define _PUSH_NULL_r12 1307 -#define _PUSH_NULL_r23 1308 -#define _PUSH_NULL_CONDITIONAL_r00 1309 -#define _PY_FRAME_EX_r31 1310 -#define _PY_FRAME_GENERAL_r01 1311 -#define _PY_FRAME_KW_r11 1312 -#define _QUICKEN_RESUME_r00 1313 -#define _QUICKEN_RESUME_r11 1314 -#define _QUICKEN_RESUME_r22 1315 -#define _QUICKEN_RESUME_r33 1316 -#define _REPLACE_WITH_TRUE_r02 1317 -#define _REPLACE_WITH_TRUE_r12 1318 -#define _REPLACE_WITH_TRUE_r23 1319 -#define _RESUME_CHECK_r00 1320 -#define _RESUME_CHECK_r11 1321 -#define _RESUME_CHECK_r22 1322 -#define _RESUME_CHECK_r33 1323 -#define _RETURN_GENERATOR_r01 1324 -#define _RETURN_VALUE_r11 1325 -#define _SAVE_RETURN_OFFSET_r00 1326 -#define _SAVE_RETURN_OFFSET_r11 1327 -#define _SAVE_RETURN_OFFSET_r22 1328 -#define _SAVE_RETURN_OFFSET_r33 1329 -#define _SEND_r22 1330 -#define _SEND_GEN_FRAME_r22 1331 -#define _SETUP_ANNOTATIONS_r00 1332 -#define _SET_ADD_r10 1333 -#define _SET_FUNCTION_ATTRIBUTE_r01 1334 -#define _SET_FUNCTION_ATTRIBUTE_r11 1335 -#define _SET_FUNCTION_ATTRIBUTE_r21 1336 -#define _SET_FUNCTION_ATTRIBUTE_r32 1337 -#define _SET_IP_r00 1338 -#define _SET_IP_r11 1339 -#define _SET_IP_r22 1340 -#define _SET_IP_r33 1341 -#define _SET_UPDATE_r10 1342 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1343 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1344 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1345 -#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1346 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1347 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1348 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1349 -#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1350 -#define _SPILL_OR_RELOAD_r01 1351 -#define _SPILL_OR_RELOAD_r02 1352 -#define _SPILL_OR_RELOAD_r03 1353 -#define _SPILL_OR_RELOAD_r10 1354 -#define _SPILL_OR_RELOAD_r12 1355 -#define _SPILL_OR_RELOAD_r13 1356 -#define _SPILL_OR_RELOAD_r20 1357 -#define _SPILL_OR_RELOAD_r21 1358 -#define _SPILL_OR_RELOAD_r23 1359 -#define _SPILL_OR_RELOAD_r30 1360 -#define _SPILL_OR_RELOAD_r31 1361 -#define _SPILL_OR_RELOAD_r32 1362 -#define _START_EXECUTOR_r00 1363 -#define _STORE_ATTR_r20 1364 -#define _STORE_ATTR_INSTANCE_VALUE_r21 1365 -#define _STORE_ATTR_SLOT_r21 1366 -#define _STORE_ATTR_WITH_HINT_r21 1367 -#define _STORE_DEREF_r10 1368 -#define _STORE_FAST_LOAD_FAST_r11 1369 -#define _STORE_FAST_STORE_FAST_r20 1370 -#define _STORE_GLOBAL_r10 1371 -#define _STORE_NAME_r10 1372 -#define _STORE_SLICE_r30 1373 -#define _STORE_SUBSCR_r30 1374 -#define _STORE_SUBSCR_DICT_r31 1375 -#define _STORE_SUBSCR_LIST_INT_r32 1376 -#define _SWAP_r11 1377 -#define _SWAP_2_r02 1378 -#define _SWAP_2_r12 1379 -#define _SWAP_2_r22 1380 -#define _SWAP_2_r33 1381 -#define _SWAP_3_r03 1382 -#define _SWAP_3_r13 1383 -#define _SWAP_3_r23 1384 -#define _SWAP_3_r33 1385 -#define _SWAP_FAST_r01 1386 -#define _SWAP_FAST_r11 1387 -#define _SWAP_FAST_r22 1388 -#define _SWAP_FAST_r33 1389 -#define _SWAP_FAST_0_r01 1390 -#define _SWAP_FAST_0_r11 1391 -#define _SWAP_FAST_0_r22 1392 -#define _SWAP_FAST_0_r33 1393 -#define _SWAP_FAST_1_r01 1394 -#define _SWAP_FAST_1_r11 1395 -#define _SWAP_FAST_1_r22 1396 -#define _SWAP_FAST_1_r33 1397 -#define _SWAP_FAST_2_r01 1398 -#define _SWAP_FAST_2_r11 1399 -#define _SWAP_FAST_2_r22 1400 -#define _SWAP_FAST_2_r33 1401 -#define _SWAP_FAST_3_r01 1402 -#define _SWAP_FAST_3_r11 1403 -#define _SWAP_FAST_3_r22 1404 -#define _SWAP_FAST_3_r33 1405 -#define _SWAP_FAST_4_r01 1406 -#define _SWAP_FAST_4_r11 1407 -#define _SWAP_FAST_4_r22 1408 -#define _SWAP_FAST_4_r33 1409 -#define _SWAP_FAST_5_r01 1410 -#define _SWAP_FAST_5_r11 1411 -#define _SWAP_FAST_5_r22 1412 -#define _SWAP_FAST_5_r33 1413 -#define _SWAP_FAST_6_r01 1414 -#define _SWAP_FAST_6_r11 1415 -#define _SWAP_FAST_6_r22 1416 -#define _SWAP_FAST_6_r33 1417 -#define _SWAP_FAST_7_r01 1418 -#define _SWAP_FAST_7_r11 1419 -#define _SWAP_FAST_7_r22 1420 -#define _SWAP_FAST_7_r33 1421 -#define _TIER2_RESUME_CHECK_r00 1422 -#define _TIER2_RESUME_CHECK_r11 1423 -#define _TIER2_RESUME_CHECK_r22 1424 -#define _TIER2_RESUME_CHECK_r33 1425 -#define _TO_BOOL_r11 1426 -#define _TO_BOOL_BOOL_r01 1427 -#define _TO_BOOL_BOOL_r11 1428 -#define _TO_BOOL_BOOL_r22 1429 -#define _TO_BOOL_BOOL_r33 1430 -#define _TO_BOOL_INT_r02 1431 -#define _TO_BOOL_INT_r12 1432 -#define _TO_BOOL_INT_r23 1433 -#define _TO_BOOL_LIST_r02 1434 -#define _TO_BOOL_LIST_r12 1435 -#define _TO_BOOL_LIST_r23 1436 -#define _TO_BOOL_NONE_r01 1437 -#define _TO_BOOL_NONE_r11 1438 -#define _TO_BOOL_NONE_r22 1439 -#define _TO_BOOL_NONE_r33 1440 -#define _TO_BOOL_STR_r02 1441 -#define _TO_BOOL_STR_r12 1442 -#define _TO_BOOL_STR_r23 1443 -#define _TRACE_RECORD_r00 1444 -#define _UNARY_INVERT_r12 1445 -#define _UNARY_NEGATIVE_r12 1446 -#define _UNARY_NOT_r01 1447 -#define _UNARY_NOT_r11 1448 -#define _UNARY_NOT_r22 1449 -#define _UNARY_NOT_r33 1450 -#define _UNPACK_EX_r10 1451 -#define _UNPACK_SEQUENCE_r10 1452 -#define _UNPACK_SEQUENCE_LIST_r10 1453 -#define _UNPACK_SEQUENCE_TUPLE_r10 1454 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1455 -#define _WITH_EXCEPT_START_r33 1456 -#define _YIELD_VALUE_r11 1457 -#define MAX_UOP_REGS_ID 1457 +#define _CLEANUP_ASYNC_THROW_r10 716 +#define _COLD_DYNAMIC_EXIT_r00 717 +#define _COLD_EXIT_r00 718 +#define _COMPARE_OP_r21 719 +#define _COMPARE_OP_FLOAT_r03 720 +#define _COMPARE_OP_FLOAT_r13 721 +#define _COMPARE_OP_FLOAT_r23 722 +#define _COMPARE_OP_INT_r23 723 +#define _COMPARE_OP_STR_r23 724 +#define _CONTAINS_OP_r23 725 +#define _CONTAINS_OP_DICT_r23 726 +#define _CONTAINS_OP_SET_r23 727 +#define _CONVERT_VALUE_r11 728 +#define _COPY_r01 729 +#define _COPY_1_r02 730 +#define _COPY_1_r12 731 +#define _COPY_1_r23 732 +#define _COPY_2_r03 733 +#define _COPY_2_r13 734 +#define _COPY_2_r23 735 +#define _COPY_3_r03 736 +#define _COPY_3_r13 737 +#define _COPY_3_r23 738 +#define _COPY_3_r33 739 +#define _COPY_FREE_VARS_r00 740 +#define _COPY_FREE_VARS_r11 741 +#define _COPY_FREE_VARS_r22 742 +#define _COPY_FREE_VARS_r33 743 +#define _CREATE_INIT_FRAME_r01 744 +#define _DELETE_ATTR_r10 745 +#define _DELETE_DEREF_r00 746 +#define _DELETE_FAST_r00 747 +#define _DELETE_GLOBAL_r00 748 +#define _DELETE_NAME_r00 749 +#define _DELETE_SUBSCR_r20 750 +#define _DEOPT_r00 751 +#define _DEOPT_r10 752 +#define _DEOPT_r20 753 +#define _DEOPT_r30 754 +#define _DICT_MERGE_r10 755 +#define _DICT_UPDATE_r10 756 +#define _DO_CALL_r01 757 +#define _DO_CALL_FUNCTION_EX_r31 758 +#define _DO_CALL_KW_r11 759 +#define _DYNAMIC_EXIT_r00 760 +#define _DYNAMIC_EXIT_r10 761 +#define _DYNAMIC_EXIT_r20 762 +#define _DYNAMIC_EXIT_r30 763 +#define _END_FOR_r10 764 +#define _END_SEND_r21 765 +#define _ERROR_POP_N_r00 766 +#define _EXIT_INIT_CHECK_r10 767 +#define _EXIT_TRACE_r00 768 +#define _EXIT_TRACE_r10 769 +#define _EXIT_TRACE_r20 770 +#define _EXIT_TRACE_r30 771 +#define _EXPAND_METHOD_r00 772 +#define _EXPAND_METHOD_KW_r11 773 +#define _FATAL_ERROR_r00 774 +#define _FATAL_ERROR_r11 775 +#define _FATAL_ERROR_r22 776 +#define _FATAL_ERROR_r33 777 +#define _FORMAT_SIMPLE_r11 778 +#define _FORMAT_WITH_SPEC_r21 779 +#define _FOR_ITER_r23 780 +#define _FOR_ITER_GEN_FRAME_r03 781 +#define _FOR_ITER_GEN_FRAME_r13 782 +#define _FOR_ITER_GEN_FRAME_r23 783 +#define _FOR_ITER_TIER_TWO_r23 784 +#define _GET_AITER_r11 785 +#define _GET_ANEXT_r12 786 +#define _GET_ASEND_r21 787 +#define _GET_ASYNC_YIELD_FROM_ITER_r11 788 +#define _GET_AWAITABLE_r11 789 +#define _GET_ITER_r12 790 +#define _GET_LEN_r12 791 +#define _GET_YIELD_FROM_ITER_r11 792 +#define _GUARD_BINARY_OP_EXTEND_r22 793 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 794 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 795 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 796 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 797 +#define _GUARD_BIT_IS_SET_POP_r00 798 +#define _GUARD_BIT_IS_SET_POP_r10 799 +#define _GUARD_BIT_IS_SET_POP_r21 800 +#define _GUARD_BIT_IS_SET_POP_r32 801 +#define _GUARD_BIT_IS_SET_POP_4_r00 802 +#define _GUARD_BIT_IS_SET_POP_4_r10 803 +#define _GUARD_BIT_IS_SET_POP_4_r21 804 +#define _GUARD_BIT_IS_SET_POP_4_r32 805 +#define _GUARD_BIT_IS_SET_POP_5_r00 806 +#define _GUARD_BIT_IS_SET_POP_5_r10 807 +#define _GUARD_BIT_IS_SET_POP_5_r21 808 +#define _GUARD_BIT_IS_SET_POP_5_r32 809 +#define _GUARD_BIT_IS_SET_POP_6_r00 810 +#define _GUARD_BIT_IS_SET_POP_6_r10 811 +#define _GUARD_BIT_IS_SET_POP_6_r21 812 +#define _GUARD_BIT_IS_SET_POP_6_r32 813 +#define _GUARD_BIT_IS_SET_POP_7_r00 814 +#define _GUARD_BIT_IS_SET_POP_7_r10 815 +#define _GUARD_BIT_IS_SET_POP_7_r21 816 +#define _GUARD_BIT_IS_SET_POP_7_r32 817 +#define _GUARD_BIT_IS_UNSET_POP_r00 818 +#define _GUARD_BIT_IS_UNSET_POP_r10 819 +#define _GUARD_BIT_IS_UNSET_POP_r21 820 +#define _GUARD_BIT_IS_UNSET_POP_r32 821 +#define _GUARD_BIT_IS_UNSET_POP_4_r00 822 +#define _GUARD_BIT_IS_UNSET_POP_4_r10 823 +#define _GUARD_BIT_IS_UNSET_POP_4_r21 824 +#define _GUARD_BIT_IS_UNSET_POP_4_r32 825 +#define _GUARD_BIT_IS_UNSET_POP_5_r00 826 +#define _GUARD_BIT_IS_UNSET_POP_5_r10 827 +#define _GUARD_BIT_IS_UNSET_POP_5_r21 828 +#define _GUARD_BIT_IS_UNSET_POP_5_r32 829 +#define _GUARD_BIT_IS_UNSET_POP_6_r00 830 +#define _GUARD_BIT_IS_UNSET_POP_6_r10 831 +#define _GUARD_BIT_IS_UNSET_POP_6_r21 832 +#define _GUARD_BIT_IS_UNSET_POP_6_r32 833 +#define _GUARD_BIT_IS_UNSET_POP_7_r00 834 +#define _GUARD_BIT_IS_UNSET_POP_7_r10 835 +#define _GUARD_BIT_IS_UNSET_POP_7_r21 836 +#define _GUARD_BIT_IS_UNSET_POP_7_r32 837 +#define _GUARD_CALLABLE_ISINSTANCE_r03 838 +#define _GUARD_CALLABLE_ISINSTANCE_r13 839 +#define _GUARD_CALLABLE_ISINSTANCE_r23 840 +#define _GUARD_CALLABLE_ISINSTANCE_r33 841 +#define _GUARD_CALLABLE_LEN_r03 842 +#define _GUARD_CALLABLE_LEN_r13 843 +#define _GUARD_CALLABLE_LEN_r23 844 +#define _GUARD_CALLABLE_LEN_r33 845 +#define _GUARD_CALLABLE_LIST_APPEND_r03 846 +#define _GUARD_CALLABLE_LIST_APPEND_r13 847 +#define _GUARD_CALLABLE_LIST_APPEND_r23 848 +#define _GUARD_CALLABLE_LIST_APPEND_r33 849 +#define _GUARD_CALLABLE_STR_1_r03 850 +#define _GUARD_CALLABLE_STR_1_r13 851 +#define _GUARD_CALLABLE_STR_1_r23 852 +#define _GUARD_CALLABLE_STR_1_r33 853 +#define _GUARD_CALLABLE_TUPLE_1_r03 854 +#define _GUARD_CALLABLE_TUPLE_1_r13 855 +#define _GUARD_CALLABLE_TUPLE_1_r23 856 +#define _GUARD_CALLABLE_TUPLE_1_r33 857 +#define _GUARD_CALLABLE_TYPE_1_r03 858 +#define _GUARD_CALLABLE_TYPE_1_r13 859 +#define _GUARD_CALLABLE_TYPE_1_r23 860 +#define _GUARD_CALLABLE_TYPE_1_r33 861 +#define _GUARD_CODE_VERSION_r00 862 +#define _GUARD_CODE_VERSION_r11 863 +#define _GUARD_CODE_VERSION_r22 864 +#define _GUARD_CODE_VERSION_r33 865 +#define _GUARD_DORV_NO_DICT_r01 866 +#define _GUARD_DORV_NO_DICT_r11 867 +#define _GUARD_DORV_NO_DICT_r22 868 +#define _GUARD_DORV_NO_DICT_r33 869 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 870 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 871 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 872 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 873 +#define _GUARD_GLOBALS_VERSION_r00 874 +#define _GUARD_GLOBALS_VERSION_r11 875 +#define _GUARD_GLOBALS_VERSION_r22 876 +#define _GUARD_GLOBALS_VERSION_r33 877 +#define _GUARD_IP_RETURN_GENERATOR_r00 878 +#define _GUARD_IP_RETURN_GENERATOR_r11 879 +#define _GUARD_IP_RETURN_GENERATOR_r22 880 +#define _GUARD_IP_RETURN_GENERATOR_r33 881 +#define _GUARD_IP_RETURN_VALUE_r00 882 +#define _GUARD_IP_RETURN_VALUE_r11 883 +#define _GUARD_IP_RETURN_VALUE_r22 884 +#define _GUARD_IP_RETURN_VALUE_r33 885 +#define _GUARD_IP_YIELD_VALUE_r00 886 +#define _GUARD_IP_YIELD_VALUE_r11 887 +#define _GUARD_IP_YIELD_VALUE_r22 888 +#define _GUARD_IP_YIELD_VALUE_r33 889 +#define _GUARD_IP__PUSH_FRAME_r00 890 +#define _GUARD_IP__PUSH_FRAME_r11 891 +#define _GUARD_IP__PUSH_FRAME_r22 892 +#define _GUARD_IP__PUSH_FRAME_r33 893 +#define _GUARD_IS_FALSE_POP_r00 894 +#define _GUARD_IS_FALSE_POP_r10 895 +#define _GUARD_IS_FALSE_POP_r21 896 +#define _GUARD_IS_FALSE_POP_r32 897 +#define _GUARD_IS_NONE_POP_r00 898 +#define _GUARD_IS_NONE_POP_r10 899 +#define _GUARD_IS_NONE_POP_r21 900 +#define _GUARD_IS_NONE_POP_r32 901 +#define _GUARD_IS_NOT_NONE_POP_r10 902 +#define _GUARD_IS_TRUE_POP_r00 903 +#define _GUARD_IS_TRUE_POP_r10 904 +#define _GUARD_IS_TRUE_POP_r21 905 +#define _GUARD_IS_TRUE_POP_r32 906 +#define _GUARD_KEYS_VERSION_r01 907 +#define _GUARD_KEYS_VERSION_r11 908 +#define _GUARD_KEYS_VERSION_r22 909 +#define _GUARD_KEYS_VERSION_r33 910 +#define _GUARD_NOS_ANY_DICT_r02 911 +#define _GUARD_NOS_ANY_DICT_r12 912 +#define _GUARD_NOS_ANY_DICT_r22 913 +#define _GUARD_NOS_ANY_DICT_r33 914 +#define _GUARD_NOS_COMPACT_ASCII_r02 915 +#define _GUARD_NOS_COMPACT_ASCII_r12 916 +#define _GUARD_NOS_COMPACT_ASCII_r22 917 +#define _GUARD_NOS_COMPACT_ASCII_r33 918 +#define _GUARD_NOS_DICT_r02 919 +#define _GUARD_NOS_DICT_r12 920 +#define _GUARD_NOS_DICT_r22 921 +#define _GUARD_NOS_DICT_r33 922 +#define _GUARD_NOS_FLOAT_r02 923 +#define _GUARD_NOS_FLOAT_r12 924 +#define _GUARD_NOS_FLOAT_r22 925 +#define _GUARD_NOS_FLOAT_r33 926 +#define _GUARD_NOS_INT_r02 927 +#define _GUARD_NOS_INT_r12 928 +#define _GUARD_NOS_INT_r22 929 +#define _GUARD_NOS_INT_r33 930 +#define _GUARD_NOS_LIST_r02 931 +#define _GUARD_NOS_LIST_r12 932 +#define _GUARD_NOS_LIST_r22 933 +#define _GUARD_NOS_LIST_r33 934 +#define _GUARD_NOS_NOT_NULL_r02 935 +#define _GUARD_NOS_NOT_NULL_r12 936 +#define _GUARD_NOS_NOT_NULL_r22 937 +#define _GUARD_NOS_NOT_NULL_r33 938 +#define _GUARD_NOS_NULL_r02 939 +#define _GUARD_NOS_NULL_r12 940 +#define _GUARD_NOS_NULL_r22 941 +#define _GUARD_NOS_NULL_r33 942 +#define _GUARD_NOS_OVERFLOWED_r02 943 +#define _GUARD_NOS_OVERFLOWED_r12 944 +#define _GUARD_NOS_OVERFLOWED_r22 945 +#define _GUARD_NOS_OVERFLOWED_r33 946 +#define _GUARD_NOS_TUPLE_r02 947 +#define _GUARD_NOS_TUPLE_r12 948 +#define _GUARD_NOS_TUPLE_r22 949 +#define _GUARD_NOS_TUPLE_r33 950 +#define _GUARD_NOS_UNICODE_r02 951 +#define _GUARD_NOS_UNICODE_r12 952 +#define _GUARD_NOS_UNICODE_r22 953 +#define _GUARD_NOS_UNICODE_r33 954 +#define _GUARD_NOT_EXHAUSTED_LIST_r02 955 +#define _GUARD_NOT_EXHAUSTED_LIST_r12 956 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 957 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 958 +#define _GUARD_NOT_EXHAUSTED_RANGE_r02 959 +#define _GUARD_NOT_EXHAUSTED_RANGE_r12 960 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 961 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 962 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 963 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 964 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 965 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 966 +#define _GUARD_THIRD_NULL_r03 967 +#define _GUARD_THIRD_NULL_r13 968 +#define _GUARD_THIRD_NULL_r23 969 +#define _GUARD_THIRD_NULL_r33 970 +#define _GUARD_TOS_ANY_DICT_r01 971 +#define _GUARD_TOS_ANY_DICT_r11 972 +#define _GUARD_TOS_ANY_DICT_r22 973 +#define _GUARD_TOS_ANY_DICT_r33 974 +#define _GUARD_TOS_ANY_SET_r01 975 +#define _GUARD_TOS_ANY_SET_r11 976 +#define _GUARD_TOS_ANY_SET_r22 977 +#define _GUARD_TOS_ANY_SET_r33 978 +#define _GUARD_TOS_FLOAT_r01 979 +#define _GUARD_TOS_FLOAT_r11 980 +#define _GUARD_TOS_FLOAT_r22 981 +#define _GUARD_TOS_FLOAT_r33 982 +#define _GUARD_TOS_INT_r01 983 +#define _GUARD_TOS_INT_r11 984 +#define _GUARD_TOS_INT_r22 985 +#define _GUARD_TOS_INT_r33 986 +#define _GUARD_TOS_LIST_r01 987 +#define _GUARD_TOS_LIST_r11 988 +#define _GUARD_TOS_LIST_r22 989 +#define _GUARD_TOS_LIST_r33 990 +#define _GUARD_TOS_OVERFLOWED_r01 991 +#define _GUARD_TOS_OVERFLOWED_r11 992 +#define _GUARD_TOS_OVERFLOWED_r22 993 +#define _GUARD_TOS_OVERFLOWED_r33 994 +#define _GUARD_TOS_SLICE_r01 995 +#define _GUARD_TOS_SLICE_r11 996 +#define _GUARD_TOS_SLICE_r22 997 +#define _GUARD_TOS_SLICE_r33 998 +#define _GUARD_TOS_TUPLE_r01 999 +#define _GUARD_TOS_TUPLE_r11 1000 +#define _GUARD_TOS_TUPLE_r22 1001 +#define _GUARD_TOS_TUPLE_r33 1002 +#define _GUARD_TOS_UNICODE_r01 1003 +#define _GUARD_TOS_UNICODE_r11 1004 +#define _GUARD_TOS_UNICODE_r22 1005 +#define _GUARD_TOS_UNICODE_r33 1006 +#define _GUARD_TYPE_VERSION_r01 1007 +#define _GUARD_TYPE_VERSION_r11 1008 +#define _GUARD_TYPE_VERSION_r22 1009 +#define _GUARD_TYPE_VERSION_r33 1010 +#define _GUARD_TYPE_VERSION_AND_LOCK_r01 1011 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 1012 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 1013 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 1014 +#define _HANDLE_PENDING_AND_DEOPT_r00 1015 +#define _HANDLE_PENDING_AND_DEOPT_r10 1016 +#define _HANDLE_PENDING_AND_DEOPT_r20 1017 +#define _HANDLE_PENDING_AND_DEOPT_r30 1018 +#define _IMPORT_FROM_r12 1019 +#define _IMPORT_NAME_r21 1020 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1021 +#define _INIT_CALL_PY_EXACT_ARGS_r01 1022 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1023 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1024 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1025 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1026 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1027 +#define _INSERT_1_LOAD_CONST_INLINE_r02 1028 +#define _INSERT_1_LOAD_CONST_INLINE_r12 1029 +#define _INSERT_1_LOAD_CONST_INLINE_r23 1030 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r02 1031 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r12 1032 +#define _INSERT_1_LOAD_CONST_INLINE_BORROW_r23 1033 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r03 1034 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r13 1035 +#define _INSERT_2_LOAD_CONST_INLINE_BORROW_r23 1036 +#define _INSERT_NULL_r10 1037 +#define _INSTRUMENTED_FOR_ITER_r23 1038 +#define _INSTRUMENTED_INSTRUCTION_r00 1039 +#define _INSTRUMENTED_JUMP_FORWARD_r00 1040 +#define _INSTRUMENTED_JUMP_FORWARD_r11 1041 +#define _INSTRUMENTED_JUMP_FORWARD_r22 1042 +#define _INSTRUMENTED_JUMP_FORWARD_r33 1043 +#define _INSTRUMENTED_LINE_r00 1044 +#define _INSTRUMENTED_NOT_TAKEN_r00 1045 +#define _INSTRUMENTED_NOT_TAKEN_r11 1046 +#define _INSTRUMENTED_NOT_TAKEN_r22 1047 +#define _INSTRUMENTED_NOT_TAKEN_r33 1048 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1049 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1050 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1051 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1052 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1053 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1054 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1055 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1056 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1057 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1058 +#define _IS_NONE_r11 1059 +#define _IS_OP_r03 1060 +#define _IS_OP_r13 1061 +#define _IS_OP_r23 1062 +#define _ITER_CHECK_LIST_r02 1063 +#define _ITER_CHECK_LIST_r12 1064 +#define _ITER_CHECK_LIST_r22 1065 +#define _ITER_CHECK_LIST_r33 1066 +#define _ITER_CHECK_RANGE_r02 1067 +#define _ITER_CHECK_RANGE_r12 1068 +#define _ITER_CHECK_RANGE_r22 1069 +#define _ITER_CHECK_RANGE_r33 1070 +#define _ITER_CHECK_TUPLE_r02 1071 +#define _ITER_CHECK_TUPLE_r12 1072 +#define _ITER_CHECK_TUPLE_r22 1073 +#define _ITER_CHECK_TUPLE_r33 1074 +#define _ITER_JUMP_LIST_r02 1075 +#define _ITER_JUMP_LIST_r12 1076 +#define _ITER_JUMP_LIST_r22 1077 +#define _ITER_JUMP_LIST_r33 1078 +#define _ITER_JUMP_RANGE_r02 1079 +#define _ITER_JUMP_RANGE_r12 1080 +#define _ITER_JUMP_RANGE_r22 1081 +#define _ITER_JUMP_RANGE_r33 1082 +#define _ITER_JUMP_TUPLE_r02 1083 +#define _ITER_JUMP_TUPLE_r12 1084 +#define _ITER_JUMP_TUPLE_r22 1085 +#define _ITER_JUMP_TUPLE_r33 1086 +#define _ITER_NEXT_LIST_r23 1087 +#define _ITER_NEXT_LIST_TIER_TWO_r23 1088 +#define _ITER_NEXT_RANGE_r03 1089 +#define _ITER_NEXT_RANGE_r13 1090 +#define _ITER_NEXT_RANGE_r23 1091 +#define _ITER_NEXT_TUPLE_r03 1092 +#define _ITER_NEXT_TUPLE_r13 1093 +#define _ITER_NEXT_TUPLE_r23 1094 +#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1095 +#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1096 +#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1097 +#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1098 +#define _JUMP_TO_TOP_r00 1099 +#define _LIST_APPEND_r10 1100 +#define _LIST_EXTEND_r10 1101 +#define _LOAD_ATTR_r10 1102 +#define _LOAD_ATTR_CLASS_r11 1103 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 1104 +#define _LOAD_ATTR_INSTANCE_VALUE_r02 1105 +#define _LOAD_ATTR_INSTANCE_VALUE_r12 1106 +#define _LOAD_ATTR_INSTANCE_VALUE_r23 1107 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1108 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1109 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1110 +#define _LOAD_ATTR_METHOD_NO_DICT_r02 1111 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 1112 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 1113 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1114 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1115 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1116 +#define _LOAD_ATTR_MODULE_r12 1117 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1118 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1119 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 1120 +#define _LOAD_ATTR_SLOT_r02 1121 +#define _LOAD_ATTR_SLOT_r12 1122 +#define _LOAD_ATTR_SLOT_r23 1123 +#define _LOAD_ATTR_WITH_HINT_r12 1124 +#define _LOAD_BUILD_CLASS_r01 1125 +#define _LOAD_BYTECODE_r00 1126 +#define _LOAD_COMMON_CONSTANT_r01 1127 +#define _LOAD_COMMON_CONSTANT_r12 1128 +#define _LOAD_COMMON_CONSTANT_r23 1129 +#define _LOAD_CONST_r01 1130 +#define _LOAD_CONST_r12 1131 +#define _LOAD_CONST_r23 1132 +#define _LOAD_CONST_INLINE_r01 1133 +#define _LOAD_CONST_INLINE_r12 1134 +#define _LOAD_CONST_INLINE_r23 1135 +#define _LOAD_CONST_INLINE_BORROW_r01 1136 +#define _LOAD_CONST_INLINE_BORROW_r12 1137 +#define _LOAD_CONST_INLINE_BORROW_r23 1138 +#define _LOAD_CONST_UNDER_INLINE_r02 1139 +#define _LOAD_CONST_UNDER_INLINE_r12 1140 +#define _LOAD_CONST_UNDER_INLINE_r23 1141 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1142 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1143 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1144 +#define _LOAD_DEREF_r01 1145 +#define _LOAD_FAST_r01 1146 +#define _LOAD_FAST_r12 1147 +#define _LOAD_FAST_r23 1148 +#define _LOAD_FAST_0_r01 1149 +#define _LOAD_FAST_0_r12 1150 +#define _LOAD_FAST_0_r23 1151 +#define _LOAD_FAST_1_r01 1152 +#define _LOAD_FAST_1_r12 1153 +#define _LOAD_FAST_1_r23 1154 +#define _LOAD_FAST_2_r01 1155 +#define _LOAD_FAST_2_r12 1156 +#define _LOAD_FAST_2_r23 1157 +#define _LOAD_FAST_3_r01 1158 +#define _LOAD_FAST_3_r12 1159 +#define _LOAD_FAST_3_r23 1160 +#define _LOAD_FAST_4_r01 1161 +#define _LOAD_FAST_4_r12 1162 +#define _LOAD_FAST_4_r23 1163 +#define _LOAD_FAST_5_r01 1164 +#define _LOAD_FAST_5_r12 1165 +#define _LOAD_FAST_5_r23 1166 +#define _LOAD_FAST_6_r01 1167 +#define _LOAD_FAST_6_r12 1168 +#define _LOAD_FAST_6_r23 1169 +#define _LOAD_FAST_7_r01 1170 +#define _LOAD_FAST_7_r12 1171 +#define _LOAD_FAST_7_r23 1172 +#define _LOAD_FAST_AND_CLEAR_r01 1173 +#define _LOAD_FAST_AND_CLEAR_r12 1174 +#define _LOAD_FAST_AND_CLEAR_r23 1175 +#define _LOAD_FAST_BORROW_r01 1176 +#define _LOAD_FAST_BORROW_r12 1177 +#define _LOAD_FAST_BORROW_r23 1178 +#define _LOAD_FAST_BORROW_0_r01 1179 +#define _LOAD_FAST_BORROW_0_r12 1180 +#define _LOAD_FAST_BORROW_0_r23 1181 +#define _LOAD_FAST_BORROW_1_r01 1182 +#define _LOAD_FAST_BORROW_1_r12 1183 +#define _LOAD_FAST_BORROW_1_r23 1184 +#define _LOAD_FAST_BORROW_2_r01 1185 +#define _LOAD_FAST_BORROW_2_r12 1186 +#define _LOAD_FAST_BORROW_2_r23 1187 +#define _LOAD_FAST_BORROW_3_r01 1188 +#define _LOAD_FAST_BORROW_3_r12 1189 +#define _LOAD_FAST_BORROW_3_r23 1190 +#define _LOAD_FAST_BORROW_4_r01 1191 +#define _LOAD_FAST_BORROW_4_r12 1192 +#define _LOAD_FAST_BORROW_4_r23 1193 +#define _LOAD_FAST_BORROW_5_r01 1194 +#define _LOAD_FAST_BORROW_5_r12 1195 +#define _LOAD_FAST_BORROW_5_r23 1196 +#define _LOAD_FAST_BORROW_6_r01 1197 +#define _LOAD_FAST_BORROW_6_r12 1198 +#define _LOAD_FAST_BORROW_6_r23 1199 +#define _LOAD_FAST_BORROW_7_r01 1200 +#define _LOAD_FAST_BORROW_7_r12 1201 +#define _LOAD_FAST_BORROW_7_r23 1202 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1203 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1204 +#define _LOAD_FAST_CHECK_r01 1205 +#define _LOAD_FAST_CHECK_r12 1206 +#define _LOAD_FAST_CHECK_r23 1207 +#define _LOAD_FAST_LOAD_FAST_r02 1208 +#define _LOAD_FAST_LOAD_FAST_r13 1209 +#define _LOAD_FROM_DICT_OR_DEREF_r11 1210 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1211 +#define _LOAD_GLOBAL_r00 1212 +#define _LOAD_GLOBAL_BUILTINS_r01 1213 +#define _LOAD_GLOBAL_MODULE_r01 1214 +#define _LOAD_LOCALS_r01 1215 +#define _LOAD_LOCALS_r12 1216 +#define _LOAD_LOCALS_r23 1217 +#define _LOAD_NAME_r01 1218 +#define _LOAD_SMALL_INT_r01 1219 +#define _LOAD_SMALL_INT_r12 1220 +#define _LOAD_SMALL_INT_r23 1221 +#define _LOAD_SMALL_INT_0_r01 1222 +#define _LOAD_SMALL_INT_0_r12 1223 +#define _LOAD_SMALL_INT_0_r23 1224 +#define _LOAD_SMALL_INT_1_r01 1225 +#define _LOAD_SMALL_INT_1_r12 1226 +#define _LOAD_SMALL_INT_1_r23 1227 +#define _LOAD_SMALL_INT_2_r01 1228 +#define _LOAD_SMALL_INT_2_r12 1229 +#define _LOAD_SMALL_INT_2_r23 1230 +#define _LOAD_SMALL_INT_3_r01 1231 +#define _LOAD_SMALL_INT_3_r12 1232 +#define _LOAD_SMALL_INT_3_r23 1233 +#define _LOAD_SPECIAL_r00 1234 +#define _LOAD_SUPER_ATTR_ATTR_r31 1235 +#define _LOAD_SUPER_ATTR_METHOD_r32 1236 +#define _MAKE_CALLARGS_A_TUPLE_r33 1237 +#define _MAKE_CELL_r00 1238 +#define _MAKE_FUNCTION_r11 1239 +#define _MAKE_WARM_r00 1240 +#define _MAKE_WARM_r11 1241 +#define _MAKE_WARM_r22 1242 +#define _MAKE_WARM_r33 1243 +#define _MAP_ADD_r20 1244 +#define _MATCH_CLASS_r31 1245 +#define _MATCH_KEYS_r23 1246 +#define _MATCH_MAPPING_r02 1247 +#define _MATCH_MAPPING_r12 1248 +#define _MATCH_MAPPING_r23 1249 +#define _MATCH_SEQUENCE_r02 1250 +#define _MATCH_SEQUENCE_r12 1251 +#define _MATCH_SEQUENCE_r23 1252 +#define _MAYBE_EXPAND_METHOD_r00 1253 +#define _MAYBE_EXPAND_METHOD_KW_r11 1254 +#define _MONITOR_CALL_r00 1255 +#define _MONITOR_CALL_KW_r11 1256 +#define _MONITOR_JUMP_BACKWARD_r00 1257 +#define _MONITOR_JUMP_BACKWARD_r11 1258 +#define _MONITOR_JUMP_BACKWARD_r22 1259 +#define _MONITOR_JUMP_BACKWARD_r33 1260 +#define _MONITOR_RESUME_r00 1261 +#define _NOP_r00 1262 +#define _NOP_r11 1263 +#define _NOP_r22 1264 +#define _NOP_r33 1265 +#define _POP_CALL_r20 1266 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1267 +#define _POP_CALL_ONE_r30 1268 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1269 +#define _POP_CALL_TWO_r30 1270 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1271 +#define _POP_EXCEPT_r10 1272 +#define _POP_ITER_r20 1273 +#define _POP_JUMP_IF_FALSE_r00 1274 +#define _POP_JUMP_IF_FALSE_r10 1275 +#define _POP_JUMP_IF_FALSE_r21 1276 +#define _POP_JUMP_IF_FALSE_r32 1277 +#define _POP_JUMP_IF_TRUE_r00 1278 +#define _POP_JUMP_IF_TRUE_r10 1279 +#define _POP_JUMP_IF_TRUE_r21 1280 +#define _POP_JUMP_IF_TRUE_r32 1281 +#define _POP_TOP_r10 1282 +#define _POP_TOP_FLOAT_r00 1283 +#define _POP_TOP_FLOAT_r10 1284 +#define _POP_TOP_FLOAT_r21 1285 +#define _POP_TOP_FLOAT_r32 1286 +#define _POP_TOP_INT_r00 1287 +#define _POP_TOP_INT_r10 1288 +#define _POP_TOP_INT_r21 1289 +#define _POP_TOP_INT_r32 1290 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1291 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1292 +#define _POP_TOP_NOP_r00 1293 +#define _POP_TOP_NOP_r10 1294 +#define _POP_TOP_NOP_r21 1295 +#define _POP_TOP_NOP_r32 1296 +#define _POP_TOP_UNICODE_r00 1297 +#define _POP_TOP_UNICODE_r10 1298 +#define _POP_TOP_UNICODE_r21 1299 +#define _POP_TOP_UNICODE_r32 1300 +#define _POP_TWO_r20 1301 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1302 +#define _PUSH_EXC_INFO_r02 1303 +#define _PUSH_EXC_INFO_r12 1304 +#define _PUSH_EXC_INFO_r23 1305 +#define _PUSH_FRAME_r10 1306 +#define _PUSH_NULL_r01 1307 +#define _PUSH_NULL_r12 1308 +#define _PUSH_NULL_r23 1309 +#define _PUSH_NULL_CONDITIONAL_r00 1310 +#define _PY_FRAME_EX_r31 1311 +#define _PY_FRAME_GENERAL_r01 1312 +#define _PY_FRAME_KW_r11 1313 +#define _QUICKEN_RESUME_r00 1314 +#define _QUICKEN_RESUME_r11 1315 +#define _QUICKEN_RESUME_r22 1316 +#define _QUICKEN_RESUME_r33 1317 +#define _REPLACE_WITH_TRUE_r02 1318 +#define _REPLACE_WITH_TRUE_r12 1319 +#define _REPLACE_WITH_TRUE_r23 1320 +#define _RESUME_CHECK_r00 1321 +#define _RESUME_CHECK_r11 1322 +#define _RESUME_CHECK_r22 1323 +#define _RESUME_CHECK_r33 1324 +#define _RETURN_GENERATOR_r01 1325 +#define _RETURN_VALUE_r11 1326 +#define _SAVE_RETURN_OFFSET_r00 1327 +#define _SAVE_RETURN_OFFSET_r11 1328 +#define _SAVE_RETURN_OFFSET_r22 1329 +#define _SAVE_RETURN_OFFSET_r33 1330 +#define _SEND_r22 1331 +#define _SEND_GEN_FRAME_r22 1332 +#define _SETUP_ANNOTATIONS_r00 1333 +#define _SET_ADD_r10 1334 +#define _SET_FUNCTION_ATTRIBUTE_r01 1335 +#define _SET_FUNCTION_ATTRIBUTE_r11 1336 +#define _SET_FUNCTION_ATTRIBUTE_r21 1337 +#define _SET_FUNCTION_ATTRIBUTE_r32 1338 +#define _SET_IP_r00 1339 +#define _SET_IP_r11 1340 +#define _SET_IP_r22 1341 +#define _SET_IP_r33 1342 +#define _SET_UPDATE_r10 1343 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1344 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1345 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1346 +#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1347 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1348 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1349 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1350 +#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1351 +#define _SPILL_OR_RELOAD_r01 1352 +#define _SPILL_OR_RELOAD_r02 1353 +#define _SPILL_OR_RELOAD_r03 1354 +#define _SPILL_OR_RELOAD_r10 1355 +#define _SPILL_OR_RELOAD_r12 1356 +#define _SPILL_OR_RELOAD_r13 1357 +#define _SPILL_OR_RELOAD_r20 1358 +#define _SPILL_OR_RELOAD_r21 1359 +#define _SPILL_OR_RELOAD_r23 1360 +#define _SPILL_OR_RELOAD_r30 1361 +#define _SPILL_OR_RELOAD_r31 1362 +#define _SPILL_OR_RELOAD_r32 1363 +#define _START_EXECUTOR_r00 1364 +#define _STORE_ATTR_r20 1365 +#define _STORE_ATTR_INSTANCE_VALUE_r21 1366 +#define _STORE_ATTR_SLOT_r21 1367 +#define _STORE_ATTR_WITH_HINT_r21 1368 +#define _STORE_DEREF_r10 1369 +#define _STORE_FAST_LOAD_FAST_r11 1370 +#define _STORE_FAST_STORE_FAST_r20 1371 +#define _STORE_GLOBAL_r10 1372 +#define _STORE_NAME_r10 1373 +#define _STORE_SLICE_r30 1374 +#define _STORE_SUBSCR_r30 1375 +#define _STORE_SUBSCR_DICT_r31 1376 +#define _STORE_SUBSCR_LIST_INT_r32 1377 +#define _SWAP_r11 1378 +#define _SWAP_2_r02 1379 +#define _SWAP_2_r12 1380 +#define _SWAP_2_r22 1381 +#define _SWAP_2_r33 1382 +#define _SWAP_3_r03 1383 +#define _SWAP_3_r13 1384 +#define _SWAP_3_r23 1385 +#define _SWAP_3_r33 1386 +#define _SWAP_FAST_r01 1387 +#define _SWAP_FAST_r11 1388 +#define _SWAP_FAST_r22 1389 +#define _SWAP_FAST_r33 1390 +#define _SWAP_FAST_0_r01 1391 +#define _SWAP_FAST_0_r11 1392 +#define _SWAP_FAST_0_r22 1393 +#define _SWAP_FAST_0_r33 1394 +#define _SWAP_FAST_1_r01 1395 +#define _SWAP_FAST_1_r11 1396 +#define _SWAP_FAST_1_r22 1397 +#define _SWAP_FAST_1_r33 1398 +#define _SWAP_FAST_2_r01 1399 +#define _SWAP_FAST_2_r11 1400 +#define _SWAP_FAST_2_r22 1401 +#define _SWAP_FAST_2_r33 1402 +#define _SWAP_FAST_3_r01 1403 +#define _SWAP_FAST_3_r11 1404 +#define _SWAP_FAST_3_r22 1405 +#define _SWAP_FAST_3_r33 1406 +#define _SWAP_FAST_4_r01 1407 +#define _SWAP_FAST_4_r11 1408 +#define _SWAP_FAST_4_r22 1409 +#define _SWAP_FAST_4_r33 1410 +#define _SWAP_FAST_5_r01 1411 +#define _SWAP_FAST_5_r11 1412 +#define _SWAP_FAST_5_r22 1413 +#define _SWAP_FAST_5_r33 1414 +#define _SWAP_FAST_6_r01 1415 +#define _SWAP_FAST_6_r11 1416 +#define _SWAP_FAST_6_r22 1417 +#define _SWAP_FAST_6_r33 1418 +#define _SWAP_FAST_7_r01 1419 +#define _SWAP_FAST_7_r11 1420 +#define _SWAP_FAST_7_r22 1421 +#define _SWAP_FAST_7_r33 1422 +#define _TIER2_RESUME_CHECK_r00 1423 +#define _TIER2_RESUME_CHECK_r11 1424 +#define _TIER2_RESUME_CHECK_r22 1425 +#define _TIER2_RESUME_CHECK_r33 1426 +#define _TO_BOOL_r11 1427 +#define _TO_BOOL_BOOL_r01 1428 +#define _TO_BOOL_BOOL_r11 1429 +#define _TO_BOOL_BOOL_r22 1430 +#define _TO_BOOL_BOOL_r33 1431 +#define _TO_BOOL_INT_r02 1432 +#define _TO_BOOL_INT_r12 1433 +#define _TO_BOOL_INT_r23 1434 +#define _TO_BOOL_LIST_r02 1435 +#define _TO_BOOL_LIST_r12 1436 +#define _TO_BOOL_LIST_r23 1437 +#define _TO_BOOL_NONE_r01 1438 +#define _TO_BOOL_NONE_r11 1439 +#define _TO_BOOL_NONE_r22 1440 +#define _TO_BOOL_NONE_r33 1441 +#define _TO_BOOL_STR_r02 1442 +#define _TO_BOOL_STR_r12 1443 +#define _TO_BOOL_STR_r23 1444 +#define _TRACE_RECORD_r00 1445 +#define _UNARY_INVERT_r12 1446 +#define _UNARY_NEGATIVE_r12 1447 +#define _UNARY_NOT_r01 1448 +#define _UNARY_NOT_r11 1449 +#define _UNARY_NOT_r22 1450 +#define _UNARY_NOT_r33 1451 +#define _UNPACK_EX_r10 1452 +#define _UNPACK_SEQUENCE_r10 1453 +#define _UNPACK_SEQUENCE_LIST_r10 1454 +#define _UNPACK_SEQUENCE_TUPLE_r10 1455 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1456 +#define _WITH_EXCEPT_START_r33 1457 +#define _YIELD_VALUE_r11 1458 +#define MAX_UOP_REGS_ID 1458 #ifdef __cplusplus } diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index e8dd136c2fd7b1..c1ff8f4e422cd4 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -17,122 +17,123 @@ extern "C" { #define CALL_FUNCTION_EX 4 #define CHECK_EG_MATCH 5 #define CHECK_EXC_MATCH 6 -#define CLEANUP_THROW 7 -#define DELETE_SUBSCR 8 -#define END_FOR 9 -#define END_SEND 10 -#define EXIT_INIT_CHECK 11 -#define FORMAT_SIMPLE 12 -#define FORMAT_WITH_SPEC 13 -#define GET_AITER 14 -#define GET_ANEXT 15 -#define GET_ASEND 16 +#define CLEANUP_ASYNC_THROW 7 +#define CLEANUP_THROW 8 +#define DELETE_SUBSCR 9 +#define END_FOR 10 +#define END_SEND 11 +#define EXIT_INIT_CHECK 12 +#define FORMAT_SIMPLE 13 +#define FORMAT_WITH_SPEC 14 +#define GET_AITER 15 +#define GET_ANEXT 16 #define RESERVED 17 -#define GET_ASYNC_YIELD_FROM_ITER 18 -#define GET_ITER 19 -#define GET_LEN 20 -#define GET_YIELD_FROM_ITER 21 -#define INTERPRETER_EXIT 22 -#define LOAD_BUILD_CLASS 23 -#define LOAD_LOCALS 24 -#define MAKE_FUNCTION 25 -#define MATCH_KEYS 26 -#define MATCH_MAPPING 27 -#define MATCH_SEQUENCE 28 -#define NOP 29 -#define NOT_TAKEN 30 -#define POP_EXCEPT 31 -#define POP_ITER 32 -#define POP_TOP 33 -#define PUSH_EXC_INFO 34 -#define PUSH_NULL 35 -#define RETURN_GENERATOR 36 -#define RETURN_VALUE 37 -#define SETUP_ANNOTATIONS 38 -#define STORE_SLICE 39 -#define STORE_SUBSCR 40 -#define TO_BOOL 41 -#define UNARY_INVERT 42 -#define UNARY_NEGATIVE 43 -#define UNARY_NOT 44 -#define WITH_EXCEPT_START 45 -#define BINARY_OP 46 -#define BUILD_INTERPOLATION 47 -#define BUILD_LIST 48 -#define BUILD_MAP 49 -#define BUILD_SET 50 -#define BUILD_SLICE 51 -#define BUILD_STRING 52 -#define BUILD_TUPLE 53 -#define CALL 54 -#define CALL_INTRINSIC_1 55 -#define CALL_INTRINSIC_2 56 -#define CALL_KW 57 -#define COMPARE_OP 58 -#define CONTAINS_OP 59 -#define CONVERT_VALUE 60 -#define COPY 61 -#define COPY_FREE_VARS 62 -#define DELETE_ATTR 63 -#define DELETE_DEREF 64 -#define DELETE_FAST 65 -#define DELETE_GLOBAL 66 -#define DELETE_NAME 67 -#define DICT_MERGE 68 -#define DICT_UPDATE 69 -#define END_ASYNC_FOR 70 -#define EXTENDED_ARG 71 -#define FOR_ITER 72 -#define GET_AWAITABLE 73 -#define IMPORT_FROM 74 -#define IMPORT_NAME 75 -#define IS_OP 76 -#define JUMP_BACKWARD 77 -#define JUMP_BACKWARD_NO_INTERRUPT 78 -#define JUMP_FORWARD 79 -#define LIST_APPEND 80 -#define LIST_EXTEND 81 -#define LOAD_ATTR 82 -#define LOAD_COMMON_CONSTANT 83 -#define LOAD_CONST 84 -#define LOAD_DEREF 85 -#define LOAD_FAST 86 -#define LOAD_FAST_AND_CLEAR 87 -#define LOAD_FAST_BORROW 88 -#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 89 -#define LOAD_FAST_CHECK 90 -#define LOAD_FAST_LOAD_FAST 91 -#define LOAD_FROM_DICT_OR_DEREF 92 -#define LOAD_FROM_DICT_OR_GLOBALS 93 -#define LOAD_GLOBAL 94 -#define LOAD_NAME 95 -#define LOAD_SMALL_INT 96 -#define LOAD_SPECIAL 97 -#define LOAD_SUPER_ATTR 98 -#define MAKE_CELL 99 -#define MAP_ADD 100 -#define MATCH_CLASS 101 -#define POP_JUMP_IF_FALSE 102 -#define POP_JUMP_IF_NONE 103 -#define POP_JUMP_IF_NOT_NONE 104 -#define POP_JUMP_IF_TRUE 105 -#define RAISE_VARARGS 106 -#define RERAISE 107 -#define SEND 108 -#define SET_ADD 109 -#define SET_FUNCTION_ATTRIBUTE 110 -#define SET_UPDATE 111 -#define STORE_ATTR 112 -#define STORE_DEREF 113 -#define STORE_FAST 114 -#define STORE_FAST_LOAD_FAST 115 -#define STORE_FAST_STORE_FAST 116 -#define STORE_GLOBAL 117 -#define STORE_NAME 118 -#define SWAP 119 -#define UNPACK_EX 120 -#define UNPACK_SEQUENCE 121 -#define YIELD_VALUE 122 +#define GET_ASEND 18 +#define GET_ASYNC_YIELD_FROM_ITER 19 +#define GET_ITER 20 +#define GET_LEN 21 +#define GET_YIELD_FROM_ITER 22 +#define INTERPRETER_EXIT 23 +#define LOAD_BUILD_CLASS 24 +#define LOAD_LOCALS 25 +#define MAKE_FUNCTION 26 +#define MATCH_KEYS 27 +#define MATCH_MAPPING 28 +#define MATCH_SEQUENCE 29 +#define NOP 30 +#define NOT_TAKEN 31 +#define POP_EXCEPT 32 +#define POP_ITER 33 +#define POP_TOP 34 +#define PUSH_EXC_INFO 35 +#define PUSH_NULL 36 +#define RETURN_GENERATOR 37 +#define RETURN_VALUE 38 +#define SETUP_ANNOTATIONS 39 +#define STORE_SLICE 40 +#define STORE_SUBSCR 41 +#define TO_BOOL 42 +#define UNARY_INVERT 43 +#define UNARY_NEGATIVE 44 +#define UNARY_NOT 45 +#define WITH_EXCEPT_START 46 +#define BINARY_OP 47 +#define BUILD_INTERPOLATION 48 +#define BUILD_LIST 49 +#define BUILD_MAP 50 +#define BUILD_SET 51 +#define BUILD_SLICE 52 +#define BUILD_STRING 53 +#define BUILD_TUPLE 54 +#define CALL 55 +#define CALL_INTRINSIC_1 56 +#define CALL_INTRINSIC_2 57 +#define CALL_KW 58 +#define COMPARE_OP 59 +#define CONTAINS_OP 60 +#define CONVERT_VALUE 61 +#define COPY 62 +#define COPY_FREE_VARS 63 +#define DELETE_ATTR 64 +#define DELETE_DEREF 65 +#define DELETE_FAST 66 +#define DELETE_GLOBAL 67 +#define DELETE_NAME 68 +#define DICT_MERGE 69 +#define DICT_UPDATE 70 +#define END_ASYNC_FOR 71 +#define EXTENDED_ARG 72 +#define FOR_ITER 73 +#define GET_AWAITABLE 74 +#define IMPORT_FROM 75 +#define IMPORT_NAME 76 +#define IS_OP 77 +#define JUMP_BACKWARD 78 +#define JUMP_BACKWARD_NO_INTERRUPT 79 +#define JUMP_FORWARD 80 +#define LIST_APPEND 81 +#define LIST_EXTEND 82 +#define LOAD_ATTR 83 +#define LOAD_COMMON_CONSTANT 84 +#define LOAD_CONST 85 +#define LOAD_DEREF 86 +#define LOAD_FAST 87 +#define LOAD_FAST_AND_CLEAR 88 +#define LOAD_FAST_BORROW 89 +#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 90 +#define LOAD_FAST_CHECK 91 +#define LOAD_FAST_LOAD_FAST 92 +#define LOAD_FROM_DICT_OR_DEREF 93 +#define LOAD_FROM_DICT_OR_GLOBALS 94 +#define LOAD_GLOBAL 95 +#define LOAD_NAME 96 +#define LOAD_SMALL_INT 97 +#define LOAD_SPECIAL 98 +#define LOAD_SUPER_ATTR 99 +#define MAKE_CELL 100 +#define MAP_ADD 101 +#define MATCH_CLASS 102 +#define POP_JUMP_IF_FALSE 103 +#define POP_JUMP_IF_NONE 104 +#define POP_JUMP_IF_NOT_NONE 105 +#define POP_JUMP_IF_TRUE 106 +#define RAISE_VARARGS 107 +#define RERAISE 108 +#define SEND 109 +#define SET_ADD 110 +#define SET_FUNCTION_ATTRIBUTE 111 +#define SET_UPDATE 112 +#define STORE_ATTR 113 +#define STORE_DEREF 114 +#define STORE_FAST 115 +#define STORE_FAST_LOAD_FAST 116 +#define STORE_FAST_STORE_FAST 117 +#define STORE_GLOBAL 118 +#define STORE_NAME 119 +#define SWAP 120 +#define UNPACK_EX 121 +#define UNPACK_SEQUENCE 122 +#define YIELD_VALUE 123 #define RESUME 128 #define BINARY_OP_ADD_FLOAT 129 #define BINARY_OP_ADD_INT 130 @@ -253,7 +254,7 @@ extern "C" { #define SETUP_WITH 265 #define STORE_FAST_MAYBE_NULL 266 -#define HAVE_ARGUMENT 45 +#define HAVE_ARGUMENT 46 #define MIN_SPECIALIZED_OPCODE 129 #define MIN_INSTRUMENTED_OPCODE 233 diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index 450ae3c1ede31f..77671fcd3b781f 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -226,121 +226,122 @@ 'CALL_FUNCTION_EX': 4, 'CHECK_EG_MATCH': 5, 'CHECK_EXC_MATCH': 6, - 'CLEANUP_THROW': 7, - 'DELETE_SUBSCR': 8, - 'END_FOR': 9, - 'END_SEND': 10, - 'EXIT_INIT_CHECK': 11, - 'FORMAT_SIMPLE': 12, - 'FORMAT_WITH_SPEC': 13, - 'GET_AITER': 14, - 'GET_ANEXT': 15, - 'GET_ASEND': 16, - 'GET_ASYNC_YIELD_FROM_ITER': 18, - 'GET_ITER': 19, - 'GET_LEN': 20, - 'GET_YIELD_FROM_ITER': 21, - 'INTERPRETER_EXIT': 22, - 'LOAD_BUILD_CLASS': 23, - 'LOAD_LOCALS': 24, - 'MAKE_FUNCTION': 25, - 'MATCH_KEYS': 26, - 'MATCH_MAPPING': 27, - 'MATCH_SEQUENCE': 28, - 'NOP': 29, - 'NOT_TAKEN': 30, - 'POP_EXCEPT': 31, - 'POP_ITER': 32, - 'POP_TOP': 33, - 'PUSH_EXC_INFO': 34, - 'PUSH_NULL': 35, - 'RETURN_GENERATOR': 36, - 'RETURN_VALUE': 37, - 'SETUP_ANNOTATIONS': 38, - 'STORE_SLICE': 39, - 'STORE_SUBSCR': 40, - 'TO_BOOL': 41, - 'UNARY_INVERT': 42, - 'UNARY_NEGATIVE': 43, - 'UNARY_NOT': 44, - 'WITH_EXCEPT_START': 45, - 'BINARY_OP': 46, - 'BUILD_INTERPOLATION': 47, - 'BUILD_LIST': 48, - 'BUILD_MAP': 49, - 'BUILD_SET': 50, - 'BUILD_SLICE': 51, - 'BUILD_STRING': 52, - 'BUILD_TUPLE': 53, - 'CALL': 54, - 'CALL_INTRINSIC_1': 55, - 'CALL_INTRINSIC_2': 56, - 'CALL_KW': 57, - 'COMPARE_OP': 58, - 'CONTAINS_OP': 59, - 'CONVERT_VALUE': 60, - 'COPY': 61, - 'COPY_FREE_VARS': 62, - 'DELETE_ATTR': 63, - 'DELETE_DEREF': 64, - 'DELETE_FAST': 65, - 'DELETE_GLOBAL': 66, - 'DELETE_NAME': 67, - 'DICT_MERGE': 68, - 'DICT_UPDATE': 69, - 'END_ASYNC_FOR': 70, - 'EXTENDED_ARG': 71, - 'FOR_ITER': 72, - 'GET_AWAITABLE': 73, - 'IMPORT_FROM': 74, - 'IMPORT_NAME': 75, - 'IS_OP': 76, - 'JUMP_BACKWARD': 77, - 'JUMP_BACKWARD_NO_INTERRUPT': 78, - 'JUMP_FORWARD': 79, - 'LIST_APPEND': 80, - 'LIST_EXTEND': 81, - 'LOAD_ATTR': 82, - 'LOAD_COMMON_CONSTANT': 83, - 'LOAD_CONST': 84, - 'LOAD_DEREF': 85, - 'LOAD_FAST': 86, - 'LOAD_FAST_AND_CLEAR': 87, - 'LOAD_FAST_BORROW': 88, - 'LOAD_FAST_BORROW_LOAD_FAST_BORROW': 89, - 'LOAD_FAST_CHECK': 90, - 'LOAD_FAST_LOAD_FAST': 91, - 'LOAD_FROM_DICT_OR_DEREF': 92, - 'LOAD_FROM_DICT_OR_GLOBALS': 93, - 'LOAD_GLOBAL': 94, - 'LOAD_NAME': 95, - 'LOAD_SMALL_INT': 96, - 'LOAD_SPECIAL': 97, - 'LOAD_SUPER_ATTR': 98, - 'MAKE_CELL': 99, - 'MAP_ADD': 100, - 'MATCH_CLASS': 101, - 'POP_JUMP_IF_FALSE': 102, - 'POP_JUMP_IF_NONE': 103, - 'POP_JUMP_IF_NOT_NONE': 104, - 'POP_JUMP_IF_TRUE': 105, - 'RAISE_VARARGS': 106, - 'RERAISE': 107, - 'SEND': 108, - 'SET_ADD': 109, - 'SET_FUNCTION_ATTRIBUTE': 110, - 'SET_UPDATE': 111, - 'STORE_ATTR': 112, - 'STORE_DEREF': 113, - 'STORE_FAST': 114, - 'STORE_FAST_LOAD_FAST': 115, - 'STORE_FAST_STORE_FAST': 116, - 'STORE_GLOBAL': 117, - 'STORE_NAME': 118, - 'SWAP': 119, - 'UNPACK_EX': 120, - 'UNPACK_SEQUENCE': 121, - 'YIELD_VALUE': 122, + 'CLEANUP_ASYNC_THROW': 7, + 'CLEANUP_THROW': 8, + 'DELETE_SUBSCR': 9, + 'END_FOR': 10, + 'END_SEND': 11, + 'EXIT_INIT_CHECK': 12, + 'FORMAT_SIMPLE': 13, + 'FORMAT_WITH_SPEC': 14, + 'GET_AITER': 15, + 'GET_ANEXT': 16, + 'GET_ASEND': 18, + 'GET_ASYNC_YIELD_FROM_ITER': 19, + 'GET_ITER': 20, + 'GET_LEN': 21, + 'GET_YIELD_FROM_ITER': 22, + 'INTERPRETER_EXIT': 23, + 'LOAD_BUILD_CLASS': 24, + 'LOAD_LOCALS': 25, + 'MAKE_FUNCTION': 26, + 'MATCH_KEYS': 27, + 'MATCH_MAPPING': 28, + 'MATCH_SEQUENCE': 29, + 'NOP': 30, + 'NOT_TAKEN': 31, + 'POP_EXCEPT': 32, + 'POP_ITER': 33, + 'POP_TOP': 34, + 'PUSH_EXC_INFO': 35, + 'PUSH_NULL': 36, + 'RETURN_GENERATOR': 37, + 'RETURN_VALUE': 38, + 'SETUP_ANNOTATIONS': 39, + 'STORE_SLICE': 40, + 'STORE_SUBSCR': 41, + 'TO_BOOL': 42, + 'UNARY_INVERT': 43, + 'UNARY_NEGATIVE': 44, + 'UNARY_NOT': 45, + 'WITH_EXCEPT_START': 46, + 'BINARY_OP': 47, + 'BUILD_INTERPOLATION': 48, + 'BUILD_LIST': 49, + 'BUILD_MAP': 50, + 'BUILD_SET': 51, + 'BUILD_SLICE': 52, + 'BUILD_STRING': 53, + 'BUILD_TUPLE': 54, + 'CALL': 55, + 'CALL_INTRINSIC_1': 56, + 'CALL_INTRINSIC_2': 57, + 'CALL_KW': 58, + 'COMPARE_OP': 59, + 'CONTAINS_OP': 60, + 'CONVERT_VALUE': 61, + 'COPY': 62, + 'COPY_FREE_VARS': 63, + 'DELETE_ATTR': 64, + 'DELETE_DEREF': 65, + 'DELETE_FAST': 66, + 'DELETE_GLOBAL': 67, + 'DELETE_NAME': 68, + 'DICT_MERGE': 69, + 'DICT_UPDATE': 70, + 'END_ASYNC_FOR': 71, + 'EXTENDED_ARG': 72, + 'FOR_ITER': 73, + 'GET_AWAITABLE': 74, + 'IMPORT_FROM': 75, + 'IMPORT_NAME': 76, + 'IS_OP': 77, + 'JUMP_BACKWARD': 78, + 'JUMP_BACKWARD_NO_INTERRUPT': 79, + 'JUMP_FORWARD': 80, + 'LIST_APPEND': 81, + 'LIST_EXTEND': 82, + 'LOAD_ATTR': 83, + 'LOAD_COMMON_CONSTANT': 84, + 'LOAD_CONST': 85, + 'LOAD_DEREF': 86, + 'LOAD_FAST': 87, + 'LOAD_FAST_AND_CLEAR': 88, + 'LOAD_FAST_BORROW': 89, + 'LOAD_FAST_BORROW_LOAD_FAST_BORROW': 90, + 'LOAD_FAST_CHECK': 91, + 'LOAD_FAST_LOAD_FAST': 92, + 'LOAD_FROM_DICT_OR_DEREF': 93, + 'LOAD_FROM_DICT_OR_GLOBALS': 94, + 'LOAD_GLOBAL': 95, + 'LOAD_NAME': 96, + 'LOAD_SMALL_INT': 97, + 'LOAD_SPECIAL': 98, + 'LOAD_SUPER_ATTR': 99, + 'MAKE_CELL': 100, + 'MAP_ADD': 101, + 'MATCH_CLASS': 102, + 'POP_JUMP_IF_FALSE': 103, + 'POP_JUMP_IF_NONE': 104, + 'POP_JUMP_IF_NOT_NONE': 105, + 'POP_JUMP_IF_TRUE': 106, + 'RAISE_VARARGS': 107, + 'RERAISE': 108, + 'SEND': 109, + 'SET_ADD': 110, + 'SET_FUNCTION_ATTRIBUTE': 111, + 'SET_UPDATE': 112, + 'STORE_ATTR': 113, + 'STORE_DEREF': 114, + 'STORE_FAST': 115, + 'STORE_FAST_LOAD_FAST': 116, + 'STORE_FAST_STORE_FAST': 117, + 'STORE_GLOBAL': 118, + 'STORE_NAME': 119, + 'SWAP': 120, + 'UNPACK_EX': 121, + 'UNPACK_SEQUENCE': 122, + 'YIELD_VALUE': 123, 'INSTRUMENTED_END_FOR': 233, 'INSTRUMENTED_POP_ITER': 234, 'INSTRUMENTED_END_SEND': 235, @@ -374,5 +375,5 @@ 'STORE_FAST_MAYBE_NULL': 266, } -HAVE_ARGUMENT = 45 +HAVE_ARGUMENT = 46 MIN_INSTRUMENTED_OPCODE = 233 diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index 5bb73d10c73d26..f705d6dd58524c 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -4700,6 +4700,35 @@ DISPATCH(); } + TARGET(CLEANUP_ASYNC_THROW) { + #if _Py_TAIL_CALL_INTERP + int opcode = CLEANUP_ASYNC_THROW; + (void)(opcode); + #endif + _Py_CODEUNIT* const this_instr = next_instr; + (void)this_instr; + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); + _PyStackRef exc_value_st; + exc_value_st = stack_pointer[-1]; + PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + assert(exc_value != NULL); + assert(PyExceptionInstance_Check(exc_value)); + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + _PyFrame_SetStackPointer(frame, stack_pointer); + int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (!matches) { + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyErr_SetRaisedException(tstate, exc_value); + monitor_reraise(tstate, frame, this_instr); + JUMP_TO_LABEL(exception_unwind); + } + DISPATCH(); + } + TARGET(CLEANUP_THROW) { #if _Py_TAIL_CALL_INTERP int opcode = CLEANUP_THROW; diff --git a/Modules/_testinternalcapi/test_targets.h b/Modules/_testinternalcapi/test_targets.h index fcd8ba6c04f626..e55ea56ebda768 100644 --- a/Modules/_testinternalcapi/test_targets.h +++ b/Modules/_testinternalcapi/test_targets.h @@ -7,6 +7,7 @@ static void *opcode_targets_table[256] = { &&TARGET_CALL_FUNCTION_EX, &&TARGET_CHECK_EG_MATCH, &&TARGET_CHECK_EXC_MATCH, + &&TARGET_CLEANUP_ASYNC_THROW, &&TARGET_CLEANUP_THROW, &&TARGET_DELETE_SUBSCR, &&TARGET_END_FOR, @@ -16,8 +17,8 @@ static void *opcode_targets_table[256] = { &&TARGET_FORMAT_WITH_SPEC, &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, - &&TARGET_GET_ASEND, &&TARGET_RESERVED, + &&TARGET_GET_ASEND, &&TARGET_GET_ASYNC_YIELD_FROM_ITER, &&TARGET_GET_ITER, &&TARGET_GET_LEN, @@ -127,7 +128,6 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -382,7 +382,7 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&_unknown_opcode, + &&TARGET_TRACE_RECORD, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -589,6 +589,7 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TUPLE_1(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TYPE_1(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EG_MATCH(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EXC_MATCH(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CLEANUP_ASYNC_THROW(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CLEANUP_THROW(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP_FLOAT(TAIL_CALL_PARAMS); @@ -832,6 +833,7 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [CALL_TYPE_1] = _TAIL_CALL_CALL_TYPE_1, [CHECK_EG_MATCH] = _TAIL_CALL_CHECK_EG_MATCH, [CHECK_EXC_MATCH] = _TAIL_CALL_CHECK_EXC_MATCH, + [CLEANUP_ASYNC_THROW] = _TAIL_CALL_CLEANUP_ASYNC_THROW, [CLEANUP_THROW] = _TAIL_CALL_CLEANUP_THROW, [COMPARE_OP] = _TAIL_CALL_COMPARE_OP, [COMPARE_OP_FLOAT] = _TAIL_CALL_COMPARE_OP_FLOAT, @@ -1004,7 +1006,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, - [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1090,6 +1091,7 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [CALL_TYPE_1] = _TAIL_CALL_TRACE_RECORD, [CHECK_EG_MATCH] = _TAIL_CALL_TRACE_RECORD, [CHECK_EXC_MATCH] = _TAIL_CALL_TRACE_RECORD, + [CLEANUP_ASYNC_THROW] = _TAIL_CALL_TRACE_RECORD, [CLEANUP_THROW] = _TAIL_CALL_TRACE_RECORD, [COMPARE_OP] = _TAIL_CALL_TRACE_RECORD, [COMPARE_OP_FLOAT] = _TAIL_CALL_TRACE_RECORD, @@ -1262,7 +1264,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, - [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index 28710c111c9d34..9ac9e032df43af 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -1,19 +1,19 @@ // Auto-generated by Programs/freeze_test_frozenmain.py unsigned char M_test_frozenmain[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,0,0,0,0,243,184,0,0,0,128,0,96,0,84,1, - 75,0,118,0,96,0,84,1,75,4,118,1,95,2,35,0, - 84,2,54,1,0,0,0,0,0,0,33,0,95,2,35,0, - 84,3,95,0,82,6,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,54,2,0,0,0,0,0,0, - 33,0,95,1,82,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,35,0,54,0,0,0,0,0, - 0,0,84,4,46,26,0,0,0,0,0,0,0,0,0,0, - 118,5,84,7,19,0,72,24,0,0,118,6,95,2,35,0, - 84,5,95,6,12,0,84,6,95,5,95,6,46,26,0,0, - 0,0,0,0,0,0,0,0,12,0,52,4,54,1,0,0, - 0,0,0,0,33,0,77,26,0,0,9,0,32,0,84,1, - 37,0,41,8,233,0,0,0,0,78,122,18,70,114,111,122, + 0,0,0,0,0,243,184,0,0,0,128,0,97,0,85,1, + 76,0,119,0,97,0,85,1,76,4,119,1,96,2,36,0, + 85,2,55,1,0,0,0,0,0,0,34,0,96,2,36,0, + 85,3,96,0,83,6,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,55,2,0,0,0,0,0,0, + 34,0,96,1,83,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,36,0,55,0,0,0,0,0, + 0,0,85,4,47,26,0,0,0,0,0,0,0,0,0,0, + 119,5,85,7,20,0,73,24,0,0,119,6,96,2,36,0, + 85,5,96,6,13,0,85,6,96,5,96,6,47,26,0,0, + 0,0,0,0,0,0,0,0,13,0,53,4,55,1,0,0, + 0,0,0,0,34,0,78,26,0,0,10,0,33,0,85,1, + 38,0,41,8,233,0,0,0,0,78,122,18,70,114,111,122, 101,110,32,72,101,108,108,111,32,87,111,114,108,100,122,8, 115,121,115,46,97,114,103,118,218,6,99,111,110,102,105,103, 122,7,99,111,110,102,105,103,32,122,2,58,32,41,5,218, diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 3ef6926d718722..25c08e647a67da 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1583,6 +1583,20 @@ dummy_func( } } + inst(CLEANUP_ASYNC_THROW, (exc_value_st -- )) { + PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + assert(exc_value != NULL); + assert(PyExceptionInstance_Check(exc_value)); + INPUTS_DEAD(); + + int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); + if (!matches) { + _PyErr_SetRaisedException(tstate, exc_value); + monitor_reraise(tstate, frame, this_instr); + goto exception_unwind; + } + } + inst(LOAD_COMMON_CONSTANT, ( -- value)) { // Keep in sync with _common_constants in opcode.py assert(oparg < NUM_COMMON_CONSTANTS); diff --git a/Python/codegen.c b/Python/codegen.c index dadabd9bce262a..fa7cbe71a74845 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -514,13 +514,13 @@ static int codegen_async_yield_from(compiler *c, location loc, expr_ty e) { NEW_JUMP_TARGET_LABEL(c, send); - NEW_JUMP_TARGET_LABEL(c, fail); + NEW_JUMP_TARGET_LABEL(c, exit); VISIT(c, expr, e->v.AsyncYieldFrom.value); ADDOP(c, loc, GET_ASYNC_YIELD_FROM_ITER); USE_LABEL(c, send); - ADDOP_JUMP(c, loc, SETUP_FINALLY, fail); + ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); // Virtual try/except for the StopIteration; see above. // Get the __asend__() and await it. We preserve the iterator @@ -538,8 +538,8 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP(c, loc, POP_TOP); ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); - USE_LABEL(c, fail); - ADDOP(c, loc, POP_TOP); + USE_LABEL(c, exit); + ADDOP(c, loc, CLEANUP_ASYNC_THROW); return SUCCESS; } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 927c4643e2f42e..e25d93ee44c3f5 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -7010,6 +7010,8 @@ break; } + /* _CLEANUP_ASYNC_THROW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ + case _LOAD_COMMON_CONSTANT_r01: { CHECK_CURRENT_CACHED_VALUES(0); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 9a8de17e06007f..e2e0bca11dcb8f 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4700,6 +4700,35 @@ DISPATCH(); } + TARGET(CLEANUP_ASYNC_THROW) { + #if _Py_TAIL_CALL_INTERP + int opcode = CLEANUP_ASYNC_THROW; + (void)(opcode); + #endif + _Py_CODEUNIT* const this_instr = next_instr; + (void)this_instr; + frame->instr_ptr = next_instr; + next_instr += 1; + INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); + _PyStackRef exc_value_st; + exc_value_st = stack_pointer[-1]; + PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + assert(exc_value != NULL); + assert(PyExceptionInstance_Check(exc_value)); + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); + _PyFrame_SetStackPointer(frame, stack_pointer); + int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (!matches) { + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyErr_SetRaisedException(tstate, exc_value); + monitor_reraise(tstate, frame, this_instr); + JUMP_TO_LABEL(exception_unwind); + } + DISPATCH(); + } + TARGET(CLEANUP_THROW) { #if _Py_TAIL_CALL_INTERP int opcode = CLEANUP_THROW; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index fcd8ba6c04f626..e55ea56ebda768 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -7,6 +7,7 @@ static void *opcode_targets_table[256] = { &&TARGET_CALL_FUNCTION_EX, &&TARGET_CHECK_EG_MATCH, &&TARGET_CHECK_EXC_MATCH, + &&TARGET_CLEANUP_ASYNC_THROW, &&TARGET_CLEANUP_THROW, &&TARGET_DELETE_SUBSCR, &&TARGET_END_FOR, @@ -16,8 +17,8 @@ static void *opcode_targets_table[256] = { &&TARGET_FORMAT_WITH_SPEC, &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, - &&TARGET_GET_ASEND, &&TARGET_RESERVED, + &&TARGET_GET_ASEND, &&TARGET_GET_ASYNC_YIELD_FROM_ITER, &&TARGET_GET_ITER, &&TARGET_GET_LEN, @@ -127,7 +128,6 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -382,7 +382,7 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&_unknown_opcode, + &&TARGET_TRACE_RECORD, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -589,6 +589,7 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TUPLE_1(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TYPE_1(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EG_MATCH(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EXC_MATCH(TAIL_CALL_PARAMS); +static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CLEANUP_ASYNC_THROW(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CLEANUP_THROW(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP_FLOAT(TAIL_CALL_PARAMS); @@ -832,6 +833,7 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [CALL_TYPE_1] = _TAIL_CALL_CALL_TYPE_1, [CHECK_EG_MATCH] = _TAIL_CALL_CHECK_EG_MATCH, [CHECK_EXC_MATCH] = _TAIL_CALL_CHECK_EXC_MATCH, + [CLEANUP_ASYNC_THROW] = _TAIL_CALL_CLEANUP_ASYNC_THROW, [CLEANUP_THROW] = _TAIL_CALL_CLEANUP_THROW, [COMPARE_OP] = _TAIL_CALL_COMPARE_OP, [COMPARE_OP_FLOAT] = _TAIL_CALL_COMPARE_OP_FLOAT, @@ -1004,7 +1006,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, - [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1090,6 +1091,7 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [CALL_TYPE_1] = _TAIL_CALL_TRACE_RECORD, [CHECK_EG_MATCH] = _TAIL_CALL_TRACE_RECORD, [CHECK_EXC_MATCH] = _TAIL_CALL_TRACE_RECORD, + [CLEANUP_ASYNC_THROW] = _TAIL_CALL_TRACE_RECORD, [CLEANUP_THROW] = _TAIL_CALL_TRACE_RECORD, [COMPARE_OP] = _TAIL_CALL_TRACE_RECORD, [COMPARE_OP_FLOAT] = _TAIL_CALL_TRACE_RECORD, @@ -1262,7 +1264,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, - [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index e0b60bdbc2c07f..c08ff965381794 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -1385,6 +1385,8 @@ break; } + /* _CLEANUP_ASYNC_THROW is not a viable micro-op for tier 2 */ + case _LOAD_COMMON_CONSTANT: { JitOptRef value; value = sym_new_not_null(ctx); From 8cb5166d19b4972982ffe1e18b277400e2207342 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 11:36:20 -0500 Subject: [PATCH 07/48] Support return values in async yield from. --- Include/cpython/pyerrors.h | 5 ++ Include/internal/pycore_opcode_metadata.h | 4 +- Include/internal/pycore_uop_ids.h | 2 +- Modules/_testinternalcapi/test_cases.c.h | 11 +++- Objects/exceptions.c | 64 ++++++++++++++++++++++- Objects/genobject.c | 42 ++++++++++++--- Objects/object.c | 1 + Python/bytecodes.c | 7 ++- Python/codegen.c | 3 -- Python/generated_cases.c.h | 11 +++- 10 files changed, 129 insertions(+), 21 deletions(-) diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index be2e3b641c25cb..8bc91017fa2443 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -73,6 +73,11 @@ typedef struct { PyObject *value; } PyStopIterationObject; +typedef struct { + PyException_HEAD + PyObject *value; +} PyStopAsyncIterationObject; + typedef struct { PyException_HEAD PyObject *name; diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 1204fcf3bbba5d..a55bcc9824e601 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -157,7 +157,7 @@ int _PyOpcode_num_popped(int opcode, int oparg) { case CHECK_EXC_MATCH: return 2; case CLEANUP_ASYNC_THROW: - return 1; + return 2; case CLEANUP_THROW: return 3; case COMPARE_OP: @@ -654,7 +654,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { case CHECK_EXC_MATCH: return 2; case CLEANUP_ASYNC_THROW: - return 0; + return 1; case CLEANUP_THROW: return 2; case COMPARE_OP: diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index c3ae9fd3ffa031..9b446e78a0534c 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -519,7 +519,7 @@ extern "C" { #define _CHECK_VALIDITY_r11 713 #define _CHECK_VALIDITY_r22 714 #define _CHECK_VALIDITY_r33 715 -#define _CLEANUP_ASYNC_THROW_r10 716 +#define _CLEANUP_ASYNC_THROW_r21 716 #define _COLD_DYNAMIC_EXIT_r00 717 #define _COLD_EXIT_r00 718 #define _COMPARE_OP_r21 719 diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index f705d6dd58524c..196e06d9ebd0f6 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -4711,21 +4711,28 @@ next_instr += 1; INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); _PyStackRef exc_value_st; + _PyStackRef value; exc_value_st = stack_pointer[-1]; PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -1; + stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); - if (!matches) { + if (matches) { + value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); + } + else { _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetRaisedException(tstate, exc_value); monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } + stack_pointer[0] = value; + stack_pointer += 1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); DISPATCH(); } diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 499fb2b34b34a8..b7be607131ec58 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -720,8 +720,68 @@ SimpleExtendsException(PyExc_Exception, TypeError, /* * StopAsyncIteration extends Exception */ -SimpleExtendsException(PyExc_Exception, StopAsyncIteration, - "Signal the end from iterator.__anext__()."); + +static PyMemberDef StopAsyncIteration_members[] = { + {"value", _Py_T_OBJECT, offsetof(PyStopAsyncIterationObject, value), 0, + PyDoc_STR("async generator return value")}, + {NULL} /* Sentinel */ +}; + +static inline PyStopAsyncIterationObject * +PyStopAsyncIterationObject_CAST(PyObject *self) +{ + assert(self != NULL); + assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_StopAsyncIteration)); + return (PyStopAsyncIterationObject *)self; +} + +static int +StopAsyncIteration_init(PyObject *op, PyObject *args, PyObject *kwds) +{ + Py_ssize_t size = PyTuple_GET_SIZE(args); + + if (BaseException_init(op, args, kwds) < 0) { + return -1; + } + PyStopAsyncIterationObject *self = PyStopAsyncIterationObject_CAST(op); + Py_CLEAR(self->value); + PyObject *value; + if (size > 0) { + self->value = PyTuple_GET_ITEM(args, 0); + } + else { + self->value = Py_None; + }; + return 0; +} + +static int +StopAsyncIteration_clear(PyObject *op) +{ + PyStopAsyncIterationObject *self = PyStopAsyncIterationObject_CAST(op); + Py_CLEAR(self->value); + return BaseException_clear(op); +} + +static void +StopAsyncIteration_dealloc(PyObject *self) +{ + _PyObject_GC_UNTRACK(self); + (void)StopAsyncIteration_clear(self); + Py_TYPE(self)->tp_free(self); +} + +static int +StopAsyncIteration_traverse(PyObject *op, visitproc visit, void *arg) +{ + PyStopAsyncIterationObject *self = PyStopAsyncIterationObject_CAST(op); + Py_VISIT(self->value); + return BaseException_traverse(op, visit, arg); +} + +ComplexExtendsException(PyExc_Exception, StopAsyncIteration, StopAsyncIteration, + 0, 0, StopAsyncIteration_members, 0, 0, 0, + "Signal the end from iterator.__anext__()."); /* diff --git a/Objects/genobject.c b/Objects/genobject.c index 557902d86638d7..918c41da2aa846 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -307,8 +307,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult, int exc) /* If the generator just returned (as opposed to yielding), signal * that the generator is exhausted. */ if (result) { - assert(result == Py_None || !PyAsyncGen_CheckExact(gen)); - if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) { + if (result == Py_None && !arg) { /* Return NULL if called by gen_iternext() */ Py_CLEAR(result); } @@ -380,12 +379,14 @@ PyGen_am_send(PyObject *self, PyObject *arg, PyObject **result) return gen_send_ex(gen, arg, result); } +int +_PyAsyncGen_SetStopIterationValue(PyObject *value); + static PyObject * gen_set_stop_iteration(PyGenObject *gen, PyObject *result) { if (PyAsyncGen_CheckExact(gen)) { - assert(result == Py_None); - PyErr_SetNone(PyExc_StopAsyncIteration); + _PyAsyncGen_SetStopIterationValue(result); } else if (result == Py_None) { PyErr_SetNone(PyExc_StopIteration); @@ -776,8 +777,11 @@ gen_iternext(PyObject *self) * Returns 0 if StopIteration is set and -1 if any other exception is set. */ int -_PyGen_SetStopIterationValue(PyObject *value) +_PyAnyGen_SetStopIterationValue(PyObject *exc_class, PyObject *value) { + assert(exc_class != NULL); + assert(PyType_Check(exc_class)); + assert(value != NULL); assert(!PyErr_Occurred()); // Construct an exception instance manually with PyObject_CallOneArg() // but use PyErr_SetRaisedException() instead of PyErr_SetObject() as @@ -785,8 +789,8 @@ _PyGen_SetStopIterationValue(PyObject *value) // is a tuple, where the value of the StopIteration exception would be // set to 'value[0]' instead of 'value'. PyObject *exc = value == NULL - ? PyObject_CallNoArgs(PyExc_StopIteration) - : PyObject_CallOneArg(PyExc_StopIteration, value); + ? PyObject_CallNoArgs(exc_class) + : PyObject_CallOneArg(exc_class, value); if (exc == NULL) { return -1; } @@ -794,6 +798,18 @@ _PyGen_SetStopIterationValue(PyObject *value) return 0; } +int +_PyGen_SetStopIterationValue(PyObject *value) +{ + return _PyAnyGen_SetStopIterationValue(PyExc_StopIteration, value); +} + +int +_PyAsyncGen_SetStopIterationValue(PyObject *value) +{ + return _PyAnyGen_SetStopIterationValue(PyExc_StopAsyncIteration, value); +} + /* * If StopIteration exception is set, fetches its 'value' * attribute if any, otherwise sets pvalue to None. @@ -2645,6 +2661,7 @@ async_gen_yield_from_iternext(PyObject *op) { assert(op != NULL); _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + assert(self->agyf_iterator != NULL); PyObject *result = PyIter_Next(self->agyf_iterator); if (result == NULL) { return NULL; @@ -2708,6 +2725,17 @@ _PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterator) if (yield_from == NULL) { return NULL; } + if (!PyIter_Check(iterator)) { + if (PyAsyncGen_CheckExact(iterator)) { + _PyErr_Format(tstate, PyExc_TypeError, + "%T object is not iterable. Did you mean 'async yield from'?", + iterator); + } else { + _PyErr_Format(tstate, PyExc_TypeError, + "%T object is not iterable", iterator); + } + return NULL; + } yield_from->agyf_iterator = Py_NewRef(iterator); _PyObject_GC_TRACK((PyObject *)yield_from); return (PyObject *)yield_from; diff --git a/Objects/object.c b/Objects/object.c index ab73d2eb1c9c1f..530ea9836f712a 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -2577,6 +2577,7 @@ static PyTypeObject* static_types[] = { &_PyAsyncGenASend_Type, &_PyAsyncGenAThrow_Type, &_PyAsyncGenWrappedValue_Type, + &_PyAsyncGenYieldFrom_Type, &_PyBufferWrapper_Type, &_PyContextTokenMissing_Type, &_PyCoroWrapper_Type, diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 25c08e647a67da..e63a406cc0e9eb 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1583,14 +1583,17 @@ dummy_func( } } - inst(CLEANUP_ASYNC_THROW, (exc_value_st -- )) { + inst(CLEANUP_ASYNC_THROW, (iter, exc_value_st -- value)) { PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); INPUTS_DEAD(); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); - if (!matches) { + if (matches) { + value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); + } + else { _PyErr_SetRaisedException(tstate, exc_value); monitor_reraise(tstate, frame, this_instr); goto exception_unwind; diff --git a/Python/codegen.c b/Python/codegen.c index fa7cbe71a74845..8aaaaf397956b2 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -2275,9 +2275,6 @@ codegen_return(compiler *c, stmt_ty s) if (!_PyST_IsFunctionLike(ste)) { return _PyCompile_Error(c, loc, "'return' outside function"); } - if (s->v.Return.value != NULL && ste->ste_coroutine && ste->ste_generator) { - return _PyCompile_Error(c, loc, "'return' with value in async generator"); - } if (preserve_tos) { VISIT(c, expr, s->v.Return.value); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e2e0bca11dcb8f..eeb64a579dc8be 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4711,21 +4711,28 @@ next_instr += 1; INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); _PyStackRef exc_value_st; + _PyStackRef value; exc_value_st = stack_pointer[-1]; PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -1; + stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); - if (!matches) { + if (matches) { + value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); + } + else { _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetRaisedException(tstate, exc_value); monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } + stack_pointer[0] = value; + stack_pointer += 1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); DISPATCH(); } From 17eea03a3946b45130c317e7386d4741408d94ae Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 11:45:37 -0500 Subject: [PATCH 08/48] Remove tests for async gen syntax restrictions. --- Lib/test/test_asyncgen.py | 49 ------------------------ Modules/_testinternalcapi/test_cases.c.h | 12 +++++- Python/bytecodes.c | 2 +- Python/generated_cases.c.h | 12 +++++- 4 files changed, 23 insertions(+), 52 deletions(-) diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py index cd33878d6c74ba..7d758187a7f2ca 100644 --- a/Lib/test/test_asyncgen.py +++ b/Lib/test/test_asyncgen.py @@ -82,55 +82,6 @@ async def anext_impl(): return anext_impl() -class AsyncGenSyntaxTest(unittest.TestCase): - - def test_async_gen_syntax_01(self): - code = '''async def foo(): - await abc - yield from 123 - ''' - - with self.assertRaisesRegex(SyntaxError, 'yield from.*inside async'): - exec(code, {}, {}) - - def test_async_gen_syntax_02(self): - code = '''async def foo(): - yield from 123 - ''' - - with self.assertRaisesRegex(SyntaxError, 'yield from.*inside async'): - exec(code, {}, {}) - - def test_async_gen_syntax_03(self): - code = '''async def foo(): - await abc - yield - return 123 - ''' - - with self.assertRaisesRegex(SyntaxError, 'return.*value.*async gen'): - exec(code, {}, {}) - - def test_async_gen_syntax_04(self): - code = '''async def foo(): - yield - return 123 - ''' - - with self.assertRaisesRegex(SyntaxError, 'return.*value.*async gen'): - exec(code, {}, {}) - - def test_async_gen_syntax_05(self): - code = '''async def foo(): - if 0: - yield - return 12 - ''' - - with self.assertRaisesRegex(SyntaxError, 'return.*value.*async gen'): - exec(code, {}, {}) - - class AsyncGenTest(unittest.TestCase): def compare_generators(self, sync_gen, async_gen): diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index 196e06d9ebd0f6..ba4197e1a956cd 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -4710,18 +4710,28 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); + _PyStackRef iter; _PyStackRef exc_value_st; _PyStackRef value; exc_value_st = stack_pointer[-1]; + iter = stack_pointer[-2]; PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -2; + stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); if (matches) { + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = iter; + iter = PyStackRef_NULL; + stack_pointer[-1] = iter; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); } else { diff --git a/Python/bytecodes.c b/Python/bytecodes.c index e63a406cc0e9eb..c306c9e74ffdeb 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1587,10 +1587,10 @@ dummy_func( PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - INPUTS_DEAD(); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); if (matches) { + DECREF_INPUTS(); value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); } else { diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index eeb64a579dc8be..8eae30e258a926 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4710,18 +4710,28 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(CLEANUP_ASYNC_THROW); + _PyStackRef iter; _PyStackRef exc_value_st; _PyStackRef value; exc_value_st = stack_pointer[-1]; + iter = stack_pointer[-2]; PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -2; + stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); if (matches) { + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = iter; + iter = PyStackRef_NULL; + stack_pointer[-1] = iter; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); } else { From 923305ea2f68d8f3e1a6adbb556232581aa95fca Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 7 Mar 2026 11:50:03 -0500 Subject: [PATCH 09/48] Fix more tests. --- Lib/test/test_coroutines.py | 4 ---- Lib/test/test_dis.py | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py index 93e9e7a8393cb1..d7459e7e840ab3 100644 --- a/Lib/test/test_coroutines.py +++ b/Lib/test/test_coroutines.py @@ -90,10 +90,6 @@ def test_badsyntax_1(self): """await something()""", - """async def foo(): - yield from [] - """, - """async def foo(): await await fut """, diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index cefd64ddfe8417..6bb3d7168795ea 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -1035,7 +1035,8 @@ def test_widths(self): long_opcodes = set(['JUMP_BACKWARD_NO_INTERRUPT', 'LOAD_FAST_BORROW_LOAD_FAST_BORROW', 'INSTRUMENTED_CALL_FUNCTION_EX', - 'ANNOTATIONS_PLACEHOLDER']) + 'ANNOTATIONS_PLACEHOLDER', + 'GET_ASYNC_YIELD_FROM_ITER']) for op, opname in enumerate(dis.opname): if opname in long_opcodes or opname.startswith("INSTRUMENTED"): continue From c3b318e2d6252b5b579e878fc3a7c688ca424b3c Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sat, 7 Mar 2026 18:58:42 +0100 Subject: [PATCH 10/48] Fix `async yield from` on non-iterator iterable objects in async gens --- Objects/genobject.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Objects/genobject.c b/Objects/genobject.c index 918c41da2aa846..5d4baec08b688a 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2716,24 +2716,23 @@ PyTypeObject _PyAsyncGenYieldFrom_Type = { PyObject * -_PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterator) +_PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterable) { assert(tstate != NULL); - assert(iterator != NULL); + assert(iterable != NULL); _PyAsyncGenYieldFrom *yield_from = PyObject_GC_New(_PyAsyncGenYieldFrom, &_PyAsyncGenYieldFrom_Type); if (yield_from == NULL) { return NULL; } - if (!PyIter_Check(iterator)) { - if (PyAsyncGen_CheckExact(iterator)) { - _PyErr_Format(tstate, PyExc_TypeError, - "%T object is not iterable. Did you mean 'async yield from'?", - iterator); - } else { - _PyErr_Format(tstate, PyExc_TypeError, - "%T object is not iterable", iterator); - } + if (!Py_TYPE(iterable)->tp_iter && PyAsyncGen_CheckExact(iterable)) { + _PyErr_Format(tstate, PyExc_TypeError, + "%T object is not iterable. Did you mean 'async yield from'?", + iterable); + return NULL; + } + PyObject *iterator = PyObject_GetIter(iterable); + if (iterator == NULL) { return NULL; } yield_from->agyf_iterator = Py_NewRef(iterator); From b64b5639bd2f1b34ae7e57a040a8cf1784a0782c Mon Sep 17 00:00:00 2001 From: johnslavik Date: Mon, 9 Mar 2026 02:25:05 +0100 Subject: [PATCH 11/48] Add tests --- Lib/test/test_async_yield_from.py | 1645 +++++++++++++++++++++++++++++ 1 file changed, 1645 insertions(+) create mode 100644 Lib/test/test_async_yield_from.py diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py new file mode 100644 index 00000000000000..2c22cc75283c4d --- /dev/null +++ b/Lib/test/test_async_yield_from.py @@ -0,0 +1,1645 @@ +""" +Test suite for PEP 828 implementation + +Adapted from the 'yield from' tests. +""" + +import unittest +import inspect +from functools import partial + +from test.support import captured_stderr, disable_gc, gc_collect, run_yielding_async_fn + +_async_test = partial(partial, run_yielding_async_fn) + + +class TestPEP828Operation(unittest.TestCase): + """ + Test semantics. + """ + + @_async_test + async def test_delegation_of_initial_anext_to_subgenerator(self): + """ + Test delegation of initial anext() call to subgenerator + """ + trace = [] + async def g1(): + trace.append("Starting g1") + async yield from g2() + trace.append("Finishing g1") + async def g2(): + trace.append("Starting g2") + yield 42 + trace.append("Finishing g2") + async for x in g1(): + trace.append("Yielded %s" % (x,)) + self.assertEqual(trace,[ + "Starting g1", + "Starting g2", + "Yielded 42", + "Finishing g2", + "Finishing g1", + ]) + + @_async_test + async def test_raising_exception_in_initial_anext_call(self): + """ + Test raising exception in initial anext() call + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + async yield from g2() + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield from () + raise ValueError("spanish inquisition occurred") + finally: + trace.append("Finishing g2") + try: + async for x in g1(): + trace.append("Yielded %s" % (x,)) + except ValueError as e: + self.assertEqual(e.args[0], "spanish inquisition occurred") + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace, [ + "Starting g1", + "Starting g2", + "Finishing g2", + "Finishing g1", + ]) + + @_async_test + async def test_delegation_of_anext_call_to_subgenerator(self): + """ + Test delegation of anext() call to subgenerator + """ + trace = [] + async def g1(): + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + trace.append("Finishing g1") + async def g2(): + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + trace.append("Finishing g2") + async for x in g1(): + trace.append("Yielded %s" % (x,)) + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Yielded g2 more spam", + "Finishing g2", + "Yielded g1 eggs", + "Finishing g1", + ]) + + @_async_test + async def test_raising_exception_in_delegated_anext_call(self): + """ + Test raising exception in delegated anext() call + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield "g2 spam" + raise ValueError("hovercraft is full of eels") + yield "g2 more spam" + finally: + trace.append("Finishing g2") + try: + async for x in g1(): + trace.append("Yielded %s" % (x,)) + except ValueError as e: + self.assertEqual(e.args[0], "hovercraft is full of eels") + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Finishing g2", + "Finishing g1", + ]) + + # @_async_test + # async def test_delegation_of_asend(self): + # """ + # Test delegation of send() + # """ + # trace = [] + # async def g1(): + # trace.append("Starting g1") + # x = yield "g1 ham" + # trace.append("g1 received %s" % (x,)) + # async yield from g2() + # x = yield "g1 eggs" + # trace.append("g1 received %s" % (x,)) + # trace.append("Finishing g1") + # async def g2(): + # trace.append("Starting g2") + # x = yield "g2 spam" + # trace.append("g2 received %s" % (x,)) + # x = yield "g2 more spam" + # trace.append("g2 received %s" % (x,)) + # trace.append("Finishing g2") + # g = g1() + # y = await anext(g) + # x = 1 + # try: + # while 1: + # y = await g.asend(x) + # trace.append("Yielded %s" % (y,)) + # x += 1 + # except StopAsyncIteration: + # pass + # self.assertEqual(trace,[ + # "Starting g1", + # "g1 received 1", + # "Starting g2", + # "Yielded g2 spam", + # "g2 received 2", + # "Yielded g2 more spam", + # "g2 received 3", + # "Finishing g2", + # "Yielded g1 eggs", + # "g1 received 4", + # "Finishing g1", + # ]) + + # @_async_test + # async def test_handling_exception_while_delegating_send(self): + # """ + # Test handling exception while delegating 'send' + # """ + # trace = [] + # async def g1(): + # trace.append("Starting g1") + # x = yield "g1 ham" + # trace.append("g1 received %s" % (x,)) + # async yield from g2() + # x = yield "g1 eggs" + # trace.append("g1 received %s" % (x,)) + # trace.append("Finishing g1") + # async def g2(): + # trace.append("Starting g2") + # x = yield "g2 spam" + # trace.append("g2 received %s" % (x,)) + # raise ValueError("hovercraft is full of eels") + # x = yield "g2 more spam" + # trace.append("g2 received %s" % (x,)) + # trace.append("Finishing g2") + # async def run(): + # g = g1() + # y = await anext(g) + # x = 1 + # try: + # while 1: + # y = await g.asend(x) + # trace.append("Yielded %s" % (y,)) + # x += 1 + # except StopAsyncIteration: + # trace.append("StopAsyncIteration") + # with self.assertRaises(ValueError): + # await run() + # self.assertEqual(trace,[ + # "Starting g1", + # "g1 received 1", + # "Starting g2", + # "Yielded g2 spam", + # "g2 received 2", + # ]) + + # @_async_test + # async def test_delegating_aclose(self): + # """ + # Test delegating 'aclose' + # """ + # trace = [] + # async def g1(): + # try: + # trace.append("Starting g1") + # yield "g1 ham" + # async yield from g2() + # yield "g1 eggs" + # finally: + # trace.append("Finishing g1") + # async def g2(): + # try: + # trace.append("Starting g2") + # yield "g2 spam" + # yield "g2 more spam" + # finally: + # trace.append("Finishing g2") + # g = g1() + # for i in range(2): + # x = await anext(g) + # trace.append("Yielded %s" % (x,)) + # await g.aclose() + # self.assertEqual(trace,[ + # "Starting g1", + # "Yielded g1 ham", + # "Starting g2", + # "Yielded g2 spam", + # "Finishing g2", + # "Finishing g1" + # ]) + + # @_async_test + # async def test_handing_exception_while_delegating_close(self): + # """ + # Test handling exception while delegating 'close' + # """ + # trace = [] + # async def g1(): + # try: + # trace.append("Starting g1") + # yield "g1 ham" + # async yield from g2() + # yield "g1 eggs" + # finally: + # trace.append("Finishing g1") + # async def g2(): + # try: + # trace.append("Starting g2") + # yield "g2 spam" + # yield "g2 more spam" + # finally: + # trace.append("Finishing g2") + # raise ValueError("nybbles have exploded with delight") + # try: + # g = g1() + # for i in range(2): + # x = await anext(g) + # trace.append("Yielded %s" % (x,)) + # await g.aclose() + # except ValueError as e: + # self.assertEqual(e.args[0], "nybbles have exploded with delight") + # self.assertIsInstance(e.__context__, GeneratorExit) + # else: + # self.fail("subgenerator failed to raise ValueError") + # self.assertEqual(trace,[ + # "Starting g1", + # "Yielded g1 ham", + # "Starting g2", + # "Yielded g2 spam", + # "Finishing g2", + # "Finishing g1", + # ]) + + # @_async_test + # async def test_delegating_throw(self): + # """ + # Test delegating 'throw' + # """ + # trace = [] + # async def g1(): + # try: + # trace.append("Starting g1") + # yield "g1 ham" + # async yield from g2() + # yield "g1 eggs" + # finally: + # trace.append("Finishing g1") + # async def g2(): + # try: + # trace.append("Starting g2") + # yield "g2 spam" + # yield "g2 more spam" + # finally: + # trace.append("Finishing g2") + # try: + # g = g1() + # for i in range(2): + # x = await anext(g) + # trace.append("Yielded %s" % (x,)) + # e = ValueError("tomato ejected") + # await g.athrow(e) + # except ValueError as e: + # self.assertEqual(e.args[0], "tomato ejected") + # else: + # self.fail("subgenerator failed to raise ValueError") + # self.assertEqual(trace,[ + # "Starting g1", + # "Yielded g1 ham", + # "Starting g2", + # "Yielded g2 spam", + # "Finishing g2", + # "Finishing g1", + # ]) + + @_async_test + async def test_value_attribute_of_StopAsyncIteration_exception(self): + """ + Test 'value' attribute of StopAsyncIteration exception + """ + trace = [] + async def pex(e): + trace.append("%s: %s" % (e.__class__.__name__, e)) + trace.append("value = %s" % (e.value,)) + e = StopAsyncIteration() + await pex(e) + e = StopAsyncIteration("spam") + await pex(e) + e.value = "eggs" + await pex(e) + self.assertEqual(trace,[ + "StopAsyncIteration: ", + "value = None", + "StopAsyncIteration: spam", + "value = spam", + "StopAsyncIteration: spam", + "value = eggs", + ]) + + # @_async_test + # async def test_exception_value_crash(self): + # # There used to be a refcount error when the return value + # # stored in the StopAsyncIteration has a refcount of 1. + # async def g1(): + # async yield from g2() + # async def g2(): + # yield "g2" + # return [42] + # self.assertEqual([x async for x in g1()], ["g2"]) + + + # @_async_test + # async def test_generator_return_value(self): + # """ + # Test generator return value + # """ + # trace = [] + # async def g1(): + # trace.append("Starting g1") + # yield "g1 ham" + # ret = async yield from g2() + # trace.append("g2 returned %r" % (ret,)) + # for v in 1, (2,), StopAsyncIteration(3): + # ret = async yield from g2(v) + # trace.append("g2 returned %r" % (ret,)) + # yield "g1 eggs" + # trace.append("Finishing g1") + # async def g2(v = None): + # trace.append("Starting g2") + # yield "g2 spam" + # yield "g2 more spam" + # trace.append("Finishing g2") + # if v: + # return v + # async for x in g1(): + # trace.append("Yielded %s" % (x,)) + # self.assertEqual(trace,[ + # "Starting g1", + # "Yielded g1 ham", + # "Starting g2", + # "Yielded g2 spam", + # "Yielded g2 more spam", + # "Finishing g2", + # "g2 returned None", + # "Starting g2", + # "Yielded g2 spam", + # "Yielded g2 more spam", + # "Finishing g2", + # "g2 returned 1", + # "Starting g2", + # "Yielded g2 spam", + # "Yielded g2 more spam", + # "Finishing g2", + # "g2 returned (2,)", + # "Starting g2", + # "Yielded g2 spam", + # "Yielded g2 more spam", + # "Finishing g2", + # "g2 returned StopAsyncIteration(3)", + # "Yielded g1 eggs", + # "Finishing g1", + # ]) + + @_async_test + async def test_delegation_of_anext_to_non_generator(self): + """ + Test delegation of anext() to non-generator + """ + trace = [] + async def g(): + yield from range(3) + async for x in g(): + trace.append("Yielded %s" % (x,)) + self.assertEqual(trace,[ + "Yielded 0", + "Yielded 1", + "Yielded 2", + ]) + + @_async_test + async def test_conversion_of_asendNone_to_next(self): + """ + Test conversion of asend(None) to next() + """ + trace = [] + async def g(): + yield from range(3) + gi = g() + for x in range(3): + y = await gi.asend(None) + trace.append("Yielded: %s" % (y,)) + self.assertEqual(trace,[ + "Yielded: 0", + "Yielded: 1", + "Yielded: 2", + ]) + + @_async_test + async def test_delegation_of_close_to_non_generator(self): + """ + Test delegation of close() to non-generator + """ + trace = [] + async def g(): + try: + trace.append("starting g") + yield from range(3) + trace.append("g should not be here") + finally: + trace.append("finishing g") + gi = g() + await anext(gi) + with captured_stderr() as output: + await gi.aclose() + self.assertEqual(output.getvalue(), '') + self.assertEqual(trace,[ + "starting g", + "finishing g", + ]) + + @_async_test + async def test_delegating_throw_to_non_generator(self): + """ + Test delegating 'throw' to non-generator + """ + trace = [] + async def g(): + try: + trace.append("Starting g") + yield from range(10) + finally: + trace.append("Finishing g") + try: + gi = g() + for i in range(5): + x = await anext(gi) + trace.append("Yielded %s" % (x,)) + e = ValueError("tomato ejected") + await gi.athrow(e) + except ValueError as e: + self.assertEqual(e.args[0],"tomato ejected") + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace,[ + "Starting g", + "Yielded 0", + "Yielded 1", + "Yielded 2", + "Yielded 3", + "Yielded 4", + "Finishing g", + ]) + + @_async_test + async def test_attempting_to_send_to_non_generator(self): + """ + Test attempting to send to non-generator + """ + trace = [] + async def g(): + try: + trace.append("starting g") + yield from range(3) + trace.append("g should not be here") + finally: + trace.append("finishing g") + try: + gi = g() + await anext(gi) + for x in range(3): + y = await gi.asend(42) + trace.append("Should not have yielded: %s" % (y,)) + except AttributeError as e: + self.assertIn("send", e.args[0]) + else: + self.fail("was able to send into non-generator") + self.assertEqual(trace,[ + "starting g", + "finishing g", + ]) + + # @_async_test + # async def test_broken_getattr_handling(self): + # """ + # Test subiterator with a broken getattr implementation + # """ + # class Broken: + # def __aiter__(self): + # return self + # async def __anext__(self): + # return 1 + # async def __getattr__(self, attr): + # 1/0 + + # async def g(): + # async yield from Broken() + + # with self.assertRaises(ZeroDivisionError): + # gi = g() + # self.assertEqual(await anext(gi), 1) + # await gi.asend(1) + + # with self.assertRaises(ZeroDivisionError): + # gi = g() + # self.assertEqual(await anext(gi), 1) + # await gi.athrow(AttributeError) + + # with support.catch_unraisable_exception() as cm: + # gi = g() + # self.assertEqual(await anext(gi), 1) + # await gi.aclose() + + # self.assertEqual(ZeroDivisionError, cm.unraisable.exc_type) + + @_async_test + async def test_exception_in_initial_next_call(self): + """ + Test exception in initial next() call + """ + trace = [] + async def g1(): + trace.append("g1 about to yield from g2") + async yield from g2() + trace.append("g1 should not be here") + async def g2(): + yield 1/0 + async def run(): + gi = g1() + await anext(gi) + with self.assertRaises(ZeroDivisionError): + await run() + self.assertEqual(trace,[ + "g1 about to yield from g2" + ]) + + @_async_test + async def test_attempted_async_yield_from_loop(self): + """ + Test attempted yield-from loop + """ + trace = [] + async def g1(): + trace.append("g1: starting") + yield "y1" + trace.append("g1: about to yield from g2") + async yield from g2() + trace.append("g1 should not be here") + + async def g2(): + trace.append("g2: starting") + yield "y2" + trace.append("g2: about to yield from g1") + async yield from gi + trace.append("g2 should not be here") + try: + gi = g1() + async for y in gi: + trace.append("Yielded: %s" % (y,)) + except RuntimeError as e: + self.assertEqual(e.args[0],"anext(): asynchronous generator is already running") + else: + self.fail("subgenerator didn't raise RuntimeError") + self.assertEqual(trace,[ + "g1: starting", + "Yielded: y1", + "g1: about to yield from g2", + "g2: starting", + "Yielded: y2", + "g2: about to yield from g1", + ]) + + # @_async_test + # async def test_returning_value_from_delegated_throw(self): + # """ + # Test returning value from delegated 'throw' + # """ + # trace = [] + # async def g1(): + # try: + # trace.append("Starting g1") + # yield "g1 ham" + # async yield from g2() + # yield "g1 eggs" + # finally: + # trace.append("Finishing g1") + # async def g2(): + # try: + # trace.append("Starting g2") + # yield "g2 spam" + # yield "g2 more spam" + # except LunchError: + # trace.append("Caught LunchError in g2") + # yield "g2 lunch saved" + # yield "g2 yet more spam" + # class LunchError(Exception): + # pass + # g = g1() + # for i in range(2): + # x = await anext(g) + # trace.append("Yielded %s" % (x,)) + # e = LunchError("tomato ejected") + # await g.athrow(e) + # async for x in g: + # trace.append("Yielded %s" % (x,)) + # self.assertEqual(trace,[ + # "Starting g1", + # "Yielded g1 ham", + # "Starting g2", + # "Yielded g2 spam", + # "Caught LunchError in g2", + # "Yielded g2 yet more spam", + # "Yielded g1 eggs", + # "Finishing g1", + # ]) + + # @_async_test + # async def test_anext_and_return_with_value(self): + # """ + # Test next and return with value + # """ + # trace = [] + # async def f(r): + # gi = g(r) + # await anext(gi) + # try: + # trace.append("f resuming g") + # await anext(gi) + # trace.append("f SHOULD NOT BE HERE") + # except StopAsyncIteration as e: + # trace.append("f caught %r" % (e,)) + # async def g(r): + # trace.append("g starting") + # yield + # trace.append("g returning %r" % (r,)) + # return r + # await f(None) + # await f(1) + # await f((2,)) + # await f(StopAsyncIteration(3)) + # self.assertEqual(trace,[ + # "g starting", + # "f resuming g", + # "g returning None", + # "f caught StopAsyncIteration()", + # "g starting", + # "f resuming g", + # "g returning 1", + # "f caught StopAsyncIteration(1)", + # "g starting", + # "f resuming g", + # "g returning (2,)", + # "f caught StopAsyncIteration((2,))", + # "g starting", + # "f resuming g", + # "g returning StopAsyncIteration(3)", + # "f caught StopAsyncIteration(StopAsyncIteration(3))", + # ]) + + # @_async_test + # async def test_send_and_return_with_value(self): + # """ + # Test send and return with value + # """ + # trace = [] + # async def f(r): + # gi = g(r) + # await anext(gi) + # try: + # trace.append("f sending spam to g") + # await gi.asend("spam") + # trace.append("f SHOULD NOT BE HERE") + # except StopAsyncIteration as e: + # trace.append("f caught %r" % (e,)) + # async def g(r): + # trace.append("g starting") + # x = yield + # trace.append("g received %r" % (x,)) + # trace.append("g returning %r" % (r,)) + # return r + # await f(None) + # await f(1) + # await f((2,)) + # await f(StopAsyncIteration(3)) + # self.assertEqual(trace, [ + # "g starting", + # "f sending spam to g", + # "g received 'spam'", + # "g returning None", + # "f caught StopAsyncIteration()", + # "g starting", + # "f sending spam to g", + # "g received 'spam'", + # "g returning 1", + # 'f caught StopAsyncIteration(1)', + # 'g starting', + # 'f sending spam to g', + # "g received 'spam'", + # 'g returning (2,)', + # 'f caught StopAsyncIteration((2,))', + # 'g starting', + # 'f sending spam to g', + # "g received 'spam'", + # 'g returning StopAsyncIteration(3)', + # 'f caught StopAsyncIteration(StopAsyncIteration(3))' + # ]) + + # @_async_test + # async def test_catching_exception_from_subgen_and_returning(self): + # """ + # Test catching an exception thrown into a + # subgenerator and returning a value + # """ + # async def inner(): + # try: + # yield 1 + # except ValueError: + # trace.append("inner caught ValueError") + # return value + + # async def outer(): + # v = async yield from inner() + # trace.append("inner returned %r to outer" % (v,)) + # yield v + + # for value in 2, (2,), StopAsyncIteration(2): + # trace = [] + # g = outer() + # trace.append(await anext(g)) + # trace.append(repr(await g.athrow(ValueError))) + # self.assertEqual(trace, [ + # 1, + # "inner caught ValueError", + # "inner returned %r to outer" % (value,), + # repr(value), + # ]) + + @_async_test + async def test_throwing_GeneratorExit_into_subgen_that_returns(self): + """ + Test throwing GeneratorExit into a subgenerator that + catches it and returns normally. + """ + trace = [] + async def f(): + try: + trace.append("Enter f") + yield + trace.append("Exit f") + except GeneratorExit: + return + async def g(): + trace.append("Enter g") + async yield from f() + trace.append("Exit g") + try: + gi = g() + await anext(gi) + await gi.athrow(GeneratorExit) + except GeneratorExit: + pass + else: + self.fail("subgenerator failed to raise GeneratorExit") + self.assertEqual(trace,[ + "Enter g", + "Enter f", + ]) + + # @_async_test + # async def test_throwing_GeneratorExit_into_subgenerator_that_yields(self): + # """ + # Test throwing GeneratorExit into a subgenerator that + # catches it and yields. + # """ + # trace = [] + # async def f(): + # try: + # trace.append("Enter f") + # yield + # trace.append("Exit f") + # except GeneratorExit: + # yield + # async def g(): + # trace.append("Enter g") + # async yield from f() + # trace.append("Exit g") + # try: + # gi = g() + # await anext(gi) + # await gi.athrow(GeneratorExit) + # except RuntimeError as e: + # self.assertEqual(e.args[0], "generator ignored GeneratorExit") + # else: + # self.fail("subgenerator failed to raise GeneratorExit") + # self.assertEqual(trace,[ + # "Enter g", + # "Enter f", + # ]) + + # @_async_test + # async def test_throwing_GeneratorExit_into_subgen_that_raises(self): + # """ + # Test throwing GeneratorExit into a subgenerator that + # catches it and raises a different exception. + # """ + # trace = [] + # async def f(): + # try: + # trace.append("Enter f") + # yield + # trace.append("Exit f") + # except GeneratorExit: + # raise ValueError("Vorpal bunny encountered") + # async def g(): + # trace.append("Enter g") + # async yield from f() + # trace.append("Exit g") + # try: + # gi = g() + # await anext(gi) + # await gi.athrow(GeneratorExit) + # except ValueError as e: + # self.assertEqual(e.args[0], "Vorpal bunny encountered") + # self.assertIsInstance(e.__context__, GeneratorExit) + # else: + # self.fail("subgenerator failed to raise ValueError") + # self.assertEqual(trace,[ + # "Enter g", + # "Enter f", + # ]) + + @_async_test + async def test_yield_from_empty(self): + async def g(): + yield from () + with self.assertRaises(StopAsyncIteration): + await anext(g()) + + @_async_test + async def test_delegating_generators_claim_to_be_running(self): + # Check with basic iteration + async def one(): + yield 0 + async yield from two() + yield 3 + async def two(): + yield 1 + try: + async yield from g1 + except RuntimeError: + pass + yield 2 + g1 = one() + self.assertEqual([e async for e in g1], [0, 1, 2, 3]) + + # Check with asend + g1 = one() + res = [await anext(g1)] + try: + while True: + res.append(await g1.asend(42)) + except StopAsyncIteration: + pass + self.assertEqual(res, [0, 1, 2, 3]) + + # @_async_test + # async def test_delegating_generators_claim_to_be_running_with_throw(self): + # # Check with throw + # class MyErr(Exception): + # pass + # async def one(): + # try: + # yield 0 + # except MyErr: + # pass + # async yield from two() + # try: + # yield 3 + # except MyErr: + # pass + # async def two(): + # try: + # yield 1 + # except MyErr: + # pass + # try: + # async yield from g1 + # except RuntimeError: + # pass + # try: + # yield 2 + # except MyErr: + # pass + # g1 = one() + # res = [await anext(g1)] + # try: + # while True: + # res.append(await g1.athrow(MyErr)) + # except StopAsyncIteration: + # pass + # except: + # self.assertEqual(res, [0, 1, 2, 3]) + # raise + + # @_async_test + # async def test_delegating_generators_claim_to_be_running_with_close(self): + # # Check with close + # class MyIt: + # def __iter__(self): + # return self + # async def __next__(self): + # return 42 + # async def aclose(self_): + # self.assertTrue(g1.gi_running) + # with self.assertRaises(RuntimeError): + # await anext(g1) + # async def one(): + # async yield from MyIt() + # g1 = one() + # await anext(g1) + # await g1.aclose() + + @_async_test + async def test_delegator_is_visible_to_debugger(self): + async def call_stack(): + return [f[3] for f in inspect.stack()] + + async def gen(): + yield await call_stack() + yield await call_stack() + yield await call_stack() + + async def spam(g): + async yield from g + + async def eggs(g): + async yield from g + + async for stack in spam(gen()): + self.assertTrue('spam' in stack) + + async for stack in spam(eggs(gen())): + self.assertTrue('spam' in stack and 'eggs' in stack) + + # @_async_test + # async def test_custom_iterator_return(self): + # # See issue #15568 + # class MyIter: + # def __aiter__(self): + # return self + # async def __anext__(self): + # raise StopAsyncIteration(42) + # async def gen(): + # nonlocal ret + # ret = async yield from MyIter() + # ret = None + # [e async for e in gen()] + # self.assertEqual(ret, 42) + + @_async_test + async def test_close_with_cleared_frame(self): + # See issue #17669. + # + # Create a stack of generators: outer() delegating to inner() + # delegating to innermost(). The key point is that the instance of + # inner is created first: this ensures that its frame appears before + # the instance of outer in the GC linked list. + # + # At the gc.collect call: + # - frame_clear is called on the inner_gen frame. + # - gen_dealloc is called on the outer_gen generator (the only + # reference is in the frame's locals). + # - gen_close is called on the outer_gen generator. + # - gen_close_iter is called to close the inner_gen generator, which + # in turn calls gen_close, and gen_yf. + # + # Previously, gen_yf would crash since inner_gen's frame had been + # cleared (and in particular f_stacktop was NULL). + + async def innermost(): + yield + async def inner(): + outer_gen = yield + async yield from innermost() + async def outer(): + inner_gen = yield + async yield from inner_gen + + with disable_gc(): + inner_gen = inner() + outer_gen = outer() + await outer_gen.asend(None) + await outer_gen.asend(inner_gen) + await outer_gen.asend(outer_gen) + + del outer_gen + del inner_gen + gc_collect() + + # @_async_test + # async def test_send_tuple_with_custom_generator(self): + # # See issue #21209. + # class MyGen: + # def __aiter__(self): + # return self + # async def __anext__(self): + # return 42 + # async def asend(self, what): + # nonlocal v + # v = what + # return None + # async def outer(): + # v = async yield from MyGen() + # g = outer() + # await anext(g) + # v = None + # await g.asend((1, 2, 3, 4)) + # self.assertEqual(v, (1, 2, 3, 4)) + +class TestInterestingEdgeCases(unittest.TestCase): + + async def assert_stop_iteration(self, iterator): + with self.assertRaises(StopAsyncIteration) as caught: + await anext(iterator) + self.assertIsNone(caught.exception.value) + self.assertIsNone(caught.exception.__context__) + + def assert_generator_raised_stop_iteration(self): + return self.assertRaisesRegex(RuntimeError, r"^generator raised StopAsyncIteration$") + + def assert_generator_ignored_generator_exit(self): + return self.assertRaisesRegex(RuntimeError, r"^generator ignored GeneratorExit$") + + # @_async_test + # async def test_close_and_throw_work(self): + + # yielded_first = object() + # yielded_second = object() + # returned = object() + + # async def inner(): + # yield yielded_first + # yield yielded_second + # return returned + + # async def outer(): + # return (async yield from inner()) + + # with self.subTest("close"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # await g.aclose() + # await self.assert_stop_iteration(g) + + # with self.subTest("throw GeneratorExit"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = GeneratorExit() + # with self.assertRaises(GeneratorExit) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw StopAsyncIteration"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = StopAsyncIteration() + # with self.assert_generator_raised_stop_iteration() as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception.__context__, thrown) + # self.assertIsNone(caught.exception.__context__.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw BaseException"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = BaseException() + # with self.assertRaises(BaseException) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw Exception"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = Exception() + # with self.assertRaises(Exception) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + +# @_async_test +# async def test_close_and_throw_raise_generator_exit(self): + +# yielded_first = object() +# yielded_second = object() +# returned = object() + +# async def inner(): +# try: +# yield yielded_first +# yield yielded_second +# return returned +# finally: +# raise raised + +# async def outer(): +# return (yield from inner()) + +# with self.subTest("close"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = GeneratorExit() +# # GeneratorExit is suppressed. This is consistent with PEP 342: +# # https://peps.python.org/pep-0342/#new-generator-method-close +# await g.aclose() +# await self.assert_stop_iteration(g) + +# with self.subTest("throw GeneratorExit"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = GeneratorExit() +# thrown = GeneratorExit() +# with self.assertRaises(GeneratorExit) as caught: +# await g.athrow(thrown) +# # The raised GeneratorExit is suppressed, but the thrown one +# # propagates. This is consistent with PEP 380: +# # https://peps.python.org/pep-0380/#proposal +# self.assertIs(caught.exception, thrown) +# self.assertIsNone(caught.exception.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw StopAsyncIteration"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = GeneratorExit() +# thrown = StopAsyncIteration() +# with self.assertRaises(GeneratorExit) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw BaseException"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = GeneratorExit() +# thrown = BaseException() +# with self.assertRaises(GeneratorExit) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw Exception"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = GeneratorExit() +# thrown = Exception() +# with self.assertRaises(GeneratorExit) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# @_async_test +# async def test_close_and_throw_raise_stop_iteration(self): + +# yielded_first = object() +# yielded_second = object() +# returned = object() + +# async def inner(): +# try: +# yield yielded_first +# yield yielded_second +# return returned +# finally: +# raise raised + +# async def outer(): +# return (yield from inner()) + +# with self.subTest("close"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = StopAsyncIteration() +# # PEP 479: +# with self.assert_generator_raised_stop_iteration() as caught: +# await g.aclose() +# self.assertIs(caught.exception.__context__, raised) +# self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw GeneratorExit"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = StopAsyncIteration() +# thrown = GeneratorExit() +# # PEP 479: +# with self.assert_generator_raised_stop_iteration() as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception.__context__, raised) +# # This isn't the same GeneratorExit as thrown! It's the one created +# # by calling inner.aclose(): +# self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw StopAsyncIteration"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = StopAsyncIteration() +# thrown = StopAsyncIteration() +# # PEP 479: +# with self.assert_generator_raised_stop_iteration() as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception.__context__, raised) +# self.assertIs(caught.exception.__context__.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw BaseException"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = StopAsyncIteration() +# thrown = BaseException() +# # PEP 479: +# with self.assert_generator_raised_stop_iteration() as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception.__context__, raised) +# self.assertIs(caught.exception.__context__.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw Exception"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = StopAsyncIteration() +# thrown = Exception() +# # PEP 479: +# with self.assert_generator_raised_stop_iteration() as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception.__context__, raised) +# self.assertIs(caught.exception.__context__.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__.__context__) +# await self.assert_stop_iteration(g) + +# @_async_test +# async def test_close_and_throw_raise_base_exception(self): + +# yielded_first = object() +# yielded_second = object() +# returned = object() + +# async def inner(): +# try: +# yield yielded_first +# yield yielded_second +# return returned +# finally: +# raise raised + +# async def outer(): +# return (yield from inner()) + +# with self.subTest("close"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = BaseException() +# with self.assertRaises(BaseException) as caught: +# await g.aclose() +# self.assertIs(caught.exception, raised) +# self.assertIsInstance(caught.exception.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw GeneratorExit"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = BaseException() +# thrown = GeneratorExit() +# with self.assertRaises(BaseException) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# # This isn't the same GeneratorExit as thrown! It's the one created +# # by calling inner.aclose(): +# self.assertIsInstance(caught.exception.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw StopAsyncIteration"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = BaseException() +# thrown = StopAsyncIteration() +# with self.assertRaises(BaseException) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw BaseException"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = BaseException() +# thrown = BaseException() +# with self.assertRaises(BaseException) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw Exception"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = BaseException() +# thrown = Exception() +# with self.assertRaises(BaseException) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# @_async_test +# async def test_close_and_throw_raise_exception(self): + +# yielded_first = object() +# yielded_second = object() +# returned = object() + +# async def inner(): +# try: +# yield yielded_first +# yield yielded_second +# return returned +# finally: +# raise raised + +# async def outer(): +# return (yield from inner()) + +# with self.subTest("close"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = Exception() +# with self.assertRaises(Exception) as caught: +# await g.aclose() +# self.assertIs(caught.exception, raised) +# self.assertIsInstance(caught.exception.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw GeneratorExit"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = Exception() +# thrown = GeneratorExit() +# with self.assertRaises(Exception) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# # This isn't the same GeneratorExit as thrown! It's the one created +# # by calling inner.aclose(): +# self.assertIsInstance(caught.exception.__context__, GeneratorExit) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw StopAsyncIteration"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = Exception() +# thrown = StopAsyncIteration() +# with self.assertRaises(Exception) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw BaseException"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = Exception() +# thrown = BaseException() +# with self.assertRaises(Exception) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + +# with self.subTest("throw Exception"): +# g = outer() +# self.assertIs(await anext(g), yielded_first) +# raised = Exception() +# thrown = Exception() +# with self.assertRaises(Exception) as caught: +# await g.athrow(thrown) +# self.assertIs(caught.exception, raised) +# self.assertIs(caught.exception.__context__, thrown) +# self.assertIsNone(caught.exception.__context__.__context__) +# await self.assert_stop_iteration(g) + + # @_async_test + # async def test_close_and_throw_yield(self): + + # yielded_first = object() + # yielded_second = object() + # returned = object() + + # async def inner(): + # try: + # yield yielded_first + # finally: + # yield yielded_second + # return returned + + # async def outer(): + # return (async yield from inner()) + + # with self.subTest("close"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # # No chaining happens. This is consistent with PEP 342: + # # https://peps.python.org/pep-0342/#new-generator-method-close + # with self.assert_generator_ignored_generator_exit() as caught: + # await g.aclose() + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw GeneratorExit"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = GeneratorExit() + # # No chaining happens. This is consistent with PEP 342: + # # https://peps.python.org/pep-0342/#new-generator-method-close + # with self.assert_generator_ignored_generator_exit() as caught: + # await g.athrow(thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw StopAsyncIteration"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = StopAsyncIteration() + # self.assertEqual(await g.athrow(thrown), yielded_second) + # # PEP 479: + # with self.assert_generator_raised_stop_iteration() as caught: + # await anext(g) + # self.assertIs(caught.exception.__context__, thrown) + # self.assertIsNone(caught.exception.__context__.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw BaseException"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = BaseException() + # self.assertEqual(await g.athrow(thrown), yielded_second) + # with self.assertRaises(BaseException) as caught: + # await anext(g) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw Exception"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = Exception() + # self.assertEqual(await g.athrow(thrown), yielded_second) + # with self.assertRaises(Exception) as caught: + # await anext(g) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # @_async_test + # async def test_close_and_throw_return(self): + # yielded_first = object() + # yielded_second = object() + # returned = object() + + # async def inner(): + # try: + # yield yielded_first + # yield yielded_second + # except: + # pass + # return returned + + # async def outer(): + # return (async yield from inner()) + + # with self.subTest("close"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # # https://peps.python.org/pep-0342/#new-generator-method-close + # await g.aclose() + # await self.assert_stop_iteration(g) + + # with self.subTest("throw GeneratorExit"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = GeneratorExit() + # # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # # https://peps.python.org/pep-0342/#new-generator-method-close + # with self.assertRaises(GeneratorExit) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception, thrown) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw StopAsyncIteration"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = StopAsyncIteration() + # with self.assertRaises(StopAsyncIteration) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception.value, returned) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw BaseException"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = BaseException() + # with self.assertRaises(StopAsyncIteration) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception.value, returned) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + # with self.subTest("throw Exception"): + # g = outer() + # self.assertIs(await anext(g), yielded_first) + # thrown = Exception() + # with self.assertRaises(StopAsyncIteration) as caught: + # await g.athrow(thrown) + # self.assertIs(caught.exception.value, returned) + # self.assertIsNone(caught.exception.__context__) + # await self.assert_stop_iteration(g) + + @_async_test + async def test_throws_in_iter(self): + # See GH-126366: NULL pointer dereference if __iter__ + # threw an exception. + class Silly: + async def __aiter__(self): + yield from () + raise RuntimeError("nobody expects the spanish inquisition") + + async def my_generator(): + async yield from Silly() + + with self.assertRaisesRegex(RuntimeError, "nobody expects the spanish inquisition"): + await anext(aiter(my_generator())) + + +if __name__ == '__main__': + unittest.main() From 8346a0c0a0af89916ed00e9848d85e25040d940c Mon Sep 17 00:00:00 2001 From: johnslavik Date: Mon, 9 Mar 2026 02:31:01 +0100 Subject: [PATCH 12/48] Ignore `test_async_yield_from` in Ruff --- Lib/test/.ruff.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/test/.ruff.toml b/Lib/test/.ruff.toml index f3e6a46663e100..578fb37a48031e 100644 --- a/Lib/test/.ruff.toml +++ b/Lib/test/.ruff.toml @@ -18,6 +18,8 @@ extend-exclude = [ "test_lazy_import/__init__.py", "test_lazy_import/data/*.py", "test_lazy_import/data/**/*.py", + # Async yield from syntax (PEP 828) is not yet supported by Ruff + "test_async_yield_from.py", ] [lint] From fa53189b93d6c8c59ea9654153ddb68d3a61a8cf Mon Sep 17 00:00:00 2001 From: johnslavik Date: Mon, 9 Mar 2026 02:35:06 +0100 Subject: [PATCH 13/48] Remove unnecessary `aiter()` --- Lib/test/test_async_yield_from.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 2c22cc75283c4d..6eb9e1d3bfbda0 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1638,7 +1638,7 @@ async def my_generator(): async yield from Silly() with self.assertRaisesRegex(RuntimeError, "nobody expects the spanish inquisition"): - await anext(aiter(my_generator())) + await anext(my_generator()) if __name__ == '__main__': From 3bfc2da958717c78579eafa762c5e8a112b13048 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Mon, 9 Mar 2026 02:38:05 +0100 Subject: [PATCH 14/48] Fix commented out `test_delegating_generators_claim_to_be_running_with_aclose` --- Lib/test/test_async_yield_from.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 6eb9e1d3bfbda0..fdfdc544fe5f48 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -978,12 +978,12 @@ async def two(): # raise # @_async_test - # async def test_delegating_generators_claim_to_be_running_with_close(self): + # async def test_delegating_generators_claim_to_be_running_with_aclose(self): # # Check with close # class MyIt: - # def __iter__(self): + # def __aiter__(self): # return self - # async def __next__(self): + # async def __anext__(self): # return 42 # async def aclose(self_): # self.assertTrue(g1.gi_running) From 6f9877e84357ce6671019a1bfc24e79b45804361 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sun, 8 Mar 2026 22:46:15 -0400 Subject: [PATCH 15/48] Fix a problem in CLEANUP_ASYNC_THROW I think. --- Modules/_testinternalcapi/test_cases.c.h | 17 ++++++++--------- Python/bytecodes.c | 4 ++-- Python/generated_cases.c.h | 17 ++++++++--------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index b49136430ce232..fb3d63306426f4 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -4740,24 +4740,26 @@ _PyStackRef value; exc_value_st = stack_pointer[-1]; iter = stack_pointer[-2]; - PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); if (matches) { + value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iter; - iter = PyStackRef_NULL; - stack_pointer[-1] = iter; + iter = value; + stack_pointer[-2] = iter; + PyStackRef_CLOSE(tmp); + tmp = exc_value_st; + exc_value_st = PyStackRef_NULL; + stack_pointer[-1] = exc_value_st; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); } else { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4765,9 +4767,6 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } - stack_pointer[0] = value; - stack_pointer += 1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); DISPATCH(); } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index e5b481e77ae2b9..0361a6c6ccde48 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1605,14 +1605,14 @@ dummy_func( } inst(CLEANUP_ASYNC_THROW, (iter, exc_value_st -- value)) { - PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); if (matches) { - DECREF_INPUTS(); value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); + DECREF_INPUTS(); } else { _PyErr_SetRaisedException(tstate, exc_value); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index cb7ab4f316177f..e85e21e27db010 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4740,24 +4740,26 @@ _PyStackRef value; exc_value_st = stack_pointer[-1]; iter = stack_pointer[-2]; - PyObject *exc_value = PyStackRef_AsPyObjectSteal(exc_value_st); + PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); assert(exc_value != NULL); assert(PyExceptionInstance_Check(exc_value)); - stack_pointer += -1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); if (matches) { + value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iter; - iter = PyStackRef_NULL; - stack_pointer[-1] = iter; + iter = value; + stack_pointer[-2] = iter; + PyStackRef_CLOSE(tmp); + tmp = exc_value_st; + exc_value_st = PyStackRef_NULL; + stack_pointer[-1] = exc_value_st; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - value = PyStackRef_FromPyObjectNew(((PyStopAsyncIterationObject *)exc_value)->value); } else { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4765,9 +4767,6 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } - stack_pointer[0] = value; - stack_pointer += 1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); DISPATCH(); } From 7d033a78482b04948e245e0de98184d08239380b Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sun, 8 Mar 2026 22:57:13 -0400 Subject: [PATCH 16/48] Fix a small refleak. --- Objects/genobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/genobject.c b/Objects/genobject.c index 5d4baec08b688a..7c62099b4d5d17 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2735,7 +2735,7 @@ _PyAsyncGenYieldFrom_New(PyThreadState *tstate, PyObject *iterable) if (iterator == NULL) { return NULL; } - yield_from->agyf_iterator = Py_NewRef(iterator); + yield_from->agyf_iterator = iterator; _PyObject_GC_TRACK((PyObject *)yield_from); return (PyObject *)yield_from; } From ff55764e230203ed62b2d66638fd039a65c861d7 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sun, 8 Mar 2026 23:00:41 -0400 Subject: [PATCH 17/48] Fix missing incref. --- Modules/_testinternalcapi/test_cases.c.h | 2 +- Python/bytecodes.c | 2 +- Python/generated_cases.c.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index fb3d63306426f4..4becd863222e7a 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -4763,7 +4763,7 @@ } else { _PyFrame_SetStackPointer(frame, stack_pointer); - _PyErr_SetRaisedException(tstate, exc_value); + _PyErr_SetRaisedException(tstate, Py_NewRef(exc_value)); monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 0361a6c6ccde48..4018f1c631492c 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1615,7 +1615,7 @@ dummy_func( DECREF_INPUTS(); } else { - _PyErr_SetRaisedException(tstate, exc_value); + _PyErr_SetRaisedException(tstate, Py_NewRef(exc_value)); monitor_reraise(tstate, frame, this_instr); goto exception_unwind; } diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e85e21e27db010..2032c6034794b6 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4763,7 +4763,7 @@ } else { _PyFrame_SetStackPointer(frame, stack_pointer); - _PyErr_SetRaisedException(tstate, exc_value); + _PyErr_SetRaisedException(tstate, Py_NewRef(exc_value)); monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } From 85c10870d9d986892b721ecf3e57eb5632f1c7c7 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Mon, 9 Mar 2026 19:18:21 -0400 Subject: [PATCH 18/48] Remove unused variable. --- Objects/exceptions.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 4281bcf1bb0cd8..1e6074a71f787b 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -745,7 +745,6 @@ StopAsyncIteration_init(PyObject *op, PyObject *args, PyObject *kwds) } PyStopAsyncIterationObject *self = PyStopAsyncIterationObject_CAST(op); Py_CLEAR(self->value); - PyObject *value; if (size > 0) { self->value = PyTuple_GET_ITEM(args, 0); } From d3b6d6666d3d5153cd96833537bd9b19d1e74b1f Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Tue, 10 Mar 2026 19:56:05 -0400 Subject: [PATCH 19/48] Fix delegation of exceptions with athrow(). This breaks a different test though. --- Lib/test/test_async_yield_from.py | 24 ++++++++++++++++++++++++ Objects/genobject.c | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index fdfdc544fe5f48..1a6d00eb3521c8 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1640,6 +1640,30 @@ async def my_generator(): with self.assertRaisesRegex(RuntimeError, "nobody expects the spanish inquisition"): await anext(my_generator()) + @_async_test + async def test_delegate_exception(self): + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + return returned + finally: + raise raised + + async def outer(): + return (async yield from inner()) + + g = outer() + assert (await anext(g)) is yielded_first + raised = RuntimeError() + with self.assertRaises(RuntimeError) as error: + await g.athrow(SystemError) + self.assertIs(raised, error.exception) + if __name__ == '__main__': unittest.main() diff --git a/Objects/genobject.c b/Objects/genobject.c index 7c62099b4d5d17..70ff7ec84e09a4 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -426,7 +426,7 @@ gen_close_iter(PyObject *yf) { PyObject *retval = NULL; - if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf)) { + if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf) || PyAsyncGen_CheckExact(yf)) { retval = gen_close((PyObject *)yf, NULL); if (retval == NULL) return -1; @@ -668,7 +668,7 @@ _gen_throw(PyGenObject *gen, int close_on_genexit, } PyThreadState *tstate = _PyThreadState_GET(); assert(tstate != NULL); - if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf)) { + if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf) || PyAsyncGen_CheckExact(yf)) { /* `yf` is a generator or a coroutine. */ /* Link frame into the stack to enable complete backtraces. */ From f0c1eccb86415ce392d0a6b627e34d3854166938 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Tue, 10 Mar 2026 20:00:46 -0400 Subject: [PATCH 20/48] Temporarily skip that test. --- Lib/test/test_async_yield_from.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 1a6d00eb3521c8..08a9ab6cbea7ce 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -810,8 +810,9 @@ async def g2(): # repr(value), # ]) + # FIXME: This is broken now @_async_test - async def test_throwing_GeneratorExit_into_subgen_that_returns(self): + async def notest_throwing_GeneratorExit_into_subgen_that_returns(self): """ Test throwing GeneratorExit into a subgenerator that catches it and returns normally. From bb5324c9795ab98fdf51b997641ece5c0d917626 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Wed, 11 Mar 2026 01:39:26 +0100 Subject: [PATCH 21/48] Fix return value crash --- Lib/test/test_async_yield_from.py | 123 +++++++++++++++--------------- Objects/exceptions.c | 2 +- 2 files changed, 62 insertions(+), 63 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 08a9ab6cbea7ce..3d4283cd7b79b1 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -373,69 +373,68 @@ async def pex(e): "value = eggs", ]) - # @_async_test - # async def test_exception_value_crash(self): - # # There used to be a refcount error when the return value - # # stored in the StopAsyncIteration has a refcount of 1. - # async def g1(): - # async yield from g2() - # async def g2(): - # yield "g2" - # return [42] - # self.assertEqual([x async for x in g1()], ["g2"]) - + @_async_test + async def test_exception_value_crash(self): + # There used to be a refcount error when the return value + # stored in the StopAsyncIteration has a refcount of 1. + async def g1(): + async yield from g2() + async def g2(): + yield "g2" + return object() + self.assertEqual([x async for x in g1()], ["g2"]) - # @_async_test - # async def test_generator_return_value(self): - # """ - # Test generator return value - # """ - # trace = [] - # async def g1(): - # trace.append("Starting g1") - # yield "g1 ham" - # ret = async yield from g2() - # trace.append("g2 returned %r" % (ret,)) - # for v in 1, (2,), StopAsyncIteration(3): - # ret = async yield from g2(v) - # trace.append("g2 returned %r" % (ret,)) - # yield "g1 eggs" - # trace.append("Finishing g1") - # async def g2(v = None): - # trace.append("Starting g2") - # yield "g2 spam" - # yield "g2 more spam" - # trace.append("Finishing g2") - # if v: - # return v - # async for x in g1(): - # trace.append("Yielded %s" % (x,)) - # self.assertEqual(trace,[ - # "Starting g1", - # "Yielded g1 ham", - # "Starting g2", - # "Yielded g2 spam", - # "Yielded g2 more spam", - # "Finishing g2", - # "g2 returned None", - # "Starting g2", - # "Yielded g2 spam", - # "Yielded g2 more spam", - # "Finishing g2", - # "g2 returned 1", - # "Starting g2", - # "Yielded g2 spam", - # "Yielded g2 more spam", - # "Finishing g2", - # "g2 returned (2,)", - # "Starting g2", - # "Yielded g2 spam", - # "Yielded g2 more spam", - # "Finishing g2", - # "g2 returned StopAsyncIteration(3)", - # "Yielded g1 eggs", - # "Finishing g1", - # ]) + @_async_test + async def test_generator_return_value(self): + """ + Test generator return value + """ + trace = [] + async def g1(): + trace.append("Starting g1") + yield "g1 ham" + ret = async yield from g2() + trace.append("g2 returned %r" % (ret,)) + for v in 1, (2,), StopAsyncIteration(3): + ret = async yield from g2(v) + trace.append("g2 returned %r" % (ret,)) + yield "g1 eggs" + trace.append("Finishing g1") + async def g2(v = None): + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + trace.append("Finishing g2") + if v: + return v + async for x in g1(): + trace.append("Yielded %s" % (x,)) + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Yielded g2 more spam", + "Finishing g2", + "g2 returned None", + "Starting g2", + "Yielded g2 spam", + "Yielded g2 more spam", + "Finishing g2", + "g2 returned 1", + "Starting g2", + "Yielded g2 spam", + "Yielded g2 more spam", + "Finishing g2", + "g2 returned (2,)", + "Starting g2", + "Yielded g2 spam", + "Yielded g2 more spam", + "Finishing g2", + "g2 returned StopAsyncIteration(3)", + "Yielded g1 eggs", + "Finishing g1", + ]) @_async_test async def test_delegation_of_anext_to_non_generator(self): diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 1e6074a71f787b..0db3d2d3a38746 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -746,7 +746,7 @@ StopAsyncIteration_init(PyObject *op, PyObject *args, PyObject *kwds) PyStopAsyncIterationObject *self = PyStopAsyncIterationObject_CAST(op); Py_CLEAR(self->value); if (size > 0) { - self->value = PyTuple_GET_ITEM(args, 0); + self->value = Py_NewRef(PyTuple_GET_ITEM(args, 0)); } else { self->value = Py_None; From 1f26722188a61ce75e35763a1847c3a26d90f9e9 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 26 Mar 2026 08:25:12 -0400 Subject: [PATCH 22/48] Fix use of YieldFrom instead of AsyncYieldFrom in the AST Co-authored-by: Peter Bierma --- Python/ast_preprocess.c | 2 +- Python/ast_unparse.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Python/ast_preprocess.c b/Python/ast_preprocess.c index d63c18f71bd84a..9a7549868ed68d 100644 --- a/Python/ast_preprocess.c +++ b/Python/ast_preprocess.c @@ -576,7 +576,7 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTPreprocessState *state) CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value); break; case AsyncYieldFrom_kind: - CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value); + CALL(astfold_expr, expr_ty, node_->v.AsyncYieldFrom.value); break; case Compare_kind: CALL(astfold_expr, expr_ty, node_->v.Compare.left); diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c index 7997bb52489b4f..655e16ae98602d 100644 --- a/Python/ast_unparse.c +++ b/Python/ast_unparse.c @@ -913,7 +913,7 @@ static int append_ast_async_yield_from(PyUnicodeWriter *writer, expr_ty e) { APPEND_STR("(async yield from "); - APPEND_EXPR(e->v.YieldFrom.value, PR_TEST); + APPEND_EXPR(e->v.AsyncYieldFrom.value, PR_TEST); APPEND_CHAR_FINISH(')'); } From 3deb42d43ef699014def993086d59a12d0182f7b Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 30 Apr 2026 18:19:45 -0400 Subject: [PATCH 23/48] Correctly delegate to synchronous subgenerators. --- Objects/genobject.c | 47 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/Objects/genobject.c b/Objects/genobject.c index 70ff7ec84e09a4..ca6620509e7cc7 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2672,6 +2672,49 @@ async_gen_yield_from_iternext(PyObject *op) return wrapped; } +static PySendResult +async_gen_yield_from_send(PyObject *op, PyObject *arg, PyObject **presult) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + return PyIter_Send(self->agyf_iterator, arg, presult); +} + +static PyAsyncMethods async_gen_yield_from_as_async = { + .am_send = async_gen_yield_from_send +}; + +#define AGYF_PROXY_METHOD(name, result_value) \ + static PyObject * \ + async_gen_yield_from_ ## name ## _method(PyObject *op, PyObject *args, PyObject *keywords) \ + { \ + assert(op != NULL); \ + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); \ + PyObject *method = PyObject_GetAttr(self->agyf_iterator, &_Py_ID(name)); \ + if (method == NULL) { \ + return NULL; \ + } \ + PyObject *result = PyObject_Call(method, args, keywords); \ + Py_DECREF(method); \ + if (result == NULL) { \ + return NULL; \ + } \ + return result_value; \ + } + + + +AGYF_PROXY_METHOD(send, _PyAsyncGenValueWrapperNew(_PyThreadState_GET(), result)) +AGYF_PROXY_METHOD(throw, result) +AGYF_PROXY_METHOD(close, result) + +static PyMethodDef async_gen_yield_from_methods[] = { + {"send", (PyCFunction)async_gen_yield_from_send_method, METH_VARARGS | METH_KEYWORDS}, + {"throw", (PyCFunction)async_gen_yield_from_throw_method, METH_VARARGS | METH_KEYWORDS}, + {"close", (PyCFunction)async_gen_yield_from_close_method, METH_VARARGS | METH_KEYWORDS}, + {0} +}; + PyTypeObject _PyAsyncGenYieldFrom_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "async_generator_yield_from", /* tp_name */ @@ -2682,7 +2725,7 @@ PyTypeObject _PyAsyncGenYieldFrom_Type = { 0, /* tp_vectorcall_offset */ 0, /* tp_getattr */ 0, /* tp_setattr */ - 0, /* tp_as_async */ + &async_gen_yield_from_as_async, /* tp_as_async */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ @@ -2701,7 +2744,7 @@ PyTypeObject _PyAsyncGenYieldFrom_Type = { 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ async_gen_yield_from_iternext, /* tp_iternext */ - 0, /* tp_methods */ + async_gen_yield_from_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ From 5d82066324afe95193b3eeaaa97ef1ac93789f35 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 30 Apr 2026 20:44:39 -0400 Subject: [PATCH 24/48] Fix code generation for async yield from. --- Include/internal/pycore_opcode_metadata.h | 20 +- Include/internal/pycore_uop_ids.h | 1458 ++++++++++----------- Include/internal/pycore_uop_metadata.h | 30 - Include/opcode_ids.h | 210 ++- Lib/_opcode_metadata.py | 210 ++- Modules/_testinternalcapi/test_cases.c.h | 63 - Modules/_testinternalcapi/test_targets.h | 18 +- Python/bytecodes.c | 30 - Python/codegen.c | 36 +- Python/executor_cases.c.h | 74 -- Python/generated_cases.c.h | 63 - Python/opcode_targets.h | 18 +- Python/optimizer_cases.c.h | 17 - 13 files changed, 985 insertions(+), 1262 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 376bc020a6c3d3..56791e48553bab 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -228,10 +228,6 @@ int _PyOpcode_num_popped(int opcode, int oparg) { return 1; case GET_ANEXT: return 1; - case GET_ASEND: - return 2; - case GET_ASYNC_YIELD_FROM_ITER: - return 1; case GET_AWAITABLE: return 1; case GET_ITER: @@ -731,10 +727,6 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { return 1; case GET_ANEXT: return 2; - case GET_ASEND: - return 1; - case GET_ASYNC_YIELD_FROM_ITER: - return 1; case GET_AWAITABLE: return 1; case GET_ITER: @@ -1211,8 +1203,6 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [FOR_ITER_VIRTUAL] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG }, [GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [GET_ASEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [GET_ASYNC_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [GET_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_RECORDS_VALUE_FLAG }, [GET_ITER_SELF] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_RECORDS_VALUE_FLAG }, @@ -1461,8 +1451,6 @@ _PyOpcode_macro_expansion[256] = { [FOR_ITER_VIRTUAL] = { .nuops = 2, .uops = { { _GUARD_NOS_ITER_VIRTUAL, OPARG_SIMPLE, 1 }, { _FOR_ITER_VIRTUAL, OPARG_REPLACED, 1 } } }, [GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, OPARG_SIMPLE, 0 } } }, [GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, OPARG_SIMPLE, 0 } } }, - [GET_ASEND] = { .nuops = 1, .uops = { { _GET_ASEND, OPARG_SIMPLE, 0 } } }, - [GET_ASYNC_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { _GET_ASYNC_YIELD_FROM_ITER, OPARG_SIMPLE, 0 } } }, [GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, OPARG_SIMPLE, 0 } } }, [GET_ITER] = { .nuops = 2, .uops = { { _RECORD_TOS_TYPE, OPARG_SIMPLE, 0 }, { _GET_ITER, OPARG_SIMPLE, 0 } } }, [GET_ITER_SELF] = { .nuops = 3, .uops = { { _RECORD_TOS_TYPE, OPARG_SIMPLE, 0 }, { _GUARD_ITERATOR, OPARG_SIMPLE, 1 }, { _PUSH_NULL, OPARG_SIMPLE, 1 } } }, @@ -1670,8 +1658,6 @@ const char *_PyOpcode_OpName[267] = { [FOR_ITER_VIRTUAL] = "FOR_ITER_VIRTUAL", [GET_AITER] = "GET_AITER", [GET_ANEXT] = "GET_ANEXT", - [GET_ASEND] = "GET_ASEND", - [GET_ASYNC_YIELD_FROM_ITER] = "GET_ASYNC_YIELD_FROM_ITER", [GET_AWAITABLE] = "GET_AWAITABLE", [GET_ITER] = "GET_ITER", [GET_ITER_SELF] = "GET_ITER_SELF", @@ -1854,6 +1840,8 @@ const uint8_t _PyOpcode_Caches[256] = { PyAPI_DATA(const uint8_t) _PyOpcode_Deopt[256]; #ifdef NEED_OPCODE_METADATA const uint8_t _PyOpcode_Deopt[256] = { + [121] = 121, + [122] = 122, [123] = 123, [124] = 124, [125] = 125, @@ -1970,8 +1958,6 @@ const uint8_t _PyOpcode_Deopt[256] = { [FOR_ITER_VIRTUAL] = FOR_ITER, [GET_AITER] = GET_AITER, [GET_ANEXT] = GET_ANEXT, - [GET_ASEND] = GET_ASEND, - [GET_ASYNC_YIELD_FROM_ITER] = GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = GET_AWAITABLE, [GET_ITER] = GET_ITER, [GET_ITER_SELF] = GET_ITER, @@ -2115,6 +2101,8 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ + case 121: \ + case 122: \ case 123: \ case 124: \ case 125: \ diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 0ae61b26dd7f92..2277fc43a7ee55 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -150,8 +150,6 @@ extern "C" { #define _FOR_ITER_VIRTUAL_TIER_TWO 414 #define _GET_AITER GET_AITER #define _GET_ANEXT GET_ANEXT -#define _GET_ASEND GET_ASEND -#define _GET_ASYNC_YIELD_FROM_ITER GET_ASYNC_YIELD_FROM_ITER #define _GET_AWAITABLE GET_AWAITABLE #define _GET_ITER 415 #define _GET_ITER_TRAD 416 @@ -686,735 +684,733 @@ extern "C" { #define _FOR_ITER_VIRTUAL_TIER_TWO_r23 895 #define _GET_AITER_r11 896 #define _GET_ANEXT_r12 897 -#define _GET_ASEND_r21 898 -#define _GET_ASYNC_YIELD_FROM_ITER_r11 899 -#define _GET_AWAITABLE_r11 900 -#define _GET_ITER_r12 901 -#define _GET_ITER_TRAD_r12 902 -#define _GET_LEN_r12 903 -#define _GUARD_BINARY_OP_EXTEND_r22 904 -#define _GUARD_BINARY_OP_EXTEND_LHS_r02 905 -#define _GUARD_BINARY_OP_EXTEND_LHS_r12 906 -#define _GUARD_BINARY_OP_EXTEND_LHS_r22 907 -#define _GUARD_BINARY_OP_EXTEND_LHS_r33 908 -#define _GUARD_BINARY_OP_EXTEND_RHS_r02 909 -#define _GUARD_BINARY_OP_EXTEND_RHS_r12 910 -#define _GUARD_BINARY_OP_EXTEND_RHS_r22 911 -#define _GUARD_BINARY_OP_EXTEND_RHS_r33 912 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 913 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 914 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 915 -#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 916 -#define _GUARD_BIT_IS_SET_POP_r00 917 -#define _GUARD_BIT_IS_SET_POP_r10 918 -#define _GUARD_BIT_IS_SET_POP_r21 919 -#define _GUARD_BIT_IS_SET_POP_r32 920 -#define _GUARD_BIT_IS_SET_POP_4_r00 921 -#define _GUARD_BIT_IS_SET_POP_4_r10 922 -#define _GUARD_BIT_IS_SET_POP_4_r21 923 -#define _GUARD_BIT_IS_SET_POP_4_r32 924 -#define _GUARD_BIT_IS_SET_POP_5_r00 925 -#define _GUARD_BIT_IS_SET_POP_5_r10 926 -#define _GUARD_BIT_IS_SET_POP_5_r21 927 -#define _GUARD_BIT_IS_SET_POP_5_r32 928 -#define _GUARD_BIT_IS_SET_POP_6_r00 929 -#define _GUARD_BIT_IS_SET_POP_6_r10 930 -#define _GUARD_BIT_IS_SET_POP_6_r21 931 -#define _GUARD_BIT_IS_SET_POP_6_r32 932 -#define _GUARD_BIT_IS_SET_POP_7_r00 933 -#define _GUARD_BIT_IS_SET_POP_7_r10 934 -#define _GUARD_BIT_IS_SET_POP_7_r21 935 -#define _GUARD_BIT_IS_SET_POP_7_r32 936 -#define _GUARD_BIT_IS_UNSET_POP_r00 937 -#define _GUARD_BIT_IS_UNSET_POP_r10 938 -#define _GUARD_BIT_IS_UNSET_POP_r21 939 -#define _GUARD_BIT_IS_UNSET_POP_r32 940 -#define _GUARD_BIT_IS_UNSET_POP_4_r00 941 -#define _GUARD_BIT_IS_UNSET_POP_4_r10 942 -#define _GUARD_BIT_IS_UNSET_POP_4_r21 943 -#define _GUARD_BIT_IS_UNSET_POP_4_r32 944 -#define _GUARD_BIT_IS_UNSET_POP_5_r00 945 -#define _GUARD_BIT_IS_UNSET_POP_5_r10 946 -#define _GUARD_BIT_IS_UNSET_POP_5_r21 947 -#define _GUARD_BIT_IS_UNSET_POP_5_r32 948 -#define _GUARD_BIT_IS_UNSET_POP_6_r00 949 -#define _GUARD_BIT_IS_UNSET_POP_6_r10 950 -#define _GUARD_BIT_IS_UNSET_POP_6_r21 951 -#define _GUARD_BIT_IS_UNSET_POP_6_r32 952 -#define _GUARD_BIT_IS_UNSET_POP_7_r00 953 -#define _GUARD_BIT_IS_UNSET_POP_7_r10 954 -#define _GUARD_BIT_IS_UNSET_POP_7_r21 955 -#define _GUARD_BIT_IS_UNSET_POP_7_r32 956 -#define _GUARD_CALLABLE_BUILTIN_CLASS_r00 957 -#define _GUARD_CALLABLE_BUILTIN_FAST_r00 958 -#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS_r00 959 -#define _GUARD_CALLABLE_BUILTIN_O_r00 960 -#define _GUARD_CALLABLE_ISINSTANCE_r03 961 -#define _GUARD_CALLABLE_ISINSTANCE_r13 962 -#define _GUARD_CALLABLE_ISINSTANCE_r23 963 -#define _GUARD_CALLABLE_ISINSTANCE_r33 964 -#define _GUARD_CALLABLE_LEN_r03 965 -#define _GUARD_CALLABLE_LEN_r13 966 -#define _GUARD_CALLABLE_LEN_r23 967 -#define _GUARD_CALLABLE_LEN_r33 968 -#define _GUARD_CALLABLE_LIST_APPEND_r03 969 -#define _GUARD_CALLABLE_LIST_APPEND_r13 970 -#define _GUARD_CALLABLE_LIST_APPEND_r23 971 -#define _GUARD_CALLABLE_LIST_APPEND_r33 972 -#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_r00 973 -#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 974 -#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS_r00 975 -#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O_r00 976 -#define _GUARD_CALLABLE_STR_1_r03 977 -#define _GUARD_CALLABLE_STR_1_r13 978 -#define _GUARD_CALLABLE_STR_1_r23 979 -#define _GUARD_CALLABLE_STR_1_r33 980 -#define _GUARD_CALLABLE_TUPLE_1_r03 981 -#define _GUARD_CALLABLE_TUPLE_1_r13 982 -#define _GUARD_CALLABLE_TUPLE_1_r23 983 -#define _GUARD_CALLABLE_TUPLE_1_r33 984 -#define _GUARD_CALLABLE_TYPE_1_r03 985 -#define _GUARD_CALLABLE_TYPE_1_r13 986 -#define _GUARD_CALLABLE_TYPE_1_r23 987 -#define _GUARD_CALLABLE_TYPE_1_r33 988 -#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r00 989 -#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r11 990 -#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r22 991 -#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r33 992 -#define _GUARD_CODE_VERSION_RETURN_VALUE_r00 993 -#define _GUARD_CODE_VERSION_RETURN_VALUE_r11 994 -#define _GUARD_CODE_VERSION_RETURN_VALUE_r22 995 -#define _GUARD_CODE_VERSION_RETURN_VALUE_r33 996 -#define _GUARD_CODE_VERSION_YIELD_VALUE_r00 997 -#define _GUARD_CODE_VERSION_YIELD_VALUE_r11 998 -#define _GUARD_CODE_VERSION_YIELD_VALUE_r22 999 -#define _GUARD_CODE_VERSION_YIELD_VALUE_r33 1000 -#define _GUARD_CODE_VERSION__PUSH_FRAME_r00 1001 -#define _GUARD_CODE_VERSION__PUSH_FRAME_r11 1002 -#define _GUARD_CODE_VERSION__PUSH_FRAME_r22 1003 -#define _GUARD_CODE_VERSION__PUSH_FRAME_r33 1004 -#define _GUARD_DORV_NO_DICT_r01 1005 -#define _GUARD_DORV_NO_DICT_r11 1006 -#define _GUARD_DORV_NO_DICT_r22 1007 -#define _GUARD_DORV_NO_DICT_r33 1008 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 1009 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 1010 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 1011 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 1012 -#define _GUARD_GLOBALS_VERSION_r00 1013 -#define _GUARD_GLOBALS_VERSION_r11 1014 -#define _GUARD_GLOBALS_VERSION_r22 1015 -#define _GUARD_GLOBALS_VERSION_r33 1016 -#define _GUARD_IP_RETURN_GENERATOR_r00 1017 -#define _GUARD_IP_RETURN_GENERATOR_r11 1018 -#define _GUARD_IP_RETURN_GENERATOR_r22 1019 -#define _GUARD_IP_RETURN_GENERATOR_r33 1020 -#define _GUARD_IP_RETURN_VALUE_r00 1021 -#define _GUARD_IP_RETURN_VALUE_r11 1022 -#define _GUARD_IP_RETURN_VALUE_r22 1023 -#define _GUARD_IP_RETURN_VALUE_r33 1024 -#define _GUARD_IP_YIELD_VALUE_r00 1025 -#define _GUARD_IP_YIELD_VALUE_r11 1026 -#define _GUARD_IP_YIELD_VALUE_r22 1027 -#define _GUARD_IP_YIELD_VALUE_r33 1028 -#define _GUARD_IP__PUSH_FRAME_r00 1029 -#define _GUARD_IP__PUSH_FRAME_r11 1030 -#define _GUARD_IP__PUSH_FRAME_r22 1031 -#define _GUARD_IP__PUSH_FRAME_r33 1032 -#define _GUARD_IS_FALSE_POP_r00 1033 -#define _GUARD_IS_FALSE_POP_r10 1034 -#define _GUARD_IS_FALSE_POP_r21 1035 -#define _GUARD_IS_FALSE_POP_r32 1036 -#define _GUARD_IS_NONE_POP_r00 1037 -#define _GUARD_IS_NONE_POP_r10 1038 -#define _GUARD_IS_NONE_POP_r21 1039 -#define _GUARD_IS_NONE_POP_r32 1040 -#define _GUARD_IS_NOT_NONE_POP_r10 1041 -#define _GUARD_IS_TRUE_POP_r00 1042 -#define _GUARD_IS_TRUE_POP_r10 1043 -#define _GUARD_IS_TRUE_POP_r21 1044 -#define _GUARD_IS_TRUE_POP_r32 1045 -#define _GUARD_ITERATOR_r01 1046 -#define _GUARD_ITERATOR_r11 1047 -#define _GUARD_ITERATOR_r22 1048 -#define _GUARD_ITERATOR_r33 1049 -#define _GUARD_ITER_VIRTUAL_r01 1050 -#define _GUARD_ITER_VIRTUAL_r11 1051 -#define _GUARD_ITER_VIRTUAL_r22 1052 -#define _GUARD_ITER_VIRTUAL_r33 1053 -#define _GUARD_KEYS_VERSION_r01 1054 -#define _GUARD_KEYS_VERSION_r11 1055 -#define _GUARD_KEYS_VERSION_r22 1056 -#define _GUARD_KEYS_VERSION_r33 1057 -#define _GUARD_LOAD_SUPER_ATTR_METHOD_r03 1058 -#define _GUARD_LOAD_SUPER_ATTR_METHOD_r13 1059 -#define _GUARD_LOAD_SUPER_ATTR_METHOD_r23 1060 -#define _GUARD_LOAD_SUPER_ATTR_METHOD_r33 1061 -#define _GUARD_NOS_ANY_DICT_r02 1062 -#define _GUARD_NOS_ANY_DICT_r12 1063 -#define _GUARD_NOS_ANY_DICT_r22 1064 -#define _GUARD_NOS_ANY_DICT_r33 1065 -#define _GUARD_NOS_COMPACT_ASCII_r02 1066 -#define _GUARD_NOS_COMPACT_ASCII_r12 1067 -#define _GUARD_NOS_COMPACT_ASCII_r22 1068 -#define _GUARD_NOS_COMPACT_ASCII_r33 1069 -#define _GUARD_NOS_DICT_r02 1070 -#define _GUARD_NOS_DICT_r12 1071 -#define _GUARD_NOS_DICT_r22 1072 -#define _GUARD_NOS_DICT_r33 1073 -#define _GUARD_NOS_FLOAT_r02 1074 -#define _GUARD_NOS_FLOAT_r12 1075 -#define _GUARD_NOS_FLOAT_r22 1076 -#define _GUARD_NOS_FLOAT_r33 1077 -#define _GUARD_NOS_INT_r02 1078 -#define _GUARD_NOS_INT_r12 1079 -#define _GUARD_NOS_INT_r22 1080 -#define _GUARD_NOS_INT_r33 1081 -#define _GUARD_NOS_ITER_VIRTUAL_r02 1082 -#define _GUARD_NOS_ITER_VIRTUAL_r12 1083 -#define _GUARD_NOS_ITER_VIRTUAL_r22 1084 -#define _GUARD_NOS_ITER_VIRTUAL_r33 1085 -#define _GUARD_NOS_LIST_r02 1086 -#define _GUARD_NOS_LIST_r12 1087 -#define _GUARD_NOS_LIST_r22 1088 -#define _GUARD_NOS_LIST_r33 1089 -#define _GUARD_NOS_NOT_NULL_r02 1090 -#define _GUARD_NOS_NOT_NULL_r12 1091 -#define _GUARD_NOS_NOT_NULL_r22 1092 -#define _GUARD_NOS_NOT_NULL_r33 1093 -#define _GUARD_NOS_NULL_r02 1094 -#define _GUARD_NOS_NULL_r12 1095 -#define _GUARD_NOS_NULL_r22 1096 -#define _GUARD_NOS_NULL_r33 1097 -#define _GUARD_NOS_OVERFLOWED_r02 1098 -#define _GUARD_NOS_OVERFLOWED_r12 1099 -#define _GUARD_NOS_OVERFLOWED_r22 1100 -#define _GUARD_NOS_OVERFLOWED_r33 1101 -#define _GUARD_NOS_TUPLE_r02 1102 -#define _GUARD_NOS_TUPLE_r12 1103 -#define _GUARD_NOS_TUPLE_r22 1104 -#define _GUARD_NOS_TUPLE_r33 1105 -#define _GUARD_NOS_TYPE_VERSION_r02 1106 -#define _GUARD_NOS_TYPE_VERSION_r12 1107 -#define _GUARD_NOS_TYPE_VERSION_r22 1108 -#define _GUARD_NOS_TYPE_VERSION_r33 1109 -#define _GUARD_NOS_UNICODE_r02 1110 -#define _GUARD_NOS_UNICODE_r12 1111 -#define _GUARD_NOS_UNICODE_r22 1112 -#define _GUARD_NOS_UNICODE_r33 1113 -#define _GUARD_NOT_EXHAUSTED_LIST_r02 1114 -#define _GUARD_NOT_EXHAUSTED_LIST_r12 1115 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 1116 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 1117 -#define _GUARD_NOT_EXHAUSTED_RANGE_r02 1118 -#define _GUARD_NOT_EXHAUSTED_RANGE_r12 1119 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 1120 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 1121 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 1122 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 1123 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 1124 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 1125 -#define _GUARD_THIRD_NULL_r03 1126 -#define _GUARD_THIRD_NULL_r13 1127 -#define _GUARD_THIRD_NULL_r23 1128 -#define _GUARD_THIRD_NULL_r33 1129 -#define _GUARD_TOS_ANY_DICT_r01 1130 -#define _GUARD_TOS_ANY_DICT_r11 1131 -#define _GUARD_TOS_ANY_DICT_r22 1132 -#define _GUARD_TOS_ANY_DICT_r33 1133 -#define _GUARD_TOS_ANY_SET_r01 1134 -#define _GUARD_TOS_ANY_SET_r11 1135 -#define _GUARD_TOS_ANY_SET_r22 1136 -#define _GUARD_TOS_ANY_SET_r33 1137 -#define _GUARD_TOS_DICT_r01 1138 -#define _GUARD_TOS_DICT_r11 1139 -#define _GUARD_TOS_DICT_r22 1140 -#define _GUARD_TOS_DICT_r33 1141 -#define _GUARD_TOS_FLOAT_r01 1142 -#define _GUARD_TOS_FLOAT_r11 1143 -#define _GUARD_TOS_FLOAT_r22 1144 -#define _GUARD_TOS_FLOAT_r33 1145 -#define _GUARD_TOS_FROZENDICT_r01 1146 -#define _GUARD_TOS_FROZENDICT_r11 1147 -#define _GUARD_TOS_FROZENDICT_r22 1148 -#define _GUARD_TOS_FROZENDICT_r33 1149 -#define _GUARD_TOS_FROZENSET_r01 1150 -#define _GUARD_TOS_FROZENSET_r11 1151 -#define _GUARD_TOS_FROZENSET_r22 1152 -#define _GUARD_TOS_FROZENSET_r33 1153 -#define _GUARD_TOS_INT_r01 1154 -#define _GUARD_TOS_INT_r11 1155 -#define _GUARD_TOS_INT_r22 1156 -#define _GUARD_TOS_INT_r33 1157 -#define _GUARD_TOS_LIST_r01 1158 -#define _GUARD_TOS_LIST_r11 1159 -#define _GUARD_TOS_LIST_r22 1160 -#define _GUARD_TOS_LIST_r33 1161 -#define _GUARD_TOS_OVERFLOWED_r01 1162 -#define _GUARD_TOS_OVERFLOWED_r11 1163 -#define _GUARD_TOS_OVERFLOWED_r22 1164 -#define _GUARD_TOS_OVERFLOWED_r33 1165 -#define _GUARD_TOS_SET_r01 1166 -#define _GUARD_TOS_SET_r11 1167 -#define _GUARD_TOS_SET_r22 1168 -#define _GUARD_TOS_SET_r33 1169 -#define _GUARD_TOS_SLICE_r01 1170 -#define _GUARD_TOS_SLICE_r11 1171 -#define _GUARD_TOS_SLICE_r22 1172 -#define _GUARD_TOS_SLICE_r33 1173 -#define _GUARD_TOS_TUPLE_r01 1174 -#define _GUARD_TOS_TUPLE_r11 1175 -#define _GUARD_TOS_TUPLE_r22 1176 -#define _GUARD_TOS_TUPLE_r33 1177 -#define _GUARD_TOS_UNICODE_r01 1178 -#define _GUARD_TOS_UNICODE_r11 1179 -#define _GUARD_TOS_UNICODE_r22 1180 -#define _GUARD_TOS_UNICODE_r33 1181 -#define _GUARD_TYPE_r01 1182 -#define _GUARD_TYPE_r11 1183 -#define _GUARD_TYPE_r22 1184 -#define _GUARD_TYPE_r33 1185 -#define _GUARD_TYPE_VERSION_r01 1186 -#define _GUARD_TYPE_VERSION_r11 1187 -#define _GUARD_TYPE_VERSION_r22 1188 -#define _GUARD_TYPE_VERSION_r33 1189 -#define _GUARD_TYPE_VERSION_LOCKED_r01 1190 -#define _GUARD_TYPE_VERSION_LOCKED_r11 1191 -#define _GUARD_TYPE_VERSION_LOCKED_r22 1192 -#define _GUARD_TYPE_VERSION_LOCKED_r33 1193 -#define _HANDLE_PENDING_AND_DEOPT_r00 1194 -#define _HANDLE_PENDING_AND_DEOPT_r10 1195 -#define _HANDLE_PENDING_AND_DEOPT_r20 1196 -#define _HANDLE_PENDING_AND_DEOPT_r30 1197 -#define _IMPORT_FROM_r12 1198 -#define _IMPORT_NAME_r21 1199 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1200 -#define _INIT_CALL_PY_EXACT_ARGS_r01 1201 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1202 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1203 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1204 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1205 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1206 -#define _INSERT_NULL_r10 1207 -#define _INSTRUMENTED_FOR_ITER_r23 1208 -#define _INSTRUMENTED_INSTRUCTION_r00 1209 -#define _INSTRUMENTED_JUMP_FORWARD_r00 1210 -#define _INSTRUMENTED_JUMP_FORWARD_r11 1211 -#define _INSTRUMENTED_JUMP_FORWARD_r22 1212 -#define _INSTRUMENTED_JUMP_FORWARD_r33 1213 -#define _INSTRUMENTED_LINE_r00 1214 -#define _INSTRUMENTED_NOT_TAKEN_r00 1215 -#define _INSTRUMENTED_NOT_TAKEN_r11 1216 -#define _INSTRUMENTED_NOT_TAKEN_r22 1217 -#define _INSTRUMENTED_NOT_TAKEN_r33 1218 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1219 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1220 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1221 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1222 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1223 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1224 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1225 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1226 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1227 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1228 -#define _IS_NONE_r11 1229 -#define _IS_OP_r03 1230 -#define _IS_OP_r13 1231 -#define _IS_OP_r23 1232 -#define _ITER_CHECK_LIST_r02 1233 -#define _ITER_CHECK_LIST_r12 1234 -#define _ITER_CHECK_LIST_r22 1235 -#define _ITER_CHECK_LIST_r33 1236 -#define _ITER_CHECK_RANGE_r02 1237 -#define _ITER_CHECK_RANGE_r12 1238 -#define _ITER_CHECK_RANGE_r22 1239 -#define _ITER_CHECK_RANGE_r33 1240 -#define _ITER_CHECK_TUPLE_r02 1241 -#define _ITER_CHECK_TUPLE_r12 1242 -#define _ITER_CHECK_TUPLE_r22 1243 -#define _ITER_CHECK_TUPLE_r33 1244 -#define _ITER_JUMP_LIST_r02 1245 -#define _ITER_JUMP_LIST_r12 1246 -#define _ITER_JUMP_LIST_r22 1247 -#define _ITER_JUMP_LIST_r33 1248 -#define _ITER_JUMP_RANGE_r02 1249 -#define _ITER_JUMP_RANGE_r12 1250 -#define _ITER_JUMP_RANGE_r22 1251 -#define _ITER_JUMP_RANGE_r33 1252 -#define _ITER_JUMP_TUPLE_r02 1253 -#define _ITER_JUMP_TUPLE_r12 1254 -#define _ITER_JUMP_TUPLE_r22 1255 -#define _ITER_JUMP_TUPLE_r33 1256 -#define _ITER_NEXT_LIST_r23 1257 -#define _ITER_NEXT_LIST_TIER_TWO_r23 1258 -#define _ITER_NEXT_RANGE_r03 1259 -#define _ITER_NEXT_RANGE_r13 1260 -#define _ITER_NEXT_RANGE_r23 1261 -#define _ITER_NEXT_TUPLE_r03 1262 -#define _ITER_NEXT_TUPLE_r13 1263 -#define _ITER_NEXT_TUPLE_r23 1264 -#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1265 -#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1266 -#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1267 -#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1268 -#define _JUMP_TO_TOP_r00 1269 -#define _LIST_APPEND_r10 1270 -#define _LIST_EXTEND_r11 1271 -#define _LOAD_ATTR_r10 1272 -#define _LOAD_ATTR_CLASS_r11 1273 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME_r11 1274 -#define _LOAD_ATTR_INSTANCE_VALUE_r02 1275 -#define _LOAD_ATTR_INSTANCE_VALUE_r12 1276 -#define _LOAD_ATTR_INSTANCE_VALUE_r23 1277 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1278 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1279 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1280 -#define _LOAD_ATTR_METHOD_NO_DICT_r02 1281 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 1282 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 1283 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1284 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1285 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1286 -#define _LOAD_ATTR_MODULE_r12 1287 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1288 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1289 -#define _LOAD_ATTR_PROPERTY_FRAME_r01 1290 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 1291 -#define _LOAD_ATTR_PROPERTY_FRAME_r22 1292 -#define _LOAD_ATTR_PROPERTY_FRAME_r33 1293 -#define _LOAD_ATTR_SLOT_r02 1294 -#define _LOAD_ATTR_SLOT_r12 1295 -#define _LOAD_ATTR_SLOT_r23 1296 -#define _LOAD_ATTR_WITH_HINT_r12 1297 -#define _LOAD_BUILD_CLASS_r01 1298 -#define _LOAD_BYTECODE_r00 1299 -#define _LOAD_COMMON_CONSTANT_r01 1300 -#define _LOAD_COMMON_CONSTANT_r12 1301 -#define _LOAD_COMMON_CONSTANT_r23 1302 -#define _LOAD_CONST_r01 1303 -#define _LOAD_CONST_r12 1304 -#define _LOAD_CONST_r23 1305 -#define _LOAD_CONST_INLINE_r01 1306 -#define _LOAD_CONST_INLINE_r12 1307 -#define _LOAD_CONST_INLINE_r23 1308 -#define _LOAD_CONST_INLINE_BORROW_r01 1309 -#define _LOAD_CONST_INLINE_BORROW_r12 1310 -#define _LOAD_CONST_INLINE_BORROW_r23 1311 -#define _LOAD_DEREF_r01 1312 -#define _LOAD_FAST_r01 1313 -#define _LOAD_FAST_r12 1314 -#define _LOAD_FAST_r23 1315 -#define _LOAD_FAST_0_r01 1316 -#define _LOAD_FAST_0_r12 1317 -#define _LOAD_FAST_0_r23 1318 -#define _LOAD_FAST_1_r01 1319 -#define _LOAD_FAST_1_r12 1320 -#define _LOAD_FAST_1_r23 1321 -#define _LOAD_FAST_2_r01 1322 -#define _LOAD_FAST_2_r12 1323 -#define _LOAD_FAST_2_r23 1324 -#define _LOAD_FAST_3_r01 1325 -#define _LOAD_FAST_3_r12 1326 -#define _LOAD_FAST_3_r23 1327 -#define _LOAD_FAST_4_r01 1328 -#define _LOAD_FAST_4_r12 1329 -#define _LOAD_FAST_4_r23 1330 -#define _LOAD_FAST_5_r01 1331 -#define _LOAD_FAST_5_r12 1332 -#define _LOAD_FAST_5_r23 1333 -#define _LOAD_FAST_6_r01 1334 -#define _LOAD_FAST_6_r12 1335 -#define _LOAD_FAST_6_r23 1336 -#define _LOAD_FAST_7_r01 1337 -#define _LOAD_FAST_7_r12 1338 -#define _LOAD_FAST_7_r23 1339 -#define _LOAD_FAST_AND_CLEAR_r01 1340 -#define _LOAD_FAST_AND_CLEAR_r12 1341 -#define _LOAD_FAST_AND_CLEAR_r23 1342 -#define _LOAD_FAST_BORROW_r01 1343 -#define _LOAD_FAST_BORROW_r12 1344 -#define _LOAD_FAST_BORROW_r23 1345 -#define _LOAD_FAST_BORROW_0_r01 1346 -#define _LOAD_FAST_BORROW_0_r12 1347 -#define _LOAD_FAST_BORROW_0_r23 1348 -#define _LOAD_FAST_BORROW_1_r01 1349 -#define _LOAD_FAST_BORROW_1_r12 1350 -#define _LOAD_FAST_BORROW_1_r23 1351 -#define _LOAD_FAST_BORROW_2_r01 1352 -#define _LOAD_FAST_BORROW_2_r12 1353 -#define _LOAD_FAST_BORROW_2_r23 1354 -#define _LOAD_FAST_BORROW_3_r01 1355 -#define _LOAD_FAST_BORROW_3_r12 1356 -#define _LOAD_FAST_BORROW_3_r23 1357 -#define _LOAD_FAST_BORROW_4_r01 1358 -#define _LOAD_FAST_BORROW_4_r12 1359 -#define _LOAD_FAST_BORROW_4_r23 1360 -#define _LOAD_FAST_BORROW_5_r01 1361 -#define _LOAD_FAST_BORROW_5_r12 1362 -#define _LOAD_FAST_BORROW_5_r23 1363 -#define _LOAD_FAST_BORROW_6_r01 1364 -#define _LOAD_FAST_BORROW_6_r12 1365 -#define _LOAD_FAST_BORROW_6_r23 1366 -#define _LOAD_FAST_BORROW_7_r01 1367 -#define _LOAD_FAST_BORROW_7_r12 1368 -#define _LOAD_FAST_BORROW_7_r23 1369 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1370 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1371 -#define _LOAD_FAST_CHECK_r01 1372 -#define _LOAD_FAST_CHECK_r12 1373 -#define _LOAD_FAST_CHECK_r23 1374 -#define _LOAD_FAST_LOAD_FAST_r02 1375 -#define _LOAD_FAST_LOAD_FAST_r13 1376 -#define _LOAD_FROM_DICT_OR_DEREF_r11 1377 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1378 -#define _LOAD_GLOBAL_r00 1379 -#define _LOAD_GLOBAL_BUILTINS_r01 1380 -#define _LOAD_GLOBAL_MODULE_r01 1381 -#define _LOAD_LOCALS_r01 1382 -#define _LOAD_LOCALS_r12 1383 -#define _LOAD_LOCALS_r23 1384 -#define _LOAD_NAME_r01 1385 -#define _LOAD_SMALL_INT_r01 1386 -#define _LOAD_SMALL_INT_r12 1387 -#define _LOAD_SMALL_INT_r23 1388 -#define _LOAD_SMALL_INT_0_r01 1389 -#define _LOAD_SMALL_INT_0_r12 1390 -#define _LOAD_SMALL_INT_0_r23 1391 -#define _LOAD_SMALL_INT_1_r01 1392 -#define _LOAD_SMALL_INT_1_r12 1393 -#define _LOAD_SMALL_INT_1_r23 1394 -#define _LOAD_SMALL_INT_2_r01 1395 -#define _LOAD_SMALL_INT_2_r12 1396 -#define _LOAD_SMALL_INT_2_r23 1397 -#define _LOAD_SMALL_INT_3_r01 1398 -#define _LOAD_SMALL_INT_3_r12 1399 -#define _LOAD_SMALL_INT_3_r23 1400 -#define _LOAD_SPECIAL_r00 1401 -#define _LOAD_SUPER_ATTR_ATTR_r31 1402 -#define _LOAD_SUPER_ATTR_METHOD_r32 1403 -#define _LOCK_OBJECT_r01 1404 -#define _LOCK_OBJECT_r11 1405 -#define _LOCK_OBJECT_r22 1406 -#define _LOCK_OBJECT_r33 1407 -#define _MAKE_CALLARGS_A_TUPLE_r33 1408 -#define _MAKE_CELL_r00 1409 -#define _MAKE_FUNCTION_r12 1410 -#define _MAKE_HEAP_SAFE_r01 1411 -#define _MAKE_HEAP_SAFE_r11 1412 -#define _MAKE_HEAP_SAFE_r22 1413 -#define _MAKE_HEAP_SAFE_r33 1414 -#define _MAKE_WARM_r00 1415 -#define _MAKE_WARM_r11 1416 -#define _MAKE_WARM_r22 1417 -#define _MAKE_WARM_r33 1418 -#define _MAP_ADD_r20 1419 -#define _MATCH_CLASS_r33 1420 -#define _MATCH_KEYS_r23 1421 -#define _MATCH_MAPPING_r02 1422 -#define _MATCH_MAPPING_r12 1423 -#define _MATCH_MAPPING_r23 1424 -#define _MATCH_SEQUENCE_r02 1425 -#define _MATCH_SEQUENCE_r12 1426 -#define _MATCH_SEQUENCE_r23 1427 -#define _MAYBE_EXPAND_METHOD_r00 1428 -#define _MAYBE_EXPAND_METHOD_KW_r11 1429 -#define _MONITOR_CALL_r00 1430 -#define _MONITOR_CALL_KW_r11 1431 -#define _MONITOR_JUMP_BACKWARD_r00 1432 -#define _MONITOR_JUMP_BACKWARD_r11 1433 -#define _MONITOR_JUMP_BACKWARD_r22 1434 -#define _MONITOR_JUMP_BACKWARD_r33 1435 -#define _MONITOR_RESUME_r00 1436 -#define _NOP_r00 1437 -#define _NOP_r11 1438 -#define _NOP_r22 1439 -#define _NOP_r33 1440 -#define _POP_EXCEPT_r10 1441 -#define _POP_ITER_r20 1442 -#define _POP_JUMP_IF_FALSE_r00 1443 -#define _POP_JUMP_IF_FALSE_r10 1444 -#define _POP_JUMP_IF_FALSE_r21 1445 -#define _POP_JUMP_IF_FALSE_r32 1446 -#define _POP_JUMP_IF_TRUE_r00 1447 -#define _POP_JUMP_IF_TRUE_r10 1448 -#define _POP_JUMP_IF_TRUE_r21 1449 -#define _POP_JUMP_IF_TRUE_r32 1450 -#define _POP_TOP_r10 1451 -#define _POP_TOP_FLOAT_r00 1452 -#define _POP_TOP_FLOAT_r10 1453 -#define _POP_TOP_FLOAT_r21 1454 -#define _POP_TOP_FLOAT_r32 1455 -#define _POP_TOP_INT_r00 1456 -#define _POP_TOP_INT_r10 1457 -#define _POP_TOP_INT_r21 1458 -#define _POP_TOP_INT_r32 1459 -#define _POP_TOP_NOP_r00 1460 -#define _POP_TOP_NOP_r10 1461 -#define _POP_TOP_NOP_r21 1462 -#define _POP_TOP_NOP_r32 1463 -#define _POP_TOP_OPARG_r00 1464 -#define _POP_TOP_UNICODE_r00 1465 -#define _POP_TOP_UNICODE_r10 1466 -#define _POP_TOP_UNICODE_r21 1467 -#define _POP_TOP_UNICODE_r32 1468 -#define _PUSH_EXC_INFO_r02 1469 -#define _PUSH_EXC_INFO_r12 1470 -#define _PUSH_EXC_INFO_r23 1471 -#define _PUSH_FRAME_r10 1472 -#define _PUSH_NULL_r01 1473 -#define _PUSH_NULL_r12 1474 -#define _PUSH_NULL_r23 1475 -#define _PUSH_NULL_CONDITIONAL_r00 1476 -#define _PUSH_TAGGED_ZERO_r01 1477 -#define _PUSH_TAGGED_ZERO_r12 1478 -#define _PUSH_TAGGED_ZERO_r23 1479 -#define _PY_FRAME_EX_r31 1480 -#define _PY_FRAME_GENERAL_r01 1481 -#define _PY_FRAME_KW_r11 1482 -#define _REPLACE_WITH_TRUE_r02 1483 -#define _REPLACE_WITH_TRUE_r12 1484 -#define _REPLACE_WITH_TRUE_r23 1485 -#define _RESUME_CHECK_r00 1486 -#define _RESUME_CHECK_r11 1487 -#define _RESUME_CHECK_r22 1488 -#define _RESUME_CHECK_r33 1489 -#define _RETURN_GENERATOR_r01 1490 -#define _RETURN_VALUE_r11 1491 -#define _SAVE_RETURN_OFFSET_r00 1492 -#define _SAVE_RETURN_OFFSET_r11 1493 -#define _SAVE_RETURN_OFFSET_r22 1494 -#define _SAVE_RETURN_OFFSET_r33 1495 -#define _SEND_r33 1496 -#define _SEND_GEN_FRAME_r33 1497 -#define _SETUP_ANNOTATIONS_r00 1498 -#define _SET_ADD_r10 1499 -#define _SET_FUNCTION_ATTRIBUTE_r01 1500 -#define _SET_FUNCTION_ATTRIBUTE_r11 1501 -#define _SET_FUNCTION_ATTRIBUTE_r21 1502 -#define _SET_FUNCTION_ATTRIBUTE_r32 1503 -#define _SET_IP_r00 1504 -#define _SET_IP_r11 1505 -#define _SET_IP_r22 1506 -#define _SET_IP_r33 1507 -#define _SET_UPDATE_r11 1508 -#define _SPILL_OR_RELOAD_r01 1509 -#define _SPILL_OR_RELOAD_r02 1510 -#define _SPILL_OR_RELOAD_r03 1511 -#define _SPILL_OR_RELOAD_r10 1512 -#define _SPILL_OR_RELOAD_r12 1513 -#define _SPILL_OR_RELOAD_r13 1514 -#define _SPILL_OR_RELOAD_r20 1515 -#define _SPILL_OR_RELOAD_r21 1516 -#define _SPILL_OR_RELOAD_r23 1517 -#define _SPILL_OR_RELOAD_r30 1518 -#define _SPILL_OR_RELOAD_r31 1519 -#define _SPILL_OR_RELOAD_r32 1520 -#define _START_EXECUTOR_r00 1521 -#define _STORE_ATTR_r20 1522 -#define _STORE_ATTR_INSTANCE_VALUE_r21 1523 -#define _STORE_ATTR_SLOT_r21 1524 -#define _STORE_ATTR_WITH_HINT_r21 1525 -#define _STORE_DEREF_r10 1526 -#define _STORE_FAST_LOAD_FAST_r11 1527 -#define _STORE_FAST_STORE_FAST_r20 1528 -#define _STORE_GLOBAL_r10 1529 -#define _STORE_NAME_r10 1530 -#define _STORE_SLICE_r30 1531 -#define _STORE_SUBSCR_r30 1532 -#define _STORE_SUBSCR_DICT_r31 1533 -#define _STORE_SUBSCR_DICT_KNOWN_HASH_r31 1534 -#define _STORE_SUBSCR_LIST_INT_r32 1535 -#define _SWAP_r11 1536 -#define _SWAP_2_r02 1537 -#define _SWAP_2_r12 1538 -#define _SWAP_2_r22 1539 -#define _SWAP_2_r33 1540 -#define _SWAP_3_r03 1541 -#define _SWAP_3_r13 1542 -#define _SWAP_3_r23 1543 -#define _SWAP_3_r33 1544 -#define _SWAP_FAST_r01 1545 -#define _SWAP_FAST_r11 1546 -#define _SWAP_FAST_r22 1547 -#define _SWAP_FAST_r33 1548 -#define _SWAP_FAST_0_r01 1549 -#define _SWAP_FAST_0_r11 1550 -#define _SWAP_FAST_0_r22 1551 -#define _SWAP_FAST_0_r33 1552 -#define _SWAP_FAST_1_r01 1553 -#define _SWAP_FAST_1_r11 1554 -#define _SWAP_FAST_1_r22 1555 -#define _SWAP_FAST_1_r33 1556 -#define _SWAP_FAST_2_r01 1557 -#define _SWAP_FAST_2_r11 1558 -#define _SWAP_FAST_2_r22 1559 -#define _SWAP_FAST_2_r33 1560 -#define _SWAP_FAST_3_r01 1561 -#define _SWAP_FAST_3_r11 1562 -#define _SWAP_FAST_3_r22 1563 -#define _SWAP_FAST_3_r33 1564 -#define _SWAP_FAST_4_r01 1565 -#define _SWAP_FAST_4_r11 1566 -#define _SWAP_FAST_4_r22 1567 -#define _SWAP_FAST_4_r33 1568 -#define _SWAP_FAST_5_r01 1569 -#define _SWAP_FAST_5_r11 1570 -#define _SWAP_FAST_5_r22 1571 -#define _SWAP_FAST_5_r33 1572 -#define _SWAP_FAST_6_r01 1573 -#define _SWAP_FAST_6_r11 1574 -#define _SWAP_FAST_6_r22 1575 -#define _SWAP_FAST_6_r33 1576 -#define _SWAP_FAST_7_r01 1577 -#define _SWAP_FAST_7_r11 1578 -#define _SWAP_FAST_7_r22 1579 -#define _SWAP_FAST_7_r33 1580 -#define _TIER2_RESUME_CHECK_r00 1581 -#define _TIER2_RESUME_CHECK_r11 1582 -#define _TIER2_RESUME_CHECK_r22 1583 -#define _TIER2_RESUME_CHECK_r33 1584 -#define _TO_BOOL_r11 1585 -#define _TO_BOOL_BOOL_r01 1586 -#define _TO_BOOL_BOOL_r11 1587 -#define _TO_BOOL_BOOL_r22 1588 -#define _TO_BOOL_BOOL_r33 1589 -#define _TO_BOOL_INT_r02 1590 -#define _TO_BOOL_INT_r12 1591 -#define _TO_BOOL_INT_r23 1592 -#define _TO_BOOL_LIST_r02 1593 -#define _TO_BOOL_LIST_r12 1594 -#define _TO_BOOL_LIST_r23 1595 -#define _TO_BOOL_NONE_r01 1596 -#define _TO_BOOL_NONE_r11 1597 -#define _TO_BOOL_NONE_r22 1598 -#define _TO_BOOL_NONE_r33 1599 -#define _TO_BOOL_STR_r02 1600 -#define _TO_BOOL_STR_r12 1601 -#define _TO_BOOL_STR_r23 1602 -#define _TRACE_RECORD_r00 1603 -#define _UNARY_INVERT_r12 1604 -#define _UNARY_NEGATIVE_r12 1605 -#define _UNARY_NEGATIVE_FLOAT_INPLACE_r02 1606 -#define _UNARY_NEGATIVE_FLOAT_INPLACE_r12 1607 -#define _UNARY_NEGATIVE_FLOAT_INPLACE_r23 1608 -#define _UNARY_NOT_r01 1609 -#define _UNARY_NOT_r11 1610 -#define _UNARY_NOT_r22 1611 -#define _UNARY_NOT_r33 1612 -#define _UNPACK_EX_r10 1613 -#define _UNPACK_SEQUENCE_r10 1614 -#define _UNPACK_SEQUENCE_LIST_r10 1615 -#define _UNPACK_SEQUENCE_TUPLE_r10 1616 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1617 -#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r03 1618 -#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r13 1619 -#define _UNPACK_SEQUENCE_UNIQUE_TUPLE_r10 1620 -#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r02 1621 -#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r12 1622 -#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r23 1623 -#define _WITH_EXCEPT_START_r33 1624 -#define _YIELD_VALUE_r11 1625 -#define MAX_UOP_REGS_ID 1625 +#define _GET_AWAITABLE_r11 898 +#define _GET_ITER_r12 899 +#define _GET_ITER_TRAD_r12 900 +#define _GET_LEN_r12 901 +#define _GUARD_BINARY_OP_EXTEND_r22 902 +#define _GUARD_BINARY_OP_EXTEND_LHS_r02 903 +#define _GUARD_BINARY_OP_EXTEND_LHS_r12 904 +#define _GUARD_BINARY_OP_EXTEND_LHS_r22 905 +#define _GUARD_BINARY_OP_EXTEND_LHS_r33 906 +#define _GUARD_BINARY_OP_EXTEND_RHS_r02 907 +#define _GUARD_BINARY_OP_EXTEND_RHS_r12 908 +#define _GUARD_BINARY_OP_EXTEND_RHS_r22 909 +#define _GUARD_BINARY_OP_EXTEND_RHS_r33 910 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 911 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 912 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 913 +#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 914 +#define _GUARD_BIT_IS_SET_POP_r00 915 +#define _GUARD_BIT_IS_SET_POP_r10 916 +#define _GUARD_BIT_IS_SET_POP_r21 917 +#define _GUARD_BIT_IS_SET_POP_r32 918 +#define _GUARD_BIT_IS_SET_POP_4_r00 919 +#define _GUARD_BIT_IS_SET_POP_4_r10 920 +#define _GUARD_BIT_IS_SET_POP_4_r21 921 +#define _GUARD_BIT_IS_SET_POP_4_r32 922 +#define _GUARD_BIT_IS_SET_POP_5_r00 923 +#define _GUARD_BIT_IS_SET_POP_5_r10 924 +#define _GUARD_BIT_IS_SET_POP_5_r21 925 +#define _GUARD_BIT_IS_SET_POP_5_r32 926 +#define _GUARD_BIT_IS_SET_POP_6_r00 927 +#define _GUARD_BIT_IS_SET_POP_6_r10 928 +#define _GUARD_BIT_IS_SET_POP_6_r21 929 +#define _GUARD_BIT_IS_SET_POP_6_r32 930 +#define _GUARD_BIT_IS_SET_POP_7_r00 931 +#define _GUARD_BIT_IS_SET_POP_7_r10 932 +#define _GUARD_BIT_IS_SET_POP_7_r21 933 +#define _GUARD_BIT_IS_SET_POP_7_r32 934 +#define _GUARD_BIT_IS_UNSET_POP_r00 935 +#define _GUARD_BIT_IS_UNSET_POP_r10 936 +#define _GUARD_BIT_IS_UNSET_POP_r21 937 +#define _GUARD_BIT_IS_UNSET_POP_r32 938 +#define _GUARD_BIT_IS_UNSET_POP_4_r00 939 +#define _GUARD_BIT_IS_UNSET_POP_4_r10 940 +#define _GUARD_BIT_IS_UNSET_POP_4_r21 941 +#define _GUARD_BIT_IS_UNSET_POP_4_r32 942 +#define _GUARD_BIT_IS_UNSET_POP_5_r00 943 +#define _GUARD_BIT_IS_UNSET_POP_5_r10 944 +#define _GUARD_BIT_IS_UNSET_POP_5_r21 945 +#define _GUARD_BIT_IS_UNSET_POP_5_r32 946 +#define _GUARD_BIT_IS_UNSET_POP_6_r00 947 +#define _GUARD_BIT_IS_UNSET_POP_6_r10 948 +#define _GUARD_BIT_IS_UNSET_POP_6_r21 949 +#define _GUARD_BIT_IS_UNSET_POP_6_r32 950 +#define _GUARD_BIT_IS_UNSET_POP_7_r00 951 +#define _GUARD_BIT_IS_UNSET_POP_7_r10 952 +#define _GUARD_BIT_IS_UNSET_POP_7_r21 953 +#define _GUARD_BIT_IS_UNSET_POP_7_r32 954 +#define _GUARD_CALLABLE_BUILTIN_CLASS_r00 955 +#define _GUARD_CALLABLE_BUILTIN_FAST_r00 956 +#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS_r00 957 +#define _GUARD_CALLABLE_BUILTIN_O_r00 958 +#define _GUARD_CALLABLE_ISINSTANCE_r03 959 +#define _GUARD_CALLABLE_ISINSTANCE_r13 960 +#define _GUARD_CALLABLE_ISINSTANCE_r23 961 +#define _GUARD_CALLABLE_ISINSTANCE_r33 962 +#define _GUARD_CALLABLE_LEN_r03 963 +#define _GUARD_CALLABLE_LEN_r13 964 +#define _GUARD_CALLABLE_LEN_r23 965 +#define _GUARD_CALLABLE_LEN_r33 966 +#define _GUARD_CALLABLE_LIST_APPEND_r03 967 +#define _GUARD_CALLABLE_LIST_APPEND_r13 968 +#define _GUARD_CALLABLE_LIST_APPEND_r23 969 +#define _GUARD_CALLABLE_LIST_APPEND_r33 970 +#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_r00 971 +#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 972 +#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS_r00 973 +#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O_r00 974 +#define _GUARD_CALLABLE_STR_1_r03 975 +#define _GUARD_CALLABLE_STR_1_r13 976 +#define _GUARD_CALLABLE_STR_1_r23 977 +#define _GUARD_CALLABLE_STR_1_r33 978 +#define _GUARD_CALLABLE_TUPLE_1_r03 979 +#define _GUARD_CALLABLE_TUPLE_1_r13 980 +#define _GUARD_CALLABLE_TUPLE_1_r23 981 +#define _GUARD_CALLABLE_TUPLE_1_r33 982 +#define _GUARD_CALLABLE_TYPE_1_r03 983 +#define _GUARD_CALLABLE_TYPE_1_r13 984 +#define _GUARD_CALLABLE_TYPE_1_r23 985 +#define _GUARD_CALLABLE_TYPE_1_r33 986 +#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r00 987 +#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r11 988 +#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r22 989 +#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r33 990 +#define _GUARD_CODE_VERSION_RETURN_VALUE_r00 991 +#define _GUARD_CODE_VERSION_RETURN_VALUE_r11 992 +#define _GUARD_CODE_VERSION_RETURN_VALUE_r22 993 +#define _GUARD_CODE_VERSION_RETURN_VALUE_r33 994 +#define _GUARD_CODE_VERSION_YIELD_VALUE_r00 995 +#define _GUARD_CODE_VERSION_YIELD_VALUE_r11 996 +#define _GUARD_CODE_VERSION_YIELD_VALUE_r22 997 +#define _GUARD_CODE_VERSION_YIELD_VALUE_r33 998 +#define _GUARD_CODE_VERSION__PUSH_FRAME_r00 999 +#define _GUARD_CODE_VERSION__PUSH_FRAME_r11 1000 +#define _GUARD_CODE_VERSION__PUSH_FRAME_r22 1001 +#define _GUARD_CODE_VERSION__PUSH_FRAME_r33 1002 +#define _GUARD_DORV_NO_DICT_r01 1003 +#define _GUARD_DORV_NO_DICT_r11 1004 +#define _GUARD_DORV_NO_DICT_r22 1005 +#define _GUARD_DORV_NO_DICT_r33 1006 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 1007 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 1008 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 1009 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 1010 +#define _GUARD_GLOBALS_VERSION_r00 1011 +#define _GUARD_GLOBALS_VERSION_r11 1012 +#define _GUARD_GLOBALS_VERSION_r22 1013 +#define _GUARD_GLOBALS_VERSION_r33 1014 +#define _GUARD_IP_RETURN_GENERATOR_r00 1015 +#define _GUARD_IP_RETURN_GENERATOR_r11 1016 +#define _GUARD_IP_RETURN_GENERATOR_r22 1017 +#define _GUARD_IP_RETURN_GENERATOR_r33 1018 +#define _GUARD_IP_RETURN_VALUE_r00 1019 +#define _GUARD_IP_RETURN_VALUE_r11 1020 +#define _GUARD_IP_RETURN_VALUE_r22 1021 +#define _GUARD_IP_RETURN_VALUE_r33 1022 +#define _GUARD_IP_YIELD_VALUE_r00 1023 +#define _GUARD_IP_YIELD_VALUE_r11 1024 +#define _GUARD_IP_YIELD_VALUE_r22 1025 +#define _GUARD_IP_YIELD_VALUE_r33 1026 +#define _GUARD_IP__PUSH_FRAME_r00 1027 +#define _GUARD_IP__PUSH_FRAME_r11 1028 +#define _GUARD_IP__PUSH_FRAME_r22 1029 +#define _GUARD_IP__PUSH_FRAME_r33 1030 +#define _GUARD_IS_FALSE_POP_r00 1031 +#define _GUARD_IS_FALSE_POP_r10 1032 +#define _GUARD_IS_FALSE_POP_r21 1033 +#define _GUARD_IS_FALSE_POP_r32 1034 +#define _GUARD_IS_NONE_POP_r00 1035 +#define _GUARD_IS_NONE_POP_r10 1036 +#define _GUARD_IS_NONE_POP_r21 1037 +#define _GUARD_IS_NONE_POP_r32 1038 +#define _GUARD_IS_NOT_NONE_POP_r10 1039 +#define _GUARD_IS_TRUE_POP_r00 1040 +#define _GUARD_IS_TRUE_POP_r10 1041 +#define _GUARD_IS_TRUE_POP_r21 1042 +#define _GUARD_IS_TRUE_POP_r32 1043 +#define _GUARD_ITERATOR_r01 1044 +#define _GUARD_ITERATOR_r11 1045 +#define _GUARD_ITERATOR_r22 1046 +#define _GUARD_ITERATOR_r33 1047 +#define _GUARD_ITER_VIRTUAL_r01 1048 +#define _GUARD_ITER_VIRTUAL_r11 1049 +#define _GUARD_ITER_VIRTUAL_r22 1050 +#define _GUARD_ITER_VIRTUAL_r33 1051 +#define _GUARD_KEYS_VERSION_r01 1052 +#define _GUARD_KEYS_VERSION_r11 1053 +#define _GUARD_KEYS_VERSION_r22 1054 +#define _GUARD_KEYS_VERSION_r33 1055 +#define _GUARD_LOAD_SUPER_ATTR_METHOD_r03 1056 +#define _GUARD_LOAD_SUPER_ATTR_METHOD_r13 1057 +#define _GUARD_LOAD_SUPER_ATTR_METHOD_r23 1058 +#define _GUARD_LOAD_SUPER_ATTR_METHOD_r33 1059 +#define _GUARD_NOS_ANY_DICT_r02 1060 +#define _GUARD_NOS_ANY_DICT_r12 1061 +#define _GUARD_NOS_ANY_DICT_r22 1062 +#define _GUARD_NOS_ANY_DICT_r33 1063 +#define _GUARD_NOS_COMPACT_ASCII_r02 1064 +#define _GUARD_NOS_COMPACT_ASCII_r12 1065 +#define _GUARD_NOS_COMPACT_ASCII_r22 1066 +#define _GUARD_NOS_COMPACT_ASCII_r33 1067 +#define _GUARD_NOS_DICT_r02 1068 +#define _GUARD_NOS_DICT_r12 1069 +#define _GUARD_NOS_DICT_r22 1070 +#define _GUARD_NOS_DICT_r33 1071 +#define _GUARD_NOS_FLOAT_r02 1072 +#define _GUARD_NOS_FLOAT_r12 1073 +#define _GUARD_NOS_FLOAT_r22 1074 +#define _GUARD_NOS_FLOAT_r33 1075 +#define _GUARD_NOS_INT_r02 1076 +#define _GUARD_NOS_INT_r12 1077 +#define _GUARD_NOS_INT_r22 1078 +#define _GUARD_NOS_INT_r33 1079 +#define _GUARD_NOS_ITER_VIRTUAL_r02 1080 +#define _GUARD_NOS_ITER_VIRTUAL_r12 1081 +#define _GUARD_NOS_ITER_VIRTUAL_r22 1082 +#define _GUARD_NOS_ITER_VIRTUAL_r33 1083 +#define _GUARD_NOS_LIST_r02 1084 +#define _GUARD_NOS_LIST_r12 1085 +#define _GUARD_NOS_LIST_r22 1086 +#define _GUARD_NOS_LIST_r33 1087 +#define _GUARD_NOS_NOT_NULL_r02 1088 +#define _GUARD_NOS_NOT_NULL_r12 1089 +#define _GUARD_NOS_NOT_NULL_r22 1090 +#define _GUARD_NOS_NOT_NULL_r33 1091 +#define _GUARD_NOS_NULL_r02 1092 +#define _GUARD_NOS_NULL_r12 1093 +#define _GUARD_NOS_NULL_r22 1094 +#define _GUARD_NOS_NULL_r33 1095 +#define _GUARD_NOS_OVERFLOWED_r02 1096 +#define _GUARD_NOS_OVERFLOWED_r12 1097 +#define _GUARD_NOS_OVERFLOWED_r22 1098 +#define _GUARD_NOS_OVERFLOWED_r33 1099 +#define _GUARD_NOS_TUPLE_r02 1100 +#define _GUARD_NOS_TUPLE_r12 1101 +#define _GUARD_NOS_TUPLE_r22 1102 +#define _GUARD_NOS_TUPLE_r33 1103 +#define _GUARD_NOS_TYPE_VERSION_r02 1104 +#define _GUARD_NOS_TYPE_VERSION_r12 1105 +#define _GUARD_NOS_TYPE_VERSION_r22 1106 +#define _GUARD_NOS_TYPE_VERSION_r33 1107 +#define _GUARD_NOS_UNICODE_r02 1108 +#define _GUARD_NOS_UNICODE_r12 1109 +#define _GUARD_NOS_UNICODE_r22 1110 +#define _GUARD_NOS_UNICODE_r33 1111 +#define _GUARD_NOT_EXHAUSTED_LIST_r02 1112 +#define _GUARD_NOT_EXHAUSTED_LIST_r12 1113 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 1114 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 1115 +#define _GUARD_NOT_EXHAUSTED_RANGE_r02 1116 +#define _GUARD_NOT_EXHAUSTED_RANGE_r12 1117 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 1118 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 1119 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 1120 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 1121 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 1122 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 1123 +#define _GUARD_THIRD_NULL_r03 1124 +#define _GUARD_THIRD_NULL_r13 1125 +#define _GUARD_THIRD_NULL_r23 1126 +#define _GUARD_THIRD_NULL_r33 1127 +#define _GUARD_TOS_ANY_DICT_r01 1128 +#define _GUARD_TOS_ANY_DICT_r11 1129 +#define _GUARD_TOS_ANY_DICT_r22 1130 +#define _GUARD_TOS_ANY_DICT_r33 1131 +#define _GUARD_TOS_ANY_SET_r01 1132 +#define _GUARD_TOS_ANY_SET_r11 1133 +#define _GUARD_TOS_ANY_SET_r22 1134 +#define _GUARD_TOS_ANY_SET_r33 1135 +#define _GUARD_TOS_DICT_r01 1136 +#define _GUARD_TOS_DICT_r11 1137 +#define _GUARD_TOS_DICT_r22 1138 +#define _GUARD_TOS_DICT_r33 1139 +#define _GUARD_TOS_FLOAT_r01 1140 +#define _GUARD_TOS_FLOAT_r11 1141 +#define _GUARD_TOS_FLOAT_r22 1142 +#define _GUARD_TOS_FLOAT_r33 1143 +#define _GUARD_TOS_FROZENDICT_r01 1144 +#define _GUARD_TOS_FROZENDICT_r11 1145 +#define _GUARD_TOS_FROZENDICT_r22 1146 +#define _GUARD_TOS_FROZENDICT_r33 1147 +#define _GUARD_TOS_FROZENSET_r01 1148 +#define _GUARD_TOS_FROZENSET_r11 1149 +#define _GUARD_TOS_FROZENSET_r22 1150 +#define _GUARD_TOS_FROZENSET_r33 1151 +#define _GUARD_TOS_INT_r01 1152 +#define _GUARD_TOS_INT_r11 1153 +#define _GUARD_TOS_INT_r22 1154 +#define _GUARD_TOS_INT_r33 1155 +#define _GUARD_TOS_LIST_r01 1156 +#define _GUARD_TOS_LIST_r11 1157 +#define _GUARD_TOS_LIST_r22 1158 +#define _GUARD_TOS_LIST_r33 1159 +#define _GUARD_TOS_OVERFLOWED_r01 1160 +#define _GUARD_TOS_OVERFLOWED_r11 1161 +#define _GUARD_TOS_OVERFLOWED_r22 1162 +#define _GUARD_TOS_OVERFLOWED_r33 1163 +#define _GUARD_TOS_SET_r01 1164 +#define _GUARD_TOS_SET_r11 1165 +#define _GUARD_TOS_SET_r22 1166 +#define _GUARD_TOS_SET_r33 1167 +#define _GUARD_TOS_SLICE_r01 1168 +#define _GUARD_TOS_SLICE_r11 1169 +#define _GUARD_TOS_SLICE_r22 1170 +#define _GUARD_TOS_SLICE_r33 1171 +#define _GUARD_TOS_TUPLE_r01 1172 +#define _GUARD_TOS_TUPLE_r11 1173 +#define _GUARD_TOS_TUPLE_r22 1174 +#define _GUARD_TOS_TUPLE_r33 1175 +#define _GUARD_TOS_UNICODE_r01 1176 +#define _GUARD_TOS_UNICODE_r11 1177 +#define _GUARD_TOS_UNICODE_r22 1178 +#define _GUARD_TOS_UNICODE_r33 1179 +#define _GUARD_TYPE_r01 1180 +#define _GUARD_TYPE_r11 1181 +#define _GUARD_TYPE_r22 1182 +#define _GUARD_TYPE_r33 1183 +#define _GUARD_TYPE_VERSION_r01 1184 +#define _GUARD_TYPE_VERSION_r11 1185 +#define _GUARD_TYPE_VERSION_r22 1186 +#define _GUARD_TYPE_VERSION_r33 1187 +#define _GUARD_TYPE_VERSION_LOCKED_r01 1188 +#define _GUARD_TYPE_VERSION_LOCKED_r11 1189 +#define _GUARD_TYPE_VERSION_LOCKED_r22 1190 +#define _GUARD_TYPE_VERSION_LOCKED_r33 1191 +#define _HANDLE_PENDING_AND_DEOPT_r00 1192 +#define _HANDLE_PENDING_AND_DEOPT_r10 1193 +#define _HANDLE_PENDING_AND_DEOPT_r20 1194 +#define _HANDLE_PENDING_AND_DEOPT_r30 1195 +#define _IMPORT_FROM_r12 1196 +#define _IMPORT_NAME_r21 1197 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1198 +#define _INIT_CALL_PY_EXACT_ARGS_r01 1199 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1200 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1201 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1202 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1203 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1204 +#define _INSERT_NULL_r10 1205 +#define _INSTRUMENTED_FOR_ITER_r23 1206 +#define _INSTRUMENTED_INSTRUCTION_r00 1207 +#define _INSTRUMENTED_JUMP_FORWARD_r00 1208 +#define _INSTRUMENTED_JUMP_FORWARD_r11 1209 +#define _INSTRUMENTED_JUMP_FORWARD_r22 1210 +#define _INSTRUMENTED_JUMP_FORWARD_r33 1211 +#define _INSTRUMENTED_LINE_r00 1212 +#define _INSTRUMENTED_NOT_TAKEN_r00 1213 +#define _INSTRUMENTED_NOT_TAKEN_r11 1214 +#define _INSTRUMENTED_NOT_TAKEN_r22 1215 +#define _INSTRUMENTED_NOT_TAKEN_r33 1216 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1217 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1218 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1219 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1220 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1221 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1222 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1223 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1224 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1225 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1226 +#define _IS_NONE_r11 1227 +#define _IS_OP_r03 1228 +#define _IS_OP_r13 1229 +#define _IS_OP_r23 1230 +#define _ITER_CHECK_LIST_r02 1231 +#define _ITER_CHECK_LIST_r12 1232 +#define _ITER_CHECK_LIST_r22 1233 +#define _ITER_CHECK_LIST_r33 1234 +#define _ITER_CHECK_RANGE_r02 1235 +#define _ITER_CHECK_RANGE_r12 1236 +#define _ITER_CHECK_RANGE_r22 1237 +#define _ITER_CHECK_RANGE_r33 1238 +#define _ITER_CHECK_TUPLE_r02 1239 +#define _ITER_CHECK_TUPLE_r12 1240 +#define _ITER_CHECK_TUPLE_r22 1241 +#define _ITER_CHECK_TUPLE_r33 1242 +#define _ITER_JUMP_LIST_r02 1243 +#define _ITER_JUMP_LIST_r12 1244 +#define _ITER_JUMP_LIST_r22 1245 +#define _ITER_JUMP_LIST_r33 1246 +#define _ITER_JUMP_RANGE_r02 1247 +#define _ITER_JUMP_RANGE_r12 1248 +#define _ITER_JUMP_RANGE_r22 1249 +#define _ITER_JUMP_RANGE_r33 1250 +#define _ITER_JUMP_TUPLE_r02 1251 +#define _ITER_JUMP_TUPLE_r12 1252 +#define _ITER_JUMP_TUPLE_r22 1253 +#define _ITER_JUMP_TUPLE_r33 1254 +#define _ITER_NEXT_LIST_r23 1255 +#define _ITER_NEXT_LIST_TIER_TWO_r23 1256 +#define _ITER_NEXT_RANGE_r03 1257 +#define _ITER_NEXT_RANGE_r13 1258 +#define _ITER_NEXT_RANGE_r23 1259 +#define _ITER_NEXT_TUPLE_r03 1260 +#define _ITER_NEXT_TUPLE_r13 1261 +#define _ITER_NEXT_TUPLE_r23 1262 +#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1263 +#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1264 +#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1265 +#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1266 +#define _JUMP_TO_TOP_r00 1267 +#define _LIST_APPEND_r10 1268 +#define _LIST_EXTEND_r11 1269 +#define _LOAD_ATTR_r10 1270 +#define _LOAD_ATTR_CLASS_r11 1271 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME_r11 1272 +#define _LOAD_ATTR_INSTANCE_VALUE_r02 1273 +#define _LOAD_ATTR_INSTANCE_VALUE_r12 1274 +#define _LOAD_ATTR_INSTANCE_VALUE_r23 1275 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1276 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1277 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1278 +#define _LOAD_ATTR_METHOD_NO_DICT_r02 1279 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 1280 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 1281 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1282 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1283 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1284 +#define _LOAD_ATTR_MODULE_r12 1285 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1286 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1287 +#define _LOAD_ATTR_PROPERTY_FRAME_r01 1288 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 1289 +#define _LOAD_ATTR_PROPERTY_FRAME_r22 1290 +#define _LOAD_ATTR_PROPERTY_FRAME_r33 1291 +#define _LOAD_ATTR_SLOT_r02 1292 +#define _LOAD_ATTR_SLOT_r12 1293 +#define _LOAD_ATTR_SLOT_r23 1294 +#define _LOAD_ATTR_WITH_HINT_r12 1295 +#define _LOAD_BUILD_CLASS_r01 1296 +#define _LOAD_BYTECODE_r00 1297 +#define _LOAD_COMMON_CONSTANT_r01 1298 +#define _LOAD_COMMON_CONSTANT_r12 1299 +#define _LOAD_COMMON_CONSTANT_r23 1300 +#define _LOAD_CONST_r01 1301 +#define _LOAD_CONST_r12 1302 +#define _LOAD_CONST_r23 1303 +#define _LOAD_CONST_INLINE_r01 1304 +#define _LOAD_CONST_INLINE_r12 1305 +#define _LOAD_CONST_INLINE_r23 1306 +#define _LOAD_CONST_INLINE_BORROW_r01 1307 +#define _LOAD_CONST_INLINE_BORROW_r12 1308 +#define _LOAD_CONST_INLINE_BORROW_r23 1309 +#define _LOAD_DEREF_r01 1310 +#define _LOAD_FAST_r01 1311 +#define _LOAD_FAST_r12 1312 +#define _LOAD_FAST_r23 1313 +#define _LOAD_FAST_0_r01 1314 +#define _LOAD_FAST_0_r12 1315 +#define _LOAD_FAST_0_r23 1316 +#define _LOAD_FAST_1_r01 1317 +#define _LOAD_FAST_1_r12 1318 +#define _LOAD_FAST_1_r23 1319 +#define _LOAD_FAST_2_r01 1320 +#define _LOAD_FAST_2_r12 1321 +#define _LOAD_FAST_2_r23 1322 +#define _LOAD_FAST_3_r01 1323 +#define _LOAD_FAST_3_r12 1324 +#define _LOAD_FAST_3_r23 1325 +#define _LOAD_FAST_4_r01 1326 +#define _LOAD_FAST_4_r12 1327 +#define _LOAD_FAST_4_r23 1328 +#define _LOAD_FAST_5_r01 1329 +#define _LOAD_FAST_5_r12 1330 +#define _LOAD_FAST_5_r23 1331 +#define _LOAD_FAST_6_r01 1332 +#define _LOAD_FAST_6_r12 1333 +#define _LOAD_FAST_6_r23 1334 +#define _LOAD_FAST_7_r01 1335 +#define _LOAD_FAST_7_r12 1336 +#define _LOAD_FAST_7_r23 1337 +#define _LOAD_FAST_AND_CLEAR_r01 1338 +#define _LOAD_FAST_AND_CLEAR_r12 1339 +#define _LOAD_FAST_AND_CLEAR_r23 1340 +#define _LOAD_FAST_BORROW_r01 1341 +#define _LOAD_FAST_BORROW_r12 1342 +#define _LOAD_FAST_BORROW_r23 1343 +#define _LOAD_FAST_BORROW_0_r01 1344 +#define _LOAD_FAST_BORROW_0_r12 1345 +#define _LOAD_FAST_BORROW_0_r23 1346 +#define _LOAD_FAST_BORROW_1_r01 1347 +#define _LOAD_FAST_BORROW_1_r12 1348 +#define _LOAD_FAST_BORROW_1_r23 1349 +#define _LOAD_FAST_BORROW_2_r01 1350 +#define _LOAD_FAST_BORROW_2_r12 1351 +#define _LOAD_FAST_BORROW_2_r23 1352 +#define _LOAD_FAST_BORROW_3_r01 1353 +#define _LOAD_FAST_BORROW_3_r12 1354 +#define _LOAD_FAST_BORROW_3_r23 1355 +#define _LOAD_FAST_BORROW_4_r01 1356 +#define _LOAD_FAST_BORROW_4_r12 1357 +#define _LOAD_FAST_BORROW_4_r23 1358 +#define _LOAD_FAST_BORROW_5_r01 1359 +#define _LOAD_FAST_BORROW_5_r12 1360 +#define _LOAD_FAST_BORROW_5_r23 1361 +#define _LOAD_FAST_BORROW_6_r01 1362 +#define _LOAD_FAST_BORROW_6_r12 1363 +#define _LOAD_FAST_BORROW_6_r23 1364 +#define _LOAD_FAST_BORROW_7_r01 1365 +#define _LOAD_FAST_BORROW_7_r12 1366 +#define _LOAD_FAST_BORROW_7_r23 1367 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1368 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1369 +#define _LOAD_FAST_CHECK_r01 1370 +#define _LOAD_FAST_CHECK_r12 1371 +#define _LOAD_FAST_CHECK_r23 1372 +#define _LOAD_FAST_LOAD_FAST_r02 1373 +#define _LOAD_FAST_LOAD_FAST_r13 1374 +#define _LOAD_FROM_DICT_OR_DEREF_r11 1375 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1376 +#define _LOAD_GLOBAL_r00 1377 +#define _LOAD_GLOBAL_BUILTINS_r01 1378 +#define _LOAD_GLOBAL_MODULE_r01 1379 +#define _LOAD_LOCALS_r01 1380 +#define _LOAD_LOCALS_r12 1381 +#define _LOAD_LOCALS_r23 1382 +#define _LOAD_NAME_r01 1383 +#define _LOAD_SMALL_INT_r01 1384 +#define _LOAD_SMALL_INT_r12 1385 +#define _LOAD_SMALL_INT_r23 1386 +#define _LOAD_SMALL_INT_0_r01 1387 +#define _LOAD_SMALL_INT_0_r12 1388 +#define _LOAD_SMALL_INT_0_r23 1389 +#define _LOAD_SMALL_INT_1_r01 1390 +#define _LOAD_SMALL_INT_1_r12 1391 +#define _LOAD_SMALL_INT_1_r23 1392 +#define _LOAD_SMALL_INT_2_r01 1393 +#define _LOAD_SMALL_INT_2_r12 1394 +#define _LOAD_SMALL_INT_2_r23 1395 +#define _LOAD_SMALL_INT_3_r01 1396 +#define _LOAD_SMALL_INT_3_r12 1397 +#define _LOAD_SMALL_INT_3_r23 1398 +#define _LOAD_SPECIAL_r00 1399 +#define _LOAD_SUPER_ATTR_ATTR_r31 1400 +#define _LOAD_SUPER_ATTR_METHOD_r32 1401 +#define _LOCK_OBJECT_r01 1402 +#define _LOCK_OBJECT_r11 1403 +#define _LOCK_OBJECT_r22 1404 +#define _LOCK_OBJECT_r33 1405 +#define _MAKE_CALLARGS_A_TUPLE_r33 1406 +#define _MAKE_CELL_r00 1407 +#define _MAKE_FUNCTION_r12 1408 +#define _MAKE_HEAP_SAFE_r01 1409 +#define _MAKE_HEAP_SAFE_r11 1410 +#define _MAKE_HEAP_SAFE_r22 1411 +#define _MAKE_HEAP_SAFE_r33 1412 +#define _MAKE_WARM_r00 1413 +#define _MAKE_WARM_r11 1414 +#define _MAKE_WARM_r22 1415 +#define _MAKE_WARM_r33 1416 +#define _MAP_ADD_r20 1417 +#define _MATCH_CLASS_r33 1418 +#define _MATCH_KEYS_r23 1419 +#define _MATCH_MAPPING_r02 1420 +#define _MATCH_MAPPING_r12 1421 +#define _MATCH_MAPPING_r23 1422 +#define _MATCH_SEQUENCE_r02 1423 +#define _MATCH_SEQUENCE_r12 1424 +#define _MATCH_SEQUENCE_r23 1425 +#define _MAYBE_EXPAND_METHOD_r00 1426 +#define _MAYBE_EXPAND_METHOD_KW_r11 1427 +#define _MONITOR_CALL_r00 1428 +#define _MONITOR_CALL_KW_r11 1429 +#define _MONITOR_JUMP_BACKWARD_r00 1430 +#define _MONITOR_JUMP_BACKWARD_r11 1431 +#define _MONITOR_JUMP_BACKWARD_r22 1432 +#define _MONITOR_JUMP_BACKWARD_r33 1433 +#define _MONITOR_RESUME_r00 1434 +#define _NOP_r00 1435 +#define _NOP_r11 1436 +#define _NOP_r22 1437 +#define _NOP_r33 1438 +#define _POP_EXCEPT_r10 1439 +#define _POP_ITER_r20 1440 +#define _POP_JUMP_IF_FALSE_r00 1441 +#define _POP_JUMP_IF_FALSE_r10 1442 +#define _POP_JUMP_IF_FALSE_r21 1443 +#define _POP_JUMP_IF_FALSE_r32 1444 +#define _POP_JUMP_IF_TRUE_r00 1445 +#define _POP_JUMP_IF_TRUE_r10 1446 +#define _POP_JUMP_IF_TRUE_r21 1447 +#define _POP_JUMP_IF_TRUE_r32 1448 +#define _POP_TOP_r10 1449 +#define _POP_TOP_FLOAT_r00 1450 +#define _POP_TOP_FLOAT_r10 1451 +#define _POP_TOP_FLOAT_r21 1452 +#define _POP_TOP_FLOAT_r32 1453 +#define _POP_TOP_INT_r00 1454 +#define _POP_TOP_INT_r10 1455 +#define _POP_TOP_INT_r21 1456 +#define _POP_TOP_INT_r32 1457 +#define _POP_TOP_NOP_r00 1458 +#define _POP_TOP_NOP_r10 1459 +#define _POP_TOP_NOP_r21 1460 +#define _POP_TOP_NOP_r32 1461 +#define _POP_TOP_OPARG_r00 1462 +#define _POP_TOP_UNICODE_r00 1463 +#define _POP_TOP_UNICODE_r10 1464 +#define _POP_TOP_UNICODE_r21 1465 +#define _POP_TOP_UNICODE_r32 1466 +#define _PUSH_EXC_INFO_r02 1467 +#define _PUSH_EXC_INFO_r12 1468 +#define _PUSH_EXC_INFO_r23 1469 +#define _PUSH_FRAME_r10 1470 +#define _PUSH_NULL_r01 1471 +#define _PUSH_NULL_r12 1472 +#define _PUSH_NULL_r23 1473 +#define _PUSH_NULL_CONDITIONAL_r00 1474 +#define _PUSH_TAGGED_ZERO_r01 1475 +#define _PUSH_TAGGED_ZERO_r12 1476 +#define _PUSH_TAGGED_ZERO_r23 1477 +#define _PY_FRAME_EX_r31 1478 +#define _PY_FRAME_GENERAL_r01 1479 +#define _PY_FRAME_KW_r11 1480 +#define _REPLACE_WITH_TRUE_r02 1481 +#define _REPLACE_WITH_TRUE_r12 1482 +#define _REPLACE_WITH_TRUE_r23 1483 +#define _RESUME_CHECK_r00 1484 +#define _RESUME_CHECK_r11 1485 +#define _RESUME_CHECK_r22 1486 +#define _RESUME_CHECK_r33 1487 +#define _RETURN_GENERATOR_r01 1488 +#define _RETURN_VALUE_r11 1489 +#define _SAVE_RETURN_OFFSET_r00 1490 +#define _SAVE_RETURN_OFFSET_r11 1491 +#define _SAVE_RETURN_OFFSET_r22 1492 +#define _SAVE_RETURN_OFFSET_r33 1493 +#define _SEND_r33 1494 +#define _SEND_GEN_FRAME_r33 1495 +#define _SETUP_ANNOTATIONS_r00 1496 +#define _SET_ADD_r10 1497 +#define _SET_FUNCTION_ATTRIBUTE_r01 1498 +#define _SET_FUNCTION_ATTRIBUTE_r11 1499 +#define _SET_FUNCTION_ATTRIBUTE_r21 1500 +#define _SET_FUNCTION_ATTRIBUTE_r32 1501 +#define _SET_IP_r00 1502 +#define _SET_IP_r11 1503 +#define _SET_IP_r22 1504 +#define _SET_IP_r33 1505 +#define _SET_UPDATE_r11 1506 +#define _SPILL_OR_RELOAD_r01 1507 +#define _SPILL_OR_RELOAD_r02 1508 +#define _SPILL_OR_RELOAD_r03 1509 +#define _SPILL_OR_RELOAD_r10 1510 +#define _SPILL_OR_RELOAD_r12 1511 +#define _SPILL_OR_RELOAD_r13 1512 +#define _SPILL_OR_RELOAD_r20 1513 +#define _SPILL_OR_RELOAD_r21 1514 +#define _SPILL_OR_RELOAD_r23 1515 +#define _SPILL_OR_RELOAD_r30 1516 +#define _SPILL_OR_RELOAD_r31 1517 +#define _SPILL_OR_RELOAD_r32 1518 +#define _START_EXECUTOR_r00 1519 +#define _STORE_ATTR_r20 1520 +#define _STORE_ATTR_INSTANCE_VALUE_r21 1521 +#define _STORE_ATTR_SLOT_r21 1522 +#define _STORE_ATTR_WITH_HINT_r21 1523 +#define _STORE_DEREF_r10 1524 +#define _STORE_FAST_LOAD_FAST_r11 1525 +#define _STORE_FAST_STORE_FAST_r20 1526 +#define _STORE_GLOBAL_r10 1527 +#define _STORE_NAME_r10 1528 +#define _STORE_SLICE_r30 1529 +#define _STORE_SUBSCR_r30 1530 +#define _STORE_SUBSCR_DICT_r31 1531 +#define _STORE_SUBSCR_DICT_KNOWN_HASH_r31 1532 +#define _STORE_SUBSCR_LIST_INT_r32 1533 +#define _SWAP_r11 1534 +#define _SWAP_2_r02 1535 +#define _SWAP_2_r12 1536 +#define _SWAP_2_r22 1537 +#define _SWAP_2_r33 1538 +#define _SWAP_3_r03 1539 +#define _SWAP_3_r13 1540 +#define _SWAP_3_r23 1541 +#define _SWAP_3_r33 1542 +#define _SWAP_FAST_r01 1543 +#define _SWAP_FAST_r11 1544 +#define _SWAP_FAST_r22 1545 +#define _SWAP_FAST_r33 1546 +#define _SWAP_FAST_0_r01 1547 +#define _SWAP_FAST_0_r11 1548 +#define _SWAP_FAST_0_r22 1549 +#define _SWAP_FAST_0_r33 1550 +#define _SWAP_FAST_1_r01 1551 +#define _SWAP_FAST_1_r11 1552 +#define _SWAP_FAST_1_r22 1553 +#define _SWAP_FAST_1_r33 1554 +#define _SWAP_FAST_2_r01 1555 +#define _SWAP_FAST_2_r11 1556 +#define _SWAP_FAST_2_r22 1557 +#define _SWAP_FAST_2_r33 1558 +#define _SWAP_FAST_3_r01 1559 +#define _SWAP_FAST_3_r11 1560 +#define _SWAP_FAST_3_r22 1561 +#define _SWAP_FAST_3_r33 1562 +#define _SWAP_FAST_4_r01 1563 +#define _SWAP_FAST_4_r11 1564 +#define _SWAP_FAST_4_r22 1565 +#define _SWAP_FAST_4_r33 1566 +#define _SWAP_FAST_5_r01 1567 +#define _SWAP_FAST_5_r11 1568 +#define _SWAP_FAST_5_r22 1569 +#define _SWAP_FAST_5_r33 1570 +#define _SWAP_FAST_6_r01 1571 +#define _SWAP_FAST_6_r11 1572 +#define _SWAP_FAST_6_r22 1573 +#define _SWAP_FAST_6_r33 1574 +#define _SWAP_FAST_7_r01 1575 +#define _SWAP_FAST_7_r11 1576 +#define _SWAP_FAST_7_r22 1577 +#define _SWAP_FAST_7_r33 1578 +#define _TIER2_RESUME_CHECK_r00 1579 +#define _TIER2_RESUME_CHECK_r11 1580 +#define _TIER2_RESUME_CHECK_r22 1581 +#define _TIER2_RESUME_CHECK_r33 1582 +#define _TO_BOOL_r11 1583 +#define _TO_BOOL_BOOL_r01 1584 +#define _TO_BOOL_BOOL_r11 1585 +#define _TO_BOOL_BOOL_r22 1586 +#define _TO_BOOL_BOOL_r33 1587 +#define _TO_BOOL_INT_r02 1588 +#define _TO_BOOL_INT_r12 1589 +#define _TO_BOOL_INT_r23 1590 +#define _TO_BOOL_LIST_r02 1591 +#define _TO_BOOL_LIST_r12 1592 +#define _TO_BOOL_LIST_r23 1593 +#define _TO_BOOL_NONE_r01 1594 +#define _TO_BOOL_NONE_r11 1595 +#define _TO_BOOL_NONE_r22 1596 +#define _TO_BOOL_NONE_r33 1597 +#define _TO_BOOL_STR_r02 1598 +#define _TO_BOOL_STR_r12 1599 +#define _TO_BOOL_STR_r23 1600 +#define _TRACE_RECORD_r00 1601 +#define _UNARY_INVERT_r12 1602 +#define _UNARY_NEGATIVE_r12 1603 +#define _UNARY_NEGATIVE_FLOAT_INPLACE_r02 1604 +#define _UNARY_NEGATIVE_FLOAT_INPLACE_r12 1605 +#define _UNARY_NEGATIVE_FLOAT_INPLACE_r23 1606 +#define _UNARY_NOT_r01 1607 +#define _UNARY_NOT_r11 1608 +#define _UNARY_NOT_r22 1609 +#define _UNARY_NOT_r33 1610 +#define _UNPACK_EX_r10 1611 +#define _UNPACK_SEQUENCE_r10 1612 +#define _UNPACK_SEQUENCE_LIST_r10 1613 +#define _UNPACK_SEQUENCE_TUPLE_r10 1614 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1615 +#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r03 1616 +#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r13 1617 +#define _UNPACK_SEQUENCE_UNIQUE_TUPLE_r10 1618 +#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r02 1619 +#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r12 1620 +#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r23 1621 +#define _WITH_EXCEPT_START_r33 1622 +#define _YIELD_VALUE_r11 1623 +#define MAX_UOP_REGS_ID 1623 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index ab8786271a8085..17fd5d04838309 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -167,7 +167,6 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = { [_GET_AITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_GET_ANEXT] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_GET_AWAITABLE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GET_ASEND] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_SEND_GEN_FRAME] = HAS_ARG_FLAG | HAS_EXIT_FLAG, [_YIELD_VALUE] = HAS_ARG_FLAG | HAS_NEEDS_GUARD_IP_FLAG, [_POP_EXCEPT] = HAS_ESCAPES_FLAG, @@ -262,7 +261,6 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = { [_GUARD_ITER_VIRTUAL] = HAS_EXIT_FLAG, [_PUSH_TAGGED_ZERO] = 0, [_GET_ITER_TRAD] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GET_ASYNC_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_GUARD_NOS_ITER_VIRTUAL] = HAS_EXIT_FLAG, [_FOR_ITER_VIRTUAL_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, @@ -1631,15 +1629,6 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { { -1, -1, -1 }, }, }, - [_GET_ASEND] = { - .best = { 2, 2, 2, 2 }, - .entries = { - { -1, -1, -1 }, - { -1, -1, -1 }, - { 1, 2, _GET_ASEND_r21 }, - { -1, -1, -1 }, - }, - }, [_SEND_GEN_FRAME] = { .best = { 3, 3, 3, 3 }, .entries = { @@ -2486,15 +2475,6 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { { -1, -1, -1 }, }, }, - [_GET_ASYNC_YIELD_FROM_ITER] = { - .best = { 1, 1, 1, 1 }, - .entries = { - { -1, -1, -1 }, - { 1, 1, _GET_ASYNC_YIELD_FROM_ITER_r11 }, - { -1, -1, -1 }, - { -1, -1, -1 }, - }, - }, [_FOR_ITER_TIER_TWO] = { .best = { 2, 2, 2, 2 }, .entries = { @@ -4241,7 +4221,6 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GET_AITER_r11] = _GET_AITER, [_GET_ANEXT_r12] = _GET_ANEXT, [_GET_AWAITABLE_r11] = _GET_AWAITABLE, - [_GET_ASEND_r21] = _GET_ASEND, [_SEND_GEN_FRAME_r33] = _SEND_GEN_FRAME, [_YIELD_VALUE_r11] = _YIELD_VALUE, [_POP_EXCEPT_r10] = _POP_EXCEPT, @@ -4408,7 +4387,6 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_PUSH_TAGGED_ZERO_r12] = _PUSH_TAGGED_ZERO, [_PUSH_TAGGED_ZERO_r23] = _PUSH_TAGGED_ZERO, [_GET_ITER_TRAD_r12] = _GET_ITER_TRAD, - [_GET_ASYNC_YIELD_FROM_ITER_r11] = _GET_ASYNC_YIELD_FROM_ITER, [_FOR_ITER_TIER_TWO_r23] = _FOR_ITER_TIER_TWO, [_GUARD_NOS_ITER_VIRTUAL_r02] = _GUARD_NOS_ITER_VIRTUAL, [_GUARD_NOS_ITER_VIRTUAL_r12] = _GUARD_NOS_ITER_VIRTUAL, @@ -5181,10 +5159,6 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_GET_AITER_r11] = "_GET_AITER_r11", [_GET_ANEXT] = "_GET_ANEXT", [_GET_ANEXT_r12] = "_GET_ANEXT_r12", - [_GET_ASEND] = "_GET_ASEND", - [_GET_ASEND_r21] = "_GET_ASEND_r21", - [_GET_ASYNC_YIELD_FROM_ITER] = "_GET_ASYNC_YIELD_FROM_ITER", - [_GET_ASYNC_YIELD_FROM_ITER_r11] = "_GET_ASYNC_YIELD_FROM_ITER_r11", [_GET_AWAITABLE] = "_GET_AWAITABLE", [_GET_AWAITABLE_r11] = "_GET_AWAITABLE_r11", [_GET_ITER] = "_GET_ITER", @@ -6374,8 +6348,6 @@ int _PyUop_num_popped(int opcode, int oparg) return 0; case _GET_AWAITABLE: return 1; - case _GET_ASEND: - return 2; case _SEND_GEN_FRAME: return 1; case _YIELD_VALUE: @@ -6564,8 +6536,6 @@ int _PyUop_num_popped(int opcode, int oparg) return 0; case _GET_ITER_TRAD: return 1; - case _GET_ASYNC_YIELD_FROM_ITER: - return 1; case _FOR_ITER_TIER_TWO: return 0; case _GUARD_NOS_ITER_VIRTUAL: diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index 5f93f3950c192e..77069c71afd631 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -28,111 +28,109 @@ extern "C" { #define GET_AITER 15 #define GET_ANEXT 16 #define RESERVED 17 -#define GET_ASEND 18 -#define GET_ASYNC_YIELD_FROM_ITER 19 -#define GET_LEN 20 -#define INTERPRETER_EXIT 21 -#define LOAD_BUILD_CLASS 22 -#define LOAD_LOCALS 23 -#define MAKE_FUNCTION 24 -#define MATCH_KEYS 25 -#define MATCH_MAPPING 26 -#define MATCH_SEQUENCE 27 -#define NOP 28 -#define NOT_TAKEN 29 -#define POP_EXCEPT 30 -#define POP_ITER 31 -#define POP_TOP 32 -#define PUSH_EXC_INFO 33 -#define PUSH_NULL 34 -#define RETURN_GENERATOR 35 -#define RETURN_VALUE 36 -#define SETUP_ANNOTATIONS 37 -#define STORE_SLICE 38 -#define STORE_SUBSCR 39 -#define TO_BOOL 40 -#define UNARY_INVERT 41 -#define UNARY_NEGATIVE 42 -#define UNARY_NOT 43 -#define WITH_EXCEPT_START 44 -#define BINARY_OP 45 -#define BUILD_INTERPOLATION 46 -#define BUILD_LIST 47 -#define BUILD_MAP 48 -#define BUILD_SET 49 -#define BUILD_SLICE 50 -#define BUILD_STRING 51 -#define BUILD_TUPLE 52 -#define CALL 53 -#define CALL_INTRINSIC_1 54 -#define CALL_INTRINSIC_2 55 -#define CALL_KW 56 -#define COMPARE_OP 57 -#define CONTAINS_OP 58 -#define CONVERT_VALUE 59 -#define COPY 60 -#define COPY_FREE_VARS 61 -#define DELETE_ATTR 62 -#define DELETE_DEREF 63 -#define DELETE_FAST 64 -#define DELETE_GLOBAL 65 -#define DELETE_NAME 66 -#define DICT_MERGE 67 -#define DICT_UPDATE 68 -#define END_ASYNC_FOR 69 -#define EXTENDED_ARG 70 -#define FOR_ITER 71 -#define GET_AWAITABLE 72 -#define GET_ITER 73 -#define IMPORT_FROM 74 -#define IMPORT_NAME 75 -#define IS_OP 76 -#define JUMP_BACKWARD 77 -#define JUMP_BACKWARD_NO_INTERRUPT 78 -#define JUMP_FORWARD 79 -#define LIST_APPEND 80 -#define LIST_EXTEND 81 -#define LOAD_ATTR 82 -#define LOAD_COMMON_CONSTANT 83 -#define LOAD_CONST 84 -#define LOAD_DEREF 85 -#define LOAD_FAST 86 -#define LOAD_FAST_AND_CLEAR 87 -#define LOAD_FAST_BORROW 88 -#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 89 -#define LOAD_FAST_CHECK 90 -#define LOAD_FAST_LOAD_FAST 91 -#define LOAD_FROM_DICT_OR_DEREF 92 -#define LOAD_FROM_DICT_OR_GLOBALS 93 -#define LOAD_GLOBAL 94 -#define LOAD_NAME 95 -#define LOAD_SMALL_INT 96 -#define LOAD_SPECIAL 97 -#define LOAD_SUPER_ATTR 98 -#define MAKE_CELL 99 -#define MAP_ADD 100 -#define MATCH_CLASS 101 -#define POP_JUMP_IF_FALSE 102 -#define POP_JUMP_IF_NONE 103 -#define POP_JUMP_IF_NOT_NONE 104 -#define POP_JUMP_IF_TRUE 105 -#define RAISE_VARARGS 106 -#define RERAISE 107 -#define SEND 108 -#define SET_ADD 109 -#define SET_FUNCTION_ATTRIBUTE 110 -#define SET_UPDATE 111 -#define STORE_ATTR 112 -#define STORE_DEREF 113 -#define STORE_FAST 114 -#define STORE_FAST_LOAD_FAST 115 -#define STORE_FAST_STORE_FAST 116 -#define STORE_GLOBAL 117 -#define STORE_NAME 118 -#define SWAP 119 -#define UNPACK_EX 120 -#define UNPACK_SEQUENCE 121 -#define YIELD_VALUE 122 +#define GET_LEN 18 +#define INTERPRETER_EXIT 19 +#define LOAD_BUILD_CLASS 20 +#define LOAD_LOCALS 21 +#define MAKE_FUNCTION 22 +#define MATCH_KEYS 23 +#define MATCH_MAPPING 24 +#define MATCH_SEQUENCE 25 +#define NOP 26 +#define NOT_TAKEN 27 +#define POP_EXCEPT 28 +#define POP_ITER 29 +#define POP_TOP 30 +#define PUSH_EXC_INFO 31 +#define PUSH_NULL 32 +#define RETURN_GENERATOR 33 +#define RETURN_VALUE 34 +#define SETUP_ANNOTATIONS 35 +#define STORE_SLICE 36 +#define STORE_SUBSCR 37 +#define TO_BOOL 38 +#define UNARY_INVERT 39 +#define UNARY_NEGATIVE 40 +#define UNARY_NOT 41 +#define WITH_EXCEPT_START 42 +#define BINARY_OP 43 +#define BUILD_INTERPOLATION 44 +#define BUILD_LIST 45 +#define BUILD_MAP 46 +#define BUILD_SET 47 +#define BUILD_SLICE 48 +#define BUILD_STRING 49 +#define BUILD_TUPLE 50 +#define CALL 51 +#define CALL_INTRINSIC_1 52 +#define CALL_INTRINSIC_2 53 +#define CALL_KW 54 +#define COMPARE_OP 55 +#define CONTAINS_OP 56 +#define CONVERT_VALUE 57 +#define COPY 58 +#define COPY_FREE_VARS 59 +#define DELETE_ATTR 60 +#define DELETE_DEREF 61 +#define DELETE_FAST 62 +#define DELETE_GLOBAL 63 +#define DELETE_NAME 64 +#define DICT_MERGE 65 +#define DICT_UPDATE 66 +#define END_ASYNC_FOR 67 +#define EXTENDED_ARG 68 +#define FOR_ITER 69 +#define GET_AWAITABLE 70 +#define GET_ITER 71 +#define IMPORT_FROM 72 +#define IMPORT_NAME 73 +#define IS_OP 74 +#define JUMP_BACKWARD 75 +#define JUMP_BACKWARD_NO_INTERRUPT 76 +#define JUMP_FORWARD 77 +#define LIST_APPEND 78 +#define LIST_EXTEND 79 +#define LOAD_ATTR 80 +#define LOAD_COMMON_CONSTANT 81 +#define LOAD_CONST 82 +#define LOAD_DEREF 83 +#define LOAD_FAST 84 +#define LOAD_FAST_AND_CLEAR 85 +#define LOAD_FAST_BORROW 86 +#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 87 +#define LOAD_FAST_CHECK 88 +#define LOAD_FAST_LOAD_FAST 89 +#define LOAD_FROM_DICT_OR_DEREF 90 +#define LOAD_FROM_DICT_OR_GLOBALS 91 +#define LOAD_GLOBAL 92 +#define LOAD_NAME 93 +#define LOAD_SMALL_INT 94 +#define LOAD_SPECIAL 95 +#define LOAD_SUPER_ATTR 96 +#define MAKE_CELL 97 +#define MAP_ADD 98 +#define MATCH_CLASS 99 +#define POP_JUMP_IF_FALSE 100 +#define POP_JUMP_IF_NONE 101 +#define POP_JUMP_IF_NOT_NONE 102 +#define POP_JUMP_IF_TRUE 103 +#define RAISE_VARARGS 104 +#define RERAISE 105 +#define SEND 106 +#define SET_ADD 107 +#define SET_FUNCTION_ATTRIBUTE 108 +#define SET_UPDATE 109 +#define STORE_ATTR 110 +#define STORE_DEREF 111 +#define STORE_FAST 112 +#define STORE_FAST_LOAD_FAST 113 +#define STORE_FAST_STORE_FAST 114 +#define STORE_GLOBAL 115 +#define STORE_NAME 116 +#define SWAP 117 +#define UNPACK_EX 118 +#define UNPACK_SEQUENCE 119 +#define YIELD_VALUE 120 #define RESUME 128 #define BINARY_OP_ADD_FLOAT 129 #define BINARY_OP_ADD_INT 130 @@ -257,7 +255,7 @@ extern "C" { #define SETUP_WITH 265 #define STORE_FAST_MAYBE_NULL 266 -#define HAVE_ARGUMENT 44 +#define HAVE_ARGUMENT 42 #define MIN_SPECIALIZED_OPCODE 129 #define MIN_INSTRUMENTED_OPCODE 233 diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index cb51447406919f..eb64c266cbdfca 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -244,111 +244,109 @@ FORMAT_WITH_SPEC=14, GET_AITER=15, GET_ANEXT=16, - GET_ASEND=18, - GET_ASYNC_YIELD_FROM_ITER=19, - GET_LEN=20, - INTERPRETER_EXIT=21, - LOAD_BUILD_CLASS=22, - LOAD_LOCALS=23, - MAKE_FUNCTION=24, - MATCH_KEYS=25, - MATCH_MAPPING=26, - MATCH_SEQUENCE=27, - NOP=28, - NOT_TAKEN=29, - POP_EXCEPT=30, - POP_ITER=31, - POP_TOP=32, - PUSH_EXC_INFO=33, - PUSH_NULL=34, - RETURN_GENERATOR=35, - RETURN_VALUE=36, - SETUP_ANNOTATIONS=37, - STORE_SLICE=38, - STORE_SUBSCR=39, - TO_BOOL=40, - UNARY_INVERT=41, - UNARY_NEGATIVE=42, - UNARY_NOT=43, - WITH_EXCEPT_START=44, - BINARY_OP=45, - BUILD_INTERPOLATION=46, - BUILD_LIST=47, - BUILD_MAP=48, - BUILD_SET=49, - BUILD_SLICE=50, - BUILD_STRING=51, - BUILD_TUPLE=52, - CALL=53, - CALL_INTRINSIC_1=54, - CALL_INTRINSIC_2=55, - CALL_KW=56, - COMPARE_OP=57, - CONTAINS_OP=58, - CONVERT_VALUE=59, - COPY=60, - COPY_FREE_VARS=61, - DELETE_ATTR=62, - DELETE_DEREF=63, - DELETE_FAST=64, - DELETE_GLOBAL=65, - DELETE_NAME=66, - DICT_MERGE=67, - DICT_UPDATE=68, - END_ASYNC_FOR=69, - EXTENDED_ARG=70, - FOR_ITER=71, - GET_AWAITABLE=72, - GET_ITER=73, - IMPORT_FROM=74, - IMPORT_NAME=75, - IS_OP=76, - JUMP_BACKWARD=77, - JUMP_BACKWARD_NO_INTERRUPT=78, - JUMP_FORWARD=79, - LIST_APPEND=80, - LIST_EXTEND=81, - LOAD_ATTR=82, - LOAD_COMMON_CONSTANT=83, - LOAD_CONST=84, - LOAD_DEREF=85, - LOAD_FAST=86, - LOAD_FAST_AND_CLEAR=87, - LOAD_FAST_BORROW=88, - LOAD_FAST_BORROW_LOAD_FAST_BORROW=89, - LOAD_FAST_CHECK=90, - LOAD_FAST_LOAD_FAST=91, - LOAD_FROM_DICT_OR_DEREF=92, - LOAD_FROM_DICT_OR_GLOBALS=93, - LOAD_GLOBAL=94, - LOAD_NAME=95, - LOAD_SMALL_INT=96, - LOAD_SPECIAL=97, - LOAD_SUPER_ATTR=98, - MAKE_CELL=99, - MAP_ADD=100, - MATCH_CLASS=101, - POP_JUMP_IF_FALSE=102, - POP_JUMP_IF_NONE=103, - POP_JUMP_IF_NOT_NONE=104, - POP_JUMP_IF_TRUE=105, - RAISE_VARARGS=106, - RERAISE=107, - SEND=108, - SET_ADD=109, - SET_FUNCTION_ATTRIBUTE=110, - SET_UPDATE=111, - STORE_ATTR=112, - STORE_DEREF=113, - STORE_FAST=114, - STORE_FAST_LOAD_FAST=115, - STORE_FAST_STORE_FAST=116, - STORE_GLOBAL=117, - STORE_NAME=118, - SWAP=119, - UNPACK_EX=120, - UNPACK_SEQUENCE=121, - YIELD_VALUE=122, + GET_LEN=18, + INTERPRETER_EXIT=19, + LOAD_BUILD_CLASS=20, + LOAD_LOCALS=21, + MAKE_FUNCTION=22, + MATCH_KEYS=23, + MATCH_MAPPING=24, + MATCH_SEQUENCE=25, + NOP=26, + NOT_TAKEN=27, + POP_EXCEPT=28, + POP_ITER=29, + POP_TOP=30, + PUSH_EXC_INFO=31, + PUSH_NULL=32, + RETURN_GENERATOR=33, + RETURN_VALUE=34, + SETUP_ANNOTATIONS=35, + STORE_SLICE=36, + STORE_SUBSCR=37, + TO_BOOL=38, + UNARY_INVERT=39, + UNARY_NEGATIVE=40, + UNARY_NOT=41, + WITH_EXCEPT_START=42, + BINARY_OP=43, + BUILD_INTERPOLATION=44, + BUILD_LIST=45, + BUILD_MAP=46, + BUILD_SET=47, + BUILD_SLICE=48, + BUILD_STRING=49, + BUILD_TUPLE=50, + CALL=51, + CALL_INTRINSIC_1=52, + CALL_INTRINSIC_2=53, + CALL_KW=54, + COMPARE_OP=55, + CONTAINS_OP=56, + CONVERT_VALUE=57, + COPY=58, + COPY_FREE_VARS=59, + DELETE_ATTR=60, + DELETE_DEREF=61, + DELETE_FAST=62, + DELETE_GLOBAL=63, + DELETE_NAME=64, + DICT_MERGE=65, + DICT_UPDATE=66, + END_ASYNC_FOR=67, + EXTENDED_ARG=68, + FOR_ITER=69, + GET_AWAITABLE=70, + GET_ITER=71, + IMPORT_FROM=72, + IMPORT_NAME=73, + IS_OP=74, + JUMP_BACKWARD=75, + JUMP_BACKWARD_NO_INTERRUPT=76, + JUMP_FORWARD=77, + LIST_APPEND=78, + LIST_EXTEND=79, + LOAD_ATTR=80, + LOAD_COMMON_CONSTANT=81, + LOAD_CONST=82, + LOAD_DEREF=83, + LOAD_FAST=84, + LOAD_FAST_AND_CLEAR=85, + LOAD_FAST_BORROW=86, + LOAD_FAST_BORROW_LOAD_FAST_BORROW=87, + LOAD_FAST_CHECK=88, + LOAD_FAST_LOAD_FAST=89, + LOAD_FROM_DICT_OR_DEREF=90, + LOAD_FROM_DICT_OR_GLOBALS=91, + LOAD_GLOBAL=92, + LOAD_NAME=93, + LOAD_SMALL_INT=94, + LOAD_SPECIAL=95, + LOAD_SUPER_ATTR=96, + MAKE_CELL=97, + MAP_ADD=98, + MATCH_CLASS=99, + POP_JUMP_IF_FALSE=100, + POP_JUMP_IF_NONE=101, + POP_JUMP_IF_NOT_NONE=102, + POP_JUMP_IF_TRUE=103, + RAISE_VARARGS=104, + RERAISE=105, + SEND=106, + SET_ADD=107, + SET_FUNCTION_ATTRIBUTE=108, + SET_UPDATE=109, + STORE_ATTR=110, + STORE_DEREF=111, + STORE_FAST=112, + STORE_FAST_LOAD_FAST=113, + STORE_FAST_STORE_FAST=114, + STORE_GLOBAL=115, + STORE_NAME=116, + SWAP=117, + UNPACK_EX=118, + UNPACK_SEQUENCE=119, + YIELD_VALUE=120, INSTRUMENTED_END_FOR=233, INSTRUMENTED_POP_ITER=234, INSTRUMENTED_END_SEND=235, @@ -382,5 +380,5 @@ STORE_FAST_MAYBE_NULL=266, ) -HAVE_ARGUMENT = 44 +HAVE_ARGUMENT = 42 MIN_INSTRUMENTED_OPCODE = 233 diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index 11239169ef8ac9..151562e5501f61 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -6561,69 +6561,6 @@ DISPATCH(); } - TARGET(GET_ASEND) { - #if _Py_TAIL_CALL_INTERP - int opcode = GET_ASEND; - (void)(opcode); - #endif - frame->instr_ptr = next_instr; - next_instr += 1; - INSTRUCTION_STATS(GET_ASEND); - _PyStackRef receiver; - _PyStackRef v; - _PyStackRef retval; - v = stack_pointer[-1]; - receiver = stack_pointer[-2]; - PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, - &_Py_ID(asend), - PyStackRef_AsPyObjectBorrow(v)); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (retval_o == NULL) { - JUMP_TO_LABEL(error); - } - retval = PyStackRef_FromPyObjectSteal(retval_o); - stack_pointer[-2] = retval; - stack_pointer += -1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - DISPATCH(); - } - - TARGET(GET_ASYNC_YIELD_FROM_ITER) { - #if _Py_TAIL_CALL_INTERP - int opcode = GET_ASYNC_YIELD_FROM_ITER; - (void)(opcode); - #endif - frame->instr_ptr = next_instr; - next_instr += 1; - INSTRUCTION_STATS(GET_ASYNC_YIELD_FROM_ITER); - _PyStackRef iterable; - _PyStackRef aiter; - iterable = stack_pointer[-1]; - PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); - if (PyCoro_CheckExact(iterable_o)) { - aiter = iterable; - } - else { - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *aiter_o = PyObject_GetAIter(iterable_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (aiter_o == NULL) { - JUMP_TO_LABEL(error); - } - aiter = PyStackRef_FromPyObjectSteal(aiter_o); - _PyFrame_SetStackPointer(frame, stack_pointer); - _PyStackRef tmp = iterable; - iterable = aiter; - stack_pointer[-1] = iterable; - PyStackRef_CLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); - } - stack_pointer[-1] = aiter; - DISPATCH(); - } - TARGET(GET_AWAITABLE) { #if _Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; diff --git a/Modules/_testinternalcapi/test_targets.h b/Modules/_testinternalcapi/test_targets.h index d30a811204ad5b..1270abfcd2a0e3 100644 --- a/Modules/_testinternalcapi/test_targets.h +++ b/Modules/_testinternalcapi/test_targets.h @@ -18,8 +18,6 @@ static void *opcode_targets_table[256] = { &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, &&TARGET_RESERVED, - &&TARGET_GET_ASEND, - &&TARGET_GET_ASYNC_YIELD_FROM_ITER, &&TARGET_GET_LEN, &&TARGET_INTERPRETER_EXIT, &&TARGET_LOAD_BUILD_CLASS, @@ -128,6 +126,8 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -380,8 +380,8 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&TARGET_TRACE_RECORD, - &&TARGET_TRACE_RECORD, + &&_unknown_opcode, + &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -625,8 +625,6 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS) static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS); -static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASEND(TAIL_CALL_PARAMS); -static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS); @@ -872,8 +870,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL, [GET_AITER] = _TAIL_CALL_GET_AITER, [GET_ANEXT] = _TAIL_CALL_GET_ANEXT, - [GET_ASEND] = _TAIL_CALL_GET_ASEND, - [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE, [GET_ITER] = _TAIL_CALL_GET_ITER, [GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF, @@ -1012,6 +1008,8 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, + [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1130,8 +1128,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD, [GET_AITER] = _TAIL_CALL_TRACE_RECORD, [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD, - [GET_ASEND] = _TAIL_CALL_TRACE_RECORD, - [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD, [GET_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD, @@ -1270,6 +1266,8 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, + [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 4192075c1e29c8..45fdeee2e5576c 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1731,18 +1731,6 @@ dummy_func( PyStackRef_CLOSE(v); } - inst(GET_ASEND, (receiver, v -- retval)) { - PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); - PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, - &_Py_ID(asend), - PyStackRef_AsPyObjectBorrow(v)); - INPUTS_DEAD(); - if (retval_o == NULL) { - ERROR_NO_POP(); - } - retval = PyStackRef_FromPyObjectSteal(retval_o); - } - macro(SEND) = _SPECIALIZE_SEND + _SEND; op(_SEND_GEN_FRAME, (receiver, null, v -- receiver, null, gen_frame)) { @@ -3754,24 +3742,6 @@ dummy_func( index_or_null = PyStackRef_NULL; } - inst(GET_ASYNC_YIELD_FROM_ITER, (iterable -- aiter)) { - /* before: [obj]; after [aiter(obj)] */ - PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); - if (PyCoro_CheckExact(iterable_o)) { - aiter = iterable; - DEAD(iterable); - } - else { - /* `iterable` is not a generator. */ - PyObject *aiter_o = PyObject_GetAIter(iterable_o); - if (aiter_o == NULL) { - ERROR_NO_POP(); - } - aiter = PyStackRef_FromPyObjectSteal(aiter_o); - DECREF_INPUTS(); - } - } - // Most members of this family are "secretly" super-instructions. // When the loop is exhausted, they jump, and the jump target is // always END_FOR, which pops two values off the stack. diff --git a/Python/codegen.c b/Python/codegen.c index f8dc804d784397..18d2d966d2a0e6 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -516,30 +516,55 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) NEW_JUMP_TARGET_LABEL(c, send); NEW_JUMP_TARGET_LABEL(c, exit); + + // ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__aiter__), names); + // ADDOP(c, loc, PUSH_NULL); + // ADDOP_I(c, loc, CALL, 0); VISIT(c, expr, e->v.AsyncYieldFrom.value); - ADDOP(c, loc, GET_ASYNC_YIELD_FROM_ITER); + // Stack: [value] + + // Call value.__aiter__() + ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__aiter__), names); + ADDOP(c, loc, PUSH_NULL); + ADDOP_I(c, loc, CALL, 0); + + // Stack: [aiterator] USE_LABEL(c, send); - ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); // Virtual try/except for the StopIteration; see above. + ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); - // Get the __asend__() and await it. We preserve the iterator - // on the top of the stack by copying it. ADDOP_I(c, loc, COPY, 1); + // Stack: [aiterator, aiterator] + + ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(asend), names); + ADDOP(c, loc, PUSH_NULL); ADDOP_LOAD_CONST(c, loc, Py_None); - ADDOP(c, loc, GET_ASEND); + // Stack: [aiterator, aiterator.asend, NULL, None] + ADDOP_I(c, loc, CALL, 1); + // Stack: [aiterator, send_coro] + + ADDOP(c, loc, PUSH_NULL); ADDOP_LOAD_CONST(c, loc, Py_None); + // Stack: [aiterator, send_coro, NULL, None] ADD_YIELD_FROM(c, loc, 1); + // Stack: [aiterator, send_result] ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP); + // Stack: [aiterator, wrapped_result] ADDOP_I(c, loc, YIELD_VALUE, 1); + // Stack: [aiterator, resumed_value] ADDOP(c, NO_LOCATION, POP_BLOCK); + // Stack: [aiterator, resumed_value] ADDOP(c, loc, POP_TOP); + // Stack: [aiterator] ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); USE_LABEL(c, exit); + // Stack: [aiterator, exc_value] (from SETUP_FINALLY) ADDOP(c, loc, CLEANUP_ASYNC_THROW); + // Stack: [result] return SUCCESS; } @@ -5483,7 +5508,6 @@ codegen_visit_expr(compiler *c, expr_ty e) } return codegen_async_yield_from(c, loc, e); - break; case Await_kind: VISIT(c, expr, e->v.Await.value); ADDOP_I(c, loc, GET_AWAITABLE, 0); diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 1528196cc261e8..9f69fee9ab08a4 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -8724,41 +8724,6 @@ /* _SEND is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _GET_ASEND_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); - _PyStackRef v; - _PyStackRef receiver; - _PyStackRef retval; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - v = _stack_item_1; - receiver = _stack_item_0; - PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); - stack_pointer[0] = receiver; - stack_pointer[1] = v; - stack_pointer += 2; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, - &_Py_ID(asend), - PyStackRef_AsPyObjectBorrow(v)); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (retval_o == NULL) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - retval = PyStackRef_FromPyObjectSteal(retval_o); - _tos_cache0 = retval; - _tos_cache1 = PyStackRef_ZERO_BITS; - _tos_cache2 = PyStackRef_ZERO_BITS; - SET_CURRENT_CACHED_VALUES(1); - stack_pointer += -2; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); - break; - } - case _SEND_GEN_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); @@ -14019,45 +13984,6 @@ break; } - case _GET_ASYNC_YIELD_FROM_ITER_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); - _PyStackRef iterable; - _PyStackRef aiter; - _PyStackRef _stack_item_0 = _tos_cache0; - iterable = _stack_item_0; - PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); - if (PyCoro_CheckExact(iterable_o)) { - aiter = iterable; - } - else { - stack_pointer[0] = iterable; - stack_pointer += 1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *aiter_o = PyObject_GetAIter(iterable_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (aiter_o == NULL) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - aiter = PyStackRef_FromPyObjectSteal(aiter_o); - _PyFrame_SetStackPointer(frame, stack_pointer); - _PyStackRef tmp = iterable; - iterable = aiter; - stack_pointer[-1] = iterable; - PyStackRef_CLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; - } - _tos_cache0 = aiter; - _tos_cache1 = PyStackRef_ZERO_BITS; - _tos_cache2 = PyStackRef_ZERO_BITS; - SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); - break; - } - /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ case _FOR_ITER_TIER_TWO_r23: { diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e5e56e811962cd..1032c6af1e5d64 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -6561,69 +6561,6 @@ DISPATCH(); } - TARGET(GET_ASEND) { - #if _Py_TAIL_CALL_INTERP - int opcode = GET_ASEND; - (void)(opcode); - #endif - frame->instr_ptr = next_instr; - next_instr += 1; - INSTRUCTION_STATS(GET_ASEND); - _PyStackRef receiver; - _PyStackRef v; - _PyStackRef retval; - v = stack_pointer[-1]; - receiver = stack_pointer[-2]; - PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *retval_o = PyObject_CallMethodOneArg(receiver_o, - &_Py_ID(asend), - PyStackRef_AsPyObjectBorrow(v)); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (retval_o == NULL) { - JUMP_TO_LABEL(error); - } - retval = PyStackRef_FromPyObjectSteal(retval_o); - stack_pointer[-2] = retval; - stack_pointer += -1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - DISPATCH(); - } - - TARGET(GET_ASYNC_YIELD_FROM_ITER) { - #if _Py_TAIL_CALL_INTERP - int opcode = GET_ASYNC_YIELD_FROM_ITER; - (void)(opcode); - #endif - frame->instr_ptr = next_instr; - next_instr += 1; - INSTRUCTION_STATS(GET_ASYNC_YIELD_FROM_ITER); - _PyStackRef iterable; - _PyStackRef aiter; - iterable = stack_pointer[-1]; - PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); - if (PyCoro_CheckExact(iterable_o)) { - aiter = iterable; - } - else { - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *aiter_o = PyObject_GetAIter(iterable_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (aiter_o == NULL) { - JUMP_TO_LABEL(error); - } - aiter = PyStackRef_FromPyObjectSteal(aiter_o); - _PyFrame_SetStackPointer(frame, stack_pointer); - _PyStackRef tmp = iterable; - iterable = aiter; - stack_pointer[-1] = iterable; - PyStackRef_CLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); - } - stack_pointer[-1] = aiter; - DISPATCH(); - } - TARGET(GET_AWAITABLE) { #if _Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index d30a811204ad5b..1270abfcd2a0e3 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -18,8 +18,6 @@ static void *opcode_targets_table[256] = { &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, &&TARGET_RESERVED, - &&TARGET_GET_ASEND, - &&TARGET_GET_ASYNC_YIELD_FROM_ITER, &&TARGET_GET_LEN, &&TARGET_INTERPRETER_EXIT, &&TARGET_LOAD_BUILD_CLASS, @@ -128,6 +126,8 @@ static void *opcode_targets_table[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, @@ -380,8 +380,8 @@ static void *opcode_tracing_targets_table[256] = { &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, &&TARGET_TRACE_RECORD, - &&TARGET_TRACE_RECORD, - &&TARGET_TRACE_RECORD, + &&_unknown_opcode, + &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -625,8 +625,6 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS) static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS); -static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASEND(TAIL_CALL_PARAMS); -static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS); static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS); @@ -872,8 +870,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL, [GET_AITER] = _TAIL_CALL_GET_AITER, [GET_ANEXT] = _TAIL_CALL_GET_ANEXT, - [GET_ASEND] = _TAIL_CALL_GET_ASEND, - [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_GET_ASYNC_YIELD_FROM_ITER, [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE, [GET_ITER] = _TAIL_CALL_GET_ITER, [GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF, @@ -1012,6 +1008,8 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE, [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START, [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, + [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -1130,8 +1128,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD, [GET_AITER] = _TAIL_CALL_TRACE_RECORD, [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD, - [GET_ASEND] = _TAIL_CALL_TRACE_RECORD, - [GET_ASYNC_YIELD_FROM_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD, [GET_ITER] = _TAIL_CALL_TRACE_RECORD, [GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD, @@ -1270,6 +1266,8 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = { [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD, [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD, [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD, + [121] = _TAIL_CALL_UNKNOWN_OPCODE, + [122] = _TAIL_CALL_UNKNOWN_OPCODE, [123] = _TAIL_CALL_UNKNOWN_OPCODE, [124] = _TAIL_CALL_UNKNOWN_OPCODE, [125] = _TAIL_CALL_UNKNOWN_OPCODE, diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 1a42e0073b4422..2ec712bf2ad133 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -1858,16 +1858,6 @@ /* _SEND is not a viable micro-op for tier 2 */ - case _GET_ASEND: { - JitOptRef retval; - retval = sym_new_not_null(ctx); - CHECK_STACK_BOUNDS(-1); - stack_pointer[-2] = retval; - stack_pointer += -1; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - break; - } - case _SEND_GEN_FRAME: { JitOptRef v; JitOptRef receiver; @@ -3636,13 +3626,6 @@ break; } - case _GET_ASYNC_YIELD_FROM_ITER: { - JitOptRef aiter; - aiter = sym_new_not_null(ctx); - stack_pointer[-1] = aiter; - break; - } - /* _FOR_ITER is not a viable micro-op for tier 2 */ case _FOR_ITER_TIER_TWO: { From 9c1e5902694330a499a7472006d34f1035df1a51 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 30 Apr 2026 21:13:20 -0400 Subject: [PATCH 25/48] Fix some stack assumptions. --- Python/codegen.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Python/codegen.c b/Python/codegen.c index 18d2d966d2a0e6..59a0578c3afa6f 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -552,7 +552,20 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP); // Stack: [aiterator, wrapped_result] + + // Generators expect the iterable at stack_top[-2], so we have to make an + // extra copy. + ADDOP_I(c, loc, COPY, 2); + // Stack: [aiterator, wrapped_result, aiterator] + ADDOP_I(c, loc, SWAP, 2); + // Stack: [aiterator, aiterator, wrapped_result] + ADDOP_I(c, loc, YIELD_VALUE, 1); + // Stack: [aiterator, aiterator, resumed_value] + + ADDOP_I(c, loc, SWAP, 2); + // Stack: [aiterator, resumed_value, aiterator] + ADDOP(c, loc, POP_TOP); // Stack: [aiterator, resumed_value] ADDOP(c, NO_LOCATION, POP_BLOCK); From 24a6974eff10f0440ccb340a37b06016a8838d52 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 30 Apr 2026 21:25:25 -0400 Subject: [PATCH 26/48] Fix delegation of asend() values in async yield from. --- Python/codegen.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/Python/codegen.c b/Python/codegen.c index 59a0578c3afa6f..4adf8900f95633 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -528,27 +528,39 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP(c, loc, PUSH_NULL); ADDOP_I(c, loc, CALL, 0); - // Stack: [aiterator] + ADDOP_LOAD_CONST(c, loc, Py_None); + // Stack: [aiterator, None] USE_LABEL(c, send); // Virtual try/except for the StopIteration; see above. ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); - ADDOP_I(c, loc, COPY, 1); - // Stack: [aiterator, aiterator] + // Stack: [aiterator, asend_value] + + ADDOP_I(c, loc, COPY, 2); + // Stack: [aiterator, asend_value, aiterator] ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(asend), names); + // Stack: [aiterator, asend_value, bound_method] + + ADDOP_I(c, loc, SWAP, 2); + // Stack: [aiterator, bound_method, asend_value] + ADDOP(c, loc, PUSH_NULL); - ADDOP_LOAD_CONST(c, loc, Py_None); - // Stack: [aiterator, aiterator.asend, NULL, None] + // Stack: [aiterator, bound_method, asend_value, NULL] + + ADDOP_I(c, loc, SWAP, 2); + // Stack: [aiterator, bound_method, NULL, send_value] + ADDOP_I(c, loc, CALL, 1); - // Stack: [aiterator, send_coro] + // Stack: [aiterator, coroutine] ADDOP(c, loc, PUSH_NULL); ADDOP_LOAD_CONST(c, loc, Py_None); - // Stack: [aiterator, send_coro, NULL, None] + // Stack: [aiterator, coroutine, NULL, None] + ADD_YIELD_FROM(c, loc, 1); - // Stack: [aiterator, send_result] + // Stack: [aiterator, asend_result] ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP); // Stack: [aiterator, wrapped_result] @@ -570,12 +582,18 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP(c, NO_LOCATION, POP_BLOCK); // Stack: [aiterator, resumed_value] - ADDOP(c, loc, POP_TOP); - // Stack: [aiterator] + ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); USE_LABEL(c, exit); - // Stack: [aiterator, exc_value] (from SETUP_FINALLY) + // Stack: [aiterator, send_value, exc_value] (from SETUP_FINALLY) + + ADDOP_I(c, loc, SWAP, 2); + // Stack: [aiterator, exc_value, send_value] + + ADDOP(c, loc, POP_TOP); + // Stack: [aiterator, exc_value] + ADDOP(c, loc, CLEANUP_ASYNC_THROW); // Stack: [result] From e8d7848120a4841e943dbdf15fc4bdf1ffe1b537 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 30 Apr 2026 21:33:00 -0400 Subject: [PATCH 27/48] Don't throw an exception for missing (synchronous) subgenerator attributes. --- Objects/genobject.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Objects/genobject.c b/Objects/genobject.c index 84fb477e5d4df9..7a9c235bf8de37 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2688,16 +2688,19 @@ static PyAsyncMethods async_gen_yield_from_as_async = { { \ assert(op != NULL); \ _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); \ - PyObject *method = PyObject_GetAttr(self->agyf_iterator, &_Py_ID(name)); \ - if (method == NULL) { \ + PyObject *method; \ + if (PyObject_GetOptionalAttr(self->agyf_iterator, &_Py_ID(name), &method) < 0) { \ return NULL; \ } \ + if (method == NULL) { \ + Py_RETURN_NONE; \ + } \ PyObject *result = PyObject_Call(method, args, keywords); \ Py_DECREF(method); \ - if (result == NULL) { \ - return NULL; \ - } \ - return result_value; \ + if (result == NULL) { \ + return NULL; \ + } \ + return result_value; \ } From a864e5aa4926b7f8550bde3a6d83881faccac33e Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 11:42:29 -0400 Subject: [PATCH 28/48] Delegate attributes instead of using proxy methods. --- Objects/genobject.c | 44 +++++++++----------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/Objects/genobject.c b/Objects/genobject.c index 7a9c235bf8de37..7abbac44db0016 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -2682,39 +2682,13 @@ static PyAsyncMethods async_gen_yield_from_as_async = { .am_send = async_gen_yield_from_send }; -#define AGYF_PROXY_METHOD(name, result_value) \ - static PyObject * \ - async_gen_yield_from_ ## name ## _method(PyObject *op, PyObject *args, PyObject *keywords) \ - { \ - assert(op != NULL); \ - _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); \ - PyObject *method; \ - if (PyObject_GetOptionalAttr(self->agyf_iterator, &_Py_ID(name), &method) < 0) { \ - return NULL; \ - } \ - if (method == NULL) { \ - Py_RETURN_NONE; \ - } \ - PyObject *result = PyObject_Call(method, args, keywords); \ - Py_DECREF(method); \ - if (result == NULL) { \ - return NULL; \ - } \ - return result_value; \ - } - - - -AGYF_PROXY_METHOD(send, _PyAsyncGenValueWrapperNew(_PyThreadState_GET(), result)) -AGYF_PROXY_METHOD(throw, result) -AGYF_PROXY_METHOD(close, result) - -static PyMethodDef async_gen_yield_from_methods[] = { - {"send", (PyCFunction)async_gen_yield_from_send_method, METH_VARARGS | METH_KEYWORDS}, - {"throw", (PyCFunction)async_gen_yield_from_throw_method, METH_VARARGS | METH_KEYWORDS}, - {"close", (PyCFunction)async_gen_yield_from_close_method, METH_VARARGS | METH_KEYWORDS}, - {0} -}; +static PyObject * +async_gen_yield_from_get_attr(PyObject *op, PyObject *attribute) +{ + assert(op != NULL); + _PyAsyncGenYieldFrom *self = _PyAsyncGenYieldFrom_CAST(op); + return PyObject_GenericGetAttr(self->agyf_iterator, attribute); +} PyTypeObject _PyAsyncGenYieldFrom_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) @@ -2734,7 +2708,7 @@ PyTypeObject _PyAsyncGenYieldFrom_Type = { 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ + async_gen_yield_from_get_attr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ @@ -2745,7 +2719,7 @@ PyTypeObject _PyAsyncGenYieldFrom_Type = { 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ async_gen_yield_from_iternext, /* tp_iternext */ - async_gen_yield_from_methods, /* tp_methods */ + 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ From 87a47d452bf24e25930d86c0579c73be4367ade2 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 11:49:23 -0400 Subject: [PATCH 29/48] Unskip several tests. --- Lib/test/test_async_yield_from.py | 898 +++++++++++++++--------------- 1 file changed, 449 insertions(+), 449 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 3d4283cd7b79b1..5f65881ee4506d 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -143,211 +143,211 @@ async def g2(): "Finishing g1", ]) - # @_async_test - # async def test_delegation_of_asend(self): - # """ - # Test delegation of send() - # """ - # trace = [] - # async def g1(): - # trace.append("Starting g1") - # x = yield "g1 ham" - # trace.append("g1 received %s" % (x,)) - # async yield from g2() - # x = yield "g1 eggs" - # trace.append("g1 received %s" % (x,)) - # trace.append("Finishing g1") - # async def g2(): - # trace.append("Starting g2") - # x = yield "g2 spam" - # trace.append("g2 received %s" % (x,)) - # x = yield "g2 more spam" - # trace.append("g2 received %s" % (x,)) - # trace.append("Finishing g2") - # g = g1() - # y = await anext(g) - # x = 1 - # try: - # while 1: - # y = await g.asend(x) - # trace.append("Yielded %s" % (y,)) - # x += 1 - # except StopAsyncIteration: - # pass - # self.assertEqual(trace,[ - # "Starting g1", - # "g1 received 1", - # "Starting g2", - # "Yielded g2 spam", - # "g2 received 2", - # "Yielded g2 more spam", - # "g2 received 3", - # "Finishing g2", - # "Yielded g1 eggs", - # "g1 received 4", - # "Finishing g1", - # ]) + @_async_test + async def test_delegation_of_asend(self): + """ + Test delegation of send() + """ + trace = [] + async def g1(): + trace.append("Starting g1") + x = yield "g1 ham" + trace.append("g1 received %s" % (x,)) + async yield from g2() + x = yield "g1 eggs" + trace.append("g1 received %s" % (x,)) + trace.append("Finishing g1") + async def g2(): + trace.append("Starting g2") + x = yield "g2 spam" + trace.append("g2 received %s" % (x,)) + x = yield "g2 more spam" + trace.append("g2 received %s" % (x,)) + trace.append("Finishing g2") + g = g1() + y = await anext(g) + x = 1 + try: + while 1: + y = await g.asend(x) + trace.append("Yielded %s" % (y,)) + x += 1 + except StopAsyncIteration: + pass + self.assertEqual(trace,[ + "Starting g1", + "g1 received 1", + "Starting g2", + "Yielded g2 spam", + "g2 received 2", + "Yielded g2 more spam", + "g2 received 3", + "Finishing g2", + "Yielded g1 eggs", + "g1 received 4", + "Finishing g1", + ]) - # @_async_test - # async def test_handling_exception_while_delegating_send(self): - # """ - # Test handling exception while delegating 'send' - # """ - # trace = [] - # async def g1(): - # trace.append("Starting g1") - # x = yield "g1 ham" - # trace.append("g1 received %s" % (x,)) - # async yield from g2() - # x = yield "g1 eggs" - # trace.append("g1 received %s" % (x,)) - # trace.append("Finishing g1") - # async def g2(): - # trace.append("Starting g2") - # x = yield "g2 spam" - # trace.append("g2 received %s" % (x,)) - # raise ValueError("hovercraft is full of eels") - # x = yield "g2 more spam" - # trace.append("g2 received %s" % (x,)) - # trace.append("Finishing g2") - # async def run(): - # g = g1() - # y = await anext(g) - # x = 1 - # try: - # while 1: - # y = await g.asend(x) - # trace.append("Yielded %s" % (y,)) - # x += 1 - # except StopAsyncIteration: - # trace.append("StopAsyncIteration") - # with self.assertRaises(ValueError): - # await run() - # self.assertEqual(trace,[ - # "Starting g1", - # "g1 received 1", - # "Starting g2", - # "Yielded g2 spam", - # "g2 received 2", - # ]) + @_async_test + async def test_handling_exception_while_delegating_send(self): + """ + Test handling exception while delegating 'send' + """ + trace = [] + async def g1(): + trace.append("Starting g1") + x = yield "g1 ham" + trace.append("g1 received %s" % (x,)) + async yield from g2() + x = yield "g1 eggs" + trace.append("g1 received %s" % (x,)) + trace.append("Finishing g1") + async def g2(): + trace.append("Starting g2") + x = yield "g2 spam" + trace.append("g2 received %s" % (x,)) + raise ValueError("hovercraft is full of eels") + x = yield "g2 more spam" + trace.append("g2 received %s" % (x,)) + trace.append("Finishing g2") + async def run(): + g = g1() + y = await anext(g) + x = 1 + try: + while 1: + y = await g.asend(x) + trace.append("Yielded %s" % (y,)) + x += 1 + except StopAsyncIteration: + trace.append("StopAsyncIteration") + with self.assertRaises(ValueError): + await run() + self.assertEqual(trace,[ + "Starting g1", + "g1 received 1", + "Starting g2", + "Yielded g2 spam", + "g2 received 2", + ]) - # @_async_test - # async def test_delegating_aclose(self): - # """ - # Test delegating 'aclose' - # """ - # trace = [] - # async def g1(): - # try: - # trace.append("Starting g1") - # yield "g1 ham" - # async yield from g2() - # yield "g1 eggs" - # finally: - # trace.append("Finishing g1") - # async def g2(): - # try: - # trace.append("Starting g2") - # yield "g2 spam" - # yield "g2 more spam" - # finally: - # trace.append("Finishing g2") - # g = g1() - # for i in range(2): - # x = await anext(g) - # trace.append("Yielded %s" % (x,)) - # await g.aclose() - # self.assertEqual(trace,[ - # "Starting g1", - # "Yielded g1 ham", - # "Starting g2", - # "Yielded g2 spam", - # "Finishing g2", - # "Finishing g1" - # ]) + @_async_test + async def test_delegating_aclose(self): + """ + Test delegating 'aclose' + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + finally: + trace.append("Finishing g2") + g = g1() + for i in range(2): + x = await anext(g) + trace.append("Yielded %s" % (x,)) + await g.aclose() + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Finishing g2", + "Finishing g1" + ]) - # @_async_test - # async def test_handing_exception_while_delegating_close(self): - # """ - # Test handling exception while delegating 'close' - # """ - # trace = [] - # async def g1(): - # try: - # trace.append("Starting g1") - # yield "g1 ham" - # async yield from g2() - # yield "g1 eggs" - # finally: - # trace.append("Finishing g1") - # async def g2(): - # try: - # trace.append("Starting g2") - # yield "g2 spam" - # yield "g2 more spam" - # finally: - # trace.append("Finishing g2") - # raise ValueError("nybbles have exploded with delight") - # try: - # g = g1() - # for i in range(2): - # x = await anext(g) - # trace.append("Yielded %s" % (x,)) - # await g.aclose() - # except ValueError as e: - # self.assertEqual(e.args[0], "nybbles have exploded with delight") - # self.assertIsInstance(e.__context__, GeneratorExit) - # else: - # self.fail("subgenerator failed to raise ValueError") - # self.assertEqual(trace,[ - # "Starting g1", - # "Yielded g1 ham", - # "Starting g2", - # "Yielded g2 spam", - # "Finishing g2", - # "Finishing g1", - # ]) + @_async_test + async def test_handing_exception_while_delegating_close(self): + """ + Test handling exception while delegating 'close' + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + finally: + trace.append("Finishing g2") + raise ValueError("nybbles have exploded with delight") + try: + g = g1() + for i in range(2): + x = await anext(g) + trace.append("Yielded %s" % (x,)) + await g.aclose() + except ValueError as e: + self.assertEqual(e.args[0], "nybbles have exploded with delight") + self.assertIsInstance(e.__context__, GeneratorExit) + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Finishing g2", + "Finishing g1", + ]) - # @_async_test - # async def test_delegating_throw(self): - # """ - # Test delegating 'throw' - # """ - # trace = [] - # async def g1(): - # try: - # trace.append("Starting g1") - # yield "g1 ham" - # async yield from g2() - # yield "g1 eggs" - # finally: - # trace.append("Finishing g1") - # async def g2(): - # try: - # trace.append("Starting g2") - # yield "g2 spam" - # yield "g2 more spam" - # finally: - # trace.append("Finishing g2") - # try: - # g = g1() - # for i in range(2): - # x = await anext(g) - # trace.append("Yielded %s" % (x,)) - # e = ValueError("tomato ejected") - # await g.athrow(e) - # except ValueError as e: - # self.assertEqual(e.args[0], "tomato ejected") - # else: - # self.fail("subgenerator failed to raise ValueError") - # self.assertEqual(trace,[ - # "Starting g1", - # "Yielded g1 ham", - # "Starting g2", - # "Yielded g2 spam", - # "Finishing g2", - # "Finishing g1", - # ]) + @_async_test + async def test_delegating_throw(self): + """ + Test delegating 'throw' + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + finally: + trace.append("Finishing g2") + try: + g = g1() + for i in range(2): + x = await anext(g) + trace.append("Yielded %s" % (x,)) + e = ValueError("tomato ejected") + await g.athrow(e) + except ValueError as e: + self.assertEqual(e.args[0], "tomato ejected") + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Finishing g2", + "Finishing g1", + ]) @_async_test async def test_value_attribute_of_StopAsyncIteration_exception(self): @@ -644,170 +644,170 @@ async def g2(): "g2: about to yield from g1", ]) - # @_async_test - # async def test_returning_value_from_delegated_throw(self): - # """ - # Test returning value from delegated 'throw' - # """ - # trace = [] - # async def g1(): - # try: - # trace.append("Starting g1") - # yield "g1 ham" - # async yield from g2() - # yield "g1 eggs" - # finally: - # trace.append("Finishing g1") - # async def g2(): - # try: - # trace.append("Starting g2") - # yield "g2 spam" - # yield "g2 more spam" - # except LunchError: - # trace.append("Caught LunchError in g2") - # yield "g2 lunch saved" - # yield "g2 yet more spam" - # class LunchError(Exception): - # pass - # g = g1() - # for i in range(2): - # x = await anext(g) - # trace.append("Yielded %s" % (x,)) - # e = LunchError("tomato ejected") - # await g.athrow(e) - # async for x in g: - # trace.append("Yielded %s" % (x,)) - # self.assertEqual(trace,[ - # "Starting g1", - # "Yielded g1 ham", - # "Starting g2", - # "Yielded g2 spam", - # "Caught LunchError in g2", - # "Yielded g2 yet more spam", - # "Yielded g1 eggs", - # "Finishing g1", - # ]) - - # @_async_test - # async def test_anext_and_return_with_value(self): - # """ - # Test next and return with value - # """ - # trace = [] - # async def f(r): - # gi = g(r) - # await anext(gi) - # try: - # trace.append("f resuming g") - # await anext(gi) - # trace.append("f SHOULD NOT BE HERE") - # except StopAsyncIteration as e: - # trace.append("f caught %r" % (e,)) - # async def g(r): - # trace.append("g starting") - # yield - # trace.append("g returning %r" % (r,)) - # return r - # await f(None) - # await f(1) - # await f((2,)) - # await f(StopAsyncIteration(3)) - # self.assertEqual(trace,[ - # "g starting", - # "f resuming g", - # "g returning None", - # "f caught StopAsyncIteration()", - # "g starting", - # "f resuming g", - # "g returning 1", - # "f caught StopAsyncIteration(1)", - # "g starting", - # "f resuming g", - # "g returning (2,)", - # "f caught StopAsyncIteration((2,))", - # "g starting", - # "f resuming g", - # "g returning StopAsyncIteration(3)", - # "f caught StopAsyncIteration(StopAsyncIteration(3))", - # ]) + @_async_test + async def test_returning_value_from_delegated_throw(self): + """ + Test returning value from delegated 'throw' + """ + trace = [] + async def g1(): + try: + trace.append("Starting g1") + yield "g1 ham" + async yield from g2() + yield "g1 eggs" + finally: + trace.append("Finishing g1") + async def g2(): + try: + trace.append("Starting g2") + yield "g2 spam" + yield "g2 more spam" + except LunchError: + trace.append("Caught LunchError in g2") + yield "g2 lunch saved" + yield "g2 yet more spam" + class LunchError(Exception): + pass + g = g1() + for i in range(2): + x = await anext(g) + trace.append("Yielded %s" % (x,)) + e = LunchError("tomato ejected") + await g.athrow(e) + async for x in g: + trace.append("Yielded %s" % (x,)) + self.assertEqual(trace,[ + "Starting g1", + "Yielded g1 ham", + "Starting g2", + "Yielded g2 spam", + "Caught LunchError in g2", + "Yielded g2 yet more spam", + "Yielded g1 eggs", + "Finishing g1", + ]) - # @_async_test - # async def test_send_and_return_with_value(self): - # """ - # Test send and return with value - # """ - # trace = [] - # async def f(r): - # gi = g(r) - # await anext(gi) - # try: - # trace.append("f sending spam to g") - # await gi.asend("spam") - # trace.append("f SHOULD NOT BE HERE") - # except StopAsyncIteration as e: - # trace.append("f caught %r" % (e,)) - # async def g(r): - # trace.append("g starting") - # x = yield - # trace.append("g received %r" % (x,)) - # trace.append("g returning %r" % (r,)) - # return r - # await f(None) - # await f(1) - # await f((2,)) - # await f(StopAsyncIteration(3)) - # self.assertEqual(trace, [ - # "g starting", - # "f sending spam to g", - # "g received 'spam'", - # "g returning None", - # "f caught StopAsyncIteration()", - # "g starting", - # "f sending spam to g", - # "g received 'spam'", - # "g returning 1", - # 'f caught StopAsyncIteration(1)', - # 'g starting', - # 'f sending spam to g', - # "g received 'spam'", - # 'g returning (2,)', - # 'f caught StopAsyncIteration((2,))', - # 'g starting', - # 'f sending spam to g', - # "g received 'spam'", - # 'g returning StopAsyncIteration(3)', - # 'f caught StopAsyncIteration(StopAsyncIteration(3))' - # ]) + @_async_test + async def test_anext_and_return_with_value(self): + """ + Test next and return with value + """ + trace = [] + async def f(r): + gi = g(r) + await anext(gi) + try: + trace.append("f resuming g") + await anext(gi) + trace.append("f SHOULD NOT BE HERE") + except StopAsyncIteration as e: + trace.append("f caught %r" % (e,)) + async def g(r): + trace.append("g starting") + yield + trace.append("g returning %r" % (r,)) + return r + await f(None) + await f(1) + await f((2,)) + await f(StopAsyncIteration(3)) + self.assertEqual(trace,[ + "g starting", + "f resuming g", + "g returning None", + "f caught StopAsyncIteration()", + "g starting", + "f resuming g", + "g returning 1", + "f caught StopAsyncIteration(1)", + "g starting", + "f resuming g", + "g returning (2,)", + "f caught StopAsyncIteration((2,))", + "g starting", + "f resuming g", + "g returning StopAsyncIteration(3)", + "f caught StopAsyncIteration(StopAsyncIteration(3))", + ]) - # @_async_test - # async def test_catching_exception_from_subgen_and_returning(self): - # """ - # Test catching an exception thrown into a - # subgenerator and returning a value - # """ - # async def inner(): - # try: - # yield 1 - # except ValueError: - # trace.append("inner caught ValueError") - # return value + @_async_test + async def test_send_and_return_with_value(self): + """ + Test send and return with value + """ + trace = [] + async def f(r): + gi = g(r) + await anext(gi) + try: + trace.append("f sending spam to g") + await gi.asend("spam") + trace.append("f SHOULD NOT BE HERE") + except StopAsyncIteration as e: + trace.append("f caught %r" % (e,)) + async def g(r): + trace.append("g starting") + x = yield + trace.append("g received %r" % (x,)) + trace.append("g returning %r" % (r,)) + return r + await f(None) + await f(1) + await f((2,)) + await f(StopAsyncIteration(3)) + self.assertEqual(trace, [ + "g starting", + "f sending spam to g", + "g received 'spam'", + "g returning None", + "f caught StopAsyncIteration(None)", + "g starting", + "f sending spam to g", + "g received 'spam'", + "g returning 1", + 'f caught StopAsyncIteration(1)', + 'g starting', + 'f sending spam to g', + "g received 'spam'", + 'g returning (2,)', + 'f caught StopAsyncIteration((2,))', + 'g starting', + 'f sending spam to g', + "g received 'spam'", + 'g returning StopAsyncIteration(3)', + 'f caught StopAsyncIteration(StopAsyncIteration(3))' + ]) - # async def outer(): - # v = async yield from inner() - # trace.append("inner returned %r to outer" % (v,)) - # yield v + @_async_test + async def test_catching_exception_from_subgen_and_returning(self): + """ + Test catching an exception thrown into a + subgenerator and returning a value + """ + async def inner(): + try: + yield 1 + except ValueError: + trace.append("inner caught ValueError") + return value - # for value in 2, (2,), StopAsyncIteration(2): - # trace = [] - # g = outer() - # trace.append(await anext(g)) - # trace.append(repr(await g.athrow(ValueError))) - # self.assertEqual(trace, [ - # 1, - # "inner caught ValueError", - # "inner returned %r to outer" % (value,), - # repr(value), - # ]) + async def outer(): + v = async yield from inner() + trace.append("inner returned %r to outer" % (v,)) + yield v + + for value in 2, (2,), StopAsyncIteration(2): + trace = [] + g = outer() + trace.append(await anext(g)) + trace.append(repr(await g.athrow(ValueError))) + self.assertEqual(trace, [ + 1, + "inner caught ValueError", + "inner returned %r to outer" % (value,), + repr(value), + ]) # FIXME: This is broken now @_async_test @@ -872,37 +872,37 @@ async def g(): # "Enter f", # ]) - # @_async_test - # async def test_throwing_GeneratorExit_into_subgen_that_raises(self): - # """ - # Test throwing GeneratorExit into a subgenerator that - # catches it and raises a different exception. - # """ - # trace = [] - # async def f(): - # try: - # trace.append("Enter f") - # yield - # trace.append("Exit f") - # except GeneratorExit: - # raise ValueError("Vorpal bunny encountered") - # async def g(): - # trace.append("Enter g") - # async yield from f() - # trace.append("Exit g") - # try: - # gi = g() - # await anext(gi) - # await gi.athrow(GeneratorExit) - # except ValueError as e: - # self.assertEqual(e.args[0], "Vorpal bunny encountered") - # self.assertIsInstance(e.__context__, GeneratorExit) - # else: - # self.fail("subgenerator failed to raise ValueError") - # self.assertEqual(trace,[ - # "Enter g", - # "Enter f", - # ]) + @_async_test + async def test_throwing_GeneratorExit_into_subgen_that_raises(self): + """ + Test throwing GeneratorExit into a subgenerator that + catches it and raises a different exception. + """ + trace = [] + async def f(): + try: + trace.append("Enter f") + yield + trace.append("Exit f") + except GeneratorExit: + raise ValueError("Vorpal bunny encountered") + async def g(): + trace.append("Enter g") + async yield from f() + trace.append("Exit g") + try: + gi = g() + await anext(gi) + await gi.athrow(GeneratorExit) + except ValueError as e: + self.assertEqual(e.args[0], "Vorpal bunny encountered") + self.assertIsInstance(e.__context__, GeneratorExit) + else: + self.fail("subgenerator failed to raise ValueError") + self.assertEqual(trace,[ + "Enter g", + "Enter f", + ]) @_async_test async def test_yield_from_empty(self): @@ -938,44 +938,44 @@ async def two(): pass self.assertEqual(res, [0, 1, 2, 3]) - # @_async_test - # async def test_delegating_generators_claim_to_be_running_with_throw(self): - # # Check with throw - # class MyErr(Exception): - # pass - # async def one(): - # try: - # yield 0 - # except MyErr: - # pass - # async yield from two() - # try: - # yield 3 - # except MyErr: - # pass - # async def two(): - # try: - # yield 1 - # except MyErr: - # pass - # try: - # async yield from g1 - # except RuntimeError: - # pass - # try: - # yield 2 - # except MyErr: - # pass - # g1 = one() - # res = [await anext(g1)] - # try: - # while True: - # res.append(await g1.athrow(MyErr)) - # except StopAsyncIteration: - # pass - # except: - # self.assertEqual(res, [0, 1, 2, 3]) - # raise + @_async_test + async def test_delegating_generators_claim_to_be_running_with_throw(self): + # Check with throw + class MyErr(Exception): + pass + async def one(): + try: + yield 0 + except MyErr: + pass + async yield from two() + try: + yield 3 + except MyErr: + pass + async def two(): + try: + yield 1 + except MyErr: + pass + try: + async yield from g1 + except RuntimeError: + pass + try: + yield 2 + except MyErr: + pass + g1 = one() + res = [await anext(g1)] + try: + while True: + res.append(await g1.athrow(MyErr)) + except StopAsyncIteration: + pass + except: + self.assertEqual(res, [0, 1, 2, 3]) + raise # @_async_test # async def test_delegating_generators_claim_to_be_running_with_aclose(self): @@ -1072,25 +1072,25 @@ async def outer(): del inner_gen gc_collect() - # @_async_test - # async def test_send_tuple_with_custom_generator(self): - # # See issue #21209. - # class MyGen: - # def __aiter__(self): - # return self - # async def __anext__(self): - # return 42 - # async def asend(self, what): - # nonlocal v - # v = what - # return None - # async def outer(): - # v = async yield from MyGen() - # g = outer() - # await anext(g) - # v = None - # await g.asend((1, 2, 3, 4)) - # self.assertEqual(v, (1, 2, 3, 4)) + @_async_test + async def test_send_tuple_with_custom_generator(self): + # See issue #21209. + class MyGen: + def __aiter__(self): + return self + async def __anext__(self): + return 42 + async def asend(self, what): + nonlocal v + v = what + return None + async def outer(): + v = async yield from MyGen() + g = outer() + await anext(g) + v = None + await g.asend((1, 2, 3, 4)) + self.assertEqual(v, (1, 2, 3, 4)) class TestInterestingEdgeCases(unittest.TestCase): From 84f9706c2440b86a31788c36bc083f1ce30ca3ee Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 12:22:12 -0400 Subject: [PATCH 30/48] Fix some weird edge cases with athrow(). --- Lib/test/test_async_yield_from.py | 1099 ++++++++++++++--------------- Objects/genobject.c | 23 +- 2 files changed, 561 insertions(+), 561 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 5f65881ee4506d..dff084b4e37d0e 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -809,9 +809,8 @@ async def outer(): repr(value), ]) - # FIXME: This is broken now @_async_test - async def notest_throwing_GeneratorExit_into_subgen_that_returns(self): + async def test_throwing_GeneratorExit_into_subgen_that_returns(self): """ Test throwing GeneratorExit into a subgenerator that catches it and returns normally. @@ -841,36 +840,36 @@ async def g(): "Enter f", ]) - # @_async_test - # async def test_throwing_GeneratorExit_into_subgenerator_that_yields(self): - # """ - # Test throwing GeneratorExit into a subgenerator that - # catches it and yields. - # """ - # trace = [] - # async def f(): - # try: - # trace.append("Enter f") - # yield - # trace.append("Exit f") - # except GeneratorExit: - # yield - # async def g(): - # trace.append("Enter g") - # async yield from f() - # trace.append("Exit g") - # try: - # gi = g() - # await anext(gi) - # await gi.athrow(GeneratorExit) - # except RuntimeError as e: - # self.assertEqual(e.args[0], "generator ignored GeneratorExit") - # else: - # self.fail("subgenerator failed to raise GeneratorExit") - # self.assertEqual(trace,[ - # "Enter g", - # "Enter f", - # ]) + @_async_test + async def test_throwing_GeneratorExit_into_subgenerator_that_yields(self): + """ + Test throwing GeneratorExit into a subgenerator that + catches it and yields. + """ + trace = [] + async def f(): + try: + trace.append("Enter f") + yield + trace.append("Exit f") + except GeneratorExit: + yield + async def g(): + trace.append("Enter g") + async yield from f() + trace.append("Exit g") + try: + gi = g() + await anext(gi) + await gi.athrow(GeneratorExit) + except RuntimeError as e: + self.assertEqual(e.args[0], "async generator ignored GeneratorExit") + else: + self.fail("subgenerator failed to raise GeneratorExit") + self.assertEqual(trace,[ + "Enter g", + "Enter f", + ]) @_async_test async def test_throwing_GeneratorExit_into_subgen_that_raises(self): @@ -1101,529 +1100,529 @@ async def assert_stop_iteration(self, iterator): self.assertIsNone(caught.exception.__context__) def assert_generator_raised_stop_iteration(self): - return self.assertRaisesRegex(RuntimeError, r"^generator raised StopAsyncIteration$") + return self.assertRaisesRegex(RuntimeError, r"^async generator raised StopAsyncIteration$") def assert_generator_ignored_generator_exit(self): - return self.assertRaisesRegex(RuntimeError, r"^generator ignored GeneratorExit$") + return self.assertRaisesRegex(RuntimeError, r"^async generator ignored GeneratorExit$") - # @_async_test - # async def test_close_and_throw_work(self): - - # yielded_first = object() - # yielded_second = object() - # returned = object() - - # async def inner(): - # yield yielded_first - # yield yielded_second - # return returned - - # async def outer(): - # return (async yield from inner()) - - # with self.subTest("close"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # await g.aclose() - # await self.assert_stop_iteration(g) - - # with self.subTest("throw GeneratorExit"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = GeneratorExit() - # with self.assertRaises(GeneratorExit) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw StopAsyncIteration"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = StopAsyncIteration() - # with self.assert_generator_raised_stop_iteration() as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception.__context__, thrown) - # self.assertIsNone(caught.exception.__context__.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw BaseException"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = BaseException() - # with self.assertRaises(BaseException) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw Exception"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = Exception() - # with self.assertRaises(Exception) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - -# @_async_test -# async def test_close_and_throw_raise_generator_exit(self): - -# yielded_first = object() -# yielded_second = object() -# returned = object() - -# async def inner(): -# try: -# yield yielded_first -# yield yielded_second -# return returned -# finally: -# raise raised - -# async def outer(): -# return (yield from inner()) - -# with self.subTest("close"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = GeneratorExit() -# # GeneratorExit is suppressed. This is consistent with PEP 342: -# # https://peps.python.org/pep-0342/#new-generator-method-close -# await g.aclose() -# await self.assert_stop_iteration(g) - -# with self.subTest("throw GeneratorExit"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = GeneratorExit() -# thrown = GeneratorExit() -# with self.assertRaises(GeneratorExit) as caught: -# await g.athrow(thrown) -# # The raised GeneratorExit is suppressed, but the thrown one -# # propagates. This is consistent with PEP 380: -# # https://peps.python.org/pep-0380/#proposal -# self.assertIs(caught.exception, thrown) -# self.assertIsNone(caught.exception.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw StopAsyncIteration"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = GeneratorExit() -# thrown = StopAsyncIteration() -# with self.assertRaises(GeneratorExit) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw BaseException"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = GeneratorExit() -# thrown = BaseException() -# with self.assertRaises(GeneratorExit) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw Exception"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = GeneratorExit() -# thrown = Exception() -# with self.assertRaises(GeneratorExit) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# @_async_test -# async def test_close_and_throw_raise_stop_iteration(self): - -# yielded_first = object() -# yielded_second = object() -# returned = object() - -# async def inner(): -# try: -# yield yielded_first -# yield yielded_second -# return returned -# finally: -# raise raised - -# async def outer(): -# return (yield from inner()) - -# with self.subTest("close"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = StopAsyncIteration() -# # PEP 479: -# with self.assert_generator_raised_stop_iteration() as caught: -# await g.aclose() -# self.assertIs(caught.exception.__context__, raised) -# self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw GeneratorExit"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = StopAsyncIteration() -# thrown = GeneratorExit() -# # PEP 479: -# with self.assert_generator_raised_stop_iteration() as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception.__context__, raised) -# # This isn't the same GeneratorExit as thrown! It's the one created -# # by calling inner.aclose(): -# self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw StopAsyncIteration"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = StopAsyncIteration() -# thrown = StopAsyncIteration() -# # PEP 479: -# with self.assert_generator_raised_stop_iteration() as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception.__context__, raised) -# self.assertIs(caught.exception.__context__.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw BaseException"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = StopAsyncIteration() -# thrown = BaseException() -# # PEP 479: -# with self.assert_generator_raised_stop_iteration() as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception.__context__, raised) -# self.assertIs(caught.exception.__context__.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw Exception"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = StopAsyncIteration() -# thrown = Exception() -# # PEP 479: -# with self.assert_generator_raised_stop_iteration() as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception.__context__, raised) -# self.assertIs(caught.exception.__context__.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__.__context__) -# await self.assert_stop_iteration(g) - -# @_async_test -# async def test_close_and_throw_raise_base_exception(self): - -# yielded_first = object() -# yielded_second = object() -# returned = object() - -# async def inner(): -# try: -# yield yielded_first -# yield yielded_second -# return returned -# finally: -# raise raised - -# async def outer(): -# return (yield from inner()) - -# with self.subTest("close"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = BaseException() -# with self.assertRaises(BaseException) as caught: -# await g.aclose() -# self.assertIs(caught.exception, raised) -# self.assertIsInstance(caught.exception.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw GeneratorExit"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = BaseException() -# thrown = GeneratorExit() -# with self.assertRaises(BaseException) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# # This isn't the same GeneratorExit as thrown! It's the one created -# # by calling inner.aclose(): -# self.assertIsInstance(caught.exception.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw StopAsyncIteration"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = BaseException() -# thrown = StopAsyncIteration() -# with self.assertRaises(BaseException) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw BaseException"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = BaseException() -# thrown = BaseException() -# with self.assertRaises(BaseException) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw Exception"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = BaseException() -# thrown = Exception() -# with self.assertRaises(BaseException) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# @_async_test -# async def test_close_and_throw_raise_exception(self): - -# yielded_first = object() -# yielded_second = object() -# returned = object() - -# async def inner(): -# try: -# yield yielded_first -# yield yielded_second -# return returned -# finally: -# raise raised - -# async def outer(): -# return (yield from inner()) - -# with self.subTest("close"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = Exception() -# with self.assertRaises(Exception) as caught: -# await g.aclose() -# self.assertIs(caught.exception, raised) -# self.assertIsInstance(caught.exception.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw GeneratorExit"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = Exception() -# thrown = GeneratorExit() -# with self.assertRaises(Exception) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# # This isn't the same GeneratorExit as thrown! It's the one created -# # by calling inner.aclose(): -# self.assertIsInstance(caught.exception.__context__, GeneratorExit) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw StopAsyncIteration"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = Exception() -# thrown = StopAsyncIteration() -# with self.assertRaises(Exception) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw BaseException"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = Exception() -# thrown = BaseException() -# with self.assertRaises(Exception) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) - -# with self.subTest("throw Exception"): -# g = outer() -# self.assertIs(await anext(g), yielded_first) -# raised = Exception() -# thrown = Exception() -# with self.assertRaises(Exception) as caught: -# await g.athrow(thrown) -# self.assertIs(caught.exception, raised) -# self.assertIs(caught.exception.__context__, thrown) -# self.assertIsNone(caught.exception.__context__.__context__) -# await self.assert_stop_iteration(g) + @_async_test + async def test_close_and_throw_work(self): - # @_async_test - # async def test_close_and_throw_yield(self): - - # yielded_first = object() - # yielded_second = object() - # returned = object() - - # async def inner(): - # try: - # yield yielded_first - # finally: - # yield yielded_second - # return returned - - # async def outer(): - # return (async yield from inner()) - - # with self.subTest("close"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # # No chaining happens. This is consistent with PEP 342: - # # https://peps.python.org/pep-0342/#new-generator-method-close - # with self.assert_generator_ignored_generator_exit() as caught: - # await g.aclose() - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw GeneratorExit"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = GeneratorExit() - # # No chaining happens. This is consistent with PEP 342: - # # https://peps.python.org/pep-0342/#new-generator-method-close - # with self.assert_generator_ignored_generator_exit() as caught: - # await g.athrow(thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw StopAsyncIteration"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = StopAsyncIteration() - # self.assertEqual(await g.athrow(thrown), yielded_second) - # # PEP 479: - # with self.assert_generator_raised_stop_iteration() as caught: - # await anext(g) - # self.assertIs(caught.exception.__context__, thrown) - # self.assertIsNone(caught.exception.__context__.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw BaseException"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = BaseException() - # self.assertEqual(await g.athrow(thrown), yielded_second) - # with self.assertRaises(BaseException) as caught: - # await anext(g) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw Exception"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = Exception() - # self.assertEqual(await g.athrow(thrown), yielded_second) - # with self.assertRaises(Exception) as caught: - # await anext(g) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) + yielded_first = object() + yielded_second = object() + returned = object() - # @_async_test - # async def test_close_and_throw_return(self): - # yielded_first = object() - # yielded_second = object() - # returned = object() - - # async def inner(): - # try: - # yield yielded_first - # yield yielded_second - # except: - # pass - # return returned - - # async def outer(): - # return (async yield from inner()) - - # with self.subTest("close"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # # StopAsyncIteration is suppressed. This is consistent with PEP 342: - # # https://peps.python.org/pep-0342/#new-generator-method-close - # await g.aclose() - # await self.assert_stop_iteration(g) - - # with self.subTest("throw GeneratorExit"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = GeneratorExit() - # # StopAsyncIteration is suppressed. This is consistent with PEP 342: - # # https://peps.python.org/pep-0342/#new-generator-method-close - # with self.assertRaises(GeneratorExit) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception, thrown) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw StopAsyncIteration"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = StopAsyncIteration() - # with self.assertRaises(StopAsyncIteration) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception.value, returned) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw BaseException"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = BaseException() - # with self.assertRaises(StopAsyncIteration) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception.value, returned) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) - - # with self.subTest("throw Exception"): - # g = outer() - # self.assertIs(await anext(g), yielded_first) - # thrown = Exception() - # with self.assertRaises(StopAsyncIteration) as caught: - # await g.athrow(thrown) - # self.assertIs(caught.exception.value, returned) - # self.assertIsNone(caught.exception.__context__) - # await self.assert_stop_iteration(g) + async def inner(): + yield yielded_first + yield yielded_second + return returned + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + await g.aclose() + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = GeneratorExit() + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = StopAsyncIteration() + with self.assert_generator_raised_stop_iteration() as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = BaseException() + with self.assertRaises(BaseException) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = Exception() + with self.assertRaises(Exception) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_raise_generator_exit(self): + + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + return returned + finally: + raise raised + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = GeneratorExit() + # GeneratorExit is suppressed. This is consistent with PEP 342: + # https://peps.python.org/pep-0342/#new-generator-method-close + await g.aclose() + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = GeneratorExit() + thrown = GeneratorExit() + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + # The raised GeneratorExit is suppressed, but the thrown one + # propagates. This is consistent with PEP 380: + # https://peps.python.org/pep-0380/#proposal + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = GeneratorExit() + thrown = StopAsyncIteration() + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = GeneratorExit() + thrown = BaseException() + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = GeneratorExit() + thrown = Exception() + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_raise_stop_iteration(self): + + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + return returned + finally: + raise raised + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = StopAsyncIteration() + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await g.aclose() + self.assertIs(caught.exception.__context__, raised) + self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = StopAsyncIteration() + thrown = GeneratorExit() + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.__context__, raised) + # This isn't the same GeneratorExit as thrown! It's the one created + # by calling inner.aclose(): + self.assertIsInstance(caught.exception.__context__.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = StopAsyncIteration() + thrown = StopAsyncIteration() + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.__context__, raised) + self.assertIs(caught.exception.__context__.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = StopAsyncIteration() + thrown = BaseException() + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.__context__, raised) + self.assertIs(caught.exception.__context__.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = StopAsyncIteration() + thrown = Exception() + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.__context__, raised) + self.assertIs(caught.exception.__context__.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_raise_base_exception(self): + + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + return returned + finally: + raise raised + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = BaseException() + with self.assertRaises(BaseException) as caught: + await g.aclose() + self.assertIs(caught.exception, raised) + self.assertIsInstance(caught.exception.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = BaseException() + thrown = GeneratorExit() + with self.assertRaises(BaseException) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + # This isn't the same GeneratorExit as thrown! It's the one created + # by calling inner.aclose(): + self.assertIsInstance(caught.exception.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = BaseException() + thrown = StopAsyncIteration() + with self.assertRaises(BaseException) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = BaseException() + thrown = BaseException() + with self.assertRaises(BaseException) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = BaseException() + thrown = Exception() + with self.assertRaises(BaseException) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_raise_exception(self): + + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + return returned + finally: + raise raised + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = Exception() + with self.assertRaises(Exception) as caught: + await g.aclose() + self.assertIs(caught.exception, raised) + self.assertIsInstance(caught.exception.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = Exception() + thrown = GeneratorExit() + with self.assertRaises(Exception) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + # This isn't the same GeneratorExit as thrown! It's the one created + # by calling inner.aclose(): + self.assertIsInstance(caught.exception.__context__, GeneratorExit) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = Exception() + thrown = StopAsyncIteration() + with self.assertRaises(Exception) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = Exception() + thrown = BaseException() + with self.assertRaises(Exception) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + raised = Exception() + thrown = Exception() + with self.assertRaises(Exception) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, raised) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_yield(self): + + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + finally: + yield yielded_second + return returned + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + # No chaining happens. This is consistent with PEP 342: + # https://peps.python.org/pep-0342/#new-generator-method-close + with self.assert_generator_ignored_generator_exit() as caught: + await g.aclose() + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = GeneratorExit() + # No chaining happens. This is consistent with PEP 342: + # https://peps.python.org/pep-0342/#new-generator-method-close + with self.assert_generator_ignored_generator_exit() as caught: + await g.athrow(thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = StopAsyncIteration() + self.assertEqual(await g.athrow(thrown), yielded_second) + # PEP 479: + with self.assert_generator_raised_stop_iteration() as caught: + await anext(g) + self.assertIs(caught.exception.__context__, thrown) + self.assertIsNone(caught.exception.__context__.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = BaseException() + self.assertEqual(await g.athrow(thrown), yielded_second) + with self.assertRaises(BaseException) as caught: + await anext(g) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = Exception() + self.assertEqual(await g.athrow(thrown), yielded_second) + with self.assertRaises(Exception) as caught: + await anext(g) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + @_async_test + async def test_close_and_throw_return(self): + yielded_first = object() + yielded_second = object() + returned = object() + + async def inner(): + try: + yield yielded_first + yield yielded_second + except: + pass + return returned + + async def outer(): + return (async yield from inner()) + + with self.subTest("close"): + g = outer() + self.assertIs(await anext(g), yielded_first) + # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # https://peps.python.org/pep-0342/#new-generator-method-close + await g.aclose() + await self.assert_stop_iteration(g) + + with self.subTest("throw GeneratorExit"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = GeneratorExit() + # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # https://peps.python.org/pep-0342/#new-generator-method-close + with self.assertRaises(GeneratorExit) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception, thrown) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw StopAsyncIteration"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = StopAsyncIteration() + with self.assertRaises(StopAsyncIteration) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.value, returned) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw BaseException"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = BaseException() + with self.assertRaises(StopAsyncIteration) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.value, returned) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) + + with self.subTest("throw Exception"): + g = outer() + self.assertIs(await anext(g), yielded_first) + thrown = Exception() + with self.assertRaises(StopAsyncIteration) as caught: + await g.athrow(thrown) + self.assertIs(caught.exception.value, returned) + self.assertIsNone(caught.exception.__context__) + await self.assert_stop_iteration(g) @_async_test async def test_throws_in_iter(self): diff --git a/Objects/genobject.c b/Objects/genobject.c index 7abbac44db0016..068daf4e765b3f 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -622,7 +622,7 @@ the (type, val, tb) signature is deprecated, \n\ and may be removed in a future version of Python."); static PyObject * -_gen_throw(PyGenObject *gen, int close_on_genexit, +_gen_throw(PyGenObject *gen, PyObject *typ, PyObject *val, PyObject *tb) { int8_t frame_state = FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state); @@ -653,9 +653,15 @@ _gen_throw(PyGenObject *gen, int close_on_genexit, PyObject *yf = PyStackRef_AsPyObjectNew(_PyFrame_StackPeek(frame, 2)); PyObject *ret; int err; - if (PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && - close_on_genexit - ) { + if (PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit)) { + // XXX: As of PEP 828, this doesn't seem to be true? + // In the above condition, there used to be a "&& close_on_genexit", + // where close_on_genexit was a parameter that was always zero when + // this was called from athrow(). This broke some tests/expected behavior + // for async yield from. Removing the parameter didn't seem to cause + // any new test failures, nor could I reproduce any different behavior + // when experimenting with it, but we need to be careful. + // Yury wrote this, but I don't think it's still relevant: /* Asynchronous generators *should not* be closed right away. We have to allow some awaits to work it through, hence the `close_on_genexit` parameter here. @@ -680,8 +686,7 @@ _gen_throw(PyGenObject *gen, int close_on_genexit, tstate->current_frame = frame; /* Close the generator that we are currently iterating with 'yield from' or awaiting on with 'await'. */ - ret = _gen_throw((PyGenObject *)yf, close_on_genexit, - typ, val, tb); + ret = _gen_throw((PyGenObject *)yf, typ, val, tb); tstate->current_frame = prev; frame->previous = NULL; } @@ -751,7 +756,7 @@ gen_throw(PyObject *op, PyObject *const *args, Py_ssize_t nargs) else if (nargs == 2) { val = args[1]; } - return _gen_throw(gen, 1, typ, val, tb); + return _gen_throw(gen, typ, val, tb); } @@ -2352,8 +2357,6 @@ async_gen_athrow_send(PyObject *self, PyObject *arg) o->agt_gen->ag_closed = 1; retval = _gen_throw((PyGenObject *)gen, - 0, /* Do not close generator when - PyExc_GeneratorExit is passed */ PyExc_GeneratorExit, NULL, NULL); if (retval && _PyAsyncGenWrappedValue_CheckExact(retval)) { @@ -2362,8 +2365,6 @@ async_gen_athrow_send(PyObject *self, PyObject *arg) } } else { retval = _gen_throw((PyGenObject *)gen, - 0, /* Do not close generator when - PyExc_GeneratorExit is passed */ o->agt_typ, o->agt_val, o->agt_tb); retval = async_gen_unwrap_value(o->agt_gen, retval); } From 1b7d965487f2d16ef3c10ecf3c00f16b237c1666 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 17:35:39 -0400 Subject: [PATCH 31/48] Fix use of asend() instead of __anext__() for None values. --- Lib/test/test_async_yield_from.py | 62 +++++++++++++++---------------- Python/codegen.c | 44 ++++++++++++++++++---- 2 files changed, 68 insertions(+), 38 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index dff084b4e37d0e..5f6b508832de5a 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -976,23 +976,23 @@ async def two(): self.assertEqual(res, [0, 1, 2, 3]) raise - # @_async_test - # async def test_delegating_generators_claim_to_be_running_with_aclose(self): - # # Check with close - # class MyIt: - # def __aiter__(self): - # return self - # async def __anext__(self): - # return 42 - # async def aclose(self_): - # self.assertTrue(g1.gi_running) - # with self.assertRaises(RuntimeError): - # await anext(g1) - # async def one(): - # async yield from MyIt() - # g1 = one() - # await anext(g1) - # await g1.aclose() + @_async_test + async def test_delegating_generators_claim_to_be_running_with_aclose(self): + # Check with close + class MyIt: + def __aiter__(self): + return self + async def __anext__(self): + return 42 + async def aclose(self_): + self.assertTrue(g1.gi_running) + with self.assertRaises(RuntimeError): + await anext(g1) + async def one(): + async yield from MyIt() + g1 = one() + await anext(g1) + await g1.aclose() @_async_test async def test_delegator_is_visible_to_debugger(self): @@ -1016,20 +1016,20 @@ async def eggs(g): async for stack in spam(eggs(gen())): self.assertTrue('spam' in stack and 'eggs' in stack) - # @_async_test - # async def test_custom_iterator_return(self): - # # See issue #15568 - # class MyIter: - # def __aiter__(self): - # return self - # async def __anext__(self): - # raise StopAsyncIteration(42) - # async def gen(): - # nonlocal ret - # ret = async yield from MyIter() - # ret = None - # [e async for e in gen()] - # self.assertEqual(ret, 42) + @_async_test + async def test_custom_iterator_return(self): + # See issue #15568 + class MyIter: + def __aiter__(self): + return self + async def __anext__(self): + raise StopAsyncIteration(42) + async def gen(): + nonlocal ret + ret = async yield from MyIter() + ret = None + [e async for e in gen()] + self.assertEqual(ret, 42) @_async_test async def test_close_with_cleared_frame(self): diff --git a/Python/codegen.c b/Python/codegen.c index 4adf8900f95633..5ffe510064b7c3 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -515,7 +515,8 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) { NEW_JUMP_TARGET_LABEL(c, send); NEW_JUMP_TARGET_LABEL(c, exit); - + NEW_JUMP_TARGET_LABEL(c, use_anext); + NEW_JUMP_TARGET_LABEL(c, got_coroutine); // ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__aiter__), names); // ADDOP(c, loc, PUSH_NULL); @@ -523,19 +524,27 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) VISIT(c, expr, e->v.AsyncYieldFrom.value); // Stack: [value] - // Call value.__aiter__() ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__aiter__), names); ADDOP(c, loc, PUSH_NULL); ADDOP_I(c, loc, CALL, 0); + // Stack: [aiterator] ADDOP_LOAD_CONST(c, loc, Py_None); // Stack: [aiterator, None] USE_LABEL(c, send); - // Virtual try/except for the StopIteration; see above. - ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); // Stack: [aiterator, asend_value] + ADDOP_I(c, loc, COPY, 1); + // Stack: [aiterator, asend_value, asend_value] + + ADDOP_LOAD_CONST(c, loc, Py_None); + // Stack: [aiterator, asend_value, asend_value, None] + + ADDOP_I(c, loc, IS_OP, 0); + // Stack: [aiterator, asend_value, bool] + + ADDOP_JUMP(c, loc, POP_JUMP_IF_TRUE, use_anext); ADDOP_I(c, loc, COPY, 2); // Stack: [aiterator, asend_value, aiterator] @@ -555,6 +564,28 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP_I(c, loc, CALL, 1); // Stack: [aiterator, coroutine] + ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, got_coroutine); + + USE_LABEL(c, use_anext); + // Stack: [aiterator, asend_value] + + ADDOP(c, loc, POP_TOP); + // Stack: [aiterator] + + ADDOP_I(c, loc, COPY, 1); + // Stack: [aiterator, aiterator] + + ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__anext__), names); + ADDOP(c, loc, PUSH_NULL); + ADDOP_I(c, loc, CALL, 0); + // Stack: [aiterator, coroutine] + + USE_LABEL(c, got_coroutine); + // Stack: [aiterator, coroutine] + + // Virtual try/except for the StopAsyncIteration + ADDOP_JUMP(c, loc, SETUP_FINALLY, exit); + ADDOP(c, loc, PUSH_NULL); ADDOP_LOAD_CONST(c, loc, Py_None); // Stack: [aiterator, coroutine, NULL, None] @@ -575,14 +606,13 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP_I(c, loc, YIELD_VALUE, 1); // Stack: [aiterator, aiterator, resumed_value] + ADDOP(c, NO_LOCATION, POP_BLOCK); + ADDOP_I(c, loc, SWAP, 2); // Stack: [aiterator, resumed_value, aiterator] ADDOP(c, loc, POP_TOP); // Stack: [aiterator, resumed_value] - ADDOP(c, NO_LOCATION, POP_BLOCK); - // Stack: [aiterator, resumed_value] - ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send); USE_LABEL(c, exit); From 4b5e71d6fc5a28d5382389cedbbef57bc7aa0472 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 17:42:28 -0400 Subject: [PATCH 32/48] Remove dead comments. --- Python/codegen.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/Python/codegen.c b/Python/codegen.c index 5ffe510064b7c3..4eb7cdc914b47e 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -518,9 +518,6 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) NEW_JUMP_TARGET_LABEL(c, use_anext); NEW_JUMP_TARGET_LABEL(c, got_coroutine); - // ADDOP_NAME(c, loc, LOAD_ATTR, &_Py_ID(__aiter__), names); - // ADDOP(c, loc, PUSH_NULL); - // ADDOP_I(c, loc, CALL, 0); VISIT(c, expr, e->v.AsyncYieldFrom.value); // Stack: [value] From e9ac73111944004dcdc60cffc9195cf70ad30c94 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 17:43:57 -0400 Subject: [PATCH 33/48] Adjust formatting. --- Python/codegen.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Python/codegen.c b/Python/codegen.c index 4eb7cdc914b47e..ecb81e0bcec05c 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -597,6 +597,7 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) // extra copy. ADDOP_I(c, loc, COPY, 2); // Stack: [aiterator, wrapped_result, aiterator] + ADDOP_I(c, loc, SWAP, 2); // Stack: [aiterator, aiterator, wrapped_result] @@ -607,6 +608,7 @@ codegen_async_yield_from(compiler *c, location loc, expr_ty e) ADDOP_I(c, loc, SWAP, 2); // Stack: [aiterator, resumed_value, aiterator] + ADDOP(c, loc, POP_TOP); // Stack: [aiterator, resumed_value] From e79162d0312ac3e1f29b12a4d401f6c18a5d72f9 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 17:47:47 -0400 Subject: [PATCH 34/48] Fix the last remaining test. --- Lib/test/test_async_yield_from.py | 66 +++++++++++++++---------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 5f6b508832de5a..25ea7ead73755b 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -8,7 +8,7 @@ import inspect from functools import partial -from test.support import captured_stderr, disable_gc, gc_collect, run_yielding_async_fn +from test.support import captured_stderr, disable_gc, gc_collect, run_yielding_async_fn, catch_unraisable_exception _async_test = partial(partial, run_yielding_async_fn) @@ -554,38 +554,38 @@ async def g(): "finishing g", ]) - # @_async_test - # async def test_broken_getattr_handling(self): - # """ - # Test subiterator with a broken getattr implementation - # """ - # class Broken: - # def __aiter__(self): - # return self - # async def __anext__(self): - # return 1 - # async def __getattr__(self, attr): - # 1/0 - - # async def g(): - # async yield from Broken() - - # with self.assertRaises(ZeroDivisionError): - # gi = g() - # self.assertEqual(await anext(gi), 1) - # await gi.asend(1) - - # with self.assertRaises(ZeroDivisionError): - # gi = g() - # self.assertEqual(await anext(gi), 1) - # await gi.athrow(AttributeError) - - # with support.catch_unraisable_exception() as cm: - # gi = g() - # self.assertEqual(await anext(gi), 1) - # await gi.aclose() - - # self.assertEqual(ZeroDivisionError, cm.unraisable.exc_type) + @_async_test + async def test_broken_getattr_handling(self): + """ + Test subiterator with a broken getattr implementation + """ + class Broken: + def __aiter__(self): + return self + async def __anext__(self): + return 1 + def __getattr__(self, attr): + 1/0 + + async def g(): + async yield from Broken() + + with self.assertRaises(ZeroDivisionError): + gi = g() + self.assertEqual(await anext(gi), 1) + await gi.asend(1) + + with self.assertRaises(ZeroDivisionError): + gi = g() + self.assertEqual(await anext(gi), 1) + await gi.athrow(AttributeError) + + with catch_unraisable_exception() as cm: + gi = g() + self.assertEqual(await anext(gi), 1) + await gi.aclose() + + self.assertEqual(ZeroDivisionError, cm.unraisable.exc_type) @_async_test async def test_exception_in_initial_next_call(self): From 5019628dc88171310232fe5d60a18a79edbb4c36 Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 18:13:55 -0400 Subject: [PATCH 35/48] Add a whatsnew entry. --- Doc/whatsnew/3.15.rst | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst index 78e464f2a5a6d8..937caf80518424 100644 --- a/Doc/whatsnew/3.15.rst +++ b/Doc/whatsnew/3.15.rst @@ -87,6 +87,7 @@ Summary -- Release highlights ` * :pep:`803`: :ref:`Stable ABI for Free-Threaded Builds ` * :pep:`831`: :ref:`Frame pointers everywhere ` +* :pep:`828`: :ref:`'yield from' in async generators ` * :ref:`The JIT compiler has been significantly upgraded ` * :ref:`Improved error messages ` * :ref:`The official Windows 64-bit binaries now use the tail-calling interpreter @@ -447,6 +448,54 @@ If not using a build tool -- or when writing such a tool -- you can select ``abi3t`` by setting the macro :c:macro:`!Py_TARGET_ABI3T` as discussed in :ref:`abi3-compiling`. +.. _whatsnew315-async-yield-from: + +:pep:`828`: Supporting ``yield from`` in asynchronous generators +---------------------------------------------------------------- + +Use of the :keyword:`yield from ` construct and the :keyword:`return` +statement with a non-``None`` value is now allowed in an +:term:`asynchronous generator function `. For example, +the following code would previously raise a :class:`SyntaxError`: + +.. code-block:: python + + async def agenerator(): + yield 1 + yield from range(2, 5) # Now allowed! + return 5 # Now allowed! + +Additionally, there is a new ``async yield from`` statement to delegate to an +asynchronous generator: + +.. code-block:: python + + async def sleepy_range(start, stop): + for number in range(start, stop): + await asyncio.sleep(1) + yield number + + async def agenerator(): + yield 1 + async yield from sleepy_range(2, 5) + yield 5 + + +Similar to ``yield from``, ``async yield from`` may also be used as an expression, +in which case the ``return`` of the async generator is used. + +For example: + +.. code-block:: python + + async def asubgenerator(): + yield 1 + yield 2 + return 3 + + async def agenerator(): + value = async yield from asubgenerator() + print(value) # 3 .. _whatsnew315-improved-error-messages: From 15fcd7ea73eefc8cc7fbde4f8c6bac87ad9dca4b Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sat, 2 May 2026 19:06:17 -0400 Subject: [PATCH 36/48] Add a bunch of documentation. --- Doc/library/exceptions.rst | 11 ++++ Doc/reference/expressions.rst | 93 +++++++++++++++++++++++++++++++++- Doc/reference/simple_stmts.rst | 2 + 3 files changed, 105 insertions(+), 1 deletion(-) diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 7fc6055aa9a881..d82ac082f1aa58 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -524,8 +524,19 @@ The following exceptions are the exceptions that are usually raised. Must be raised by :meth:`~object.__anext__` method of an :term:`asynchronous iterator` object to stop the iteration. + .. attribute:: StopAsyncIteration.value + + This is given as an argument when constructing the exception, and + defaults to :const:`None`. This is used for the result of + ``async yield from`` expressions (see :ref:`async-yield-from`). + + .. versionadded: next + .. versionadded:: 3.5 + .. versionchanged:: next + Added the ``value`` attribute. + .. exception:: SyntaxError(message, details) Raised when the parser encounters a syntax error. This may occur in an diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 68dcfc00bbd99c..aee5c2e4bbab27 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -629,6 +629,7 @@ Yield expressions yield_atom: "(" `yield_expression` ")" yield_from: "yield" "from" `expression` yield_expression: "yield" `yield_list` | `yield_from` + async_yield_from: "async" "yield" "from" `expression` The yield expression is used when defining a :term:`generator` function or an :term:`asynchronous generator` function and @@ -708,6 +709,10 @@ the yield expression. It can be either set explicitly when raising .. versionchanged:: 3.3 Added ``yield from `` to delegate control flow to a subiterator. +.. versionchanged:: next + ``yield from`` is now allowed to be used in an async generator. + Previously, it would raise a :class:`SyntaxError`. + The parentheses may be omitted when the yield expression is the sole expression on the right hand side of an assignment statement. @@ -728,6 +733,10 @@ on the right hand side of an assignment statement. The proposal that expanded on :pep:`492` by adding generator capabilities to coroutine functions. + :pep:`828` - Supporting ``yield from`` in asynchronous generators + The proposal that expanded on :pep:`380` by adding subgenerator delegation + to asynchronous generators. + .. index:: pair: object; generator .. _generator-methods: @@ -913,7 +922,89 @@ registered *finalizer* to be called upon finalization. For a reference example of a *finalizer* method see the implementation of ``asyncio.Loop.shutdown_asyncgens`` in :source:`Lib/asyncio/base_events.py`. -The expression ``yield from `` is a syntax error when used in an +.. _async-yield-from: + +Asynchronous ``yield from`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Conceptually, ``async yield from`` is very similar to ``yield from``, but +operates solely on asynchronous constructs rather than synchronous ones. +In particular: + +.. list-table:: + :widths: auto + :header-rows: 1 + + * * ``yield from`` construct + * ``async yield from`` construct + * * :meth:`~object.__iter__` + * :meth:`~object.__aiter__` + * * :meth:`~generator.__next__` + * :meth:`~agen.__anext__` + * * :meth:`~generator.send` + * :meth:`~agen.asend` + * * :class:`StopIteration` + * :class:`StopAsyncIteration` + +To describe the above: + +* The object being delegated to must be asynchronously iterable (that is, it + must implement ``__aiter__`` instead of ``__iter__``). +* When ``anext`` is called on the parent generator (the one that contains + ``async yield from``), ``__anext__`` will be invoked on the subgenerator. + In contrast, a synchronous ``yield from`` would invoke ``__next__`` instead. + (Note that calling ``asend`` with a ``None`` value is equivalent to calling + ``anext()``, and thus applies here.) +* All calls to ``asend``, ``athrow``, and ``aclose`` are delegated to the + subgenerator (the object returned by ``__aiter__`` in this case). This means + that a call to ``parent_generator.asend(x)`` is semantically equivalent to + ``sub_generator.asend(x)``, where ``parent_generator`` is currently executing + an ``async yield from`` on ``sub_generator``. +* The result of the expression is retrieved through + :attr:`StopAsyncIteration.value` instead of :attr:`StopIteration.value`. + +An example of usage for ``async yield from``: + +.. code-block:: pycon + + >>> import asyncio + >>> async def sleepy_count(number): + ... for num in range(number): + ... await asyncio.sleep(1) + ... result = yield num + ... print(f"Got result: {result}") + ... + >>> async def counter(): + ... final_number = async yield from sleepy_count(5) + ... yield final_number + ... + >>> await anext(ag) + 0 + >>> await anext(ag) + Got result: None + 1 + >>> await ag.asend(42) + Got result: 42 + 2 + >>> await ag.athrow(ValueError("Nobody expects the Spanish Inquisition")) + Traceback (most recent call last): + File "/home/python/cpython/Lib/concurrent/futures/_base.py", line 450, in result + return self.__get_result() + ~~~~~~~~~~~~~~~~~^^ + File "/home/python/cpython/Lib/concurrent/futures/_base.py", line 395, in __get_result + raise self._exception + File "", line 1, in + await ag.athrow(ValueError("Nobody expects the Spanish Inquisition")) + File "", line 8, in counter + final_number = async yield from sleepy_count(4) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 3, in sleepy_count + result = yield num + ^^^^^^^^^ + ValueError: Nobody expects the Spanish Inquisition + + +``async yield from`` is a :class:`SyntaxError` when used outside of an asynchronous generator function. .. index:: pair: object; asynchronous-generator diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 648e3a9bf54060..8e247f3ba69094 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -534,11 +534,13 @@ statement. For example, the yield statements :: yield yield from + async yield from are equivalent to the yield expression statements :: (yield ) (yield from ) + (async yield from ) Yield expressions and statements are only used when defining a :term:`generator` function, and are only used in the body of the generator function. Using :keyword:`yield` From 43d9a7b8e4d71b22300135aa2957377084c9e6f6 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 15:47:15 +0200 Subject: [PATCH 37/48] Cross-reference two tests suites in `test_yield_from` and `test_async_yield_from` --- Lib/test/test_async_yield_from.py | 27 +++------------------------ Lib/test/test_yield_from.py | 2 ++ 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 25ea7ead73755b..21072e6e92bae2 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1,7 +1,8 @@ """ -Test suite for PEP 828 implementation +Test suite for PEP 828 implementation. -Adapted from the 'yield from' tests. +The tests below were adapted from the 'yield from' tests. +For more context on any particular test, try searching for an analogue in `test_yield_from`. """ import unittest @@ -1018,7 +1019,6 @@ async def eggs(g): @_async_test async def test_custom_iterator_return(self): - # See issue #15568 class MyIter: def __aiter__(self): return self @@ -1033,24 +1033,6 @@ async def gen(): @_async_test async def test_close_with_cleared_frame(self): - # See issue #17669. - # - # Create a stack of generators: outer() delegating to inner() - # delegating to innermost(). The key point is that the instance of - # inner is created first: this ensures that its frame appears before - # the instance of outer in the GC linked list. - # - # At the gc.collect call: - # - frame_clear is called on the inner_gen frame. - # - gen_dealloc is called on the outer_gen generator (the only - # reference is in the frame's locals). - # - gen_close is called on the outer_gen generator. - # - gen_close_iter is called to close the inner_gen generator, which - # in turn calls gen_close, and gen_yf. - # - # Previously, gen_yf would crash since inner_gen's frame had been - # cleared (and in particular f_stacktop was NULL). - async def innermost(): yield async def inner(): @@ -1073,7 +1055,6 @@ async def outer(): @_async_test async def test_send_tuple_with_custom_generator(self): - # See issue #21209. class MyGen: def __aiter__(self): return self @@ -1626,8 +1607,6 @@ async def outer(): @_async_test async def test_throws_in_iter(self): - # See GH-126366: NULL pointer dereference if __iter__ - # threw an exception. class Silly: async def __aiter__(self): yield from () diff --git a/Lib/test/test_yield_from.py b/Lib/test/test_yield_from.py index 74c9fa16987638..19aa89db1d0843 100644 --- a/Lib/test/test_yield_from.py +++ b/Lib/test/test_yield_from.py @@ -5,6 +5,8 @@ adapted from original tests written by Greg Ewing see + +See also `test_async_yield_from'. Where applicable, consider keeping the two test suites in sync. """ import unittest From 2129c7a03840b714899e27fa10088f64e51f59a9 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 15:50:23 +0200 Subject: [PATCH 38/48] Replace "consistent with" with "analogous to" --- Lib/test/test_async_yield_from.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 21072e6e92bae2..9155b9e5aa8f4c 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1169,7 +1169,7 @@ async def outer(): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() - # GeneratorExit is suppressed. This is consistent with PEP 342: + # GeneratorExit is suppressed. This is analogous to PEP 342: # https://peps.python.org/pep-0342/#new-generator-method-close await g.aclose() await self.assert_stop_iteration(g) @@ -1182,7 +1182,7 @@ async def outer(): with self.assertRaises(GeneratorExit) as caught: await g.athrow(thrown) # The raised GeneratorExit is suppressed, but the thrown one - # propagates. This is consistent with PEP 380: + # propagates. This is analogous to PEP 380: # https://peps.python.org/pep-0380/#proposal self.assertIs(caught.exception, thrown) self.assertIsNone(caught.exception.__context__) @@ -1486,7 +1486,7 @@ async def outer(): with self.subTest("close"): g = outer() self.assertIs(await anext(g), yielded_first) - # No chaining happens. This is consistent with PEP 342: + # No chaining happens. This is analogous to PEP 342: # https://peps.python.org/pep-0342/#new-generator-method-close with self.assert_generator_ignored_generator_exit() as caught: await g.aclose() @@ -1497,7 +1497,7 @@ async def outer(): g = outer() self.assertIs(await anext(g), yielded_first) thrown = GeneratorExit() - # No chaining happens. This is consistent with PEP 342: + # No chaining happens. This is analogous to PEP 342: # https://peps.python.org/pep-0342/#new-generator-method-close with self.assert_generator_ignored_generator_exit() as caught: await g.athrow(thrown) @@ -1558,7 +1558,7 @@ async def outer(): with self.subTest("close"): g = outer() self.assertIs(await anext(g), yielded_first) - # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # StopAsyncIteration is suppressed. This is analogous to PEP 342: # https://peps.python.org/pep-0342/#new-generator-method-close await g.aclose() await self.assert_stop_iteration(g) @@ -1567,7 +1567,7 @@ async def outer(): g = outer() self.assertIs(await anext(g), yielded_first) thrown = GeneratorExit() - # StopAsyncIteration is suppressed. This is consistent with PEP 342: + # StopAsyncIteration is suppressed. This is analogous to PEP 342: # https://peps.python.org/pep-0342/#new-generator-method-close with self.assertRaises(GeneratorExit) as caught: await g.athrow(thrown) From 51405e8bb6529ca641baaac027b2e862f35d472b Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Sun, 3 May 2026 09:51:57 -0400 Subject: [PATCH 39/48] Fix the C analyzer. --- Tools/c-analyzer/cpython/globals-to-fix.tsv | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/c-analyzer/cpython/globals-to-fix.tsv b/Tools/c-analyzer/cpython/globals-to-fix.tsv index db575d870be5c5..3ed4ba7d07d3f1 100644 --- a/Tools/c-analyzer/cpython/globals-to-fix.tsv +++ b/Tools/c-analyzer/cpython/globals-to-fix.tsv @@ -53,6 +53,7 @@ Objects/genobject.c - PyCoro_Type - Objects/genobject.c - PyGen_Type - Objects/genobject.c - _PyAsyncGenASend_Type - Objects/genobject.c - _PyAsyncGenAThrow_Type - +Objects/genobject.c - _PyAsyncGenYieldFrom_Type - Objects/genobject.c - _PyAsyncGenWrappedValue_Type - Objects/genobject.c - _PyCoroWrapper_Type - Objects/interpolationobject.c - _PyInterpolation_Type - From ef2e56a533f51c470825cd2a316f88e5ab3fd847 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 16:23:30 +0200 Subject: [PATCH 40/48] Implement `visit_AsyncYieldFrom` in Python unparse --- Lib/_ast_unparse.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Lib/_ast_unparse.py b/Lib/_ast_unparse.py index 916bb25d74dee9..3a29c925c854b5 100644 --- a/Lib/_ast_unparse.py +++ b/Lib/_ast_unparse.py @@ -16,7 +16,7 @@ class _Precedence: NAMED_EXPR = auto() # := TUPLE = auto() # , - YIELD = auto() # 'yield', 'yield from' + YIELD = auto() # 'yield', 'yield from', 'async yield from' TEST = auto() # 'if'-'else', 'lambda' OR = auto() # 'or' AND = auto() # 'and' @@ -334,6 +334,14 @@ def visit_YieldFrom(self, node): self.set_precedence(_Precedence.ATOM, node.value) self.traverse(node.value) + def visit_AsyncYieldFrom(self, node): + with self.require_parens(_Precedence.YIELD, node): + self.write("async yield from ") + if not node.value: + raise ValueError("Node can't be used without a value attribute.") + self.set_precedence(_Precedence.ATOM, node.value) + self.traverse(node.value) + def visit_Raise(self, node): self.fill("raise") if not node.exc: From 2d855eb23df9ca1cd6ec6bf0f5e8762a1c78ed9f Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:14:53 +0200 Subject: [PATCH 41/48] Enforce 1:1 parity between `test_async_yield_from` and `test_yield_from` Rename every test in `TestPEP828Operation` and `TestInterestingEdgeCases` to its `test_yield_from` sibling's name with an `_ayf` suffix, so the two suites map onto each other mechanically. Add `TestParityWithPEP380`, which uses `assert_parity` to enforce that each mirrored class is in symmetric parity: every PEP 380 test has a corresponding `_ayf` variant, and every variant has a PEP 380 base. A missing variant or an unmatched extra both fail the parity test. Move `test_delegate_exception` (the only PEP 828-only test) into a new `TestPEP828Extras` class. Tests that have no PEP 380 analogue belong there; the parity classes stay strictly mirrored. Lazy-import `test_yield_from` so the parity machinery doesn't pull it in unless the parity tests actually run. --- Lib/test/test_async_yield_from.py | 146 +++++++++++++++++++++--------- 1 file changed, 103 insertions(+), 43 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 9155b9e5aa8f4c..ee7dc7356b3363 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -9,6 +9,7 @@ import inspect from functools import partial +lazy from test import test_yield_from from test.support import captured_stderr, disable_gc, gc_collect, run_yielding_async_fn, catch_unraisable_exception _async_test = partial(partial, run_yielding_async_fn) @@ -20,7 +21,7 @@ class TestPEP828Operation(unittest.TestCase): """ @_async_test - async def test_delegation_of_initial_anext_to_subgenerator(self): + async def test_delegation_of_initial_next_to_subgenerator_ayf(self): """ Test delegation of initial anext() call to subgenerator """ @@ -44,7 +45,7 @@ async def g2(): ]) @_async_test - async def test_raising_exception_in_initial_anext_call(self): + async def test_raising_exception_in_initial_next_call_ayf(self): """ Test raising exception in initial anext() call """ @@ -77,7 +78,7 @@ async def g2(): ]) @_async_test - async def test_delegation_of_anext_call_to_subgenerator(self): + async def test_delegation_of_next_call_to_subgenerator_ayf(self): """ Test delegation of anext() call to subgenerator """ @@ -107,7 +108,7 @@ async def g2(): ]) @_async_test - async def test_raising_exception_in_delegated_anext_call(self): + async def test_raising_exception_in_delegated_next_call_ayf(self): """ Test raising exception in delegated anext() call """ @@ -145,7 +146,7 @@ async def g2(): ]) @_async_test - async def test_delegation_of_asend(self): + async def test_delegation_of_send_ayf(self): """ Test delegation of send() """ @@ -190,7 +191,7 @@ async def g2(): ]) @_async_test - async def test_handling_exception_while_delegating_send(self): + async def test_handling_exception_while_delegating_send_ayf(self): """ Test handling exception while delegating 'send' """ @@ -233,7 +234,7 @@ async def run(): ]) @_async_test - async def test_delegating_aclose(self): + async def test_delegating_close_ayf(self): """ Test delegating 'aclose' """ @@ -268,7 +269,7 @@ async def g2(): ]) @_async_test - async def test_handing_exception_while_delegating_close(self): + async def test_handing_exception_while_delegating_close_ayf(self): """ Test handling exception while delegating 'close' """ @@ -310,7 +311,7 @@ async def g2(): ]) @_async_test - async def test_delegating_throw(self): + async def test_delegating_throw_ayf(self): """ Test delegating 'throw' """ @@ -351,7 +352,7 @@ async def g2(): ]) @_async_test - async def test_value_attribute_of_StopAsyncIteration_exception(self): + async def test_value_attribute_of_StopIteration_exception_ayf(self): """ Test 'value' attribute of StopAsyncIteration exception """ @@ -375,7 +376,7 @@ async def pex(e): ]) @_async_test - async def test_exception_value_crash(self): + async def test_exception_value_crash_ayf(self): # There used to be a refcount error when the return value # stored in the StopAsyncIteration has a refcount of 1. async def g1(): @@ -386,7 +387,7 @@ async def g2(): self.assertEqual([x async for x in g1()], ["g2"]) @_async_test - async def test_generator_return_value(self): + async def test_generator_return_value_ayf(self): """ Test generator return value """ @@ -438,7 +439,7 @@ async def g2(v = None): ]) @_async_test - async def test_delegation_of_anext_to_non_generator(self): + async def test_delegation_of_next_to_non_generator_ayf(self): """ Test delegation of anext() to non-generator """ @@ -454,7 +455,7 @@ async def g(): ]) @_async_test - async def test_conversion_of_asendNone_to_next(self): + async def test_conversion_of_sendNone_to_next_ayf(self): """ Test conversion of asend(None) to next() """ @@ -472,7 +473,7 @@ async def g(): ]) @_async_test - async def test_delegation_of_close_to_non_generator(self): + async def test_delegation_of_close_to_non_generator_ayf(self): """ Test delegation of close() to non-generator """ @@ -495,7 +496,7 @@ async def g(): ]) @_async_test - async def test_delegating_throw_to_non_generator(self): + async def test_delegating_throw_to_non_generator_ayf(self): """ Test delegating 'throw' to non-generator """ @@ -528,7 +529,7 @@ async def g(): ]) @_async_test - async def test_attempting_to_send_to_non_generator(self): + async def test_attempting_to_send_to_non_generator_ayf(self): """ Test attempting to send to non-generator """ @@ -556,7 +557,7 @@ async def g(): ]) @_async_test - async def test_broken_getattr_handling(self): + async def test_broken_getattr_handling_ayf(self): """ Test subiterator with a broken getattr implementation """ @@ -589,7 +590,7 @@ async def g(): self.assertEqual(ZeroDivisionError, cm.unraisable.exc_type) @_async_test - async def test_exception_in_initial_next_call(self): + async def test_exception_in_initial_next_call_ayf(self): """ Test exception in initial next() call """ @@ -610,7 +611,7 @@ async def run(): ]) @_async_test - async def test_attempted_async_yield_from_loop(self): + async def test_attempted_yield_from_loop_ayf(self): """ Test attempted yield-from loop """ @@ -646,7 +647,7 @@ async def g2(): ]) @_async_test - async def test_returning_value_from_delegated_throw(self): + async def test_returning_value_from_delegated_throw_ayf(self): """ Test returning value from delegated 'throw' """ @@ -690,7 +691,7 @@ class LunchError(Exception): ]) @_async_test - async def test_anext_and_return_with_value(self): + async def test_next_and_return_with_value_ayf(self): """ Test next and return with value """ @@ -733,7 +734,7 @@ async def g(r): ]) @_async_test - async def test_send_and_return_with_value(self): + async def test_send_and_return_with_value_ayf(self): """ Test send and return with value """ @@ -781,7 +782,7 @@ async def g(r): ]) @_async_test - async def test_catching_exception_from_subgen_and_returning(self): + async def test_catching_exception_from_subgen_and_returning_ayf(self): """ Test catching an exception thrown into a subgenerator and returning a value @@ -811,7 +812,7 @@ async def outer(): ]) @_async_test - async def test_throwing_GeneratorExit_into_subgen_that_returns(self): + async def test_throwing_GeneratorExit_into_subgen_that_returns_ayf(self): """ Test throwing GeneratorExit into a subgenerator that catches it and returns normally. @@ -842,7 +843,7 @@ async def g(): ]) @_async_test - async def test_throwing_GeneratorExit_into_subgenerator_that_yields(self): + async def test_throwing_GeneratorExit_into_subgenerator_that_yields_ayf(self): """ Test throwing GeneratorExit into a subgenerator that catches it and yields. @@ -873,7 +874,7 @@ async def g(): ]) @_async_test - async def test_throwing_GeneratorExit_into_subgen_that_raises(self): + async def test_throwing_GeneratorExit_into_subgen_that_raises_ayf(self): """ Test throwing GeneratorExit into a subgenerator that catches it and raises a different exception. @@ -905,14 +906,14 @@ async def g(): ]) @_async_test - async def test_yield_from_empty(self): + async def test_yield_from_empty_ayf(self): async def g(): yield from () with self.assertRaises(StopAsyncIteration): await anext(g()) @_async_test - async def test_delegating_generators_claim_to_be_running(self): + async def test_delegating_generators_claim_to_be_running_ayf(self): # Check with basic iteration async def one(): yield 0 @@ -939,7 +940,7 @@ async def two(): self.assertEqual(res, [0, 1, 2, 3]) @_async_test - async def test_delegating_generators_claim_to_be_running_with_throw(self): + async def test_delegating_generators_claim_to_be_running_with_throw_ayf(self): # Check with throw class MyErr(Exception): pass @@ -978,7 +979,7 @@ async def two(): raise @_async_test - async def test_delegating_generators_claim_to_be_running_with_aclose(self): + async def test_delegating_generators_claim_to_be_running_with_close_ayf(self): # Check with close class MyIt: def __aiter__(self): @@ -996,7 +997,7 @@ async def one(): await g1.aclose() @_async_test - async def test_delegator_is_visible_to_debugger(self): + async def test_delegator_is_visible_to_debugger_ayf(self): async def call_stack(): return [f[3] for f in inspect.stack()] @@ -1018,7 +1019,7 @@ async def eggs(g): self.assertTrue('spam' in stack and 'eggs' in stack) @_async_test - async def test_custom_iterator_return(self): + async def test_custom_iterator_return_ayf(self): class MyIter: def __aiter__(self): return self @@ -1032,7 +1033,7 @@ async def gen(): self.assertEqual(ret, 42) @_async_test - async def test_close_with_cleared_frame(self): + async def test_close_with_cleared_frame_ayf(self): async def innermost(): yield async def inner(): @@ -1054,7 +1055,7 @@ async def outer(): gc_collect() @_async_test - async def test_send_tuple_with_custom_generator(self): + async def test_send_tuple_with_custom_generator_ayf(self): class MyGen: def __aiter__(self): return self @@ -1087,7 +1088,7 @@ def assert_generator_ignored_generator_exit(self): return self.assertRaisesRegex(RuntimeError, r"^async generator ignored GeneratorExit$") @_async_test - async def test_close_and_throw_work(self): + async def test_close_and_throw_work_ayf(self): yielded_first = object() yielded_second = object() @@ -1148,7 +1149,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_raise_generator_exit(self): + async def test_close_and_throw_raise_generator_exit_ayf(self): yielded_first = object() yielded_second = object() @@ -1225,7 +1226,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_raise_stop_iteration(self): + async def test_close_and_throw_raise_stop_iteration_ayf(self): yielded_first = object() yielded_second = object() @@ -1309,7 +1310,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_raise_base_exception(self): + async def test_close_and_throw_raise_base_exception_ayf(self): yielded_first = object() yielded_second = object() @@ -1388,7 +1389,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_raise_exception(self): + async def test_close_and_throw_raise_exception_ayf(self): yielded_first = object() yielded_second = object() @@ -1467,7 +1468,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_yield(self): + async def test_close_and_throw_yield_ayf(self): yielded_first = object() yielded_second = object() @@ -1539,7 +1540,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_close_and_throw_return(self): + async def test_close_and_throw_return_ayf(self): yielded_first = object() yielded_second = object() returned = object() @@ -1606,7 +1607,7 @@ async def outer(): await self.assert_stop_iteration(g) @_async_test - async def test_throws_in_iter(self): + async def test_throws_in_iter_ayf(self): class Silly: async def __aiter__(self): yield from () @@ -1618,6 +1619,65 @@ async def my_generator(): with self.assertRaisesRegex(RuntimeError, "nobody expects the spanish inquisition"): await anext(my_generator()) + +class TestParityWithPEP380(unittest.TestCase): + """Enforce PEP 828 tests cover every PEP 380 test.""" + + def assert_parity(self, base_class, variant_class, *, suffix): + """Assert variant_class is in 1:1 parity with base_class via ``suffix``. + + Every method ``test_xxx`` on ``base_class`` must have a counterpart + ``test_xxx`` on ``variant_class`` and vice versa. Variant-only + tests belong in a separate TestCase class. + """ + base_tests = { + n for n in dir(base_class) + if n.startswith("test_") and callable(getattr(base_class, n)) + } + variant_tests = { + n for n in dir(variant_class) + if n.startswith("test_") and callable(getattr(variant_class, n)) + } + expected = {n + suffix for n in base_tests} + missing = sorted(expected - variant_tests) + extra = sorted(variant_tests - expected) + problems = [] + if missing: + problems.append( + f"{variant_class.__name__} missing variants of " + f"{base_class.__name__} tests (suffix {suffix!r}): {missing}" + ) + if extra: + problems.append( + f"{variant_class.__name__} has tests with no counterpart in " + f"{base_class.__name__} (suffix {suffix!r}): {extra}" + ) + self.assertEqual(problems, [], "\n".join(problems)) + + def test_TestPEP828Operation(self): + self.assert_parity( + test_yield_from.TestPEP380Operation, + TestPEP828Operation, + suffix="_ayf", + ) + + def test_TestInterestingEdgeCases(self): + self.assert_parity( + test_yield_from.TestInterestingEdgeCases, + TestInterestingEdgeCases, + suffix="_ayf", + ) + + +class TestPEP828Extras(unittest.TestCase): + """Tests with no PEP 380 counterpart. + + Anything added here describes behaviour specific to ``async yield from``. + Tests that have a logical equivalent in plain ``yield from`` belong in + ``TestPEP828Operation`` or ``TestInterestingEdgeCases`` and are + parity-checked against ``test_yield_from``. + """ + @_async_test async def test_delegate_exception(self): yielded_first = object() From 68e47ec567cfbdd5f2043d79be66dd19dbccf78f Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:18:07 +0200 Subject: [PATCH 42/48] Refresh `test_async_yield_from` module docstring Note the `_ayf` naming convention, the 1:1 parity check enforced by `TestParityWithPEP380`, and where PEP 828-only tests belong. --- Lib/test/test_async_yield_from.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index ee7dc7356b3363..bfa7f7c2b447af 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1,8 +1,9 @@ """ -Test suite for PEP 828 implementation. +Test suite for PEP 828 (`async yield from`) -The tests below were adapted from the 'yield from' tests. -For more context on any particular test, try searching for an analogue in `test_yield_from`. +Adapted from `test_yield_from`. Each adapted test mirrors its PEP 380 +counterpart by name with an `_ayf` suffix; `TestParityWithPEP380` enforces +the 1:1 mapping. Tests with no PEP 380 analogue go in `TestPEP828Extras`. """ import unittest From 14a6a78062917bd9958f300c9a9d6502d897690f Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:26:08 +0200 Subject: [PATCH 43/48] Use async API names in test descriptions and subTests Mirrored test method names already match their PEP 380 counterparts via the `_ayf` suffix. The descriptions and subTest labels now use the async API names (`asend`, `aclose`, `athrow`, `anext`) so it is clear which operation each test exercises. Class docstrings on `TestPEP828Operation` and `TestInterestingEdgeCases` now state that they mirror their `test_yield_from` counterparts. --- Lib/test/test_async_yield_from.py | 109 +++++++++++++++--------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index bfa7f7c2b447af..8f3fb36537d57c 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -17,9 +17,7 @@ class TestPEP828Operation(unittest.TestCase): - """ - Test semantics. - """ + """Test semantics. Mirrors `TestPEP380Operation` in `test_yield_from`.""" @_async_test async def test_delegation_of_initial_next_to_subgenerator_ayf(self): @@ -149,7 +147,7 @@ async def g2(): @_async_test async def test_delegation_of_send_ayf(self): """ - Test delegation of send() + Test delegation of asend() """ trace = [] async def g1(): @@ -194,7 +192,7 @@ async def g2(): @_async_test async def test_handling_exception_while_delegating_send_ayf(self): """ - Test handling exception while delegating 'send' + Test handling exception while delegating 'asend' """ trace = [] async def g1(): @@ -272,7 +270,7 @@ async def g2(): @_async_test async def test_handing_exception_while_delegating_close_ayf(self): """ - Test handling exception while delegating 'close' + Test handling exception while delegating 'aclose' """ trace = [] async def g1(): @@ -314,7 +312,7 @@ async def g2(): @_async_test async def test_delegating_throw_ayf(self): """ - Test delegating 'throw' + Test delegating 'athrow' """ trace = [] async def g1(): @@ -458,7 +456,7 @@ async def g(): @_async_test async def test_conversion_of_sendNone_to_next_ayf(self): """ - Test conversion of asend(None) to next() + Test conversion of asend(None) to anext() """ trace = [] async def g(): @@ -476,7 +474,7 @@ async def g(): @_async_test async def test_delegation_of_close_to_non_generator_ayf(self): """ - Test delegation of close() to non-generator + Test delegation of aclose() to non-generator """ trace = [] async def g(): @@ -499,7 +497,7 @@ async def g(): @_async_test async def test_delegating_throw_to_non_generator_ayf(self): """ - Test delegating 'throw' to non-generator + Test delegating 'athrow' to non-generator """ trace = [] async def g(): @@ -532,7 +530,7 @@ async def g(): @_async_test async def test_attempting_to_send_to_non_generator_ayf(self): """ - Test attempting to send to non-generator + Test attempting to asend to non-generator """ trace = [] async def g(): @@ -593,7 +591,7 @@ async def g(): @_async_test async def test_exception_in_initial_next_call_ayf(self): """ - Test exception in initial next() call + Test exception in initial anext() call """ trace = [] async def g1(): @@ -614,7 +612,7 @@ async def run(): @_async_test async def test_attempted_yield_from_loop_ayf(self): """ - Test attempted yield-from loop + Test attempted `async yield from` loop """ trace = [] async def g1(): @@ -650,7 +648,7 @@ async def g2(): @_async_test async def test_returning_value_from_delegated_throw_ayf(self): """ - Test returning value from delegated 'throw' + Test returning value from delegated 'athrow' """ trace = [] async def g1(): @@ -694,7 +692,7 @@ class LunchError(Exception): @_async_test async def test_next_and_return_with_value_ayf(self): """ - Test next and return with value + Test anext and return with value """ trace = [] async def f(r): @@ -737,7 +735,7 @@ async def g(r): @_async_test async def test_send_and_return_with_value_ayf(self): """ - Test send and return with value + Test asend and return with value """ trace = [] async def f(r): @@ -785,7 +783,7 @@ async def g(r): @_async_test async def test_catching_exception_from_subgen_and_returning_ayf(self): """ - Test catching an exception thrown into a + Test catching an exception athrown into a subgenerator and returning a value """ async def inner(): @@ -815,7 +813,7 @@ async def outer(): @_async_test async def test_throwing_GeneratorExit_into_subgen_that_returns_ayf(self): """ - Test throwing GeneratorExit into a subgenerator that + Test athrow(GeneratorExit) into a subgenerator that catches it and returns normally. """ trace = [] @@ -846,7 +844,7 @@ async def g(): @_async_test async def test_throwing_GeneratorExit_into_subgenerator_that_yields_ayf(self): """ - Test throwing GeneratorExit into a subgenerator that + Test athrow(GeneratorExit) into a subgenerator that catches it and yields. """ trace = [] @@ -877,7 +875,7 @@ async def g(): @_async_test async def test_throwing_GeneratorExit_into_subgen_that_raises_ayf(self): """ - Test throwing GeneratorExit into a subgenerator that + Test athrow(GeneratorExit) into a subgenerator that catches it and raises a different exception. """ trace = [] @@ -1075,6 +1073,7 @@ async def outer(): self.assertEqual(v, (1, 2, 3, 4)) class TestInterestingEdgeCases(unittest.TestCase): + """Interesting edge cases. Mirrors `TestInterestingEdgeCases` in `test_yield_from`.""" async def assert_stop_iteration(self, iterator): with self.assertRaises(StopAsyncIteration) as caught: @@ -1103,13 +1102,13 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) await g.aclose() await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = GeneratorExit() @@ -1119,7 +1118,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = StopAsyncIteration() @@ -1129,7 +1128,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = BaseException() @@ -1139,7 +1138,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = Exception() @@ -1167,7 +1166,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() @@ -1176,7 +1175,7 @@ async def outer(): await g.aclose() await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() @@ -1190,7 +1189,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() @@ -1202,7 +1201,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() @@ -1214,7 +1213,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) raised = GeneratorExit() @@ -1244,7 +1243,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) raised = StopAsyncIteration() @@ -1256,7 +1255,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) raised = StopAsyncIteration() @@ -1271,7 +1270,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) raised = StopAsyncIteration() @@ -1284,7 +1283,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) raised = StopAsyncIteration() @@ -1297,7 +1296,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) raised = StopAsyncIteration() @@ -1328,7 +1327,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) raised = BaseException() @@ -1339,7 +1338,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) raised = BaseException() @@ -1353,7 +1352,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) raised = BaseException() @@ -1365,7 +1364,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) raised = BaseException() @@ -1377,7 +1376,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) raised = BaseException() @@ -1407,7 +1406,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) raised = Exception() @@ -1418,7 +1417,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) raised = Exception() @@ -1432,7 +1431,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) raised = Exception() @@ -1444,7 +1443,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) raised = Exception() @@ -1456,7 +1455,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) raised = Exception() @@ -1485,7 +1484,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) # No chaining happens. This is analogous to PEP 342: @@ -1495,7 +1494,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = GeneratorExit() @@ -1506,7 +1505,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = StopAsyncIteration() @@ -1518,7 +1517,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = BaseException() @@ -1529,7 +1528,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = Exception() @@ -1557,7 +1556,7 @@ async def inner(): async def outer(): return (async yield from inner()) - with self.subTest("close"): + with self.subTest("aclose"): g = outer() self.assertIs(await anext(g), yielded_first) # StopAsyncIteration is suppressed. This is analogous to PEP 342: @@ -1565,7 +1564,7 @@ async def outer(): await g.aclose() await self.assert_stop_iteration(g) - with self.subTest("throw GeneratorExit"): + with self.subTest("athrow GeneratorExit"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = GeneratorExit() @@ -1577,7 +1576,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw StopAsyncIteration"): + with self.subTest("athrow StopAsyncIteration"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = StopAsyncIteration() @@ -1587,7 +1586,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw BaseException"): + with self.subTest("athrow BaseException"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = BaseException() @@ -1597,7 +1596,7 @@ async def outer(): self.assertIsNone(caught.exception.__context__) await self.assert_stop_iteration(g) - with self.subTest("throw Exception"): + with self.subTest("athrow Exception"): g = outer() self.assertIs(await anext(g), yielded_first) thrown = Exception() From 35fea28f814daef41ef91aca020863b0086e9f72 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:31:03 +0200 Subject: [PATCH 44/48] Simplify cross-reference to `test_async_yield_from` The previous wording instructed maintainers to keep the two suites in sync manually; that contract is now enforced by `TestParityWithPEP380` on the async side, so the cross-reference can stay minimal. --- Lib/test/test_yield_from.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_yield_from.py b/Lib/test/test_yield_from.py index 19aa89db1d0843..56d6a1c8d29480 100644 --- a/Lib/test/test_yield_from.py +++ b/Lib/test/test_yield_from.py @@ -6,7 +6,7 @@ adapted from original tests written by Greg Ewing see -See also `test_async_yield_from'. Where applicable, consider keeping the two test suites in sync. +See also `test_async_yield_from'. """ import unittest From e95df7d1c2ee01d8eb2119a2d243df0dbace8cbe Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:32:15 +0200 Subject: [PATCH 45/48] Use the `sentinel` builtin for opaque test markers The `yielded_first` / `yielded_second` / `returned` placeholders were created with `object()`, which renders as a generic repr in failure output. Switching to `sentinel(...)` keeps the same identity semantics while giving each marker a meaningful repr. --- Lib/test/test_async_yield_from.py | 48 +++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 8f3fb36537d57c..100188b0d4b199 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1090,9 +1090,9 @@ def assert_generator_ignored_generator_exit(self): @_async_test async def test_close_and_throw_work_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): yield yielded_first @@ -1151,9 +1151,9 @@ async def outer(): @_async_test async def test_close_and_throw_raise_generator_exit_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1228,9 +1228,9 @@ async def outer(): @_async_test async def test_close_and_throw_raise_stop_iteration_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1312,9 +1312,9 @@ async def outer(): @_async_test async def test_close_and_throw_raise_base_exception_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1391,9 +1391,9 @@ async def outer(): @_async_test async def test_close_and_throw_raise_exception_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1470,9 +1470,9 @@ async def outer(): @_async_test async def test_close_and_throw_yield_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1541,9 +1541,9 @@ async def outer(): @_async_test async def test_close_and_throw_return_ayf(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: @@ -1680,9 +1680,9 @@ class TestPEP828Extras(unittest.TestCase): @_async_test async def test_delegate_exception(self): - yielded_first = object() - yielded_second = object() - returned = object() + yielded_first = sentinel("yielded_first") + yielded_second = sentinel("yielded_second") + returned = sentinel("returned") async def inner(): try: From 4da6ce83ea3200933a983b5dcaa898b2933655bd Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:37:27 +0200 Subject: [PATCH 46/48] Make parity-failure output more obvious Print each offender on its own line, labelled with which side is missing the counterpart, instead of dumping two summary sentences with embedded list reprs. Factor the duplicated set-comprehension into a small inner helper so the assertion body is also a touch shorter. Sample failure (deleting one mirrored test, adding two extras): TestPEP828Operation is not a 1:1 mirror of TestPEP380Operation (suffix '_ayf'): missing in TestPEP828Operation: test_yield_from_empty_ayf no counterpart in TestPEP380Operation: test_made_up_extra_ayf no counterpart in TestPEP380Operation: test_other_extra_ayf --- Lib/test/test_async_yield_from.py | 41 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 100188b0d4b199..0e1d86936f087b 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1630,29 +1630,24 @@ def assert_parity(self, base_class, variant_class, *, suffix): ``test_xxx`` on ``variant_class`` and vice versa. Variant-only tests belong in a separate TestCase class. """ - base_tests = { - n for n in dir(base_class) - if n.startswith("test_") and callable(getattr(base_class, n)) - } - variant_tests = { - n for n in dir(variant_class) - if n.startswith("test_") and callable(getattr(variant_class, n)) - } - expected = {n + suffix for n in base_tests} - missing = sorted(expected - variant_tests) - extra = sorted(variant_tests - expected) - problems = [] - if missing: - problems.append( - f"{variant_class.__name__} missing variants of " - f"{base_class.__name__} tests (suffix {suffix!r}): {missing}" - ) - if extra: - problems.append( - f"{variant_class.__name__} has tests with no counterpart in " - f"{base_class.__name__} (suffix {suffix!r}): {extra}" - ) - self.assertEqual(problems, [], "\n".join(problems)) + def test_methods(cls): + return {n for n in dir(cls) + if n.startswith("test_") and callable(getattr(cls, n))} + + expected = {n + suffix for n in test_methods(base_class)} + actual = test_methods(variant_class) + missing = sorted(expected - actual) + extra = sorted(actual - expected) + if missing or extra: + lines = [ + f"{variant_class.__name__} is not a 1:1 mirror of " + f"{base_class.__name__} (suffix {suffix!r}):" + ] + for name in missing: + lines.append(f" missing in {variant_class.__name__}: {name}") + for name in extra: + lines.append(f" no counterpart in {base_class.__name__}: {name}") + self.fail("\n".join(lines)) def test_TestPEP828Operation(self): self.assert_parity( From 43b6f8931b9b729a47584822772042b10aa814b8 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:40:05 +0200 Subject: [PATCH 47/48] Remove callable check --- Lib/test/test_async_yield_from.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 0e1d86936f087b..1b7ff8ebc874cb 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1631,8 +1631,7 @@ def assert_parity(self, base_class, variant_class, *, suffix): tests belong in a separate TestCase class. """ def test_methods(cls): - return {n for n in dir(cls) - if n.startswith("test_") and callable(getattr(cls, n))} + return {n for n in dir(cls) if n.startswith("test_")} expected = {n + suffix for n in test_methods(base_class)} actual = test_methods(variant_class) From b0355f969f918b3044c043dd3b46f8e8e82cec82 Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sun, 3 May 2026 17:41:28 +0200 Subject: [PATCH 48/48] Use fully qualified class names in parity-failure output When the mirrored classes share an unqualified name (e.g. both PEP 380 and PEP 828 have a `TestInterestingEdgeCases`), the failure message talked about the class on both sides as if it were the same class. Use `module.qualname` so each side is unambiguous. --- Lib/test/test_async_yield_from.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_async_yield_from.py b/Lib/test/test_async_yield_from.py index 1b7ff8ebc874cb..a9d1d643427880 100644 --- a/Lib/test/test_async_yield_from.py +++ b/Lib/test/test_async_yield_from.py @@ -1633,19 +1633,22 @@ def assert_parity(self, base_class, variant_class, *, suffix): def test_methods(cls): return {n for n in dir(cls) if n.startswith("test_")} + def fqn(cls): + return f"{cls.__module__}.{cls.__qualname__}" + expected = {n + suffix for n in test_methods(base_class)} actual = test_methods(variant_class) missing = sorted(expected - actual) extra = sorted(actual - expected) if missing or extra: lines = [ - f"{variant_class.__name__} is not a 1:1 mirror of " - f"{base_class.__name__} (suffix {suffix!r}):" + f"{fqn(variant_class)} is not a 1:1 mirror of " + f"{fqn(base_class)} (suffix {suffix!r}):" ] for name in missing: - lines.append(f" missing in {variant_class.__name__}: {name}") + lines.append(f" missing in {fqn(variant_class)}: {name}") for name in extra: - lines.append(f" no counterpart in {base_class.__name__}: {name}") + lines.append(f" no counterpart in {fqn(base_class)}: {name}") self.fail("\n".join(lines)) def test_TestPEP828Operation(self):